Прокси, обратный прокси и балансировщик нагрузки
Сначала давайте получим представление о прокси-серверах, а после этого вы сможете легко понять обратные прокси-серверы и балансировщики нагрузки.
Но прежде чем мы перейдем к техническим обсуждениям, связанным с прокси или обратными прокси, я хотел бы вспомнить одну ситуацию из детства, которая наверняка была у каждого из вас.
В детстве, когда нам что-то нужно, мы просим об этом родителей. Потому что нам не разрешают напрямую контактировать с посторонними людьми. Например, когда мы просим у родителей игрушечную машинку, они решают, правильная это просьба или нет. Если просьба обоснована, родители пойдут в магазин игрушек и принесут нам игрушечную машинку. В противном случае они просто отклонят нашу просьбу. Вот видите, когда мы были детьми, наши родители выступали в роли щита, защищающего нас от посторонних.
Надеюсь, вы получили представление об этом простом сценарии, теперь давайте посмотрим, как это связано с прокси-сервером.
Прокси-сервер
На рисунке 2 представлено простое клиент-серверное приложение. Все клиенты отправляют свои запросы на прокси-сервер, а затем прокси-сервер отправляет запросы клиентов на сервер. Таким образом, прокси-сервер выполняет роль брандмауэра или щита на стороне клиента, обрабатывает все клиентские запросы и отправляет их на сервер соответствующим образом. Основная цель такого рода прокси - защитить клиентские приложения от внешних серверов и других уязвимостей безопасности. Как это работает? Это работает так, что клиенты и их IP-адреса не раскрываются внешнему миру, а вот прокси-сервер будет раскрывать себя от имени клиентских приложений. Надеюсь, вы помните приведенный выше сценарий «ребенок-родитель». 😃
Надеюсь, теперь у вас есть четкое представление о прокси-сервере и его роли. Теперь перейдем к обратным прокси-серверам.
Обратный прокси-сервер
Концепция обратного прокси-сервера очень похожа на концепцию прямого прокси-сервера. Предположим, что у нас есть несколько экземпляров сервера, работающих на бэкенде. Но помните, что не обязательно иметь несколько экземпляров, в некоторых случаях будет достаточно одного сервера. 😉 На рисунке 3 показано, что обратный прокси расположен на стороне серверов. Вместо того чтобы защищать клиентские приложения, обратный прокси защищает экземпляры сервера на бэкенде от внешних сторон или клиентов. Таким образом, клиенты никогда не узнают, какой экземпляр сервера будет отвечать на их запросы. Каждый запрос клиента будет отфильтрован на обратном прокси, а затем обратный прокси-сервер перенаправит эти запросы на соответствующие сервера для дальнейшей обработки.
У обратных прокси-серверов есть и другие преимущества. Такие прокси могут кэшировать статический и динамический контент. Если клиенты снова и снова запрашивают один и тот же ресурс, мы можем кэшировать это содержимое на уровне прокси. Таким образом, нам не придется снова и снова отправлять один и тот же запрос на сервера. Следующее преимущество этих прокси-серверов заключается в том, что они могут сжимать данные, которые будут проходить через сеть, используя различные алгоритмы. Еще одно важное преимущество обратных прокси-серверов заключается в том, что они могут выступать в качестве балансировщика нагрузки. Итак, давайте разберемся и с этим.
Балансировщик нагрузки
Как я уже говорил, обратный прокси-сервер может выступать в качестве балансировщика нагрузки. Помните, что не каждый обратный прокси-сервер будет выступать в роли балансировщика нагрузки, но каждый балансировщик нагрузки должен быть обратным прокси-сервером. Итак, роль балансировщика нагрузки заключается в распределении нагрузки клиентских запросов между экземплярами сервера. Например, у нас есть приложение, которое получает более 5 миллионов запросов в день. Таким образом, если на стороне сервера будет только один экземпляр, он не сможет справиться с таким огромным трафиком. Поэтому нам нужно иметь несколько экземпляров сервера. Вы можете задаться вопросом: если у нас есть несколько экземпляров, как мы можем распределить трафик между этими серверами? Как раз в этом случае на помощь приходит балансировщик нагрузки 😉.
Балансировщик нагрузки принимает все запросы клиентов и распределяет их между экземплярами сервера в соответствии с различными алгоритмами. В данном конкретном случае (рисунок 4) он использует алгоритм балансировки нагрузок циклическим перебором (Round-Robin) для распределения нагрузки между экземплярами сервера. В алгоритме Round-Robin каждый новый клиентский запрос будет переадресован следующему соседнему серверному экземпляру в последовательном порядке. Таким образом, вместо того чтобы один сервер разрешал все запросы, все серверы будут участвовать в разрешении клиентских запросов по правильному и эффективному алгоритму. Существует не только Round Robin, но и ряд других алгоритмов, таких как Hash, IP Hash, Least Connections и так далее.
Отлично! Вот и все для этой статьи. Спасибо, что дочитали до конца. Надеюсь, вы узнали что-то ценное. Продолжайте учиться, продолжайте расти.
Источник Medium |