Полезные веб-микросервисы

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

Можно было бы обойтись набором из nginx и других уже написанных программ, но я нашел более изящное решение — написать микросервисы. И постараться их более менее унифицировать.

12 факторов

https://12factor.net/ru/

Мне очень нравится эта концепция. Если приложение написано с учетом 12 факторов, его легко запускать и в локальном Docker, и в Kubernetes-кластере.

Вот что в первую очередь нужно держать в голове:

  • настройка через переменные окружения
  • не хранить в приложении никакого состояния (чтобы пользователь не заметил перезапуск)
  • писать логи в стандартный вывод

Микросервис статического ответа

— Как проверить последняя ли у приложения версия?
— Запросить из некоторого источника какая версия последняя и сравнить с текущей.

Соответственно нужен сервер, который бы возвращал какая версия текущая. А чтобы немного обобщить задачу — был написан веб-сервис, который бы на все GET запросы отвечал бы статической строкой. А строку задаем из переменной окружения.

https://github.com/delfer/go-static-responser

Микросервис написан на Go потому, что:

  • на нем любой программист может очень быстро что-то разработать
  • исполняемый код достаточно компактный по сравнению с другими языками того же уровня абстракции
  • высокая скорость работы, иногда даже если сравнивать с Си

Основных параметра два — порт, который слушать, и строка, которую возвращать. Порт можно не указывать — по умолчанию 8080. Микросервис запаковывается в Docker-образ.

https://hub.docker.com/r/delfer/go-static-responser/

Даже в микрообраз) Так как вместе sh, grep, ls, less, vi и другими busybox утилитами, он занимает 4.5Мб:


(иногда тут может быть написано unknown, так как сервис microbadger.com еще не успел посчитать размер после последней сборки)

Микросервис статических перенаправлений

Это, по своей сути, форк предыдущего микросервиса, только в нем вместо задания ответа нужно задать набор перенаправлений. Конечно, можно было обе функции объединить в один мультитул, но тогда это был бы уже не микросервис)

https://github.com/delfer/go-static-redirector

Нужно было привязать домен, поддомены и несколько ссылок так, чтобы сегодня они перенаправляли людей на GitHub, а в будущем, возможно, уже отдавать полноценные страницы по тем же адресам.

https://hub.docker.com/r/delfer/go-static-redirector/

Docker-образ такой-же «микро».

При чем тут Yandex ClickHouse?

Действительно, при чем?) При том что описанные выше микросервисы могут писать посещения в ClickHouse, хотя функция эта опциональная. Конечно, можно было бы парсить логи nginx, который стоит перед микросервисами, но это не выглядит как самый оптимальный путь. А так, при малой интенсивности посещения записываются по одному, при повышении нагрузки начинают писаться пачками. Размер буфера для формирования пачек также задается переменной окружения и по умолчанию равен 100,000.

А уже имея данные в ClickHouse, очень удобно их анализировать, формировать статистику.

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

* Copy This Password *

* Type Or Paste Password Here *

23 902 Spam Comments Blocked so far by Spam Free Wordpress