Designing a Notification / Alerting System
Bildirishnoma / ogohlantirish tizimini loyihalash
Kasalxonadagi hamshiralar bo'limini tasavvur qiling: kichik shifokorlik ko'rsatmasi ODDIY qog'ozga yozib qo'yiladi, lekin bemor holati JIDDIY yomonlashsa, DARHOL, BARCHA mavjud kanal (ovozli signal, chaqiruv tugmasi, TELEFON) orqali ogohlantiriladi. Bildirishnoma tizimi ham xuddi shunday — barcha xabar BIR XIL MUHIM emas, va tizim buni FARQLASHI kerak.
Talab va miqyos: bildirishnoma tizimi odatda KO'P turli MANBADAN (buyurtma holati o'zgardi, narx tushdi, server ISHLAMAY qoldi) xabar QABUL qiladi, va ularni KO'P turli KANAL (email, SMS, push-bildirishnoma, ilova ICHIDAGI belgi) orqali YETKAZADI. Bu — Message Queues darsidagi "ishlab chiqaruvchi (producer) va iste'molchi (consumer)ni AJRATISH" g'oyasining KENGAYTIRILGAN ko'rinishi: manba xizmatlar YOZUVCHI, bildirishnoma xizmati esa O'QUVCHI va YETKAZUVCHI.
| Bosqich | Vazifasi |
|---|---|
| Qabul qilish | Turli xizmatlardan kelgan hodisalarni (event) BITTA umumiy navbatga yig'adi |
| Ustuvorlikni belgilash | Hodisa qanchalik MUHIM ekanini (oddiy xabar, ogohlantirish, favqulodda) aniqlaydi |
| Kanalni tanlash | Foydalanuvchi SOZLAMALARIGA (email yoqilgan, SMS o'chirilgan) qarab, QAYSI kanal orqali yuborishni hal qiladi |
| Yetkazish va qayta urinish | Har bir kanal uchun ALOHIDA yuboradi, muvaffaqiyatsiz bo'lsa Retry with Exponential Backoff bo'yicha qayta urinadi |
Chuqur kirish — ustuvorlik va tezlik murosasi: "serveringiz ISHLAMAY qoldi" degan FAVQULODDA ogohlantirish, bir necha SONIYA ichida yetib borishi SHART, aks holda uning FOYDASI yo'qoladi. "Sizga yangi izoh qoldirishdi" kabi ODDIY bildirishnoma esa, bir necha DAQIQA kechiksa ham HECH KIM sezmaydi. Shuning uchun bir xil navbat o'rniga, ko'p tizim ALOHIDA, TEZLIK darajasi bo'yicha AJRATILGAN navbatlar (bu Load Balancing kursida ko'rgan "bulkhead" g'oyasiga o'xshab, muhim va oddiy xabarlarni BIR-BIRIDAN ajratib, biri IKKINCHISINI KECHIKTIRIB qo'ymasligi uchun) ishlatadi.
Xato boshqaruvi: agar SMS provayder vaqtincha ISHLAMASA, Designing for Failure darsidagi Circuit Breaker g'oyasi qo'llaniladi — provayderga QAYTA-QAYTA urinib, uni yanada OG'IRLASHTIRISH o'rniga, vaqtincha ZAXIRA provayderga (yoki boshqa kanalga, masalan push-bildirishnomaga) O'TILADI. Bundan tashqari, HAR bir yuborilgan xabar UCHUN "yetkazildimi" holatini SAQLASH (Task Status Tracking darsidagi g'oyaga o'xshab) — muvaffaqiyatsiz urinishlarni KEYINROQ tahlil qilish uchun MUHIM.
Murosa: "bitta xabarni IKKI marta yuborish" (masalan, tizim ishonchli yetkazish uchun QAYTA urinsa-yu, aslida BIRINCHI urinish MUVAFFAQIYATLI bo'lgan bo'lsa) — ko'pincha "bitta xabarni UMUMAN yubormaslik"dan YAXSHIROQ xato hisoblanadi. Shuning uchun bildirishnoma tizimlari odatda "kamida bir marta" (at-least-once) yetkazishni tanlaydi, "aynan bir marta" (exactly-once, amalga oshirish JUDA qimmat) o'rniga — bu, Availability and the Nines darsidagi "qaysi xato ARZONROQ" mulohazasining yana bir ko'rinishi.
Key Takeaway
Key Takeaway:
Bildirishnoma tizimi — turli manbadan hodisa qabul qilib, ustuvorlik va foydalanuvchi sozlamasiga qarab to'g'ri kanalga yo'naltiradigan, qayta urinish va circuit breaker bilan mustahkamlangan xizmat. Muhim ogohlantirishlarni oddiy bildirishnomalardan ajratilgan navbatda yuritish va "kamida bir marta yetkazish"ni tanlash — ishonchlilik va soddalik orasidagi amaliy murosa.
NEXT UP
Designing a Web Crawler at Scale