У меня есть api, в который я получаю довольно много запросов в https. Поскольку он находится в состоянии покоя, каждый раз, когда отправляется api, требуется полное рукопожатие ssl. При включении http-keepalive задержка запроса значительно уменьшается (первый запрос занимает такое же время, но последующие запросы выполняются так же быстро, как и http).
Теперь я экспериментировал с Amazon Elb (я также буду использовать облачный фронт). Мой вопрос в том, как поддерживать работу в одной и той же настройке, когда запрос, исходящий от клиента, может быть перенаправлен на разные машины случайным образом?
Или вообще невозможно предотвратить квитирование ssl при каждом запросе?
Да, AWS ELB будет повторно использовать открытые подключения к серверным модулям, когда это возможно, но при этом будет пытаться распределить нагрузку в соответствии с настройками. AWS даже рекомендует это как лучшую практику в своих документах:
Для прослушивателей HTTP и HTTPS мы рекомендуем вам включить опцию keep-alive в ваших экземплярах EC2, которая позволяет подсистеме балансировки нагрузки повторно использовать подключения к вашим экземплярам для нескольких клиентских запросов. Это снижает нагрузку на ваш веб-сервер и повышает пропускную способность балансировщика нагрузки. Тайм-аут проверки активности должен составлять не менее 60 секунд, чтобы балансировщик нагрузки отвечал за закрытие соединения с вашим экземпляром.
ETA: Обратите внимание, что ELB фактически не передает клиентское соединение серверной части. Все запросы между клиентом и серверной частью по-прежнему проходят через ELB в обоих направлениях. Вы можете либо заставить ELB отключать SSL от клиента (при условии, что это HTTPS), а затем создать или повторно использовать свое собственное HTTPS-соединение (если настроено для этого) с бэкэндом, либо вы можете отключить SSL только на бэкэнде.