Designing a Chat / Messaging System
Chat / xabar almashish tizimini loyihalash
Oddiy pochta bilan telefon qo'ng'irog'i orasidagi farqni tasavvur qiling: pochta — YUBORILADI, va qabul qiluvchi UNI QACHONDIR o'qiydi (kutish MUMKIN). Qo'ng'iroq esa — IKKALA tomon HAM AYNI SHU ZAHOTIDA ONLAYN bo'lishi kerak. Chat tizimi — bu ikkisining ARALASHMASI: xabar DARHOL yetib borishi KERAK (qo'ng'iroqqa o'xshab), lekin qabul qiluvchi OFLAYN bo'lsa ham, xabar YO'QOLMASLIGI kerak (pochtaga o'xshab).
Talab va miqyos: chat tizimida ODDIY HTTP so'rov-javob YETARLI emas — chunki server, foydalanuvchiga YANGI xabar kelganda, uni O'ZI "itarib" (push) yuborishi kerak, foydalanuvchi HAR safar "yangi xabar bormi?" deb SO'RAMASLIGI kerak. Bu yerda WebSocket (uzoq muddatli, ikki tomonlama ochiq tarmoq ulanishi) — HTTP Service Communication darsida ko'rgan oddiy so'rov-javobdan farqli, ZARUR texnologiya.
Yuqori darajadagi dizayn: har bir foydalanuvchi, ulanganda, BITTA "chat serveri"ga WebSocket orqali BOG'LANADI. Muammo: agar A foydalanuvchi 1-serverga, B foydalanuvchi 2-serverga ulangan bo'lsa, A dan B ga xabar QANDAY yetib boradi? Yechim — Message Queues darsida ko'rgan g'oya: xabar, MARKAZIY xabar navbatiga (yoki pub/sub tizimiga) yuboriladi, va B ULANGAN 2-server O'SHA navbatni "tinglab", xabarni B ga UZATADI.
| Holat | Yechim |
|---|---|
| Ikkalasi ham ONLAYN | Xabar navbat orqali darhol UZATILADI, WebSocket orqali DARHOL yetkaziladi |
| Qabul qiluvchi OFLAYN | Xabar bazaga SAQLANADI, qabul qiluvchi ULANGANDA yetkaziladi ("undelivered messages") |
| Xabar QAYSI serverga tegishli ekanini bilish | Foydalanuvchi ID → server xaritasi, MARKAZIY, tez saqlash joyida (masalan Redis) yuritiladi |
Chuqur kirish — izchillik va tartib: agar A foydalanuvchi ikkita xabarni KETMA-KET yuborsa, B ularni AYNAN shu tartibda ko'rishi kerak — bu yerda TARTIB muhim, va Consistency Models darsidagi "eventual consistency" YETARLI bo'lmasligi mumkin, chunki tartib BUZILSA, suhbat mazmuni O'ZGARIB qolishi mumkin. Odatda har bir xabarga KETMA-KET raqam (sequence number) berib, qabul qiluvchi tomon ularni O'SHA tartibda KO'RSATADI, hatto tarmoq orqali BOSHQA tartibda YETIB kelsa ham.
Murosa: "xabar yetkazilganligini kim, qachon bilib oladi" (delivery receipt, "o'qildi" belgisi) — bu, QO'SHIMCHA murakkablik va tarmoq trafigini talab qiladi, shuning uchun ko'p tizim buni asosiy xabar yuborishdan ALOHIDA, past ustuvorlikdagi oqim sifatida amalga oshiradi — Reliability va tezlik orasidagi yana bir MUROSA.
Key Takeaway
Key Takeaway:
Chat tizimi WebSocket orqali darhol yetkazishni, message queue orqali serverlar aro yo'naltirishni, va bazaga saqlashni birlashtirib, foydalanuvchi oflayn bo'lsa ham xabar yo'qolmasligini ta'minlaydi. Xabarlar tartibini saqlash — bu yerda eventual consistency yetarli bo'lmasligi mumkin bo'lgan joy, va ketma-ket raqamlash orqali hal qilinadi.
NEXT UP
Designing a Social Media News Feed