Bugun bo'sh vaqtim ko'proq bo'lgani sabab o'zimni anchadan beri qiziqtirayotgan savollarga javob izlash va yana yangi kitob o'qishni boshlashga imkon bo'ldi.
Anchadan beri LinkedIn ishlatadigan Galene search engine (well, architecture) qanday ishlashiga qiziqayotgandim, bugun shu haqida ozroq ma'lumot topib (o'zi unchalik batafsil ma'lumot topa olmadim), o'qib ko'rdim. Xuddi kutganimdek, ancha murakkab tizim ekan.
Ko'pchilik backend engineerlar uchun database "shunchaki" ma'lumot saqlaydigan servis va bu qisman to'g'ri. Lekin tizimdan foydalanuvchilar minglab emas millionlab bo'lganida, ma'lumot hajmi gigabaytlar emas, petabaytlar bo'lganida hammasi o'zgaradi. Klassik qarashlar ortidan kelgan yechimlar ish bermay qoladi (xuddi kvant olamida klassik mexanika qoidalari ishlamaganidek). Yangicha yechim topish uchun muammoga boshqa tomonlardan qarab ko'rish kerak bo'ladi.
Nega LinkedIn faqatgina search (klassik CRUDning 1 ta elementi) qilishning o'zi uchun alohida engine ishlab chiqdi? Shunchaki bitta PostgreSQL instance yurgizib qo'yib, LIKE orqali search qilsa bo'lmasmidi?
Yo'q do'stim, hammasi bunchalik oddiy emas. Buning uchun biznes talablarini qondiradigan (har xil modellar ustida bitta query, natijalarni hudud, qiziqishlar, tanishlar kabi bir qancha metadata bo'yicha rank qilish, logik va grammatik alternativlar bo'yicha izlash, ...) va texnik jihatdan batafsil o'ylangan (latency, CPU va RAM limitlarini hisobga olish, ma'lumotlarni saqlash usulining storage va OS leveldagi muammolarini hisobga olish, optimizatsiya qilish, failurelar va attacklarga qarshi mexanizmlar bilan jihozlangan) tizim ishlab chiqish kerak bo'ladi. Va bu overengineering emas. Mana shu yerda esa "Database shunchaki ma'lumot saqlaydigan servis" degan gap o'zini oqlamaydi.
Post #242
1.46K