AWS asosidagi serversiz maʼlumotlar konveyeri
Narxlarni tadqiq qilish uchun bozordagi ishlatilgan ehtiyot qismlar eʼlonlarining doimiy oqimi kerak edi. AWS platformasida hodisalarga asoslangan konveyerni loyihaladim, qurdim va yuritdim. Testlarda u eng kichik maʼlumotlar bazasi instansiyasida kuniga 5 million eʼlon degan maqsadga yetdi.
- Mening rolim
- Ishdan ketgan katta muhandisdan AWS infratuzilmasini qabul qilib olganimdan keyin konveyerni yolgʻiz oʻzim loyihaladim, qurdim va yuritdim.
- Natija
- Testlarda kuniga 5 mln eʼlon. Kundalik real ishda esa manbadagi soʻrovlar cheklovi uni taxminan 5000 eʼlon darajasida ushlab turdi.
- Texnologiyalar
- AWS Lambda (Docker obrazlari), SQS, EventBridge, RDS PostgreSQL, RDS Proxy, CloudWatch, SNS, ECR, Python
- Qamrov
- Kompaniya ishlaydigan 7 ta avtomobil markasi boʻyicha marketpleys eʼlonlari, har kuni yigʻiladi
Muammo
Kompaniyaning narxlarni bashorat qilish ishi uchun keng qamrovli va yangi bozor maʼlumotlari kerak edi. Maqsad — kompaniya ishlaydigan 7 ta avtomobil markasi boʻyicha kuniga taxminan 5 million eʼlon.
Konveyer ishonchli ishlashi, byudjet doirasida qolishi va oʻqish tezligini cheklaydigan manba bilan ishlay olishi kerak edi.
Arxitektura
- Jadval EventBridge har bir yigʻish siklini ishga tushiradi. Kichik Lambda funksiyasi kunlik maqsadlarni qayta oʻrnatadi.
- Navbat Vazifalar SQS navbatida saqlanadi; u maʼlumotlar bazasini navbat sifatida ishlatgan avvalgi yechimni almashtirdi. Xatolik bergan xabarlar dead-letter queue navbatiga oʻtadi.
- Ishchi funksiyalar Docker obrazlari sifatida qadoqlangan Lambda funksiyalari sahifalarni parallel yuklab oladi va tahlil qiladi.
- Saqlash Eʼlonlar RDS PostgreSQL bazasiga yoziladi, ulanishlar puli uchun RDS Proxy ishlatiladi. Yozuv bosqichma-bosqich va atomar.
- Ogohlantirishlar CloudWatch metrikalari va ogohlantirishlari, bildirishnomalar SNS orqali yuboriladi.
- Qayta urinish va tiklashMaqsadlarni xavfsiz band qilish, qayta urinishlar, qotib qolgan vazifalarni tiklash va DLQ xabarlarini qayta yuborish
- Monitoring Lambda funksiyasiMaʼlumotlar bazasi holatini CloudWatch xizmatiga yuboradigan, faqat oʻqiydigan vazifa
- Holat tekshiruvlariIstalgan operatsion tizimda ishlaydigan AWS CLI skriptlari
Qulab tushmasdan, sekinlashadigan qilib qurilgan
Soʻrovlar tezligini cheklaydigan maʼlumot manbai qarshilik koʻrsatadi. Konveyer shunga moslab loyihalangan:
- Circuit breaker. Sahifalar bloklana boshlaganda ishchi funksiyalar soʻrovlarni yanada kuchliroq takrorlash oʻrniga pauza qiladi. Umumiy pauza holati PostgreSQL bazasida saqlanadi.
- Moslashuvchan tezlik cheklovi. Soʻrovlar orasidagi vaqt biroz tasodifiy (jitter), manba qarshilik koʻrsatganda konveyer avtomatik ravishda sekinlashadi, pauzadan soʻng esa ishchi funksiyalar yuklamani asta-sekin oshiradi.
- Xavfsiz parallellik. Ishchi funksiyalar maqsadlarni xavfsiz band qiladi, qayta urinadi va qotib qolgan vazifalarni tiklaydi, shuning uchun ularning koʻpchiligi bir-biriga xalaqit bermasdan parallel ishlay oladi.
Monitoring va ekspluatatsiya
- Muhim holatlar uchun ogohlantirishlar. Orkestrator toʻxtasa, ishchi funksiyalar ishdan chiqsa, Lambda ularni cheklasa (throttling), navbat toʻlib ketsa yoki undagi xabarlar eskirsa, sahifalar bloklansa, maʼlumotlar bazasiga yozish xato bersa yoki kunlik eʼlonlar soni tushib ketsa, CloudWatch menga xabar beradi.
- Holat tekshiruvlari. AWS CLI skriptlari konveyerni istalgan kompyuterdan tekshiradi, faqat oʻqiydigan kichik Lambda funksiyasi esa maʼlumotlar bazasi holatini CloudWatch xizmatiga yuboradi.
- Yozma yoʻriqnomalar. Ularda Lambda funksiyalarini qanday cheklash yoki toʻxtatish va navbatlarni qanday tozalash yozilgan, shunda nazoratdan chiqqan vazifa xarajatlarni oshirib yubora olmaydi.
Katta muhandis tekshiruvidan keyingi mustahkamlash
Katta muhandis konveyerni koʻrib chiqdi va men uni shu tekshiruv asosida mustahkamladim:
- Har bir maʼlumotlar bazasi soʻrovining taymauti bor, har bir yozish esa atomar bajariladi.
- Ishchi funksiyalar faqat ruxsat etilgan roʻyxatdagi URL manzillarni yuklaydi va juda katta javoblarni rad etadi.
- Shubhali darajada boʻsh qaytgan sahifa darhol xato deb topiladi va har bir nosozlik oʻz konteksti bilan qayd etiladi.
-
Qimmat
COUNT(*)soʻrovini eng koʻp ishlaydigan qismdan olib tashladim va indekslarga xizmat koʻrsatish vositalarini qoʻshdim. - ECR obrazlari va CloudWatch loglarining saqlash muddatlari xotira xarajatini past ushlab turadi.
Natijalar
- 5 mln/kuntestlarda, eng kichik RDS instansiyasida erishilgan maqsad
- ~5000/kunreal ishda manbadagi soʻrovlar cheklovi yoʻl qoʻygan tezlik
- Har kunireal ishda yigʻish, saqlash va ogohlantirishlar
- 7 ta markakompaniyaning narx tadqiqoti uchun qamrab olindi
Nimani oʻrgandim: konveyer kuniga 5 million eʼlonni uddalay olardi, manba esa uddalay olmasdi. Manba soʻrovlar tezligi cheklovlarini kuchaytirganda barqaror tezlik kuniga taxminan 5000 eʼlongacha tushdi va bu odatiy ish rejimiga aylandi. Bunday koʻlamda chegarani infratuzilma emas, maʼlumot manbai belgilaydi, shuning uchun sekinlashish (back-off) birinchi kundan loyihaning bir qismi boʻlishi kerak.
Bu sahifada ish beruvchining kodi, ichki maʼlumotlar va yopiq URL manzillar keltirilmagan, maʼlumot manbai esa nomlanmagan.