時々、前世代のテクノロジーを時代遅れにする恐れのあるテクノロジーの波があります。 アプリを作成するための「サーバーレス」と呼ばれる手法については、多くの話がありました。 アイデアは、アプリケーションを一連の関数としてデプロイし、実行する必要があるときにオンデマンドで呼び出されることです。 サーバーの管理について心配する必要はなく、これらの関数はオンデマンドで呼び出され、クラスター上で実行されるため、必要なだけ拡張できます。
しかし、サーバーレスはDockerがないことを意味するのではなく、実際、Dockerはサーバーレス です 。 Docker を使用してこれらの関数をコンテナー化し、Swarm でオンデマンドで実行できます。 サーバーレスは分散アプリを構築するための手法であり、Docker はそれらを構築するための完璧なプラットフォームです。
サーバーからサーバーレスへ
では、このようなアプリケーションをどのように記述できるでしょうか。 5つのサービスで構成される投票アプリケーションを例にとってみましょう。
これは次のもので構成されます。
- 2 つの Web フロントエンド
- バックグラウンドで投票を処理するワーカー
- 投票を処理するためのメッセージ キュー
- データベース
投票のバックグラウンド処理は、サーバーレスアーキテクチャへの変換の非常に簡単なターゲットです。 投票アプリでは、次のようなコードを少し実行してバックグラウンド タスクを実行できます。
インポート ドッカーラン クライアント = dockerrun.from_env()client.run("bfirsh/serverless-record-vote-task", [voter_id、投票]、デタッチ=真)
ワーカーとメッセージ キューは、Swarm でオンデマンドで実行される Docker コンテナーに置き換えることができ、需要に応じて自動的にスケーリングされます。
Webフロントエンドを排除することもできます。 それらを、HTTPリクエストごとにDockerコンテナを起動する軽量HTTPサーバーによってトリガーされる、単一のHTTPリクエストを提供するDockerコンテナに置き換えることができます。 手間のかかる作業により、長時間実行されるHTTPサーバーはオンデマンドで実行されるDockerコンテナに移動され、負荷を処理するために自動的にスケーリングできるようになりました。
新しいアーキテクチャは次のようになります。
赤いブロックは継続的に実行されているサービスで、緑のブロックはオンデマンドで実行される Docker コンテナーです。 このアプリケーションには、管理が必要な長時間実行されるサービスが少なく、その性質上、需要に応じて自動的にスケールアップします (Swarm のサイズまで)。
では、これで何ができるでしょうか?
ここでは、アプリで使用できる便利な手法が 3 つあります。
- コード内の関数をオンデマンドの Docker コンテナーとして実行する
- Swarm を使用して、クラスターでこれらを実行します
- コンテナーからコンテナーを実行する (Docker API ソケットを渡す)
これらの手法を組み合わせることで、アプリケーションの設計方法に関する多くの可能性が開かれます。 バックグラウンド作業を実行することは、うまく機能するものの良い例ですが、次のような他の負荷も可能です。
- ユーザー向けの HTTP 要求を処理するためにコンテナーを起動することは、待機時間のためにおそらく実用的ではありません。 ただし、Swarmでコンテナを実行して独自のWebフロントエンドを自動スケーリングする方法を知っているロードバランサーを書くことができます。
- スウォームの構造をイントロスペクトし、正しいシャードとレプリカを起動できるMongoDBコンテナ。
次のステップ
アプリを構築するための根本的に新しいツールと抽象化はすべて揃っており、それらで可能なことのほんの一部にすぎません。 私たちはまだ、インフラストラクチャ内のどこでもオンデマンドでコードを実行できるSwarmがある将来のためではなく、長い間存続するサーバーを持っているようなアプリケーションを構築しています。
これはうまくいけばあなたが構築できるものについてのいくつかのアイデアをあなたに与えるでしょうが、私たちはあなたの助けも必要です。 これらのアプリケーションの構築を開始するためのすべての基本は揃っていますが、より優れたツール、ライブラリ、サンプルアプリ、ドキュメントなどが必要です。
この GitHub リポジトリには、ツール、ライブラリ、例、ブログ投稿へのリンクがあります。 詳細を知りたい場合は、そこにあるリンクを投稿して、私たちがこれに協力し始められるようにしてください。
参加して、ハッキングを楽しんでください!