Twisted Frameworkについて(HighLoad ++-2009からのレポート)

非同期プログラミングの概要 とTwisted Frameworkの最も表面的な話として HighLoad ++(2009) に関するレポートの資料公開しています。



最近、Webの分野では、要求処理に数百ミリ秒、さらには数秒かかる「重い」アプリケーションサーバーから、最小の遅延で少量のデータを送信するより軽量なサービスに注目が移っています。 JSONにパックされ、数百バイト単位で測定されたデータの変更を転送するリクエストに応じて、数十キロバイトのHTMLコードを生成することからの移行。 このようなサービスの例には、Gmail、FriendFeed、Twitter Live Searchなどが含まれます。



ユーザーの遅延を最小限に抑えるには、一定の接続(たとえば、Adobe Flash、RTMP)を維持するか、HTTPロングポーリング手法をキープアライブと組み合わせて使用​​する必要があります。 何らかの方法で、サーバー側では、これにより大量の同時接続が発生します(数千、数万)。 この状況はC10k問題と呼ばれます。



接続を処理する場合、サーバー側のアーキテクチャの選択はそれほど大きくありません。接続プロセス、接続スレッド、プロセススレッドバリアントの組み合わせ、または非同期I / O(追加のプロセスまたはスレッドと組み合わせて)。 リソースの消費に関して1万を超える同時接続がある場合、1万のプロセスの作成を想像することは完全に不可能です。 1万個のスレッドが妥当な解決策になることはほとんどありません。 このような多数の接続が存在する場合、各接続の作業量は比較的少なく、それらのほとんどは新しいデータの到着を待機していることをさらに考慮する必要があります。 したがって、ほとんどのプロセスまたはスレッドは単に保留され、システムリソースを浪費します。



非同期I / Oにより、単一の実行スレッド(単一プロセス)内の数千のオープンソケットにまたがる非ブロッキングネットワークI / Oが可能になります。 異なるオペレーティングシステムの実装メカニズムは異なります。たとえば、select()、poll()、epoll()、kqueue()などです。 非同期I / Oを使用するアプリケーションの例:



ただし、非同期I / Oは普遍的なソリューションではありません。データベースサーバーの場合、各リクエストには大量のディスクI / OとCPU時間が必要であり、これを許可しないため、接続サービスを編成するのに適した方法はほとんどありません1つのプロセスのフレームワーク。



Twisted Frameworkは、非同期ネットワークアプリケーションを実装するための広範なクラスとモジュールのセットです。 Twisted Frameworkは次のとおりです。



レポートでは、具体的な例として、Twistedに実装された3つのアプリケーションがあります。 この問題を解決するために、Twistedのアーキテクチャ、特定のパフォーマンスパラメーター、最適化手法、長所と短所を考慮します。



追加情報:



プレゼンテーション






All Articles