Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Яков Повар «Системы обмена сообщениями на примере MassTransit»

DotNetRu
October 13, 2016

Яков Повар «Системы обмена сообщениями на примере MassTransit»

Разрабатывать большие продукты непросто. Когда сложность задач и нагрузка на приложения растёт с каждым днем, старые подходы и практики иногда уже не спасают. Могут ли системы на базе асинхронного обмена сообщениями быть той серебряной пулей, которая решит все наши проблемы?

В докладе Яков ответит на этот вопрос, а также расскажет, какие подходы лежат в основе таких систем и что выбрать в мире .Net для их реализации. Разговор будет о том, какие задачи помогут решить такие подходы и чего стоит избегать при их использовании.

DotNetRu

October 13, 2016
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. СОДЕРЖАНИЕ 2 MSK .NET MEETUP #3 • ТИПЫ ИНТЕГРАЦИИ •

    ОБМЕН СООБЩЕНИЯМИ • RABBITMQ • MASSTRANSIT: ПРОСТОЕ • MASSTRANSIT: ПОСЛОЖНЕЕ
  2. ИНТЕГРАЦИЯ ПРИЛОЖЕНИЙ 4 MSK .NET MEETUP #3 • РАСПРЕДЕЛЕНИЕ НАГРУЗКИ

    • ОТЛОЖЕННАЯ ОБРАБОТКА • РАЗНЕСЕНИЕ ОТВЕТСТВЕННОСТИ • СУЩЕСТВУЮЩИЕ ПРИЛОЖЕНИЯ
  3. ОБМЕН ФАЙЛАМИ 5 MSK .NET MEETUP #3 A FTP, share

    B File.Read File.Delete File.WriteAllBytes
  4. ОБЩАЯ БАЗА 6 MSK .NET MEETUP #3 Insert into Orders

    … A B SELECT FROM … WHERE isProcessed = FALSE UPDATE… SET IsProcessed = TRUE
  5. RPC/REST 7 MSK .NET MEETUP #3 • WEB-API • WCF

    • ServiceStack • … var client = new HttpClient(); await client.PostAsync(requestUri,content); A B
  6. MESSAGING 9 MSK .NET MEETUP #3 - АСИНХРОННОСТЬ ВЗАИМОДЕЙСТВИЯ -

    ЧЕТКО ОПРЕДЕЛЕННЫЙ КОНТРАКТ - МИНИМИЗИРОВАНА СВЯЗАННОСТЬ (COUPLING) - УСТОЙЧИВОСТЬ К ОШИБКАМ (FAULT TOLERANCE) - СВЕЖЕСТЬ ДАННЫХ (DATA FRESHNESS) КАКИЕ ПЛЮСЫ
  7. НЕМНОГО ИСТОРИИ Первые messaging системы – TIBCO, IBM MQ. RabbitMQ,

    Apache QPID, Kafka, Azure Service Bus NServiceBus MassTransit MSMQ - messaging system от Microsoft Стандартизация – JMS, AMQP, MQTT. 1980 - 1990е 1997e 2000e 2000e – наше время 2007, 2015 – версия 3.0 10 MSK .NET MEETUP #3 2000 - 2010
  8. 12 MSK .NET MEETUP #3 ШИНА Агент шины сервис Агент

    шины сервис Агент шины Asp.net приложение
  9. КОМПОНЕНТЫ 17 MSK .NET MEETUP #3 СООБЩЕНИЯ (КОНТРАКТЫ) – КОМАНДЫ

    И СОБЫТИЯ CreateCustomer, WorkItemCreated IBUS – ШИНА, СОЗДАЕТСЯ ПРИ СТАРТЕ bus.Publish(…) CONSUMERS – ПОЛУЧАЮТ И ОБРАБАТЫВАЮТ СООБЩЕНИЯ IConsumer(ConsumeContext)
  10. RABBITMQ 18 MSK .NET MEETUP #3 exchange bindings queues direct

    fanout topic q1 q2 q3 q4 q5 *.logs critical.*
  11. РАБОТА НАД ОШИБКАМИ RETRY POLICIES 19 MSK .NET MEETUP #3

    • None • Immediate • Intervals • Exponential • Incremental • …
  12. РАБОТА НАД ОШИБКАМИ RETRY POLICIES 20 MSK .NET MEETUP #3

    Bus.Factory.CreateUsingInMemory(cfg => { cfg.ReceiveEndpoint("queue_name", ep => { ep.Handler(async cxt => {}); ep.Handler(async cxt => {}, endpointConfig => { endpointConfig.Retry(Retry.None); }); }); });
  13. РАБОТА НАД ОШИБКАМИ МОЖНО ПОДПИСЫВАТЬСЯ НА ОШИБКИ 21 MSK .NET

    MEETUP #3 public class FaultConsumer : IConsumer<Fault<UpdateCustomerAddress>> { public async Task Consume(ConsumeContext<Fault<UpdateCustomerAddress>> context) { var originalMessage = context.Message.Message; var exceptions = context.Message.Exceptions; //Do something interesting. } }
  14. САГИ LONG RUNNING PROCESS 24 MSK .NET MEETUP #3 ?

    Service 1 Service 2 Service 3 1 2 3
  15. САГИ LONG RUNNING PROCESS • Сага – распределенный процесс с

    общим координатором • Состоят из действий, событий и состояния • Сохраняются в репозитории • Описывается как конечный автомат 25 MSK .NET MEETUP #3
  16. COURIER 29 MSK .NET MEETUP #3 ROUTING SLIP • Карта

    маршрутизации (EIP) • Позволяет динамически определять маршрут обработки сообщения • Routing slip включает с себя маршрут (Itinerary). Itinerary - это список Activity • Этот маршрут вместе с сообщением отправляется по шине • Каждая activity имеет два метода: execute, compensate.
  17. HostFactory.Run(x => { x.Service<TownCrier>(s => { s.ConstructUsing(name=> new TownCrier()); s.WhenStarted(tc

    => tc.Start()); s.WhenStopped(tc => tc.Stop()); }); x.RunAsLocalSystem(); x.SetDescription("Sample Topshelf Host"); x.SetDisplayName("Stuff"); x.SetServiceName("Stuff"); }); TOPSHELF 33 MSK .NET MEETUP #3
  18. ЧТО ЕЩЕ 1. Отложенная отправка (scheduling) через Quartz .Net 2.

    Сообщения как Streams через Reactive Extensions 3. Unit tests через встроенный framework для тестирования 4. Счетчики производительности 5. Turnouts – долгоживущие consumers 6. Request-reply – двухсторонее взаимодействие 7. Greenpipes – pipes & filters 8. Поддержка ioc контейнеров 34 MSK .NET MEETUP #3
  19. В ЗАКЛЮЧЕНИИ 1.  Расширяемость 2.  Просто обеспечить надежность

    3.  Легко масштабировать 4.  Другая модель взаимодействия 5.  В RPC клиент может контролировать что ему нужно 6.  RPC есть практически везде, messaging нет 7.  Не знаем когда работает или нет 8.  Можно комбинировать 35 MSK .NET MEETUP #3 MESSAGING VS RPC
  20. ЧТО ПОЧИТАТЬ 1. Enterprise integration patters (Addison-Wesley, 2004) 2. SOA

    Patterns (manning, 2012) 3. Building microservices (2015, O'Reilly Media) 4. DotNetRocks подкасты (https://www.dotnetrocks.com, 798, 1228, 1242, 1055) 5. http://blog.phatboyg.com, https://lostechies.com/chrispatterson 6. https://github.com/MassTransit/MassTransit 7. https://github.com/jacobpovar/DotNetMsk 8. [email protected] 36 MSK .NET MEETUP #3