Ba'zan klassik muammolar oddiy, nozik yechim talab qiladi.
Masalan, MQ va Pub/Sub tizimlari duch keladigan klassik muammolardan biri latency va data persistency orasidagi "oldin nuqta"ni topish. Messagelarni memoryga yozish va o'qish tez, lekin persistencyni ta'minlash qiyin masala. Storagaga yozish ancha mustahkam yechim, lekin shu bilan birga ancha sekin.
Ko'pchilik MQlar (masalan, RabbitMQ) yuqoridagi ikkita yechimni ma'lum darajada birlashtirib, o'zlari uchun to'g'ri keladigan yechim ishlab chiqqan. Menga esa Kafka qo'llagan usul yoqadi. Xo'sh bu qanday yechim?
Shoshmang, yechimdan oldin muammoni yaxshilab tushunib olaylik.
Nega storagaga yozish/o'qish sekin?
Birinchidan, bu I/O operation, ikkinchidan storageda random access yo'q. Hajmi juda kichkina bo'lgan 100 ta message har xil joydagi 100 ta blokka yozilgan bo'lsa, ularni olish uchun 100 ta blokni to'liq yuklab olish, ya'ni 100 ta I/O kerak bo'ladi. Ya'ni bu usulning effektivligi past va sekin. Lekin agar o'sha 100 ta messageni ketma-ket turgan 2-3 ta bloklarga yozsakchi? Unda 100 ta message uchun 2/3 ta blokni o'qish yetarli bo'ladi. Va undan ham yaxshi tomoni, ketma-ket turgan bloklarni o'qish storagening narigi burchagida turgan blokni borib o'qishdan ko'ra tezroq bo'ladi. Kafka xuddi shunday qiladi. Ya'ni messagelarni storageda yonma-yon yozib, shu ketma-ketlikda o'qiydi.
Ko'rayapsizmi, yechimlar har doim ham murakkab bo'lishi shart emas. Shunchaki asl muammoni chuqurroq o'rganish va ozgina kreativ fikrlash chiroyli yechimlarga olib keladi (afsuski, har doim ham emas).
Post #243
1.82K
- 👍 24