Веб-приложения и потребность в скорости

Прежде чем мы углубимся в технические детали прокси и обратного прокси, давайте разберемся, что делает Cloudflare и каких клиентов они обслуживают.

Что такое Cloudflare?

Cloudflare — это серверная сеть, которая повышает безопасность и производительность приложений, подключенных к Интернету.

Думайте о Cloudflare как о системе, которая действует как посредник между клиентом и сервером. Эта система действует как обратный прокси.

Cloudflare также служит в качестве CDN (сети доставки контента), что означает кэширование веб-ресурсов (статического контента) для повышения производительности и скорости веб-приложения.

Что такое обратный прокси?

Мы знаем, что один из способов связи клиента с сервером — это URL-адрес, который выглядит как www.myserver.com. Однако доступ к фактическому местоположению сервера осуществляется через IP-адрес, который выглядит как 127.0.0.1.

Этот процесс преобразования URL-адреса в соответствующий IP-адрес называется поиском DNS.

Без таких систем, как Cloudflare или Nginx, когда клиент пытается связаться с www.myserver.com, будет возвращен IP-адрес соответствующего сервера.

При использовании таких систем, как Cloudflare или Nginx, которые действуют как посредники между клиентом и сервером, поиск DNS будет возвращать IP-адрес посредника, а не фактический IP-адрес сервера.

Почему это важно?

  1. IP-адрес сервера не нужно раскрывать общественности, что повышает безопасность сервера.
  2. Угрозы безопасности идентифицируются и обрабатываются системой Cloudflare.
  3. Поскольку Cloudflare также действует как система CDN, она помогает повысить производительность веб-приложения.

Таким образом, обратный прокси-сервер — это прокси-сервер, который находится перед серверами приложений.

Что такое NGINX?

Выпущенный в октябре 2004 года, NGINX представляет собой веб-сервер с открытым исходным кодом, который действует как обратный прокси-сервер.

NGINX следует архитектуре, управляемой событиями.

Вместо того, чтобы обрабатывать каждый веб-запрос с помощью одного потока, NGINX следует рабочему процессу. Каждый рабочий процесс использует аналогичные потоки, используя меньшие рабочие единицы, называемые рабочими соединениями. Эти рабочие единицы обрабатывают параллельные запросы.

Эта архитектура помогает NGINX мгновенно обрабатывать тысячи запросов.

Что такое Пингора?

Cloudflare долгое время использовала NGINX в своем стеке прокси, но недавно они перешли на собственное решение Pingora.

NGINX написан на C, тогда как Pingora написана на безопасном для памяти и современном языке Rust.

Pingora использует многопоточный подход вместо многопроцессорного подхода, которому следует NGINX.

Почему Cloudflare перешла на Pingora?

Cloudflare обнаружил ограничения в архитектуре рабочего процесса NGINX.

Один из способов, с помощью которого Cloudflare ускоряет соединение между прокси-сервером и исходным сервером, заключается в повторном использовании как можно большего количества установленных TCP-соединений.

В NGINX один веб-запрос обрабатывается одним рабочим процессом, а это означает, что запросы, которые попали на конкретный рабочий процесс, могут повторно использовать только соединения, доступные этому рабочему процессу. Это влияет на производительность прокси-сервера и требует, чтобы Cloudflare поддерживал больше подключений и ресурсов, что также увеличивает счета.

Это было одной из причин, по которой Pingora перешла от многопроцессорной модели к многопоточной модели, чтобы они могли совместно использовать ресурсы, такие как пулы соединений.

Cloudflare утверждает, что Pingora работает быстрее и эффективнее, чем NGINX, поскольку использует только одну треть памяти и ресурсов ЦП.

Вам нужно отказаться от NGINX в вашем проекте?

Cloudflare уже давно использует NGINX.

Учтите тот факт, что Cloudflare обслуживает более 1 триллиона запросов каждый день, и именно тогда они решили решить проблемы с производительностью, связанные с NGINX.

Возможно, вам придется проверить самостоятельно, не переросли ли ваши приложения сервисы, предоставляемые NGINX; если нет, у вас пока нет причин для беспокойства.