Архитектура современных веб-приложений на примере adopt.com.ua. Внешние сервисы

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

На Heroku эфемерная файловая система. Это значит, что после перезагрузки инстанса, например при редеплое, все записанные файлы пропадут. Основной контент сайта—это фото, поэтому их нужно где-то хранить. Для этого мы используем AWS S3. Файлы прозрачно загружаются на S3 с помощью RoR, для этого не нужно писать дополнительного кода. То же кстати есть и в Laravel и в других фуллстек-фреймворках.

Кроме хранения файлов их нужно еще и раздавать. Можно настроить бакет на раздачу, но это не очень хороший подход по нескольким причинам: показывать имя бакета миру небезопасно, файлы могут находиться далеко от пользователя, тарификция траффика может быть большой на хороших объемах, нужно настраивать заголовки кеширования. Поэтому мы используем амазоновский CDN — CloudFront. У него есть точки доступа по всему миру и файлы будут отдаваться быстро. Кроме CloudFront есть огромное количество других CDN, но амазон меня устраивает.

Вся AWS инфраструктура развернута с помощью Terraform. Вручную в AWS консоли я ничего не конфигурирую, все настраивается через Terraform. Если завтра мне нужно будет поднять клон адопта, то я смогу сделать это за минуту. Состояние терраформа хранится в бакете на том же амазоне, локально ничего нет.

Для рассылки писем я использую сервис Mailjet. Среди кучи других сервисов он выделятеся тем, что можно делать шаблоны для транзакционных рассылок. Транзакционные рассылки—это письма о регистрации, уведомления от сайта и так далее. Они отличаются от маркетинговых писем тем, что там нужно делать подстановки—например вставлять ссылку с токеном для подтверждения регистрации. В подавляющем большинстве сервисов рассылок так делать нельзя или есть ограничения, например подстановка только имени.

Верстка писем—отдельное тайное искусство. Можно было бы отправлять письма сразу из Rails, но тогда нужно было бы делать для них шаблоны в коде и контент нельзя было бы редактировать нетехническим пользователям. Поэтому все шаблоны собраны в конструкторе Mailjet.

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

В Mailjet можно делать и маркетинговые рассылки тоже, но мы этим пока что не пользуемся. Аналоги Mailjet это Mailchimp, Mailgun, Unisender и так далее и так далее.

Для ресайза картинок я использую сервис ImageKit. Я уже подробно о нём писал. Очень удобная штука. По API вы загружаете фото и тут же можете получить его в любом необходимом размере.

К сайту подключена OAuth2 авторизация через фейсбук и гугл. Для этого в фейсбуке и гугле соответственно созданы девелоперские аккаунты, а для интеграции используется библиотека Omniauth.

Для донатов используется LiqPay. Тут ничего сложного. Правда нам сейчас отключили платежи т.к. надо обновить доки или зарегистрировать юрлицо, точно не знаю, поэтому пока что донаты на карту.

В следующей часи я расскажу про мониторинг, аналитику и CMS.


Понравился материал? Подписывайся на мой телеграм канал: https://t.me/full_of_hatred