人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

Webシステムにおけるオートファジー構想

こんなことを以前から考えていました。

生命の個体を維持するために非常に重要な役割を果たしているとされているオートファジーという機能があります。まずは以下のようにWikipediaの解説を見てみましょう。

オートファジー (Autophagy) は、細胞が持っている、細胞内のタンパク質を分解するための仕組みの一つ。自食(じしょく)とも呼ばれる。酵母からヒトにいたるまでの真核生物に見られる機構であり、細胞内での異常なタンパク質の蓄積を防いだり、過剰にタンパク質合成したときや栄養環境が悪化したときにタンパク質のリサイクルを行ったり、細胞質内に侵入した病原微生物を排除することで生体の恒常性維持に関与している。このほか、個体発生の過程でのプログラム細胞死や、ハンチントン病などの疾患の発生、細胞のがん化抑制にも関与することが知られている。

オートファジー - Wikipedia

この中で特に自分は以下の動きに着目しました。

個体が飢餓状態におかれて栄養が枯渇し、アミノ酸の供給が断たれることは、細胞にとっては生死に関わる重大なダメージになりうる。しかしオートファジーが働くことによって、細胞は一時的にこのダメージを回避することが可能だと考えられている。オートファジーが起きると、細胞内に常に存在しているタンパク質(ハウスキーピング蛋白)の一部が分解されて、ペプチドやアミノ酸が生成され、それが細胞の生命活動にとって、より重要性の高いタンパク質を合成する材料に充てられると考えられている。ただし、オートファジーによる栄養飢餓の回避はあくまで一時的なものであり、飢餓状態が長く続いた場合には対処することができない。この場合、オートファジーが過度に進行することで、細胞が自分自身を「食べ尽くし」てしまい、細胞が死に至ると考えられている(次項を参照)。

つまり、これをもう少し一般化して考えると、生命の個体というシステムが飢餓状態になると、システムを構成しているコンポーネントが勝手に死に、そのリソースを生きているコンポーネントが吸収して、一時的に元気なコンポーネント群を作って飢餓状態を耐える、というようにも解釈できます。

ではこれをWebシステムに置き換えるとどういう状態になるかを考えてみました。今日は、はてなペパボ技術大会というイベントがあり、久々にわいわいはてなのエンジニアのid:y_uuki さんや id:masayoshi さんとおしゃべりする機会があったので、この辺りをネタにして色々議論してみたところ、概ね構想レベルでまとまったので、それを元に整理してみます。

Webシステムに飢餓状態とは

まず、ここでいうWebシステムの飢餓状態とはどう定義できるかを考えてみましょう。

Webシステムにおける飢餓状態とは、多数のインスタンスで構成されるシステムが、大量のアクセスなどによってCPUのようなリソースを食いつぶし、それをさらに処理するためにインスタンスやリソースを追加してシステムを増強させたいのですが、コストや供給速度の限界によってそれができない場合に、リソースを追加できない状態のことを指すのではないかと考えることができそうです。

つまり、この状態では多数のインスタンスがどれもリソースを大量に消費しており、もこれ以上はリソースが足りない、でもリソースが追加できない、お腹減った!!という一種の飢餓状態になっています。

Webシステムのオートファジーとは

さらに踏み込んで、飢餓状態で生じるオートファジーについて、Webシステムでそれをどう解釈できるかを議論します。

個体の飢餓状態が生じた時に、プログラム細胞死のひとつであるオートファジーが生じます。オートファジーによって、数ある細胞の中から一部の細胞が他の細胞を自食し、一時的に強い細胞をいくつか作って飢餓状態を耐え抜きます。これをWebシステムという個体のインスタンスが細胞であると置き換えて考えるとどうなるでしょうか。

ここで、一般的にWebシステムのインスタンスは、性能面のスケールに加えて、可用性を高めることや比較的デプロイが容易であるために、インスタンスを並列に追加で複数個増やすことアプローチを取っています。ですが、一般的に可用性をある程度犠牲にしてひとつのインスタンスをより高性能なインスタンスにスケールアップしていった方が処理性能の面では効率が良いとされています。この辺りは色々検索すると情報が出てくるので、ここでは詳細を省略します。例えば以下のjaistのサーバでの実運用上でのお話などが比較的参考になります。

togetter.com

この特性を利用すると、Webシステムにおけるオートファジーとは、リソースが足りない状態(主にCPUやメモリ)において、複数個にスケーリングしているインスタンスを縮退すると同時に縮退して余ったリソースを一部のリソースに対してスケールアップ的に割り当て直すことにより、一時的に可用性は低下するものの、リソースの限界を同一コスト内で上昇させることができるのではないか、つまりWebシステムにおけるオートファジー状態を起こすことができるのではないかと考えられます。このような処理であれば、コンテナのスケールアップとスケールアウトを迅速に組み合わせることにより、比較的容易にこの状態を実現できそうにも思えます。

まとめ

ということで、生命の個体をなめらかに維持するために非常に重要とされているオートファジーについて、それをWebシステムのなめらかさに置き換えるとどのように解釈できるかを構想してみました。これにより、実験から一時的にでも飢餓状態を耐えられる、つまりはリソース枯渇状態を一時的に耐えることのできる状態を自動的に構築できれば、より安定したシステムにできるかもしれません。今後はコンテナやFastContainerの実証実験を利用して、実験的にこの有効性を評価してみたいと思います。