- Примечание. Источник статьи: колонка Geek Time «Изучение архитектуры с нуля».
Методы
Детализация обслуживания
- Принцип трех мушкетеров, то есть микросервис разрабатывается тремя людьми
- С точки зрения масштаба системы, за разработку системы отвечают три человека, а сложности системы как раз достаточно, чтобы каждый мог полностью понять всю систему и мог разделить труд; два человека, сложность системы не достаточно, разработчики могут чувствовать, что это не может быть отражено Собственная техническая мощь; 4 или более, сложность системы не позволяет разработчикам иметь глубокое понимание деталей системы
- С точки зрения управления командой, 3 человека могут сформировать стабильную резервную копию.Даже если один человек находится в отпуске или развернут на других системах, оставшиеся 2 человека все еще могут его поддерживать; 2 человека находятся под слишком большим давлением; один человек является одиноким точка.
метод разделения
- На основе теории «трех мушкетеров» можно рассчитать соответствующее количество услуг после разделения.
1. Разделение на основе бизнес-логики
- Определите бизнес-модули в системе в соответствии с кругом обязанностей и разделите каждый отдельный бизнес-модуль на независимую службу.
- Трудная проблема заключается в том, что понимание «Сферы ответственности» сильно различается. Например, в системе электронной коммерции первый способ — разделить услугу на 3 услуги «товар», «транзакция» и «пользователь», а второй способ — разделить на «товар», «заказ». , "оплата", "доставка" "Есть 6 сервисов для продавцов" и "покупателей", какой способ разумнее?
- Путаница заключается в разделении с точки зрения бизнеса.Нет проблем как с грубыми, так и с мелкими шкалами, потому что в основе разделения лежит бизнес-логика.Чтобы судить о степени детализации разделения, мы не можем вычислить ее с точки зрения бизнес-логики и по принципу "трех мушкетеров".Примерный объем службы
- Например, если есть 10 человек, согласно вышеизложенным принципам необходимо разделить около 4 сервисов, то в сферу ответственности «сервиса пользователя» можно включить все «логин, регистрация, управление пользовательской информацией»; если команда размер составляет 100 человек для поддержки службы, количество служб может достигать 40, тогда «вход пользователя» является службой; если размер команды достигает 1000 человек для поддержки бизнеса, то «управление подключением пользователей» может быть независимой службой
2. На основе масштабируемого разделения
- Отсортируйте бизнес-модули в системе по их стабильности, разделите зрелые и малоизменяемые сервисы на стабильные сервисы, а часто меняющиеся и повторяющиеся сервисы на меняющиеся сервисы.
- Стабильная детализация службы может быть более грубой, даже если нет логически сильно связанной службы, она может быть размещена в одной подсистеме, например, «служба журнала» и «служба обновления» могут быть размещены в одной и той же подсистеме; нестабильная детализация службы можно быть тонким, но не слишком тонким, всегда помните о контроле общего количества услуг
- Это разделение в основном предназначено для повышения эффективности быстрой итерации проекта и предотвращения онлайн-проблем, вызванных случайным воздействием на существующие зрелые функции во время разработки.
3. Разделение по надежности
- Отсортируйте бизнес-модули в системе по приоритету, разделите основные службы с высокими требованиями к надежности и неосновные службы с низкими требованиями, а затем сосредоточьтесь на обеспечении высокой доступности основных служб.
выгода
- Избегайте сбоев неосновных служб, влияющих на основные службы.
Например, отчеты журналов обычно являются неосновной службой, но в некоторых сценариях может быть большое количество отчетов журналов.Если система не разделена, отчеты журналов могут привести к сбою основной службы, даже если есть проблема с отчетами журнала после разделения это не повлияет на основные службы
- Решения по обеспечению высокой доступности основных услуг могут быть проще
Функциональная логика ядра сервиса проще, хранимых данных может быть меньше, и используемых компонентов будет меньше.В некоторых случаях спроектировать высокодоступное решение намного проще, чем не разбивать
- Возможность снизить затраты на высокую доступность
После разделения основных служб ресурсы, такие как компьютеры и полоса пропускания, занимаемые основными службами, намного меньше, чем без разделения. Таким образом, только решения с высокой доступностью для основных служб сэкономят больше средств, таких как машины и пропускная способность, чем если бы они не были разделены.
4. Разделение по производительности
- Отдельные модули с высокими требованиями к производительности или высокой нагрузкой на производительность, чтобы службы с высокими требованиями к производительности не влияли на другие службы.
- Общие методы разделения связаны с конкретными узкими местами производительности, которые могут разделить веб-службы, базы данных, кэши и т. д.
- Например, при срочных покупках в электронной коммерции наибольшее давление на производительность оказывает функция организации очереди на входе, которая может быть независимой от функции организации очереди как службы.
Вышеупомянутые разделения могут быть свободно расположены и объединены в соответствии с реальной ситуацией.
инфраструктура
- «Автоматизация» — важная часть.Если соответствующая инфраструктура не надежна, то микросервис — это смоляная яма, из-за которой исследования и разработки, тестирование, эксплуатация и обслуживание попадают в различные ловушки.
- Инфраструктура микросервиса показана на рисунке ниже.
Внедрение микросервисов
- Существует семейство инфраструктуры микросервисов с открытым исходным кодом, например, проект Spring Cloud, который охватывает обнаружение служб, маршрутизацию служб, шлюз, центр конфигурации и другие функции.
- Не всякая инфраструктура нужна, если количество микросервисов невелико
Стройте инфраструктуру по приоритету
-
- Обнаружение сервисов, маршрутизация сервисов, отказоустойчивость сервисов: это самая базовая микросервисная инфраструктура.
-
- Структура интерфейса, шлюз API: в основном для повышения эффективности разработки, структура интерфейса предназначена для повышения эффективности разработки внутренних сервисов, шлюз API предназначен для повышения эффективности стыковки с внешними сервисами.
-
- Автоматизированное развертывание, автоматизированное тестирование, центр конфигурации: в основном для повышения эффективности тестирования, эксплуатации и обслуживания.
-
- Мониторинг услуг, отслеживание услуг, безопасность услуг: в основном для дальнейшего повышения эффективности эксплуатации и обслуживания.
- Важность вышеперечисленных двух типов инфраструктур 3 и 4 будет становиться все более и более важной по мере увеличения количества узлов микросервиса, но когда количество узлов микросервиса невелико, его можно поддерживать вручную.Хотя эффективность не высока, это в принципе выдерживает
инфраструктура
автоматизированный тест
- Микросервисы разделяют исходную унифицированную систему на несколько независимых «микро» сервисов, количество интерфейсов между микросервисами значительно увеличилось, а микросервисы поддерживают быструю доставку, короткие циклы версий и частые обновления версий.
- Если вся система регрессируется вручную для каждого обновления, рабочая нагрузка будет большой, эффективность будет низкой, и цель «быстрой доставки» не будет достигнута.Поэтому большая часть работы по тестированию и регрессии должна быть выполнена через автоматизированная система тестирования.
- Объем автоматизированного тестирования включает модульное тестирование на уровне кода, интеграционное тестирование на уровне одной системы и тестирование интерфейса между системами.В идеале каждый тип тестирования автоматизирован.
- Из-за размера команды и людских ресурсов его нельзя полностью охватить, по крайней мере, для автоматизации тестирования интерфейса.
Автоматическое развертывание
- По сравнению с унифицированной системой количество узлов для развертывания микросервисов увеличилось в разы, а то и в десятки раз, а также сильно возрастет частота развертывания микросервисов (например, 70% наших бизнес-систем развернуты на рабочих дней).
- Такая крупная операция развертывания требует большого количества рабочей силы и подвержена ошибкам, если ее продолжают выполнять вручную, поэтому для завершения операции развертывания требуется автоматизированная система развертывания.
- Автоматизированная система развертывания включает в себя такие функции, как управление версиями, управление ресурсами (например, управление машинами, управление виртуальными машинами), операции развертывания и операции отката.
Центр конфигурации
- Количество узлов микросервисов очень велико, а ручная модификация выполняется путем ручного входа в каждую машину, что неэффективно и подвержено ошибкам.
- Особенно при развертывании или устранении неполадок необходимо быстро добавлять, удалять, изменять и проверять конфигурацию, а ручное управление явно неприемлемо.
- Некоторые конфигурации среды выполнения необходимо динамически изменять, и все узлы вступают в силу немедленно, что невозможно сделать вручную.
- Таким образом, микросервисам нужен единый центр конфигурации для управления конфигурацией всех узлов микросервисов.
- Центр конфигурации включает в себя управление версиями конфигурации (например, для одного и того же микросервиса 10 узлов обслуживают мобильных пользователей и 20 узлов обслуживают пользователей Unicom, элементы конфигурации одинаковы, а значения конфигурации разные), добавление, удаление, изменение , а также проверка конфигурации, конфигурации узла, синхронизации конфигурации, отправки конфигурации и других функций.
структура интерфейса
- Микросервисы выступают за упрощенный метод связи, обычно использующий HTTP/REST или RPC для унификации протокола интерфейса.
- Однако на практике унифицированного протокола интерфейса недостаточно, и формат данных, передаваемых интерфейсом, также нуждается в унификации.
- Например, нам нужно указать, что протокол интерфейса — HTTP/REST, но этого недостаточно, необходимо также указать, что формат данных HTTP/REST — JSON, а данные JSON соответствуют следующим спецификациям.
- Если мы просто укажем протокол HTTP/REST без указания спецификаций данных JSON и JSON, возникнет такая путаница: некоторые микросервисы используют XML, некоторые — JSON, а некоторые — пары ключ-значение; даже если одно и то же — JSON, а Формат данных JSON отличается. Таким образом, каждый микросервис должен адаптироваться к нескольким, а то и десяткам интерфейсных протоколов, что равносильно передаче работы, когда-то выполненной ESB, самому микросервису, эффективность которого явно неприемлема, поэтому требуется унифицированный интерфейсный фреймворк. .
- Платформа интерфейса не является исполняемой системой и обычно предоставляется для всех вызовов микросервисов в виде библиотек или пакетов. Например, для приведенного выше примера JSON базовая техническая группа может предоставить пакеты для синтаксического анализа на разных языках (пакет Java, пакет Python , библиотека C и т. д.)
Шлюз API
- После разделения системы на микросервисы внутренние микросервисы связаны между собой, а доступ друг к другу осуществляется по принципу «точка-точка».
- Если внешняя система хочет вызвать определенную функцию системы, а также использует метод «точка-точка», внешняя система будет очень «большой головой».
- Потому что с точки зрения внешней системы ей не нужно и она не может понять разделения обязанностей и границ такого количества микросервисов, она обращает внимание только на те возможности, которые ей нужны, а не на то, какие микросервисы должны предоставлять возможности.
- Система доступа к внешней системе также включает в себя ограничения, связанные с безопасностью и разрешениями.Если внешняя система напрямую обращается к микросервису, это означает, что каждый микросервис должен реализовывать свои собственные функции безопасности и разрешений, а это не только много работы, но и повторяющаяся работа.
- Исходя из приведенного выше анализа, микросервисам нужен единый API-шлюз, отвечающий за работу доступа внешних систем.
- Шлюз API — это интерфейс для доступа к внешней системе. Все внешние системы должны получать доступ к системе через шлюз API, в основном включая аутентификацию доступа (разрешен ли доступ), контроль разрешений (к каким функциям можно получить доступ), шифрование передачи, маршрутизацию запросов. , Управление потоком и другие функции
обнаружение службы
- Существует много типов и количества микросервисов.Если вся эта информация записывается в каждый узел микросервиса с помощью ручной настройки, рабочая нагрузка по настройке становится большой, а файл конфигурации, возможно, потребуется наполнить сотнями или тысячами строк.После добавления десятков узлов, элементы конфигурации составляют десятки тысяч и сотни тысяч строк, ручное обслуживание такого большого количества элементов конфигурации является катастрофой
- Во-вторых, узлы микросервиса часто меняются. Это может быть связано с увеличением количества узлов из-за расширения, или может быть из-за того, что некоторые узлы изолируются во время обработки сбоев, или это может быть обновление в оттенках серого. новая версия, а затем одновременно запускаются новая и старая версии
- В любом случае мы хотим, чтобы изменения узла своевременно синхронизировались со всеми другими зависимыми микросервисами. Если используется ручная настройка, невозможно заставить изменения в реальном времени вступить в силу.
- Поэтому необходима система обнаружения сервисов для поддержки автоматической регистрации и обнаружения микросервисов.
Существует два основных способа реализации обнаружения сервисов: самообслуживание и прокси.
1. Забота о себе
- Структура самообслуживания выглядит следующим образом:
- Структура самообслуживания означает, что каждый микросервис самостоятельно выполняет обнаружение сервиса. Например, на рисунке ЭКЗЕМПЛЯР СЛУЖБЫ A обращается к РЕГИСТРУ СЛУЖБЫ, чтобы получить информацию о регистрации службы, а затем напрямую обращается к ЭКЗЕМПЛЯРУ СЛУЖБЫ B.
- Реализация обнаружения службы самообслуживания относительно проста, поскольку функции этой части обычно предоставляются каждому вызову микрослужбы через унифицированную программную библиотеку или пакет, и каждая микрослужба не будет повторяться сама по себе. давление доступа распределяется на каждый узел микросервиса, и нет очевидного давления и риска в производительности и доступности.
2. Агентство
- Структура агентства выглядит следующим образом:
- Структура прокси означает, что между микросервисами существует система балансировки нагрузки, и система балансировки нагрузки завершает обнаружение сервисов между микросервисами.
- Метод прокси выглядит понятнее, а реализация самого микросервиса намного проще, но на деле это решение более рискованное
- Первый риск — это риск доступности: если система LOAD BALANCER выйдет из строя, это повлияет на вызовы между всеми микросервисами.
- Второй риск — это риск производительности. Весь трафик вызовов между микросервисами должен проходить через систему LOAD BALANCER. Давление на производительность будет продолжать расти с увеличением количества и трафика микросервисов и в конечном итоге станет узким местом производительности.
- Поэтому систему LOAD BALANCER необходимо проектировать в кластерном режиме, но реализация самого кластера LOAD BALANCER увеличивает сложность
- Независимо от того, является ли это самообслуживанием или прокси, основной функцией обнаружения служб является реестр служб.Реестр записывает конфигурацию и состояние всех узлов служб.После запуска каждой микрослужбы она должна зарегистрировать свою собственную информацию в реестре служб и затем запросите доступные службы из микросервисов или системы LOAD BALANCER в реестре служб.
сервисная маршрутизация
- Благодаря обнаружению сервисов микросервисы могут легко получить соответствующую информацию о конфигурации, но при выполнении конкретного запроса на вызов нам также необходимо выбрать конкретный узел из всех доступных узлов микросервиса, которые соответствуют условиям для инициирования запроса. необходимо завершить
- Маршрутизация служб и обнаружение служб тесно связаны.Маршрутизация служб обычно не разрабатывается как независимая операционная система, а обычно реализуется вместе с обнаружением служб.
- Для обнаружения сервисов самообслуживания маршрутизация сервисов реализуется внутри микросервисов; для обнаружения прокси-сервисов маршрутизация сервисов реализуется системой LOAD BALANCER.
- Независимо от того, где она реализована, основной функцией маршрутизации услуг является алгоритм маршрутизации. Общие алгоритмы маршрутизации включают в себя: случайную маршрутизацию, циклическую маршрутизацию, маршрутизацию с минимальным давлением, маршрутизацию с минимальным количеством соединений и т. д.
Отказоустойчивость сервиса
- После разделения системы на микросервисы вероятность отказа одного микросервиса становится меньше, а также уменьшается масштаб влияния сбоя, но значительно увеличивается количество узлов микросервиса.
- В целом вероятность сбоя микросервиса в системе сильно возрастет
- Микросервисы обладают характеристиками распространения сбоев. Если сбои не обрабатываются вовремя, распространение сбоев приведет к тому, что многие сервисные узлы в системе неисправны. Поэтому микросервисы должны автоматически реагировать на такие сценарии ошибок и устранять их. с ними своевременно. В противном случае, если узел выходит из строя, его нужно обрабатывать вручную, что требует большого количества рабочей силы и низкой скорости обработки, а когда скорость обработки низкая, сбой будет быстро распространяться, поэтому нам нужна способность отказоустойчивости сервиса.
- Общая отказоустойчивость службы включает повторную попытку запроса, управление потоком и изоляцию службы.
- Как правило, отказоустойчивость служб интегрирована в системы обнаружения служб и маршрутизации служб.
сервисный мониторинг
- После того, как система разбивает микросервисы, количество узлов значительно увеличивается, что значительно увеличивает количество объектов управления, таких как машины, сети, процессы и интерфейсные вызовы, которые необходимо отслеживать. необходимо быстро локализовать неисправность на основе различных типов информации. Вручную это сделать нереально
- Например, к нам поступали жалобы от пользователей, что есть проблема с бизнесом.Если мы используем ручные методы сбора и анализа информации, то открытие логов десятков узлов может занять более десяти минут.Поэтому сервис мониторинга система необходима для выполнения микроанализа Мониторинг сервисных узлов
эффект
- Собирайте информацию и анализируйте ее, чтобы избежать сбоев, а затем снова анализируйте, сокращая время обработки.
- Мониторинг услуг может обеспечивать раннее предупреждение на основе анализа в реальном времени, обнаруживать и давать раннее предупреждение на стадии зарождения проблемы, уменьшая масштабы и время воздействия проблемы.
Обычно мониторинг сервисов требует сбора и анализа большого количества данных, поэтому рекомендуется сделать независимую систему, а не интегрировать ее в сервисное обнаружение, API-шлюз и другие системы.
отслеживание услуг
- Мониторинг службы может обеспечить мониторинг и сбор информации на уровне узла микрослужбы, но если нам нужно отслеживать полный путь запроса в микрослужбе, мониторинг службы трудно осуществить. Если полная информация о цепочке запросов каждой службы отправляется в систему мониторинга службы в режиме реального времени, объем данных будет слишком большим для обработки.
- Разницу между мониторингом услуг и отслеживанием услуг можно просто резюмировать как разницу между макро и микро. Например, служба A запрашивает службу B по протоколу HTTP 10 раз, а B возвращает объект JSON через HTTP.Мониторинг службы будет записывать количество запросов, время ответа, код ошибки ответа, параметры запроса и возвращенные объекты JOSN.
- В настоящее время, будь то распределенная трассировка или трассировка служб микросервисов, большинство технологий реализации трассировки запросов основаны на статье Google Dapper «Dapper, крупномасштабная инфраструктура трассировки распределенных систем».
служба безопасности
- После разделения системы на микросервисы данные разбрасываются по каждому узлу микросервиса.
- С точки зрения подключения к системе любой микросервис может получить доступ ко всем другим узлам микросервиса.
- С точки зрения бизнеса некоторые конфиденциальные данные или операции могут быть доступны только некоторым микрослужбам, а не всем микрослужбам, поэтому необходимо разработать механизм безопасности службы, чтобы обеспечить безопасность бизнеса и данных.
- Безопасность службы в основном делится на три части: безопасность доступа, безопасность данных и безопасность передачи.
- Обычно безопасность службы может быть интегрирована в систему центра конфигурации для реализации, то есть центр конфигурации настраивает политику безопасности доступа и политику безопасности данных микрослужбы, а узел микрослужбы получает информацию о конфигурации из центра конфигурации, а затем обрабатывает конкретный микросервис.При вызове запроса он обрабатывается в соответствии с политикой безопасности.
- Поскольку эти стратегии являются универсальными, для каждого вызова микрослужбы обычно предоставляется универсальная библиотека, которая инкапсулирует стратегии.
- Базовая структура выглядит следующим образом:
Примечание. Учащиеся, которым интересно узнать о столбце Geek Time, могут проверитьGeek Time Column - доступна услуга кэшбэка