У світі мікросервісної архітектури, коли застосунки складаються з безлічі окремих, невеликих сервісів, їх взаємодія є ключовою для злагодженої роботи.
Часто ці сервіси спілкуються напряму, що може призводити до неефективності та збоїв. Саме тут на допомогу приходить сервісна сітка.
Що ж таке сервісна сітка?
Сервісна сітка (service mesh) – це концепція, яка описує спосіб управління обміном даними між різними мікросервісами застосунку. По суті, це програмне забезпечення, яке забезпечує ефективну взаємодію між мікросервісами, виконуючи такі функції:
- Ідентифікація застосунку
- Розподіл навантаження
- Аутентифікація
- Шифрування
Мережа взаємодіючих мікросервісів створюється за допомогою паралельних з’єднань, що працюють через їхні проксі-сервери. Ця мікросервісна мережа інтегрується в систему управління мережею дата-центру, що полегшує оптимізацію комунікацій без простоїв під час розвитку застосунку. Адже кожен сервіс застосунку залежить від інших для задоволення потреб користувачів.
Наприклад, в інтернет-магазині, перед покупкою користувач хоче знати, чи є товар в наявності. Для цього потрібен зв’язок між службою бази даних і сторінкою товару. Потім ця сторінка має взаємодіяти з кошиком користувача.
Крім того, для персоналізації пропозицій можна налаштувати службу рекомендацій. Ця служба має взаємодіяти не лише з базою даних тегів товару, але й з базою даних інвентаризації, яка, в свою чергу, повинна зв’язуватися зі сторінкою товару. Фактично, це комплекс взаємопов’язаних елементів.
Сучасні застосунки зазвичай організовані як мережа сервісів, кожен з яких виконує певну бізнес-функцію.
Як працює сервісна сітка та які її переваги?
Важливо розуміти, що сервісна сітка не створює нові функції в середовищі застосунку. Вона являє собою групу мережевих проксі-серверів, що є поширеною практикою в корпоративному середовищі.
Можливо, ви вже використовуєте проксі, коли відвідуєте веб-сайти з робочого комп’ютера. Проксі-сервери на рівні інфраструктури мікросервісів допомагають маршрутизувати запити між ними. Звідси й термін “сайдкар” – проксі-сервери, що розміщуються поряд із сервісами, а не всередині них. Проксі-сервери різних служб формують сітчасту мережу.
Без сервісної сітки розробники змушені кодувати кожен мікросервіс з урахуванням стратегії взаємодії з іншими сервісами. Оскільки логіка зв’язку прихована в кожному сервісі, це ускладнює досягнення бізнес-цілей компанії.
Крім того, виникають складнощі з діагностикою проблем у комунікації. Сервісна сітка дозволяє вирішити ряд проблем, пов’язаних з управлінням взаємодією між службами.
Завдяки сервісній сітці, зв’язок автоматизовано, адже потрібні дані та аналітична інформація легко доступні в зовнішній інфраструктурі сітки. Це спрощує виявлення та усунення проблем і несправностей. Це також дозволяє ІТ-командам зосередитися на інших важливих завданнях.
Абстрагування зв’язку дозволяє автоматично обходити несправні сервіси, не порушуючи обмін даними між функціональними частинами застосунку. Легкодоступні дані з системи сервісної мережі можна проаналізувати для покращення продуктивності застосунку.
Ми розглянули, як працює сервісна сітка. Тепер розглянемо деякі з найкращих менеджерів сервісних сіток:
Менеджери сервісних сіток
Meshery – це менеджер сітчастих служб, що дозволяє запускати різні сервісні сіткові рішення. Його можна розгорнути на Kubernetes і Docker. Meshery надає графічний інтерфейс та інтерфейс командного рядка для встановлення стандарту для основних сервісних рішень, включаючи Linkerd та Istio. Meshery можна розгорнути безпосередньо в кластері або локально.
Amazon App Mesh
AWS App Mesh – це сервіс для платформи Amazon Kubernetes (EKS). Він забезпечує управління на рівні програми через проксі-сервер Envoy Sidecar для вхідного та вихідного трафіку та використовує розрив ланцюга для забезпечення показників спостережливості через AWS X-Ray. AWS App Mesh також можна використовувати з іншими сервісами, такими як Amazon EC2 і AWS Fargate.
Linkerd
Linkerd – це менеджер сервісної сітки з відкритим вихідним кодом, який використовує спеціально розроблений проксі-сервер на основі Rust для управління мікросервісами. Він постачається з попередньо встановленим Grafana для забезпечення показників спостережливості. Linkerd, на відміну від інших менеджерів сітки з відкритим кодом, пропонує графічний інтерфейс і підтримує не тільки Prometheus, але й контролери входу, такі як Traefik, Kong і Gloo. Linkerd також підтримує автоматичне оновлення розгортання в кластерах.
Istio
Istio – це сервісна сітка з відкритим кодом, яка використовує проксі Envoy для управління мікросервісами. Istio пропонує ряд функцій, таких як балансування навантаження, створення політики, маршрутизація трафіку, тайм-аути, розрив ланцюга, зміщення трафіку та повторні спроби. Istio також забезпечує функцію розподіленого трасування між контейнерами чи машинами без встановлення додаткового програмного забезпечення.
Kuma
Kuma – це сервісна сітка, розроблена Kong, яка використовується для розширення можливостей існуючих сервісів через проксі Envoy. Kuma підтримує різні мікросервіси та забезпечує покращену безпеку та моніторинг мереж. Він постачається з низкою готових політик для маршрутизації, mTLS, контролю трафіку та різних функцій безпеки. За допомогою Kuma ви можете легко керувати різними ізольованими сітками через єдину площину управління та даних.
Nginx Mesh
Nginx – це сервісна сітка для Kubernetes, яка шифрує трафік між контейнерами за допомогою площини даних на базі Nginx Plus. Nginx використовує обмеження швидкості та автоматичні вимикачі для управління трафіком між сервісами та постачається з інформаційною панеллю Grafana для спостереження за показниками мережі сервісів.
Consul
Consul від HashiCorp – це сервісна мережа, яка забезпечує вбудований проксі-рівень, а також підтримує проксі-сервер Envoy. Він пропонує маршрутизацію на основі шляху, переміщення трафіку та балансування навантаження. Consul інтегровано з HashiCorp Vault, а також підтримує mTLS. Його можна інтегрувати з Prometheus і Grafana для перегляду показників спостережливості.
Gloo Mesh
Gloo Mesh – це сервісна сітка, розроблена на основі Istio та використовує проксі-сервер Envoy, що дозволяє реалізувати модель безпеки Zero Trust. Gloo підтримує багатокористувацький Kubernetes, віртуальні машини та інші мікросервіси. Він підтримує CI/CD і GitOps, що полегшує розгортання.
Заключні слова
Сервісна сітка вирішує проблему взаємодії між мікросервісами та забезпечує різноманітні переваги в області безпеки. Проте, з огляду на наявність сотень різних рішень на ринку, важливо вибрати ту сервісну сітку, яка найкраще відповідає вашим потребам і є простою в управлінні.