В духе Go
Итак, ближайшая задача — микросервис подписки для клиентского участка сети. Идею я уже описывал: вместо статичной VLESS-ссылки клиент получает адрес эндпоинта, по которому живет небольшой сервис. Клиент обращается к нему — сервис генерирует актуальную конфигурацию и отдает ее обратно. Подключаемый путь меняется, пользователь ничего не замечает и не перенастраивает. Ротация происходит незаметно — как и должно быть.
Технически задача несложная. Для таких вещей я обычно беру питонячий FastAPI — и, скорее всего, первый рабочий вариант напишу именно на нем. Привычно, без сюрпризов. Но пока я думал над этой задачей, в голове начала оформляться другая мысль.
Микросервисы? Кажется, самое время попробовать Go.
Я подступался к нему уже несколько раз. Первое знакомство состоялось в последний рабочий день уходящего 2024 года. Официально нас с работы еще не отпустили, но все уже стояли на низком старте. Где-то в интернете мелькнул заголовок: «Go — язык, который можно освоить за 15 минут!», и я купился. Пока коллеги мысленно строгали оливье, я читал вводный курс. Язык и правда показался простым и интересным.
Несколько месяцев спустя я прошел расширенный онлайн-курс — и Go раскрылся передо мной в совсем другом свете. Все оказалось заметно сложнее, чем при первом поверхностном знакомстве.
И вот что интересно: сложность Go — особого рода. Лексика языка невелика — но за этой немногословностью прячутся довольно серьезные концепции. Асинхронность и многопоточность реализованы на уровне дизайна языка, из коробки. Есть операции с указателями — не настолько низкоуровневые, как в C (арифметики указателей, например, нет), но достаточные, чтобы понять, почему в язык приходит столько людей с сишным бэкграундом.
И главная «киллер-фича» Go умеет упаковывать все зависимости в единственный бинарник. Никакого окружения, никакого интерпретатора, никаких виртуальных сред. Собрал — и запускай где угодно. В сочетании с достаточно высокой скоростью выполнения это делает его практически идеальным языком для микросервисов.
Вобщем, Go — стильный, современный, лаконичный и в нем много еще всяких плюшек - но попробовать его до сих пор мне все как-то не удавалось. Не находилось подходящего момента.
Кажется, момент нашелся сам.
Я посмотрел на наш проект и вдруг заметил: Go уже здесь:
- Hugo, на котором собирается этот блог, — Go,
- Congo, наша тема, — Go,
- etcd, будущее хранилище данных в нашей инфраструктуры, — Go.
Проект потихоньку, незаметно для меня самого, пропитался духом этого языка насквозь. Было бы странно не вписать в эту картину микросервис подписки на Go.
Что ж, это следующий шаг. Посмотрим, что выйдет.