エロジンアップデート4 ハイスペックIOPS、AMP、Gzip、HTMLONLY

投稿日時
カテゴリお知らせ
画像枚数2枚
月間PV1072
良い105
悪い9
タグ

4度目となるエロジンのアップデートが本日日付で完了したことをお知らせします。どのリンクを辿ってもパッパッパとファイルエクスプローラーのように俊敏なパフォーマンスを実現しました。

ELBで分散しNginxでオープンキャッシュとプロキシキャッシュ、GZipで圧縮済みのHTMLを生成し、それを本番環境の強力IOPSを実現したのSSDインスタンスストアボリュームにサブから同期させただけの極めて軽い独自システムを採用したサイトです。今回のリリースは以下になります。

サーバ移転と経緯

正確には予めテスト開発しておいたサーバにドメインを移行させただけ。ポンと移転しました。もともとSSL/TLS通信(セキュリティ向上)を実現させるために立ち上げたテストサーバでしたが、難しい上にアダルトサイトでHTTPS化はxHamsterぐらいしかなかったので達成できませんでした。HTTPS化にすると全てをHTTPS通信しなければならないし、少しでも抜け目があればブラウザがこのサイトは危険ですと赤い背景と出す恐れがありますので、断念しました。ここから落ち込むことなんとか漫画や24を観て現実逃避して精神を安定させた後に、コードの見易さ、描きやすさ、優しさが備わったPythonとそのモジュール『Jinja2』を使って完全静的化へと実現しました。

完全静的化というのはPHPなど動的なファイルを一切使わず、予めデータベースに更新されていく記事データをHTMLファイルに生成し、そのファイルだけをポンと置いただけのシステムです。通常、WEBサイトは次のページへ行く時や、カテゴリ・タグなど条件を絞ったり、記事ページごとに変わるタイトルや記事本文、URLなどはアクセスされるたびにプログラムで処理するのが主流です。

WEB上でプログラムできるのがPHPです。PHPではアクセスされるとプログラミングを開始して計算された後に表示します。この計算処理はアクセス数が増えるたびに重くなる原因になるのですが、HTMLファイルだけにすれば作られた文字列を読み込むだけで表示されるというものでわかりやすく例えるとWindowsのファイルエクスプローラーです。

カテゴリ・タグ・ページごとにフォルダを生成し、そのフォルダの中に.htmlファイルがズラッと並びます。ブログを更新した時に、全てのファイルを更新するのでページごとに移動されています。

軽量設計への発想と道のり

システム関連は女性と同じで軽量化は永遠の課題です。WEBサイトもアプリもたとえ高性能な端末でも、軽く快適に動作しなければ美しくありません。しかし混雑なプログラムを制御させるにはPythonやPHP、MySQLなど色々とインストールしなければなりませんし、セキュリティも複雑になってきます。そこで考えたのが、一旦サーバAで記事などのデータベースを更新し/var/www/htmlにHTMLファイルを作成、それを本番環境であるサーバBにファイル同期です。よって今見ているサーバはHTMLファイルしか存在しませんので軽くて高セキュリティです。

我々が聴いている音楽ファイルは4MB、画像は200KB、HDDは500GB、映画は8GBなどが平均ですね。HTMLファイルは大体50KBです。どこかのサイトにアクセスした時にはそのHTMLファイル50KBと、HTMLファイルに記載されている画像URLなどを読み込みと合計1MBほどになります。スマホでポチッとWEBにアクセスすれば大体1MB読み込んでいます。それを何度もなんどもサイトを巡回すればかなりの容量をパケット通信することになりますが、実際はそうではありません。よく聞くキャッシュが活用されているからです。キャッシュは一定の動作時において、同じことをする時に記憶して早く処理できるものです。

AMP対応

AMPという3文字の英単語を<html>タグに書き込むだけでは足りませんが文書をAMP仕様に訂正することによって、Googleから画像や文字列がキャッシュされるという次世代型ウェブサービスです。先で述べたキャッシュは訪問者のパソコンに保存されるローカルキャッシュで、AMPはGoogleサーバがキャッシュしてくれます、通常のHTMLファイルより4倍高速になります。AMP仕様にするには様々な編集が必要ですが、DB置換とPHPですべての画像のWidthとHeightを一括取得することによって、容易にAMPにできました。
amp

1/2
0

毎日AnywayGZIP圧縮

HTMLファイルは約50KB、その中身は全て文字列のテキストです。たかが50KBですが10アクセスあれば500KBになります。ここのサイトは月間2000万アクセス程度なので月に2000万x50 = 1億KB = 100GBとなります。1KBでも減らせば500MBも節約できます。通常はそこでGZIP圧縮を行なってアクセスとともにHTMLファイルを圧縮させますがエロジンでは記事を更新した時に既にGzipファイルも生成します。よってCPUで圧縮させずに既に圧縮済みのGzipファイルを提供しているので負荷低減となり高速となります。HTMLファイルは英語で人間がわかる文字ですが、実際にコンピュータ間でやり取りする際は別の文字になります。

HTMLファイルは50KBで全て文字列ということは一文字一文字にBYTEが生じていることがわかります。Unicodeなど面倒を除いて一文字2BYTEが基本です。スペース、全角、記号、改行、それぞれが2BYTEと形成され何百行となって50KBもの容量を食らいます。

HTML言語
<div>YAMANE in Spain on the Bedroom</div>

コンピュータ言語
AAAAAAAAAACCCCCCCCCCFFBBBBBBBBBBBBBBBBBBBAAAAAEFFFFFFFF

GZIP圧縮
A9AC9CFFB9B3A5EF7

特殊なアルゴリズムで読み込む文字列を減らします。よってコンピュータは少ない文字列を計算するので速くなるという原理です。エロジンでは/var/www/html/にindex.htmlがあったとすればindex.html.gzも作られるようになています。この拡張子.gzは前方の拡張子をGzipしたよという意味です。Gzip圧縮はSSHやPHP,Pythonで簡単に圧縮できます。

AWS EC2 Instance Store Volume

今回のアップデートで一番苦労しました。サーバでSSHでPHPなどのプログラムはいつも通りスムーズにできますが、今回はSSHでのハードウェア環境をいじっていきました。慣れないコマンドを使ってサーバのSSDを初期化とパーティションで区切りext4にフォーマットしてRAID0にするだけでしたが難儀なものでした。結果的にIOPSはランダム書き込み16KBで3万4千を記録しました。通常のEBSでは最適化されていなければ3千程度なので、約10倍ものパフォーマンスを得られます。エロジンは全て静的ファイルだけなので、ファイル数が多いので、IOPSは重要です。
ベンチマーク AWS EC2 インスタンスストアボリューム

2/2
0

アダルト動画の追加とカテゴリを簡略化、三高層

当初エロジンは二次元画像、三次元画像、二次元動画、三次元動画、2ちゃんねる、グロ、おもしろ画像など豊富なジャンルにしていましたが、シンプルに建て直しエロ漫画、エロ動画、その他というくくりでわかりやすさを実現しました。

抜けた萎えたボタン

記事のはじめと終わりに良い悪いを表すレビューボタンを付加しました。あまり押されないとは思っていたのですが、意外とポンポン押されるもので一日200回ほど押さられていただけています。苦労したかいがありました。この調子でコメントシステムを追加しようと思うのですが、AMPモードにするとJAVASCRIPTが使用厳禁となるため、あまり需要が見込めませんので保留したいと思います。Ajaxにせず単純に旧式なForm形式にすれば可能ですが、コメントを投稿するといちいちリダイレクトされてしまいます。

今後のエロジン

今後と言えるほど未来があるかわかりませんが、コメント追加、HTTPS化を目指しWEBスキルを磨いていきたいと思います。