Push vs Pull у брокерах повідомлень 💌💌💌
Одна з речей, які дадуть вам краще розуміння роботи брокерів - це моделі доставки повідомлень.
Насправді все доволі просто й логічно, але багато хто не приділяє цьому уваги. Через це потім не до кінця зрозуміло, коли і який брокер варто використовувати.
А від незнання, в вашій голові завжди буде звучати фраза: «беремо Kafka, вона сама лучча» 😁
Push
Брокер сам відправляє повідомлення consumer-у, щойно воно з’явилося. Такий спосіб найбільш простий і очевидний, оскільки дозволяє дуже швидко отримати та обробити повідомлення.
Але є суттєвий мінус - повідомлень може надходити більше, ніж consumer здатен обробити. Виникає backpressure: повідомлення накопичуються швидше, ніж обробляються.
На практиці, в умовному Datadog, ви будете бачити графік де розмір черги лінійно повзе вгору. Зазвичай, всі роблять вигляд, що не бачать його, а потім рандомний розробник отримує по шапці і страждаючи фіксить корінь проблеми.
Pull
Тут система трохи складніша. Consumer сам запитує у брокера наступну порцію повідомлень і таким чином контролює швидкість їх отримання. Це спрощує роботу з backpressure (але тільки частково), оскільки consumer сам вирішує, коли забирати нові повідомлення.
Загалом pull-модель дає consumer-у більше контролю над тим, коли, скільки і як опрацьовувати повідомлення.
Яскравий представник pull-моделі - Kafka.
#microservices #brokers
Одна з речей, які дадуть вам краще розуміння роботи брокерів - це моделі доставки повідомлень.
Насправді все доволі просто й логічно, але багато хто не приділяє цьому уваги. Через це потім не до кінця зрозуміло, коли і який брокер варто використовувати.
А від незнання, в вашій голові завжди буде звучати фраза: «беремо Kafka, вона сама лучча» 😁
Push
Брокер сам відправляє повідомлення consumer-у, щойно воно з’явилося. Такий спосіб найбільш простий і очевидний, оскільки дозволяє дуже швидко отримати та обробити повідомлення.
Але є суттєвий мінус - повідомлень може надходити більше, ніж consumer здатен обробити. Виникає backpressure: повідомлення накопичуються швидше, ніж обробляються.
На практиці, в умовному Datadog, ви будете бачити графік де розмір черги лінійно повзе вгору. Зазвичай, всі роблять вигляд, що не бачать його, а потім рандомний розробник отримує по шапці і страждаючи фіксить корінь проблеми.
Pull
Тут система трохи складніша. Consumer сам запитує у брокера наступну порцію повідомлень і таким чином контролює швидкість їх отримання. Це спрощує роботу з backpressure (але тільки частково), оскільки consumer сам вирішує, коли забирати нові повідомлення.
Загалом pull-модель дає consumer-у більше контролю над тим, коли, скільки і як опрацьовувати повідомлення.
Яскравий представник pull-моделі - Kafka.
#microservices #brokers
👍16🔥3
❤4
Новий розіграш підʼїхав! ☕️
Цього разу, книга по православному JavaScript.
Книга не моя, а Myloslava Martynova за що їй дуууже велике Дякую!
Умови цього разу трошки інші, книгу зможемо відправити тільки по Україні. Для участі в розіграші напишіть js, @нік нейм, наприклад js, @o_kazm.
Розіграємо книгу 22.08 (субота) біля 11:00 по Києву.
Також, лишаю LinkedIn Милослави, вона пише багато про навчання - https://www.linkedin.com/in/myloslava-martynova/
Цього разу, книга по православному JavaScript.
Книга не моя, а Myloslava Martynova за що їй дуууже велике Дякую!
Умови цього разу трошки інші, книгу зможемо відправити тільки по Україні. Для участі в розіграші напишіть js, @нік нейм, наприклад js, @o_kazm.
Розіграємо книгу 22.08 (субота) біля 11:00 по Києву.
Також, лишаю LinkedIn Милослави, вона пише багато про навчання - https://www.linkedin.com/in/myloslava-martynova/
👍25❤10🔥1🤡1
Для чого потрібен Strangler Fig Pattern?
Anonymous Quiz
33%
Щоб поступово мігрувати legacy систему
11%
Щоб автоматично відновлювати сервіс після падіння
14%
Щоб синхронізувати дані між усіма мікросервісами
8%
Щоб обмежувати кількість запитів до API
34%
Не знаю
❤4👏1
Я декілька разів писав про Eventual Consistency, і нещодавно Мамкін Архітектор розписав цікавий кейс, де ця модель може добряче підпалити зад користувачу 😁
Хороший приклад того, як цілком нормальне архітектурне рішення може вилізти дуже неприємним UX.
Посилання на допис - https://t.me/mamkin_architect/676
Хороший приклад того, як цілком нормальне архітектурне рішення може вилізти дуже неприємним UX.
Посилання на допис - https://t.me/mamkin_architect/676
Telegram
Мамкін Архітектор
Для звʼязку пишіть @ska_9000
Канал про айтішечку, автор якого трохи пожив життя і може пояснити за бекенд, веб, мобайл, автоматизацію, клауди або як раніше було краще.
Канал про айтішечку, автор якого трохи пожив життя і може пояснити за бекенд, веб, мобайл, автоматизацію, клауди або як раніше було краще.
❤8
Для чого в Nest.js потрібні Guards?
Anonymous Quiz
74%
Щоб вирішувати, чи дозволено виконувати запит
9%
Щоб перехоплювати й змінювати відповідь API
2%
Щоб обробляти помилки в API
10%
Щоб створювати та контролювати сервіси в Dependency Injection
4%
Не знаю
👍6🔥1😁1🤡1
Devs Hive
Новий розіграш підʼїхав! ☕️ Цього разу, книга по православному JavaScript. Книга не моя, а Myloslava Martynova за що їй дуууже велике Дякую! Умови цього разу трошки інші, книгу зможемо відправити тільки по Україні. Для участі в розіграші напишіть js, @нік…
Книгу розіграно!🍾🔥🔥
Всього прийняло участь 95 людей, а переможець в нас @bulmak_nadiia (напиши пліз поштову інформацію сюди @o_kazm, щоб ми відправили книгу)
Хто не виграв, не розстраюйтесь, розіграші ще будуть і походу багато 😁📕📕
Всього прийняло участь 95 людей, а переможець в нас @bulmak_nadiia (напиши пліз поштову інформацію сюди @o_kazm, щоб ми відправили книгу)
Хто не виграв, не розстраюйтесь, розіграші ще будуть і походу багато 😁📕📕
🍾17🔥5❤2
Для чого потрібен Dependency Injection?
Anonymous Quiz
7%
Щоб автоматично створювати новий потік для кожної залежності
15%
Щоб приховувати реалізацію класу від інших модулів
2%
Щоб кешувати всі створені об’єкти в пам’яті
73%
Щоб об’єкт отримував залежності ззовні
3%
Не знаю
👍7
Мав трохи вільного часу і завайбкодив можливість створювати контент для користувачів.
Якщо хочете написати статтю або поділитися питаннями з інтервʼю — реєструйтеся на сайті та заходьте в «Мої публікації».
Після створення контенту я перевірю, чи це не якийсь скам 😁, і якщо все ок — опублікую.
Особливо цікаві питання по frontend, бо зараз на сайті переважає backend, а по frontend є лише кілька питань.
📎 - https://devs-hive.tech/uk/my-content
Якщо хочете написати статтю або поділитися питаннями з інтервʼю — реєструйтеся на сайті та заходьте в «Мої публікації».
Після створення контенту я перевірю, чи це не якийсь скам 😁, і якщо все ок — опублікую.
Особливо цікаві питання по frontend, бо зараз на сайті переважає backend, а по frontend є лише кілька питань.
📎 - https://devs-hive.tech/uk/my-content
🔥17❤2👍2
Для чого потрібен never у TypeScript?
Anonymous Quiz
9%
Щоб дозволити будь-який тип без перевірки
4%
Щоб зробити значення необов’язковим
5%
Щоб автоматично перетворити тип на undefined
6%
Не знаю
76%
Щоб позначити значення, яке ніколи не може існувати
🔥6👎3
Новий інструмент для Nest.js - Observe 🔭🔭🔭
Пару днів тому відбувся реліз Observe — це інструмент для швидкого налаштування Observability без зайвого гемороя.
І, як на мене, це доволі крутий інструмент. Звісно, якщо на проєкті є розробник, який вміє в Observability і може швидко накидати сетап з умовним OpenTelemetry, прикрутивши туди пару дашбордів, то Observe там не потрібен.
Але в реальності такої людини може не бути, бо в команді всі джуни/мідли, які вже побудували потужне Observability, використовуючи самий надійний інструмент — console.log. Або це маленький проєкт, де взагалі не потрібно заморочуватися, і Observe вирішить всі болі продукту.
📎 - https://www.observe.nestjs.com/
Пару днів тому відбувся реліз Observe — це інструмент для швидкого налаштування Observability без зайвого гемороя.
І, як на мене, це доволі крутий інструмент. Звісно, якщо на проєкті є розробник, який вміє в Observability і може швидко накидати сетап з умовним OpenTelemetry, прикрутивши туди пару дашбордів, то Observe там не потрібен.
Але в реальності такої людини може не бути, бо в команді всі джуни/мідли, які вже побудували потужне Observability, використовуючи самий надійний інструмент — console.log. Або це маленький проєкт, де взагалі не потрібно заморочуватися, і Observe вирішить всі болі продукту.
📎 - https://www.observe.nestjs.com/
NestJS Observe | Zero-Config Observability for NestJS
Auto-instrumented observability for NestJS applications — tracing, error monitoring, logs and alerts, set up in minutes.
❤9😁3🔥2👍1🤡1
Халява! 🔥🔥🔥
Натрапив на допис в LinkedIn про те, що Redis роздає безкоштовні сертифікації. До сьогодні я навіть не знав, що можна бути Redis Certified.
Як на мене, Redis — це один із поважних інструментів інженера, розуміючи який, можна вирішити багато нетривіальних проблем.
Навіщо воно вам?
Враховуючи те, як шатає ІТ ринок, будь-яка "бумажка" від Big Tech компанії може дати плюс у CV і на інтервʼю. А якщо ви раніше не працювали з Redis, то під час підготовки до сертифікації розберетеся з основами і не тільки.
З податками мені нарахували 218 USD, але якщо скористатися купоном з сайту, вони перетворюються на 0. Тому, звісно я не втримався і забронював Associate Developer. Навіть, якщо ви дуже зайняті, можете забукати дату через пару місяців, а якщо і далі не буде часу - перенести 😁
Забукати сертифікацію можна тут - https://redis.io/certifications/
Натрапив на допис в LinkedIn про те, що Redis роздає безкоштовні сертифікації. До сьогодні я навіть не знав, що можна бути Redis Certified.
Як на мене, Redis — це один із поважних інструментів інженера, розуміючи який, можна вирішити багато нетривіальних проблем.
Навіщо воно вам?
Враховуючи те, як шатає ІТ ринок, будь-яка "бумажка" від Big Tech компанії може дати плюс у CV і на інтервʼю. А якщо ви раніше не працювали з Redis, то під час підготовки до сертифікації розберетеся з основами і не тільки.
З податками мені нарахували 218 USD, але якщо скористатися купоном з сайту, вони перетворюються на 0. Тому, звісно я не втримався і забронював Associate Developer. Навіть, якщо ви дуже зайняті, можете забукати дату через пару місяців, а якщо і далі не буде часу - перенести 😁
Забукати сертифікацію можна тут - https://redis.io/certifications/
Redis
Redis Associate Developer certification | Redis
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.
👍19🔥8
Для чого в Redis потрібен SET ... NX?
Anonymous Quiz
49%
Щоб записати значення лише якщо ключ ще не існує
13%
Щоб оновити тільки вже існуючий ключ
10%
Щоб автоматично видалити ключ після читання
1%
Щоб продублювати значення
26%
Не знаю
Яку проблему допомагає вирішити API Gateway?
Anonymous Quiz
15%
Забезпечити спільну транзакцію між усіма сервісами
4%
Автоматично реплікувати дані між мікросервісами
5%
Замінити service discovery у будь-якій архітектурі
69%
Приховати від клієнта структуру та адреси внутрішніх сервісів
7%
Не знаю
Хочу розповісти про цікавий проєкт - pg-boss 😱😱😱
Це job queue, яка працює прямо поверх PostgreSQL. Тобто якщо у вас уже є PostgreSQL і потрібно реалізувати прості background jobs, то не обов’язково окремо тягнути ще й брокер.
Виглядає цікаво, але кому це треба?
Як на мене, набагато простіше й надійніше взяти Serverless брокер на кшталт SQS чи GCP Pub/Sub, ніж докручувати цю приблуду до бази даних. Вони не потребують окремих інстансів, як наприклад RabbitMQ, і не додають зайвої складності у вашу систему.
Хто хоче погратись, ось посилання на проєкт - https://github.com/timgit/pg-boss
Це job queue, яка працює прямо поверх PostgreSQL. Тобто якщо у вас уже є PostgreSQL і потрібно реалізувати прості background jobs, то не обов’язково окремо тягнути ще й брокер.
Виглядає цікаво, але кому це треба?
Як на мене, набагато простіше й надійніше взяти Serverless брокер на кшталт SQS чи GCP Pub/Sub, ніж докручувати цю приблуду до бази даних. Вони не потребують окремих інстансів, як наприклад RabbitMQ, і не додають зайвої складності у вашу систему.
Хто хоче погратись, ось посилання на проєкт - https://github.com/timgit/pg-boss
GitHub
GitHub - timgit/pg-boss: Queueing jobs in Postgres from Node.js like a boss
Queueing jobs in Postgres from Node.js like a boss - timgit/pg-boss
👍5
Для чого потрібен Service Discovery в мікросервісах?
Anonymous Quiz
5%
Щоб зберігати всі конфігурації в одній базі даних
3%
Щоб автоматично повторювати невдалі запити
7%
Щоб синхронізувати дані між сервісами
12%
Не знаю
73%
Щоб сервіси могли знаходити актуальні адреси інших сервісів
❤1
Реліз Node.js 26.8.0 (Current)🔥🔥🔥
З важливого:
- Нативна підтримка для роботи з ZIP файлами. Поки в early development, але це дуже важливий крок для Node.js
- TracingChannel перейшов в Stable. Походу Observability стане трошки кращим
- Покращення в SQLite
📎 - https://nodejs.org/en/blog/release/v26.8.0
З важливого:
- Нативна підтримка для роботи з ZIP файлами. Поки в early development, але це дуже важливий крок для Node.js
- TracingChannel перейшов в Stable. Походу Observability стане трошки кращим
- Покращення в SQLite
📎 - https://nodejs.org/en/blog/release/v26.8.0
nodejs.org
Node.js — Node.js 26.8.0 (Current)
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.
🔥17❤1
Нове відео на каналі ☕️☕️☕️
Розповів про один із найпопулярніших патернів у мікросервісах — Idempotency Key.
Він не тільки часто використовується на практиці, а й є одним із типових питань на технічних інтервʼю та кейсів, які варто вміти розбирати на System Design інтервʼю.
📎 - https://www.youtube.com/watch?v=fDnPW03Ux3Q
Розповів про один із найпопулярніших патернів у мікросервісах — Idempotency Key.
Він не тільки часто використовується на практиці, а й є одним із типових питань на технічних інтервʼю та кейсів, які варто вміти розбирати на System Design інтервʼю.
📎 - https://www.youtube.com/watch?v=fDnPW03Ux3Q
YouTube
Idempotency Key — просте рішення великих проблем
В цьому відео розберемо один з найбільш популярних патернів в мікросервісній архітектурі - Idempotency Key. Розберемо, що таке ідемпотентність і яку проблему вирішує сам патерн
Telegram - тут пишу про інженерний розвиток
https://t.me/devshive
0:00 - Intro…
Telegram - тут пишу про інженерний розвиток
https://t.me/devshive
0:00 - Intro…
❤6👍6🔥2
Для чого потрібен Retry Pattern у мікросервісах?
Anonymous Quiz
1%
Щоб ізолювати ресурси між сервісами
3%
Щоб зупинити виклики після першої помилки
2%
Щоб гарантувати однакові дані в усіх сервісах
91%
Щоб повторити запит після тимчасової помилки
3%
Не знаю
👍5🔥1