2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ILERPGAdvent Calendar 2024

Day 22

IBM HTTP Server for i で応答の圧縮を比較した

Last updated at Posted at 2024-12-21

IBM i のライセンス 5770DG1 で提供されている IBM HTTP Server for i (略 : IHS) があります。この IHS で利用可能な圧縮方法 deflate_modulebrotli_module を試してみました。
Brotli は Chrome や Firefox では、HTTPS 接続を使用した時にリクエストされます。

検証環境

  • IBM i ハードウェア : Power10 S1014
  • OS : V7R5
  • IHS PTF : SF99952(IBM HTTP SERVER FOR I) LVL 17
  • Server version: Apache/2.4.53 (IBM i)
  • ジョブCCSID : 5035
  • ブラウザ:MS Edge(131.0.2903.99)
  • 想定帯域:4G LTE 高速

IBM i で IHS のバージョンを確認する場合は次のコマンド STRTCPSVR SERVER(*HTTP) HTTPSVR(APACHEDFT '-V') で確認できます。

実行結果
Server version: Apache/2.4.53 (IBM i)     
Server built:   Apr 11 2022 07:47:17      
Server's Module Magic Number: 20120211:124
~~~中略~~~
 -D SERVER_CONFIG_FILE="conf/httpd.conf"            

参考URL

圧縮を使用する設定

今回は deflate_module(gzip)brotli_module(Brotli) をします。

テキストファイルを圧縮する局面において、Brotli は一般的に Deflate に対し 20% 程の圧縮率の優越を、圧縮/伸長速度におおかた変化なく行うことができる

と記載のとおり DEFLATE に対して圧縮率の優位性がありそうです。Brotli はモダンなブラウザでは実装されているため、有効にしているとこちらが使用されます。 Brotli の実装がないブラウザの場合はフォールバックとして DEFLATE が働きます。
まずそれぞれの圧縮を使用するには、httpd.conf ファイルに deflate_modulebrotli_module をロードする設定を追記します。

httpd.conf
LoadModule zend_enabler_module /QSYS.LIB/QHTTPSVR.LIB/QZFAST.SRVPGM
~~~中略~~~
# 圧縮モジュールの追加
LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM
LoadModule brotli_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM

続いて、サーバー設定またはバーチャルサーバー設定レベルの何れかに DeflateCompressionLevelBrotliCompressionQuality を追記します。この設定により圧縮率が変わり、圧縮/解凍に要するオーバーヘッドと転送容量に影響します。

httpd.conf
<VirtualHost *:xxxxx>
~~~中略~~~
  # DEFLATE圧縮レベル(1: 低圧縮、9: 高圧縮)Server config, Virtual Host
  DeflateCompressionLevel 6
  # Brotli圧縮レベル(0: 低圧縮、11:高圧縮)Server config, Virtual Host
  BrotliCompressionQuality 6

</VirtualHost>

続いて、サーバー設定、バーチャルサーバー設定、ディレクトリ、htaccess レベルの何れかに AddOutputFilterByType を追記します。ここでは圧縮対象とするコンテンツタイプを指定します。

httpd.conf
<Directory "/www/hogehoge/htdocs">
~~~中略~~~
  # DEFLATEの対象タイプ設定
  AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript application/x-javascript application/json application/xml application/x-httpd-php

  # Brotli対象タイプ設定 Server config, Virtual Host, Directory, .htaccess
  AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css application/javascript application/x-javascript application/json application/xml application/x-httpd-php

</Directory>

設定が完了したら IHS インスタンスSTRTCPSVR SERVER(*HTTP) RESTART(*HTTP) HTTPSVR(HOGE) コマンドで再起動します。

圧縮の検証

今回は、5,000 件のXML(1.6 MB)無圧縮DEFLATEBrotli の3パターンで取得して、それぞれ転送容量と所要時間を比較してみました。平均値を見るために 10 回程度の取得をしています。

パターン 転送容量 平均所要時間
無圧縮 1.7 MB ≒ 1.85 秒
DEFLATE(gzip) 245 KB ≒ 430 ミリ秒
Brotli 178 KB ≒ 360 ミリ秒

■ブラウザのスクショ

2024-12-18_204854.png

上記をみると無圧縮に比べ圧縮した場合は転送量がかなり低減されてます。Brotli では無圧縮の 1/10 程度となっています。
ネットワーク帯域が限られた場合では、圧縮/解凍のオーバーヘッドより転送効率の方が勝り、圧縮の効果が見込めそうです。

帯域を無制限にした場合はどうだったか?

実際に今回行った検証場所は、中部システム社内の有線 LAN 環境でした。社内はギガビットで構成されているため、帯域無制限にした場合は、圧縮/解凍のオーバーヘッドがボトルネックとなり、無圧縮が速いケースもありました。
何でもかんでも圧縮すれば良いわけではなく、環境や状況、転送データの性質に応じて上手く使いこなす事が大事ですね。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?