Anno: распределённая микросервисная среда разработки
Anno — это распределённая среда разработки, ориентированная на управление сервисами, мониторинг и отслеживание связей. В качестве RPC можно использовать высокопроизводительный межъязыковой Thrift (рекомендуется) или Grpc. Поддерживаются .net core, .net framework и java.
Онлайн-демонстрация: http://49.232.112.70
Пример проекта: https://gitee.com/stoneson/Viper
Название пакета | Описание | Версия | Скачивания |
---|---|---|---|
Vive.Anno.Core | Ядро библиотеки |
Название пакета | Описание | Версия | Скачивания |
---|---|---|---|
Vive.Anno.Api.GateWay | WebApi-шлюз Thrift | ||
Vive.Anno.Rpc.Center | Библиотека центра регистрации Thrift | ||
Vive.Anno.Rpc.Client | Клиентская библиотека Thrift | ||
Vive.Anno.Rpc.Server | Серверная библиотека Thrift для сервисов | ||
Vive.Anno.Wcf.Server | Библиотека сервера Thrift Wcf | ||
Vive.Anno.Rpc.CenterGrpc | Центр регистрации Grpc | ||
Vive.Anno.Rpc.ClientGrpc | Клиенты Grpc | ||
Vive.Anno.Rpc.ServerGrpc | Серверы Grpc |
Название пакета | Описание | Версия | Скачивания |
---|---|---|---|
Vive.Anno.EventBus | Библиотека шины событий EventBus | ||
Vive.Anno.Plugs.MonitorService | Промежуточное ПО для мониторинга сервисов Anno | ||
Vive.Anno.Rpc.Client.DynamicProxy | Динамический прокси для клиентских расширений Anno |
Vive.Anno.Rpc.Client.DynamicProxy | Vive.Anno.Rpc.Client.DynamicProxyGrpc
| Интерфейс-посредник Anno-клиента, расширение |
| |
|
Общая архитектура
Общая архитектура состоит из трёх частей:
#📢 Основные функции
Функции включают в себя регистрацию центра, обнаружение сервисов, проверку работоспособности, балансировку нагрузки, ограничение потока, обработку отказов, трассировку цепи, мониторинг ресурсов и др.
#📦 Регистрационный центр (AnnoCenter)
AnnoCenter — это сервисный регистрационный центр, который отвечает за обнаружение сервисов (например, сервис заказа A или складской сервис B), хранение информации о сервисах и предоставление этой информации локально. Клиенты (например, ApiGateway), отправляя запросы, получают доступ к сервисам через AnnoCenter, который выбирает подходящий сервис на основе стратегии (возможно, включая стратегию балансировки нагрузки).
Если соединение с сервисом не устанавливается, AnnoCenter помечает этот сервис как неработоспособный. В этом случае AnnoCenter не будет исключать сервис из списка, но и не предоставит его клиентам. Вместо этого он начнёт повторную попытку проверки сервиса. Если сервис восстановит работоспособность в течение минуты, он снова будет помечен как работоспособный и станет доступен для клиентов. В противном случае сервис останется помеченным как неработоспособный навсегда.
Для регистрации центра требуется только настроить порт и время ожидания. Информация о каждом новом сервисе автоматически записывается при его подключении.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!--#lbs 配置 Port 注册中心监听端口 TimeOut 超时时间 毫秒
dc:узел
dc:никнейм: имя сервиса App001
dc:имя: тег функции
dc:ip: IP сервиса
dc:порт: порт сервиса
dc:тайм-аут: время ожидания сервиса
dc:вес: вес сервиса число -->
<Port>6660</Port>
<TimeOut>120000</TimeOut>
<Servers>
<dc name="Vive.Anno.Plugs.TraceService,Vive.Anno.Plugs.DLockService,Vive.Anno.Plugs.EsLogService" nickname="App001" ip="10.112.93.122" port="6659" timeout="20000" weight="1" />
</Servers>
</configuration>
#👑 Сервисы (AnnoService)
Сервис — это основная программа, разработанная в соответствии с принципом конфигурации разработки. Плагины разрабатываются на основе пакетов.
Инициализация конфигурации Реализация интерфейса: IPlugsConfigurationBootstrap.
using Vive.Anno.EngineData;
namespace Vive.Anno.Plugs.HelloWorldService
{
/// <summary>
/// Плагин запуска
/// Зависит от типа программы *Domain.Bootstrap*
/// </summary>
[DependsOn(
//typeof(Domain.Bootstrap)
//, typeof(QueryServices.Bootstrap)
//, typeof(Repository.Bootstrap)
//, typeof(Command.Handler.Bootstrap)
)]
public class HelloWorldBootstrap : IPlugsConfigurationBootstrap
{
/// <summary>
/// Сервис зависит от плагина после вызова
/// </summary>
public void ConfigurationBootstrap()
{
//throw new NotImplementedException();
}
/// <summary>
/// Сервис зависит от плагина до вызова
/// </summary>
public void PreConfigurationBootstrap()
{
//throw new NotImplementedException();
}
}
}
Реализация функционального модуля Наследование: BaseModule.
Модуль называется в соответствии со стандартом именования XXXModule, формат имени модуля заканчивается на Module, например, HelloWorldViperModule. АнноСоИзи, СэйХай, инпут)). ОутпутДата;
возврат нью { ХелоуВорлдВайперМесдж = $"{нэйм} ты хорошо, в этом году {эйдж} лет", СоИзиМесдж = соИзиМесдж };
}
[АнноИнфо(Деск = "Два целых числа вычитаются равными нескольким? Я помогу тебе посчитать (x-y=?)")]
публик инт Субтракшн([АнноИнфо(Деск = "Целое число X")] инт икс, [АнноИнфо(Деск = "целое число Y")] инт уай) { возврат икс - уай; }
[АнноИнфо(Деск = "Купи товар, скоро наступит двенадцатое ноября")]
публик ПродуктДто БайПродукт([АнноИнфо(Деск = "Название товара")] стринг продактНэйм, [АнноИнфо(Деск = "Количество товара")] инт нэмбер)
{
дабл прайс = нью Ранадом(). Некст(2, 90);
дикшнэйри<стринг, стринг> инпут = нью дикшнэйри<стринг, стринг>();
инпут. Эдд("продактНэйм", продактНэйм);
инпут.Эдд("нэмбер", нэмбер. ТуСтрока());
вар продукт = Ньютонсоф. Джсон. ДжсонКонверт. ДесэриализеОбджект<ЭкшнРезалт<ПродуктДто>>(зис. ИнвокПросессор("Вайв. Анно. Плагс. СоИзи", "АнноСоИзи", "БайПродукт", инпут)).ОутпутДата;
продукт. КантриОфОриджин = $"Китай Пекин — {продукт.КантриОфОриджин}";
ретурн продукт;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<конфигурация>
<!--0,0 Первая позиция — рабочая станция, вторая позиция — центр обработки данных
(Все двухзначные числа AnnoService не могут повторяться, например, не может существовать [1,2] [1,2])
Может существовать [1,2] [2,1] -->
<АйдВоркер>0,0</АйдВоркер>
<!--Имя приложения-->
<АпНэйм>Ап001</АпНэйм>
<!--Порт прослушивания-->
<Порт>6659</Порт>
<!--Вес-->
<Вейт>1</Вейт>
<!--Функция-->
<ФункНэйм>Вайв.Анно.Плагс.ЛоджикСервис,Вайв.Анно.Плагс.ТрейсСервис</ФункНэйм>
<!--Игнорируемая функция Трейс,Логик-->
<ИгнорФункНэйм></ИгнорФункНэйм>
<!--Время ожидания в миллисекундах-->
<ТаймАут>20000</ТаймАут>
<!--Зарегистрированная цель-->
<Ти Эс Айп="10.112.93.122" Порт="6660"/>
<ИоКДиЭлЭл>
<!-- IOC хранилище, область-->
<Ассембли>Вайв.Анно.Репозитори</Ассембли>
</ИоКДиЭлЭл>
<аппСеттингс>
</аппСеттингс>
</конфигурация>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )