ソフトウェア

「複雑すぎるサーバー構成」を原点にまで簡素化する「Litestream」が生まれた理由


現代のシステムでは、冗長化や負荷分散の観点から、複数のサーバーにサービスを分離することが当たり前となりました。しかし、キャッシュやキューの乱用など、システム構成が必要以上に複雑化している場合もあります。「複雑化したサーバー構成」を簡素化すべく、Goのローカルデータベースとして知られるBoltの開発者・ベン・ジョンソン氏が生み出したのが「Litestream」です。

Why I Built Litestream - Litestream
https://litestream.io/blog/why-i-built-litestream/

ジョンソン氏が「古き良き時代だが、実のところは最悪な時代」と語る数十年前は、単一のプログラミング言語とSQLの知識があればどんな開発現場でも通用し、すべてのウェブサイトが基本的なHTML技術で作成されていた時代だったとのこと。1990年代後半には「Linux」「Apache」「MySQL」「PHP」を組み合わせた、いわゆる「LAMP」構成が登場。LAMPはウェブサイト開発における鉄板構成となりましたが、当時のCPUにとって、LAMP構成は少々負荷の高いものでした。また、ウェブ開発で主流の言語だったPHPやRubyは実行速度が遅かったこと、MySQLやPostgreSQLなどのデータベースサーバーは管理が複雑になりがちだったことなどもあって、ひとつのサーバーにすべてのシステムを詰め込むやり方には限界がありました。


こうした理由から、データベースサーバーとアプリケーションサーバーを物理的に分離する構成が主流になったとジョンソン氏は説明しています。しかし、複数のサーバー構成を取るようになった結果、インメモリキャッシュのRedisやコネクションプールのPgBouncer、分散型メッセージキューのKafkaなど、サーバーが複数台あるがゆえの「追加の層」が生まれ、構成がどんどん複雑化していきました。

Googleが開発したKubernetesは、複雑化したシステムの自動構築、ダウンタイムゼロのサービスアップデートなどを可能にし、多くのサービスに採用されています。しかし、ジョンソン氏は「Kubernetesの複雑さ」そのものが可用性を損ねていると指摘。Kubernetesは優れたシステムですが、導入することが常に最適解とは限らない、という指摘は他にもあります。

Kubernetes、やめました | 外道父の匠
http://blog.father.gedow.net/2020/06/03/goodbye-kubernetes/

こうした背景から、ジョンソン氏はアプリケーション開発を簡素化するためにSQLiteに注目しました。SQLiteは軽量なデータベース管理システムで、MySQLやPostgreSQLのようにサーバーとして機能するのではなく、アプリケーションに組み込んで利用する点が特徴です。「SQLiteは本番環境では利用しないもの」と思われがちですが、ジョンソン氏はSQLiteについて、大量のクエリを処理できる能力があること、SQLiteを利用した製品が存在することを例示し、その高い機能を評価しています。

しかし、SQLiteが本番環境で利用されない大きな理由は「レプリケーション機能がない」点にあります。rqliteを用いればレプリケーションは可能ですが、サーバーを3台用意する必要があります。「もっと簡単にSQLiteをレプリケーションしたい」という願いから、ジョンソン氏が開発したのが「Litestream」です。

LitestreamはSQLiteをAmazon S3にレプリケーションできるソフトウェアで、非常にセットアップが簡単かつ低コストで利用できる点が特徴です。Litestream自体は無料のオープンソースソフトウェアなので、必要なコストは月額1ドル(約100円)程度のS3利用料金だけであるとのこと。また、現代のクラウドプロバイダーは何重にも冗長性を確保しているため、そうしたプロバイダーの仮想マシンなどをサーバーとして利用すれば、非常に高い可用性を得ることが可能。レプリケーション先のS3も99.99%の可用性と99.999999999%の耐久性をうたっています。


Litestreamを用いた構成のスケーリングについては、高性能なCPUへの置き換えやRAMの増強といった、サーバーそのものの処理能力を向上させるスケールアップが第一であるとのこと。どうしてもひとつのサーバーで処理しきれなくなった場合でも、SQLiteとLitestreamはデプロイが簡単であるため、データをシャーディングしてサーバーを増やすスケールアウトを行い、システム全体の処理能力を向上させることができるとジョンソン氏は説明しています

ジョンソン氏は今後、Litestreamにリードレプリカ機能などを搭載する予定とのこと。Litestreamの具体的な導入方法については、以下のページに公開されています。

Getting Started - Litestream
https://litestream.io/getting-started/

この記事のタイトルとURLをコピーする

・関連記事
なぜ複雑なシステムでは障害が発生しやすいのか - GIGAZINE

開発者の扱うコードの量や複雑さはここ10年で100倍以上に増えている - GIGAZINE

GitLabがKubernetesをさまざまな課題に直面しながら1年間運用して学んだこと - GIGAZINE

DockerコンテナやKubernetesクラスタをGUIで管理できる「Portainer」レビュー - GIGAZINE

Googleが生んだ「Kubernetes」がポケGOやメルカリを支えるほどの成功を収めた理由とは? - GIGAZINE

in ソフトウェア, Posted by log1n_yi

You can read the machine translated English article here.