SlideShare a Scribd company logo
1 of 32
Download to read offline
Трошки контексту
● Модуль, що інтегрується у загальну систему управління та дизайну
кампаній
● Займається саме валідацією,шаблонізацією, відправкою, обробкою
відказів
● Може відправляти на різні канали : email / sms / mms / push
● Може бути розгорнутий для окремих клієнтів в клауді або on prem.
● Може гнучко горизонтально масштабуватися
Загальна архітектура підсистеми
send request
Деплоймент
Концептуальний дизайн потоків даних
C count W count
dynamic
capacity N
Дизайн воркера
Основні дизайн-рішення
● Зберігання оффсетів з Kafka у зовнішньому сховищі
● Зупинка партішенів коли система перевантажена, щоб Kafka не
від’єднала консьюмерів
● Використання баундед-каналів як внутрішньої системи регулювання
доступності, обміну месседжами
● Різні консьюмер групи можуть обробляти одні й тиж самі меседжі :
аналітика/статистика, відправка, повтори та інше
● Максимально гнучкість у конфігуруванні кожного сервісу
API
API для нових мікросервісів (.NET 7)
● Minimal API vs Controllers
● Minimal API - максимальна гнучкість при написанні коду, краща
декомпозиція - збираємо все що відноситься до ендпойнту в одному
місці.
● Є деякі обмеження, порівнюючі з попередніми підходами
Спроба 1: Завантаження файлів в Minimal API
Спроба 1: Завантаження файлів в Minimal API
//NotSupportedException: IFromFormMetadata is
only supported for parameters of type
IFormFileCollection and IFormFile.
Спроба 2: Завантаження файлів в Minimal API
Спроба 2: Завантаження файлів в Minimal API
//415 unsupported media type
Спроба 3: Завантаження файлів в Minimal API
Спроба 3: Завантаження файлів в Minimal API
//Runtime error: InvalidOperationException: An action
cannot use both form and JSON body parameters.
Спроба 4: Завантаження файлів в Minimal API
Спроба 4: Завантаження файлів в Minimal API
System.NotSupportedException: IFromFormMetadata is only
supported for parameters of type IFormFileCollection and
IFormFile.
Спроба 5: Завантаження файлів в Minimal API
Спроба 5: Завантаження файлів в Minimal API
- Код зв’язування моделі здаходиться прямо в ендпойнту
- Swashbuckle не генерує поле в OpenAPI (і як наслідок swagger UI)
Спроба 6: Завантаження файлів в Minimal API
Більш Generic-рішення ?
Спроба 5: Завантаження файлів в Minimal API (1)
Спроба 5: Завантаження файлів в Minimal API (2)
Generic OpenAPI Filter
Custom Model Binding
gRPC vs HTTP
Приклад конфігурування gRPC До яких методів апплаїться
конфігурація
Політики повторів
Стартова затримка: 0..InitialBackOff
Трешхолд затримки
Мультиплікатор
На які помилки автоматично спрацьовує
ретрай
Налаштування транспортного
рівня сокетів
Створення каналу
Приклад стрімінгу бінарних даних
Proto3
Приклад стрімінгу бінарних даних
Server
Client
Pros & Cons
gRPC
✅ Більш гнучкий generic-підхід
✅ Має вбудовану систему повторних
спроб
✅ Може бути Bi-Directional
✅ Має платформо-незалежні контракти
✅ Підтримується Postman’ом (beta).
❗️ Не підтримується APIM
❗️ Більше інфраструктурного коду
HTTP
✅ Відомий всім стандарт, меньше поріг
входу
✅ Мінімум інфраструктурного коду
✅ Має платформо-незалежні контракти
✅ Підтримується навіть чайником
❗️ При роз’єднанні потрібно
організовувати повторні спроби
❗️ Http/2 - підтримує duplex, HttpClient в
його .NET реалізації - ні.
Мої висновки
Коли використання gRPC невиправдане
❌ Для підвищення швидкості всередині периметра розподіленої системи
▶️ Можно використовувати protobuf серіалізацію для HTTP(rest) або SignalR
▶️ У випадку хайлоаду можно використовувати асинхронну комунікацію через месседжинг
або стрімінг
Мої висновки
Коли використання gRPC виправдане
✅ Коли є необхідність об’єднати багато сервісів на різних технологіях та немає бажання
переписувати моделі
✅ Коли необхідно організувати одно або дво-направлений стрімінг.
✅ Коли необхідно налагодити клієнт-серверну взаємодію в умовах поганого зв’язку
Рішення
Імплементувати HTTP та gRPC ендпойнти для наших клієнтів одночасно
Дякую за увагу !
Підключайтесь до мого .NET ком’юніті у Telegram

More Related Content

Similar to "Key considerations in implementing a distributed message-sending system using cutting-edge approaches in .NET", Vladyslav Furdak

Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов АндрійOleg Nazarevych
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii NasinnykFwdays
 
5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPCПупена Александр
 
Web service lecture
Web service lectureWeb service lecture
Web service lectureeleksdev
 
Розробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапиРозробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапиОлексій Артеменко
 
Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application frameworkQuintagroup
 
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)Lviv Startup Club
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro OverviewKiev ALT.NET
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJSFestUA
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsPavlo Iuriichuk
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoGlobalLogic Ukraine
 
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
"Request Lifecycle at Prom.ua", Vitaliy KharytonskiyFwdays
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQDakiry
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 

Similar to "Key considerations in implementing a distributed message-sending system using cutting-edge approaches in .NET", Vladyslav Furdak (20)

Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов Андрій
 
"Rethinking Continuous Delivery", Andrii Nasinnyk
"Rethinking Continuous Delivery",  Andrii Nasinnyk"Rethinking Continuous Delivery",  Andrii Nasinnyk
"Rethinking Continuous Delivery", Andrii Nasinnyk
 
5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC5 Підсистема введення/виведення. OPC
5 Підсистема введення/виведення. OPC
 
Web service lecture
Web service lectureWeb service lecture
Web service lecture
 
Crawler.pptx
Crawler.pptxCrawler.pptx
Crawler.pptx
 
Wcf module 3.1
Wcf module 3.1Wcf module 3.1
Wcf module 3.1
 
Розробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапиРозробка веб-сайту. Основні етапи
Розробка веб-сайту. Основні етапи
 
Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application framework
 
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)
Igor Dumbur: Кейс: встановлення базових планів в Enterprise Level проекті (UA)
 
Caliburn Micro Overview
Caliburn Micro OverviewCaliburn Micro Overview
Caliburn Micro Overview
 
ASP.Net basics
ASP.Net basics ASP.Net basics
ASP.Net basics
 
вашенюк
вашенюквашенюк
вашенюк
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
"Request Lifecycle at Prom.ua", Vitaliy Kharytonskiy
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQ
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
Opc
OpcOpc
Opc
 
Лекція №3
Лекція №3Лекція №3
Лекція №3
 

More from Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy TytenkoFwdays
 

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko"Leadership, Soft Skills, and Personality Types for IT teams",  Sergiy Tytenko
"Leadership, Soft Skills, and Personality Types for IT teams", Sergiy Tytenko
 

"Key considerations in implementing a distributed message-sending system using cutting-edge approaches in .NET", Vladyslav Furdak

  • 1.
  • 2. Трошки контексту ● Модуль, що інтегрується у загальну систему управління та дизайну кампаній ● Займається саме валідацією,шаблонізацією, відправкою, обробкою відказів ● Може відправляти на різні канали : email / sms / mms / push ● Може бути розгорнутий для окремих клієнтів в клауді або on prem. ● Може гнучко горизонтально масштабуватися
  • 5. Концептуальний дизайн потоків даних C count W count dynamic capacity N
  • 7. Основні дизайн-рішення ● Зберігання оффсетів з Kafka у зовнішньому сховищі ● Зупинка партішенів коли система перевантажена, щоб Kafka не від’єднала консьюмерів ● Використання баундед-каналів як внутрішньої системи регулювання доступності, обміну месседжами ● Різні консьюмер групи можуть обробляти одні й тиж самі меседжі : аналітика/статистика, відправка, повтори та інше ● Максимально гнучкість у конфігуруванні кожного сервісу
  • 8. API
  • 9. API для нових мікросервісів (.NET 7) ● Minimal API vs Controllers ● Minimal API - максимальна гнучкість при написанні коду, краща декомпозиція - збираємо все що відноситься до ендпойнту в одному місці. ● Є деякі обмеження, порівнюючі з попередніми підходами
  • 10. Спроба 1: Завантаження файлів в Minimal API
  • 11. Спроба 1: Завантаження файлів в Minimal API //NotSupportedException: IFromFormMetadata is only supported for parameters of type IFormFileCollection and IFormFile.
  • 12. Спроба 2: Завантаження файлів в Minimal API
  • 13. Спроба 2: Завантаження файлів в Minimal API //415 unsupported media type
  • 14. Спроба 3: Завантаження файлів в Minimal API
  • 15. Спроба 3: Завантаження файлів в Minimal API //Runtime error: InvalidOperationException: An action cannot use both form and JSON body parameters.
  • 16. Спроба 4: Завантаження файлів в Minimal API
  • 17. Спроба 4: Завантаження файлів в Minimal API System.NotSupportedException: IFromFormMetadata is only supported for parameters of type IFormFileCollection and IFormFile.
  • 18. Спроба 5: Завантаження файлів в Minimal API
  • 19. Спроба 5: Завантаження файлів в Minimal API - Код зв’язування моделі здаходиться прямо в ендпойнту - Swashbuckle не генерує поле в OpenAPI (і як наслідок swagger UI)
  • 20. Спроба 6: Завантаження файлів в Minimal API
  • 22. Спроба 5: Завантаження файлів в Minimal API (1)
  • 23. Спроба 5: Завантаження файлів в Minimal API (2) Generic OpenAPI Filter Custom Model Binding
  • 25. Приклад конфігурування gRPC До яких методів апплаїться конфігурація Політики повторів Стартова затримка: 0..InitialBackOff Трешхолд затримки Мультиплікатор На які помилки автоматично спрацьовує ретрай Налаштування транспортного рівня сокетів Створення каналу
  • 28. Pros & Cons gRPC ✅ Більш гнучкий generic-підхід ✅ Має вбудовану систему повторних спроб ✅ Може бути Bi-Directional ✅ Має платформо-незалежні контракти ✅ Підтримується Postman’ом (beta). ❗️ Не підтримується APIM ❗️ Більше інфраструктурного коду HTTP ✅ Відомий всім стандарт, меньше поріг входу ✅ Мінімум інфраструктурного коду ✅ Має платформо-незалежні контракти ✅ Підтримується навіть чайником ❗️ При роз’єднанні потрібно організовувати повторні спроби ❗️ Http/2 - підтримує duplex, HttpClient в його .NET реалізації - ні.
  • 29. Мої висновки Коли використання gRPC невиправдане ❌ Для підвищення швидкості всередині периметра розподіленої системи ▶️ Можно використовувати protobuf серіалізацію для HTTP(rest) або SignalR ▶️ У випадку хайлоаду можно використовувати асинхронну комунікацію через месседжинг або стрімінг
  • 30. Мої висновки Коли використання gRPC виправдане ✅ Коли є необхідність об’єднати багато сервісів на різних технологіях та немає бажання переписувати моделі ✅ Коли необхідно організувати одно або дво-направлений стрімінг. ✅ Коли необхідно налагодити клієнт-серверну взаємодію в умовах поганого зв’язку
  • 31. Рішення Імплементувати HTTP та gRPC ендпойнти для наших клієнтів одночасно
  • 32. Дякую за увагу ! Підключайтесь до мого .NET ком’юніті у Telegram