← Cloudflare SSL/TLS / ssl / keyless-ssl / reference
Масштабирование и тестирование производительности
Технология Cloudflare Keyless SSL изначально рассчитана на любую нагрузку благодаря вертикальному и горизонтальному масштабированию, а также предварительным вычислениям там, где это возможно, например для ECDSA. Архитектура key-сервера построена так, чтобы минимизировать задержку и максимизировать число операций подписи в секунду.
Каждый сервер ключей использует модель пула воркеров: входящие клиентские соединения обрабатываются собственной парой горутин чтения и записи, а криптографические операции выполняются в отдельных рабочих горутинах, взятых из общего пула.
При необходимости можно развернуть несколько ключевых серверов и распределить между ними нагрузку с помощью выбранной вами конфигурации балансировки входящего трафика. Для полной отказоустойчивости разворачивайте достаточное количество ключевых серверов, чтобы они выдерживали двойную ожидаемую нагрузку.
Тип ключа
Серверы ключей поддерживают ключи как ECDSA, так и RSA, однако подписи для RSA являются на порядок дороже ↗ для вычислений, поэтому учитывайте тип используемых ключей при планировании количества серверов ключей в вашем развёртывании.
Подписание ECDSA состоит из двух этапов. Первый этап, генерация случайных значений, которые впоследствии используются вместе с закрытым ключом и подписываемым сообщением, составляет основную часть вычислительных затрат, поэтому мы генерируем эти случайные значения заранее, что значительно снижает задержку. Запросы на подписание ECDSA вычислительно изолированы от запросов на подписание RSA за счёт использования отдельных пулов воркеров, что обеспечивает максимальную скорость обработки.
Дополнительные сведения можно найти в файл readme сервера gokeyless ↗ файл.
Тесты производительности
Мы провели тестирование производительности с использованием инструмент Cloudflare gokeyless bench ↗ на актуальном на тот момент экземпляре EC2, оптимизированном для вычислений (c5.xlarge ↗). У этого инстанса 4 vCPU на процессорах Intel Xeon с частотой 3.0 GHz:
c5$ cat /proc/cpuinfo|grep "model name"
model name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
model name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
model name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
model name : Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHzПо умолчанию bench запускается с одной worker-горутиной на ядро (4) и максимальным числом потоков операционной системы, равным общему числу ядер (в данном случае, GOMAXPROCS=4). Как и ожидалось, и как было объяснено выше, производительность подписи ECDSA значительно превышает производительность RSA. Далее результаты показывают что каждое ядро этой машины c5.xl может выполнять более 10,000 операций подписи ECDSA в секунду и приблизительно 200 операций подписи RSA в секунду.
При планировании развёртывания определите максимальное число новых TLS-соединений в секунду, которое должен обрабатывать конкретный сервер ключей, и масштабируйте инфраструктуру соответствующим образом. Для полной отказоустойчивости каждый дата-центр, работающий с Keyless SSL, должен выдерживать всю ожидаемую нагрузку.
Результаты
ECDSA
c5$ bench -ski $ECDSA_SKI -op ECDSA-SHA256 -bandwidth -duration 60s
Total operations completed: 2661570
Average operation duration: 22.543µsRSA
c5$ bench -ski $RSA_SKI -op RSA-SHA256 -bandwidth -duration 60s
Total operations completed: 46560
Average operation duration: 1.288659ms.