#caching #websocket #cdn #cloudflare #akamai
#кэширование #websocket #cdn #cloudflare #akamai
Вопрос:
Есть ли какой-либо поставщик CDN, способный предложить какое-либо кэширование WebSocket либо через «пограничных рабочих», либо через другой механизм?
Я бы хотел, чтобы некоторые запросы WebSocket, которые мы делаем, могли обслуживать их как можно ближе к пользователю, не настраивая всю нашу инфраструктуру в нескольких центрах обработки данных.
Ответ №1:
Нет, нет способа кэшировать сообщения WebSocket — например, протокол не имеет никаких «адресуемых» ресурсов, таких как, например, HTTP. HTTP имеет более встроенный дизайн для кэширования в протоколе, например GET
, запросы обычно кэшируются, но не POST
запросы, и вы можете добавлять к запросам заголовки, связанные с кэшем, например, как долго он может кэшироваться и так далее.
По этой причине я бы рекомендовал использовать HTTP вместо WebSocket, если у вас нет варианта использования, когда вам действительно нужно использовать WebSocket. С HTTP у вас есть доступ ко всей инфраструктуре CDN и прокси, доступной по всему миру.
Становится все более распространенным использование, например, событий, отправляемых сервером, потоков HTTP / 2 или, возможно, GRPC для случаев использования, когда WebSockets использовался раньше. Предстоящий протокол WebTransport, вероятно, будет заменой (?) — По крайней мере, когда большая часть другого трафика — HTTP / 3.
Ответ №2:
Во-вторых, кэширование сообщений WebSocket невозможно / не рекомендуется. Я бы посоветовал вам подумать о преобразовании обмена сообщениями WebSocket в форму пограничных вычислений.
Например: Akamai предлагает EdgeWorkers. CloudFlare предлагает Workers. AWS предлагает Lambda.
Это может дать вам возможность обрабатывать ваш рабочий процесс вместо того, чтобы полагаться на WebSockets.
/ Майк (и да, я работаю в Akamai)