WildFly 9로 HTTP2 해볼게요.

10927 단어 http2JavaEEWildflyJava

개시하다


WildFly9 출시 이후 두 달이 지났습니다.나는 WildFly9의 눈동자 기능 중 하나가 HTTP/2 지원노트 를 발행 하다이라고 생각한다.HTTP/2는 한 연결에서 여러 요청/응답을 동시에 처리할 수 있습니다(HTTP/1.1에서 기본적으로 1 연결=1 요청/응답).이렇게 하면 많은 자원을 필요로 하는 웹 페이지의 불러오는 시간을 단축할 수 있다.
이 글은 WildFly9에서 HTTP/2의 설정 방법을 설명한 후 HTTP/2와 HTTP/1.1의 성능을 실제적으로 검증하였다.

환경 확인

  • OS : OS X Yosemite 10.10.5
  • JDK : 8u45
  • 브라우저: 크롬 44
  • JDK8 이상은 필수입니다.

    WildFly 설정


    다운로드


    공식 사이트에서 zip 파일을 다운로드하여 적당한 곳으로 해제합니다(이하 예시에서/opt).해동된 디렉터리 분배를 jboss 사용자로 변경합니다.
    $ cd /opt
    $ sudo curl -O http://download.jboss.org/wildfly/9.0.1.Final/wildfly-9.0.1.Final.zip
    $ sudo unzip wildfly-9.0.1.Final.zip
    $ chown -R jboss wildfly-9.0.1.Final
    
    나중에 $JBOSSHOME은/opt/wildfly-99.0.1입니다.Final을 지정합니다.또한 jboss 사용자를 사용하여 작업을 진행합니다.

    부트 클래스 경로에 ALPN 추가


    현재 주요 브라우저는 TLS(SSL)의 HTTP/2(HTTP/2의 규격상 일반 HTTP)만 지원한다.따라서 HTTP/2를 사용하려면 서버 측도 TLS에 대응해야 합니다.그러나 HTTP/2를 사용할 때는 일반적인 TLS 확장이 아닌 ALPN이라고 불리는 TLS 확장이 필요합니다.현재 JDK8 로컬에서는 ALPN을 지원하지 않기 때문에 확장 라이브러리(jar)를 시작 클래스 경로에 추가해야 합니다.또한 JDK7보다 강력한 비밀번호 방식을 갖춘 JDK8이 필요합니다.

    ALPN 다운로드


    공식 웹사이트에서 ALPN을 다운로드합니다.가져온 버전은 실행 환경인 JVM의 버전에 따라 달라집니다.버전의 대응 표는 공식 사이트에 있습니다.다운로드 주소는 $JBOSS입니다.HOME/BIN으로서
    $ cd /opt/wildfly-9.0.1.Final/bin
    $ curl -O http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.3.v20150130/alpn-boot-8.1.3.v20150130.jar
    

    standalone.conf 설정


    $JBOSS_HOME/bin/standalone.conf에 다음 줄을 추가합니다.따라서 WildFly를 시작하면 위에서 설명한 ALPN이 시작 클래스 경로에 추가됩니다.
    JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:alpn-boot-8.1.3.v20150130.jar"
    

    SSL 인증서 작성


    JSSE 도구의 keytool 명령을 사용하여 SSL 인증서1를 만듭니다.이곳은 시험 목적이기 때문에 자기 증명서입니다.

    인증서 작성


    다음 명령에 따라 인증서가 저장된 키 저장소$JBOSSHOME/standalone/configuration/http2test.키스토어 파일을 만듭니다.
    $ keytool -genkeypair -alias http2test -keyalg RSA -keystore /opt/wildfly-9.0.1.Final/standalone/configuration/http2test.keystore -storepass storepass -keypass keypass -dname "cn=localhost, c=JP"
    

    HTTPS 커넥터 설정


    다운로드 후 동결해제된 WildFly는 SSL(HTTPS)을 사용할 수 없습니다.standalone.HTTPS 커넥터를 설정하려면 xml을 편집해야 합니다.

    standalone.xml 설정


    $JBOSS_HOME/standalone/configuration/standalone.xml 편집.
  • <security-realms> 구역에 생성된 인증서를 사용하는 안전 등급을 추가합니다.
  •             <security-realm name="https">
                    <server-identities>
                      <ssl> 
                            <!-- この例ではhttp2test.keystore は同一ディレクトリにある -->     
                            <keystore path="http2test.keystore" relative-to="jboss.server.config.dir" keystore-password="storepass" alias="http2test" key-password="keypass"/>
                        </ssl>
                    </server-identities>
                </security-realm>
    
  • HTTPS 커넥터를 웹 서브시스템<subsystem xmlns="urn:jboss:domain:undertow:2.0"> 영역에 추가합니다.
  •                 <!-- security-realm属性には、上のsecurity-realmで設定したname属性の値(この例ではhttps)を設定します。-->
                    <https-listener name="https" socket-binding="https" security-realm="https" enable-http2="true"/>
    
    참고로 WildFly에서 웹 서브시스템Undertow 설치로 바뀌었습니다.

    확인


    WildFly를 시작합니다.
    $ /opt/wildfly-9.0.1.Final/bin/standalone.sh
    
    브라우저를 시작하고 다음 URL을 입력합니다.
    https://localhost:8443/
    
    자기증명서라서 경고하는데 잠자리 같은 로고와 함께 Welcome to WildFly 9로 뜨면 OK.

    측정 응용 프로그램


    측량용 프로그램을 제작하다.측정 애플리케이션이지만 WildFly logo 500개를 표시하는 JSP에 불과합니다.

    로고


    WildFly 플래그입니다.잠자리 같은 거 있어요?
    여기.부터 먹어...m(__)m

    JSP


    sample.jsp
    <%@ page contentType="text/html;charset=utf-8" pageEncoding="utf-8" %>
    <head>
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <title>http2のテストページ</title>
    <meta charset="utf-8">
    </head> 
    <body>
    <%
      long current = System.nanoTime();
      for (int i = 0; i < 500; i++) {
    %>
        <!-- キャッシュさせないために、パラメータをつけておく -->
        <img src="wildfly_logomark_64px.png?<%=current  + i%>" />
    <%
      }
    %>
    </body>
    </html>
    

    측정 결과


    HTTP/1.1 및 HTTP/2 측정용 페이지의 결과는 다음과 같습니다.브라우저는 크롬입니다.
    현재 기본 브라우저는 SSL(HTTPS)에서만 HTTP/2를 지원합니다.따라서 일반적인 HTTP 프로토콜을 통해 연결할 때는 HTTP/1.1이고 HTTPS를 통해 연결할 때는 HTTP/2이다.

    HTTP/1.1



    HTTP/2



    HTTP/1.1에서 페이지 로드 시간은 약 2.9초입니다.HTTP/2의 속도는 약 1.3초로, HTTP/2의 속도는 2배 이상 높아졌다.또한 Chrome의 개발자 도구와 같이 HTTP/2는 대량의 이미지를 동시에 불러옵니다.

    사이트 축소판 그림

  • WildFly9 릴리즈 노트
    http://wildfly.org/news/2015/07/02/WildFly9-Final-Released/
    http://www.javadera.com/blog/wildfly-9-final-release-node/(일본어역)
  • WildFly9의 HTTP2 설정 방법
    http://undertow.io/blog/2015/03/26/HTTP2-In-Wildfly.html
  • WildFly의 보안 레이어 설정 방법
    https://docs.jboss.org/author/display/WFLY8/Examples
  • Keytool 문서
    https://docs.oracle.com/javase/jp/6/technotes/tools/windows/keytool.html
  • Jetty의 ALPN 문서
    http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html
  • HTTP/2의 해설문
    http://codezine.jp/article/detail/8663
  • 잘 팔리는 HTTP/2 데모 페이지
    https://http2.akamai.com/demo
    HTTP/1.1과 HTTP/2 성능의 차이는 시각적으로 뚜렷하다.
  • 문서에도 OpenSSL메서드을 이용한다고 기재돼 있지만 내용은 Undertow의 전신인 웹 서브루틴인 것 같다.Undertow의 설정 방법을 아는 사람이 있으면 알려주세요. 

    좋은 웹페이지 즐겨찾기