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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for DotNetRu DotNetRu
October 13, 2016

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

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

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

Avatar for DotNetRu

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