@okapiesさんがTwitterで教えてくださった参考資料です。Finagle(とFuture)のプログラミングモデルは、こちらのスライドが参考になると思います。Eriksen氏をフィーチャーした記事を書いてます。「優れた抽象化」と「運用エコシステムとの統合」が一体になっているのがFinagleの面白さだと思います。スライドには、時系列でのTwitterのシステムアーキテクチャーの遷移も簡潔にまとめられてますね。タイムラインから、HTTPリクエストを処理するフロントAPIのエンドポイントに至るまで、Finagle上で構築されてます。同社のエンジニアブログでその概要が紹介されています。(サービス指向アーキテクチャ)では上流サービスの待ち受けをしている時間が長いので、非同期処理ライブラリが効果的。SOAにおいて、多くのサービスを経由するリクエストのパフォーマンスイシューのデバッグには、Finagleのトラッキングフレームワークが有効。Finagleのクライアント/サーバ相関図Finagleクライアントの下には、Finagleトランスポートのレイヤがあり、Nettyをユーザから抽象化する役目を果たしている。NettyのChannelPipelineにある、ChannelHandlerの実装が実際のワークをする。Finagleサーバが接続ごとに生成され、読込み/書込みをするトランスポートを提供する。ChannelHandlersが、プロトコルの暗号化/解除ロジック、接続レベルのstat、SSLなどの実装をする。ディスクIOなどの非同期オペレーションの結果を保持する。中身が空であればまだ結果はこない。成功であれば、オペレーションの結果が入り、exceptionを保持していたら失敗というシンプルな仕組み。Finagleのクライアントがローカルで各ホストの負荷を把握し、新しいリクエストの向け先を調整する。リクエストが失敗すると、Finagleは接続を切り、そのホストはロードバランサーから外される。バックグランドではFinagleが再接続をトライしつづける。再接続が確立されれば、新しいホストがロードバランサーに追加され、安全に個別のホストのシャットダウンができる。ヘルスチェックで万全でないと判断された接続も切る仕組みになっている。データフロー、並列処理はFinagleに任せるので、スレッドプールや競合状態は気にしなくてよくなり、コードがクリアで安全に保てる。