Хто такий HTTP/3?
Про HTTP/3 поки пишуть не так багато, тому є сенс коротко розібрати, які проблеми вирішує нова версія протоколу.
Найперше, що варто розуміти: HTTP/3 працює поверх QUIC/UDP, а не TCP, як HTTP/1.1 та HTTP/2.
QUIC підтримує незалежні потоки даних, кожен із яких має власний порядок доставки. Завдяки цьому HTTP/3 вирішує одну з типових проблем TCP — head-of-line blocking.
Наприклад, браузер одночасно завантажує зображення, CSS і JavaScript. Якщо загубився пакет із частиною зображення, браузер чекатиме повторної доставки даних лише цього потоку. Потоки з CSS і JavaScript зможуть продовжити роботу.
Можна подумати, що в HTTP/2 це працює так само, бо в статтях на Medium (від наших братів з Індії) пишуть про паралельне завантаження і потоки. Але не все так просто.
Усі HTTP/2-потоки передаються через одне TCP-з’єднання і якщо один TCP-пакет загубився, наступні отримані дані не будуть передані браузеру, доки втрачений пакет не надійде повторно.
Тому в HTTP/2 втрата одного пакета може тимчасово заблокувати всі логічні потоки, а в HTTP/3 — лише той потік, до якого належать втрачені дані.
З опису вище, можна прикинути де він буде корисний:
- Мобільні застосунки де потрібно враховувати поганий інтернет.
- Медіасервіси.
- Сайти з великою кількістю ресурсів.
Шо там в Node.js?
В нашому болоті активно працюють над підтримкою QUIC тому при бажанні можна погратись увімкнувши його - https://nodejs.org/api/cli.html#--experimental-quic
Про HTTP/3 поки пишуть не так багато, тому є сенс коротко розібрати, які проблеми вирішує нова версія протоколу.
Найперше, що варто розуміти: HTTP/3 працює поверх QUIC/UDP, а не TCP, як HTTP/1.1 та HTTP/2.
QUIC підтримує незалежні потоки даних, кожен із яких має власний порядок доставки. Завдяки цьому HTTP/3 вирішує одну з типових проблем TCP — head-of-line blocking.
Наприклад, браузер одночасно завантажує зображення, CSS і JavaScript. Якщо загубився пакет із частиною зображення, браузер чекатиме повторної доставки даних лише цього потоку. Потоки з CSS і JavaScript зможуть продовжити роботу.
Можна подумати, що в HTTP/2 це працює так само, бо в статтях на Medium (від наших братів з Індії) пишуть про паралельне завантаження і потоки. Але не все так просто.
Усі HTTP/2-потоки передаються через одне TCP-з’єднання і якщо один TCP-пакет загубився, наступні отримані дані не будуть передані браузеру, доки втрачений пакет не надійде повторно.
Тому в HTTP/2 втрата одного пакета може тимчасово заблокувати всі логічні потоки, а в HTTP/3 — лише той потік, до якого належать втрачені дані.
З опису вище, можна прикинути де він буде корисний:
- Мобільні застосунки де потрібно враховувати поганий інтернет.
- Медіасервіси.
- Сайти з великою кількістю ресурсів.
Шо там в Node.js?
В нашому болоті активно працюють над підтримкою QUIC тому при бажанні можна погратись увімкнувши його - https://nodejs.org/api/cli.html#--experimental-quic
👍14❤2
Яка стратегія масштабування розподіляє дані між кількома екземплярами бази даних на основі вибраної колонки?
Anonymous Quiz
36%
Horizontal partitioning
8%
Read replicas
50%
Horizontal sharding
6%
Connection pool
🔥8
Ранкова зарядка😁
Який патерн допомагає уникнути повторної обробки одного й того самого повідомлення, якщо брокер доставив його кілька разів?
Який патерн допомагає уникнути повторної обробки одного й того самого повідомлення, якщо брокер доставив його кілька разів?
Anonymous Quiz
13%
Transactional Outbox
61%
Idempotent Consumer
16%
Dead Letter Queue
9%
Competing Consumers
Transactional Outbox
Хочу розповісти про один з реально корисних патернів, який спрощує життя при роботі з legacy системами.
Сучасне legacy - це не завжди стара система. AI вніс свої поправки в розуміння legacy і тепер це може бути відносно новий продукт, який важко розвивати і мінорні зміни можуть призвести до каскадного падіння всієї системи.
Які є варіанти роботи з такими системами?
1️⃣ Переписати з нуля 😁😁
Найочевидніше, що може прийти в голову - знести все і зробити по нормальному.
Але на практиці таке не працює через велику кількість нюансів і бізнес-аспектів, які не видно на поверхні тому зазвичай або виходить така сама какуля або проєкт згортається і приймається рішення розвивати існуючу систему.
2️⃣ Залишити як є і найняти більше розробників
Це робочий варіант, який часто використовують. Але тут є важливий нюанс - чим складніша система тим дорожче будуть коштувати розробники. При цьому технічний борг продовжуватиме рости і на довгостроковому горизонті вам все одно потрібно буде щось робити з системою.
3️⃣ Залишити legacy і паралельно створювати нову систему
Найбільш робочий варіант, суть якого полягає в тому щоб паралельно з legacy-системою розробляти нову систему, яка буде сумісна з поточною і поступово її замінить.
Тут багато підходів, патернів і набитих шишок, про які я буду писати в Telegram. Один з них - це Transactional Outbox.
Суть його в тому, щоб синхронізувати legacy і нову систему за допомогою подій, не ризикуючи втратити дані в момент їх передачі. Для цього буде використовуватися окрема таблиця (Outbox) де ми будемо зберігати інформацію про зміни в базі даних
Окрім цього, в нас буде окремий worker, який буде читати outbox таблицю і передавати події в брокер, який відправить їх в нову систему для синхронізації даних.
У спрощеному вигляді це працює так:
Я декілька разів обмазувався legacy, як у ролі розробника так і на більш кошерних позиціях і можу сказати, що це реально робочий підхід. Зазвичай, його реалізація буде різною в кожному конкретному кейсі, але суть залишається та сама.
Детальніше читай тут.
#microservices
Хочу розповісти про один з реально корисних патернів, який спрощує життя при роботі з legacy системами.
Сучасне legacy - це не завжди стара система. AI вніс свої поправки в розуміння legacy і тепер це може бути відносно новий продукт, який важко розвивати і мінорні зміни можуть призвести до каскадного падіння всієї системи.
Які є варіанти роботи з такими системами?
1️⃣ Переписати з нуля 😁😁
Найочевидніше, що може прийти в голову - знести все і зробити по нормальному.
Але на практиці таке не працює через велику кількість нюансів і бізнес-аспектів, які не видно на поверхні тому зазвичай або виходить така сама какуля або проєкт згортається і приймається рішення розвивати існуючу систему.
2️⃣ Залишити як є і найняти більше розробників
Це робочий варіант, який часто використовують. Але тут є важливий нюанс - чим складніша система тим дорожче будуть коштувати розробники. При цьому технічний борг продовжуватиме рости і на довгостроковому горизонті вам все одно потрібно буде щось робити з системою.
3️⃣ Залишити legacy і паралельно створювати нову систему
Найбільш робочий варіант, суть якого полягає в тому щоб паралельно з legacy-системою розробляти нову систему, яка буде сумісна з поточною і поступово її замінить.
Тут багато підходів, патернів і набитих шишок, про які я буду писати в Telegram. Один з них - це Transactional Outbox.
Суть його в тому, щоб синхронізувати legacy і нову систему за допомогою подій, не ризикуючи втратити дані в момент їх передачі. Для цього буде використовуватися окрема таблиця (Outbox) де ми будемо зберігати інформацію про зміни в базі даних
Окрім цього, в нас буде окремий worker, який буде читати outbox таблицю і передавати події в брокер, який відправить їх в нову систему для синхронізації даних.
У спрощеному вигляді це працює так:
Legacy → таблиця Outbox → брокер → нова система.Я декілька разів обмазувався legacy, як у ролі розробника так і на більш кошерних позиціях і можу сказати, що це реально робочий підхід. Зазвичай, його реалізація буде різною в кожному конкретному кейсі, але суть залишається та сама.
Детальніше читай тут.
#microservices
microservices.io
Microservices Pattern: Pattern: Transactional outbox
First, write the message/event to a database OUTBOX table as part of the transaction that updates business objects, and then publish it to a message broker.
❤8👍6
Трохи забив сайт через брак часу 😐🚬
Але бачу, що за останній місяць там зареєструвалося доволі багато людей, тому планую потроху його розвивати.
На сайті вже зібрано чимало запитань, які трапляються на співбесідах як в українських, так і в європейських компаніях. Тож інформація буде особливо корисною для тих, хто зараз шукає роботу.
📎 - https://devs-hive.tech/interview-qa
Але бачу, що за останній місяць там зареєструвалося доволі багато людей, тому планую потроху його розвивати.
На сайті вже зібрано чимало запитань, які трапляються на співбесідах як в українських, так і в європейських компаніях. Тож інформація буде особливо корисною для тих, хто зараз шукає роботу.
📎 - https://devs-hive.tech/interview-qa
Devs Hive
In-depth Interview Question Breakdowns | Devs Hive
A collection of questions and answers for technical interview preparation. Includes JavaScript/Node.js, System Design, databases, and cloud technologies.
❤18👍2
Що означає висока селективність колонки в контексті індексів?
Anonymous Quiz
12%
Більшість рядків у колонці мають однакове значення
46%
Колонка містить багато унікальних значень відносно загальної кількості рядків
2%
Колонка займає мало місця на диску
39%
Колонка часто використовується в SELECT запитах
👍7
Що з наведеного можна використовувати для кешування результату SQL запиту?
Anonymous Quiz
25%
VIEW
8%
TRIGGER
41%
MATERIALIZED VIEW
26%
React.memo()
Code Review Graph (CRG)🔥🔥🔥
Натрапив на цікавий інструмент для code review, який будує структурний граф кодової бази і дає доступ AI через MCP.
Можна сказати, що це такий собі Obsidian для code review де описуються звʼязки між файлами, функціями, класами і так далі.
Скоріше за все для стартапчиків буде overhead, але для legacy кріпто казіно - це може бути дуже крутим інструментом.
Детально описувати не буду, бо вони заморочились і створили дуже гарний і зрозумілий README де все гарно розписано - https://github.com/tirth8205/code-review-graph
Натрапив на цікавий інструмент для code review, який будує структурний граф кодової бази і дає доступ AI через MCP.
Можна сказати, що це такий собі Obsidian для code review де описуються звʼязки між файлами, функціями, класами і так далі.
Скоріше за все для стартапчиків буде overhead, але для legacy кріпто казіно - це може бути дуже крутим інструментом.
Детально описувати не буду, бо вони заморочились і створили дуже гарний і зрозумілий README де все гарно розписано - https://github.com/tirth8205/code-review-graph
GitHub
GitHub - tirth8205/code-review-graph: Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase…
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-rep...
❤14👍1
Для чого використовують Dead Letter Queue (DLQ)?
Anonymous Quiz
8%
Збереження завершених задач для аналітики і аналізу
82%
Ізоляція і повторне опрацювання задач, які знову і знову завершуються помилкою
2%
Кешування даних
8%
Балансування навантаження між воркерами
👍2🔥1
Що буде відбуватись з SQL запитом?
Anonymous Quiz
8%
Індекс буде ефективним, оскільки запит використовує дві його колонки
8%
Query planner автоматично змінить порядок колонок в індексі
67%
Індекс буде використовуватися не ефективно через відсутність умови за першою колонкою
17%
Порядок колонок не має значення, якщо індекс містить усі потрібні поля
Нове відео на каналі🍾
Детально розповів про одну з найбільш популярних сертифікацій по AI - AWS Certified AI Practitioner.
Розповів про те кому підходить ця сертифікація, основні теми і процес проходження
📎 - https://youtu.be/1nHIhpUBLto?si=r9Gw9R0Z1s1nzOP2
Детально розповів про одну з найбільш популярних сертифікацій по AI - AWS Certified AI Practitioner.
Розповів про те кому підходить ця сертифікація, основні теми і процес проходження
📎 - https://youtu.be/1nHIhpUBLto?si=r9Gw9R0Z1s1nzOP2
YouTube
Найкраща сертифікація для Junior - AWS Certified AI Practitioner
В цьому відео я розповім про популярну AI сертифікацію - AWS Certified AI Practitioner.
Підготовка до технічного інтервʼю - https://devs-hive.tech/
Linkedin - тут пишу багато цікавого про ІТ
https://www.linkedin.com/in/oleksandr-kazmirchuk-0aba41330/
Telegram…
Підготовка до технічного інтервʼю - https://devs-hive.tech/
Linkedin - тут пишу багато цікавого про ІТ
https://www.linkedin.com/in/oleksandr-kazmirchuk-0aba41330/
Telegram…
👍11
Ото в мене і підгоріло😅
Заходиш в інтернет, кожен пише про свій SaaS AI IPO Startup. Але що на практиці?
Всі ці Ілон Маски зосередились на туду лістах, фінансових апках, фітнес трекерах і тд. І ніхто не зробив простий Giveaway сервіс, щоб розіграти якісь речі👹
Так от, в мене є декілька хороших книжок, які я вже читав і хочу розіграти серед нашої спільноти.
Сьогодні, розіграємо Microservices patterns (Chris Richardson), на рос мові.
Умови
Все ізі, в коментарях під цим дописом напишіть microservices, ваш нік в тг. Наприклад microservices, @o_kazm
Ну і звісно треба бути підписаним на TG😁
Якщо ви в ЄС, то книгу отримаєте швидко, а якщо в Україні - доведеться почекати, так як укрпошта працює супер повільно (ну і я сподіваюсь, що на митниці її не завернуть).
Переможця визначимо 30.07.2026
Заходиш в інтернет, кожен пише про свій SaaS AI IPO Startup. Але що на практиці?
Всі ці Ілон Маски зосередились на туду лістах, фінансових апках, фітнес трекерах і тд. І ніхто не зробив простий Giveaway сервіс, щоб розіграти якісь речі👹
Так от, в мене є декілька хороших книжок, які я вже читав і хочу розіграти серед нашої спільноти.
Сьогодні, розіграємо Microservices patterns (Chris Richardson), на рос мові.
Умови
Все ізі, в коментарях під цим дописом напишіть microservices, ваш нік в тг. Наприклад microservices, @o_kazm
Ну і звісно треба бути підписаним на TG😁
Якщо ви в ЄС, то книгу отримаєте швидко, а якщо в Україні - доведеться почекати, так як укрпошта працює супер повільно (ну і я сподіваюсь, що на митниці її не завернуть).
Переможця визначимо 30.07.2026
🔥9🥰2🤡1
Покращення там де ніхто не чекав🔥
В Node.js почали працювати над новим UI для документації і превʼю вже доступно - https://beta.docs.nodejs.org/
Як на мене виглядає красиво. Єдине, що в екосистемі JS ніхто особливо доку не читає тому я навіть не знаю для кого це😁
В Node.js почали працювати над новим UI для документації і превʼю вже доступно - https://beta.docs.nodejs.org/
Як на мене виглядає красиво. Єдине, що в екосистемі JS ніхто особливо доку не читає тому я навіть не знаю для кого це😁
beta.docs.nodejs.org
Index | Node.js 26.7.0 Documentation
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.
😁13👍4
Ранкова розминка☕️
Що відбувається під час виконання SELECT ... FOR UPDATE всередині транзакції?
Що відбувається під час виконання SELECT ... FOR UPDATE всередині транзакції?
Anonymous Quiz
3%
Вибрані рядки видаляються після завершення транзакції
74%
На вибрані рядки встановлюється блокування для запобігання їх конкурентній зміні
14%
Результат запиту зберігається в кеші до завершення транзакції
9%
Блокується вся таблиця для читання та запису
❤9👍1
Яким чином відбувається блокування перезапису змін, зроблених іншою транзакцією при Optimistic locking?
Anonymous Quiz
21%
Блокує рядок одразу після виконання SELECT
11%
Блокує всю таблицю на час виконання транзакції
9%
Автоматично об’єднує зміни з двох конкурентних транзакцій
58%
Перевіряє версію запису і скасовує операцію, якщо запис уже був змінений
👍4❤1
Це сталось, JavaScript нарешті навчився додавати числа😱😱😱
Отак подивишся і скоро вже не буде як пожартувати над JS з їхніми оновленнями
Детальніше тут
Отак подивишся і скоро вже не буде як пожартувати над JS з їхніми оновленнями
Детальніше тут
MDN Web Docs
Math.sumPrecise() - JavaScript | MDN
The Math.sumPrecise() static method takes an iterable of numbers and returns the sum of them. It is more precise than summing them up in a loop, because it avoids floating point precision loss in intermediate results.
🔥15😱2
Яка різниця між null та undefined у JavaScript?
Anonymous Quiz
1%
null використовується лише для масивів, а undefined - для обʼєктів
0%
null і undefined повністю однакові
96%
null - значення відсутнє, undefined - значення не задане
3%
undefined потрібно задавати вручну, а null JavaScript встановлює автоматично
🏆7
Яке твердження про unknown у TypeScript правильне?
Anonymous Quiz
6%
unknown може зберігати лише значення невідомого типу з API
34%
Значення типу unknown можна присвоїти змінній будь якого типу
45%
Перед використанням змінної типу unknown, потрібно зробити type narrowing
15%
TypeScript автоматично визначає тип unknown після присвоєння значення