スケーリングとベンチマーキング
CloudflareのKeyless SSL技術は、垂直および水平スケーリングを使用して、あらゆるサイズのワークロードに対応できるように設計されており、可能な限りECDSAなどの事前計算技術を使用しています。キーサーバーのアーキテクチャ設計の目標は、1秒あたりの署名操作を最大化しながらレイテンシを最小限に抑えることです。
各キーサーバーはワーカープールモデルを使用しており、受信したクライアント接続は独自のリーダー/ライターgoroutineペアによって処理され、暗号作業はグローバルプールから引き出された別のワーカーgoroutineで行われます。
必要に応じて、複数のキーサーバーを展開し、好みのイングレス負荷分散構成を使用してバランスを取ることができます。完全な高可用性を確保するためには、予想されるワークロードの2倍を処理できる十分なキーサーバーを展開してください。
キーサーバーはECDSAとRSAの両方のキーをサポートしていますが、RSAの署名は計算コストが桁違いに高い ↗ため、展開時に使用するキーのタイプを考慮してください。
ECDSA署名は2つのステップに分けることができます。最初のステップであるランダム値の生成(後でプライベートキーと署名するメッセージと共に使用される)は、計算コストの大部分を占めるため、レイテンシを大幅に削減するためにこれらのランダム値を事前生成します。ECDSA署名リクエストは、RSA署名リクエストとは別のワーカープールを使用して計算的に隔離されており、可能な限り迅速に処理されます。
追加の詳細は、gokeylessサーバーのREADMEファイル ↗に記載されています。
私たちは、当時の最新世代のコンピュート最適化されたEC2インスタンス(c5.xlarge ↗)でCloudflareのgokeylessベンチツール ↗を使用してベンチマークを実施しました。この特定のインスタンスは、3.0 GHzのIntel Xeonプロセッサによって駆動される4つのvCPUを持っています:
c5$ cat /proc/cpuinfo|grep "model name"model name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHzmodel name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHzmodel name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHzmodel name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHzデフォルトでは、ベンチはコアごとに1つのワーカーgoroutine(4)で実行され、オペレーティングシステムスレッドの最大数はコアの総数(この場合、GOMAXPROCS=4)に等しくなります。予想通り、ECDSA署名のパフォーマンスはRSAを大きく上回ります。結果はこのc5.xlマシンの各コアが1秒あたり10,000以上のECDSA署名操作を実行でき、約200のRSA署名操作を実行できることを示しています。
展開を計画する際は、特定のキーサーバーを使用して終了することを期待する新しいTLS接続の最大数を決定し、それに応じてスケールしてください。完全な高可用性を確保するために、キーなしで運用される各データセンターは、予想される全ワークロードを終了できる必要があります。
c5$ bench -ski $ECDSA_SKI -op ECDSA-SHA256 -bandwidth -duration 60s完了した操作の合計: 2661570平均操作時間: 22.543µsc5$ bench -ski $RSA_SKI -op RSA-SHA256 -bandwidth -duration 60s完了した操作の合計: 46560平均操作時間: 1.288659ms.