Как выбрать микросервисную архитектуру?

Микросервисы

Что такое микросервисы?

Концепция микросервисов была впервые предложена Мартином Фаулером и Джеймсом Льюисом в 2014 г. Они определили микросервисы как небольшие сервисы, состоящие из одного приложения, с собственными процессами и упрощенной обработкой.Развертывание осуществляется автоматически, связь с другими сервисами осуществляется с помощью HTTP API. . В то же время сервис будет использовать технологию централизованного управления наименьшего масштаба (такую ​​как Docker), и сервис может использовать разные языки программирования и базы данных. Микросервисы являются конечным продуктом архитектуры SOA, цель которой состоит в том, чтобы разделить бизнес и дать возможность сервисам работать независимо. В основном имеют следующие характеристики

Более тонкая детализация разделения услугМожно сказать, что микросервисы ориентированы на сервисы в более тонком измерении, размером с подмодуль.Пока ресурсы, от которых зависит этот модуль, не имеют ничего общего с другими модулями, его можно разделить на микросервис.

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

Сервисное независимое техническое обслуживаниеКаждая микрослужба может разрабатываться, тестироваться, выпускаться и управляться небольшой командой или даже отдельным лицом, и она отвечает за весь жизненный цикл.

Высокие требования к возможностям управления услугамиПоскольку количество служб увеличивается после разделения на микрослужбы, для управления каждой службой требуется единая платформа управления службами.

В микросервисной архитектуре вызовы служб в основном зависят от следующих основных компонентов:Описание службы Служба реестра Платформа службы Мониторинг службы Управление службой отслеживания

Введение в платформу RPC с открытым исходным кодом

Dubbo

Самая ранняя инфраструктура RPC с открытым исходным кодом в Китае, разработанная Alibaba и открытая в конце 2011 года, поддерживает только язык Java. Не было никакого обслуживания и много людей в середине, и обслуживание было перезапущено в 2017 году. Схема архитектуры выглядит следующим образом

dubbo-relation

Официальный сайт:dubbo.io/

Что касается коммуникационной среды, Dubbo по умолчанию использует Netty в качестве коммуникационной среды.

Что касается протоколов связи, помимо поддержки частного протокола Dubbo, Dubbo также поддерживает протокол RMI, протокол Hession, протокол HTTP, протокол Thrift и т. д.

Что касается форматов сериализации, Dubbo поддерживает несколько форматов сериализации, таких как Dubbo, Hession, JSON, Kryo, FST и т. д.

представление:Хироши Ватанабэ.apache.org/this-capable/docs/…

Tars

Tars — это высокопроизводительная среда разработки RPC, основанная на службе имен и использующая протокол Tars.В то же время она оснащена интегрированной платформой управления службами, чтобы помочь отдельным лицам или предприятиям быстро создавать собственные стабильные и надежные распределенные приложения в форма микросервисов.
Tars — это проект с открытым исходным кодом, который обобщает многолетние практические результаты микросервисной архитектуры TAF (Total Application Framework), используемой внутри Tencent.

Официальный сайт:GitHub.com/tar — это облако/T…

Схема архитектуры выглядит следующим образом

图片描述
Протокол с открытым исходным кодом: BSD-3-Clause.

Поддержка нескольких языков C++, Java, Nodejs, PHP, Go

представление:GitHub.com/tar — это облако/T…

gRPC

Первоначально разработанная Google, это независимая от языка и платформы система удаленного вызова процедур (RPC) с открытым исходным кодом.
Официальный сайт:grpc.io

图片描述

На основе HTTP/2HTTP/2 предоставляет такие механизмы, как мультиплексирование соединений, двунаправленная потоковая передача, отправка на сервер, приоритизация запросов и сжатие заголовков. Это может сэкономить полосу пропускания, уменьшить количество TCP-соединений, сэкономить ЦП, помочь мобильным устройствам продлить срок службы батареи и т. д. Структура протокола gRPC использует существующую семантику HTTP 2. Данные запроса и ответа отправляются с использованием тела HTTP, а другая управляющая информация представлена ​​заголовком.

IDL использует ProtoBufgRPC определяет сервисы с помощью ProtoBuf, протокола сериализации данных (похожего на XML, JSON, hessian), разработанного Google. ProtoBuf может сериализовать данные и широко используется для хранения данных, протоколов связи и т. д. Высокая эффективность сжатия и передачи, простой синтаксис и высокая выразительность.

Многоязычная поддержка(C, C++, Python, PHP, Nodejs, C#, Objective-C, Golang, Java) gRPC поддерживает несколько языков и может автоматически создавать библиотеки клиентских и серверных функций на основе языка. Были предоставлены версия grpc для C, версия grpc-java для Java и версия grpc-go для Go, а другие языковые версии находятся в активной разработке, среди них grpc поддерживает C, C++, Node.js, Python, Ruby, Objective-C, PHP. А такие языки, как C#, grpc-java уже поддерживают разработку под Android.

Motan

Motan — еще один известный в Китае фреймворк RPC с открытым исходным кодом, который также поддерживает реализацию только на языке Java, его архитектуру можно описать следующим рисунком.

图片描述
Архитектура Motan аналогична архитектуре Dubbo. Оба требуют внедрения SDK на стороне клиента (потребитель услуг) и на стороне сервера (поставщик услуг).Среда Motan в основном включает следующие функциональные модули.

register: используется для взаимодействия с реестром, включая такие функции, как службы регистрации, службы подписки, уведомления об изменении службы и отправка пульса службы. Серверная сторона зарегистрирует услугу через модуль регистрации при инициализации системы, а клиентская сторона подпишется на конкретный список серверов, предоставляющих услуги, через модуль регистрации при инициализации системы. также уведомит клиента.

protocol: он используется для описания службы RPC и управления конфигурацией службы RPC.Этот уровень также может добавлять фильтры с различными функциями для выполнения таких функций, как статистика и ограничения параллелизма.

serialize: Сериализация и десериализация объектов, таких как параметры и результаты в запросах RPC, то есть преобразование объектов в потоки байтов.По умолчанию для сериализации используется Hessian 2, более дружественный к Java.

transport: для удаленной связи используется режим длинной связи TCP Netty NIO по умолчанию.

cluster: модуль, используемый на стороне клиента, кластер представляет собой логическую инкапсуляцию группы доступных серверов, включая несколько серверов, которые могут предоставлять услуги RPC.В реальных запросах доступный сервер будет выбираться в соответствии с различными стратегиями высокой доступности и балансировки нагрузки для инициировать удаленные вызовы.

Spring Cloud

Spring Cloud — это среда разработки, предоставляющая ряд функций для управления службами в архитектуре микрослужб. Она полностью разработана на основе Spring Boot. Spring Cloud использует функции Spring Boot для интеграции превосходных компонентов в отрасли с открытым исходным кодом и предоставляет внешние сервисы в целом.Набор решений для управления сервисами в архитектуре микросервисов. Схему его архитектуры можно описать следующей картинкой.

图片描述

Ниже приведены основные функции Spring Cloud:

  • Распределенная/версионная конфигурация
  • Регистрация и обнаружение службы
  • маршрутизация
  • звонки между службами
  • балансировки нагрузки
  • выключатель
  • Распределенный обмен сообщениями

Spring Cloud является благом для малых и средних интернет-компаний, поскольку у таких компаний часто нет сил или достаточного капитала для разработки собственной распределенной системной инфраструктуры.Использование универсального решения Spring Cloud позволяет легко справляться с бизнесом. стоимость разработки значительно снижается.

На следующем рисунке показано подробное сравнение фреймворка RPC.

微服务比较

как выбрать?

图片描述
Компания с финансированием серии А. Исходная архитектура чистая, и я хочу перейти на архитектуру java.
У компании нет сильного научно-исследовательского потенциала, компания в основном занимается бизнесом B, а требования к параллелизму невысоки, тогда вы можете попробовать архитектуру Spring Cloud, Spring Cloud не только предоставляет базовые функции инфраструктуры RPC, но также предоставляет ряд компонентов, таких как компоненты регистрации службы, компоненты центра конфигурации, компоненты балансировки нагрузки, компоненты прерывателя цепи, компоненты отслеживания распределенных сообщений и т. д., которые называются «Spring Cloud». техническими кругами. Все семейное ведро», в то время как Dubbo и Motan в основном предоставляют только самые основные функции RPC-фреймворка, а другие микросервисные компоненты нужно реализовывать самостоятельно. подходит, снижает затраты на НИОКР, популярность в сообществе высока, и есть много соответствующих учебных документов, что снижает стоимость входа;

Другой пример: эта компания не планирует переходить на Java-фреймворк или продолжает использовать сетевую архитектуру, у нее есть определенные возможности R&D и высокие требования к параллелизму, тогда gRPC, несомненно, наиболее подходит, с кросс-языковой поддержкой и высокой производительностью. ;

Идеального решения нет, есть самое подходящее

Рекомендуемое чтение

Вопросы Redis, которые необходимо задавать на собеседованиях в интернет-компании

На собеседовании в интернет-компании необходимо задавать вопросы по mysql (ниже)

Изучайте галантерейные товары с передовыми технологиями Java, делитесь опытом, продвигайтесь по службе и вместе обсуждайте идеалы. Друзья-единомышленники, добро пожаловать к нам.