クライアント/サーバーアーキテクチャを設計する場合、同じプロセスからリモートサーバーに複数の接続を多重化する(つまり1つの接続を共有する) (通常memcachedまたはデータベースサーバーに接続するときに行われるように)。セッションごとに接続するか、1つの接続で複数のセッションを多重化する
各接続に関連するオーバヘッドがあることは知っています(たとえば、サーバーに50,000のオープン接続で大量のRAMを使用する場合)これはfacebookがmemcached用のUDPパッチを作った主な理由の1つでした。しかし、私はその数に近いところにいるとは思っていません。たぶん10,000であろう。また、tcp/ip接続を確立して認証を行うことも節約できますが、今のところ、memcachedのようにファイアウォールソフトウェアに許可を残しておきたいと思います。
接続が10K未満のtcp/ipクライアント/サーバアプリケーションで多重化接続を実装する理由はありますか?
編集 - 詳細:
これは、私が働いているデータベース・サーバ/クライアント用です。私は、InformixとOracleは実際には1つのtcp/ip接続でセッションの多重化を許可していると思います。 Informixのドキュメントでは、彼らは(おそらくそれは、スレッドセーフな実装ではありませんが、マルチスレッドクライアントのは言及しない。)あなたは非スレッドのクライアントのパフォーマンスの向上を得ることができます言う
詳細が必要です。クライアントコードとサーバーコードの両方を所有していますか(おそらく、はい)?とにかくクライアントプロセスがなぜサーバーへの複数の接続を必要とするのでしょうか?接続は短命ですか、それとも長い間持続していますか?とにかくどのようなシステムを構築していますか? – selbie
@selbie上記の詳細を追加しました – Eloff
2年前の私はLinuxカーネルのようなものでした。はい、大きな違いがあります。なぜなら、何千ものソケットよりもずっと少ないシステムコールで、あるソケットで多重化されたメッセージを処理できるからです。システムコールはL1キャッシュを完全に壊すと30Kサイクル以上の非常に高価です。コンテキストスイッチは同じ理由で同じコストを持ちます。 – Eloff