Cloudflare архитектура


Мысль: каждый синьор специалист уже отчасти является DevOps инженером.

Прелюдия

PAAS и SAAS системы, такие как Amazon, Heroku им им подобные уже давно прочно вошли в повседневную жизнь веб-разработчиков. В некоторых случаях они вполне могут составить конкуренцию целым отделам DevOps (или каких-то других Ops). Особенно это значимо для стартапов и небольших компаний, потому что нанимать и поддерживать такие отделы не дешевое удовольствие. При этом уже достаточно много сервисов, которые могут заменить DevOps за меньшие деньги. Правда в таком случае роль девопса перекладывается на программиста, но легкость настройки и тарифные планы могут в разы быть ниже чем стоимость владения DevOps отделом.

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

Как было раньше: настраиваешь VPS/VDS, затем поднимаешь и настраиваешь Nginx как балансировщик, затем настраиваешь серверы с приложениями, серверы с базой данных. Код деплоится либо через систему контроля версиями либо через rpm/тарболы или даже архивы.

Потом пришли различные контейнеры и деплой сильно упростился. Где-то в 2к15‘ом наступил новый бум — бум хероку программистов, а в 2к17м стал набирать обороты тренд “serverless архитектура”, которая является идеологическим отражением NoOps движения.

Сегодня очень многие используют AWS, да так, что порой архитектура очень сильно завязана на AWS стек и слезть с него уже не просто. С одной стороны в этом ничего нет плохого. Это же круто, когда можно сделать легко и просто. Но порой это очень дорого, особенно для нас, когда доллар и евро все больше и больше растут, а РКН беснуется и просто может заблокировать все что угодно.

Построить хайлоад архитектуру с множеством серверов и балансировщиком сегодня может даже фронтендер средней руки с минимум знаний о девопс и бекенд разработке. Давайте представим как это может быть.

Cloudflare

На удивление очень многое можно сделать через сервис https://www.cloudflare.com/ (не реклама, просто мне реально он нравится и он выручает меня сильно).

При этом много полезных функций доступны в базовом бесплатном плане (хотя мои хотелки давно уже ушли в платные тарифы, но все же это все еще выгодно и удобно).

DNS хостинг

В первую очередь CF предоставляет DNS хостинг и его многие знают именно по этому функционалу. Бесплатно. Очень удобная панель управления. Часто получается так, что домен в какой-то нетривиальной зоне (как например наш домен new.hr) можно купить у тех, у кого просто наиужаснейшая панель управления и редактор DNS. Да банально даже если взять российских регистраторов, то они все не блещут удобным UX. Я уже взял за привычку всегда переводить домен на CF банально из-за удобной панели управления. Более того, изменения вступают в силу очень быстро, в отличие от тех же регистраторов (ощущение что они все руками меняют).

Проксирование и балансировка

CF позволяет вам использовать его в качестве прокси сервера и балансировщика. Cloudflare поддерживает round-robin алгоритм для DNS! Это мало кто предоставляет из DNS хостеров бесплатно.

Round-robin (циклический) алгоритм распределения нагрузки распределённой вычислительной системы методом перебора и упорядочения её элементов по круговому циклу.

Вы просто можете прописать две и более A записей, каждая из которых будет вести на разные IP. Таким образом можно сделать простое масштабирование системы. Поднимаете несколько VPS/VDS в облачных сервисах и пускаете на них трафик через CF.

Если вы хотите более сложные правила обработки и настраивать роутинг, то это так же возможно. На вкладке Traffic есть отдельная опция Load Balancing.


Эта опция стоит 5$/month для балансировки на 2 сервера.


В чем отличие от того же round-robin алгоритма?

Алгоритм round-robin не делает проверки на доступность ресурса. Если один из ваших серверов упал, трафик на него всеравно будет идти. В итоге получится ситуация, при которой ваш сайт то грузится, то нет, так как все запросы будут равномерно распределяться между всеми прописанными IP. (Но если использовать опцию Always online — то можно обойтись одним раундробином.)

Балансировщик же будет учитывать время ответа и коды ошибок сервера. Если вдруг какой-то из серверов перестанет отвечать, трафик на этот сервер перестанет направляться, а пользователь будет перенаправлен на другой сервер, который будет отвечать. Так же есть возможность настроить Geographic routing.

И прелесть всего этого в том, что вам лично не нужно настраивать свой балансировщик, настраивать его мониторинг. Все изи изи, просто пушка!

Скрытие реального IP и защита от DDoS

Еще одна опция, которую дает CF — это возможность скрывать реальный IP ваших серверов.


Вы просто в настройках DNS жмете значок “облачка” и все. Наружу теперь ваш сайт светит IP балансировщика/прокси, а не ваш реальный. Причем на этом же IP могут находится и другие чужие сайт. Это нужно для того, чтобы злоумышленникам (aka хакерам) нельзя было вычислить какие еще домены находятся на вашем реальном IP, если вы на одном сервере держите несколько разных сайтов и для кучи других вещей, о которых поговорим ниже. Банально CF может выступать как прокси. Зачем — читай далее.

Защита от DDoS атак

Для экстренной защиты от DDoS атак есть спасительная кнопка “I’m under attack!”. Находится она на вкладке Firewall:


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


Так же вы можете вычислить и собрать IP адреса атакующих машин (скорее всего они будут из других стран, например китая, а у вас сайт явно не для китайских пользователей, допустим) и заблокировать, прописав эти адреса в CF панели:


HTTPS, HTTP2 и сертификаты

Я уже как-то писал, что на сегодня самый просто способ получить HTTPS — это не заморачиваться с LE, а просто воспользоваться CloudFlare.

Кеширование

CF позволяет кешировать ваш сайт и есть возможность включить опцию “Always online”. Даже если ваш сервер упадет, CF будет отдавать закегшированную копию, что позволит пользоваться вашим сайтом какое-то время. Это удобно для проведения технических работ и реконфигурации сервера. Вы можете уронить/выключить сервер, но ваш сайт будет продолжать отдаваться. Так же это спасет от экстренного падения сервера, пока вы будете добираться до компьютера и разбираться в чем причина. Помните, что мы говорим про стартап и малый бизнес, когда у вас нет тех поддержки 24/7 и вы одновременно и бэкнд, и фронтенд, и девопс, и все что угодно. Одним словом — тыжпрограммист.

Оптимизация

CF позволяет вам оптимизировать ваш сайт, используя компрессию JS, CSS и HTML. Если вам достался сайт, в котором не осуществлена минификация кода, вы можете все это пофиксить на уровне прокси CF, просто зайдите на вкладку Speed:


Page Rules

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

Workers — альтернатива AWS Lambda

С недавнего времени у CF появился новый сервис — Workers. Это реальная альтернатива AWS Lambda. Воркеры позволяют вам обрабатывать ваши запросы и ответы и манипулировать ими налету. При этом код воркеров пишется на нашем любимом JavaScript!

Это не все фичи CF, но уже благодаря этим фичам можно построить хайлоад проект энтепрайз уровня не имея больших бюджетов и сильных навыков в DevOps и администрировании.

В следующей статье я расскажу реальные кейсы использования Cloudflare Workers на примере нашего проекта GeekJob.ru