System design — dasturiy tizimning komponentlari, ma’lumot oqimi, interfeyslari va ishlash chegaralarini talablar asosida loyihalash jarayonidir. U kodning alohida funksiyalaridan yuqoriroq darajada turadi va xizmatlar qanday bo‘linishi, ma’lumot qayerda saqlanishi, so‘rovlar qanday uzatilishi hamda nosozliklar qanday boshqarilishini belgilaydi. Maqsad bitta “mukammal” chizma topish emas, balki muayyan yuklama va cheklovlarga mos arxitektura tanlashdir.
Talablarni ajratish
Loyihalash funksional talablardan boshlanadi. Ular tizim bajaradigan amallarni ifodalaydi: foydalanuvchi maqola joylaydi, qidiruv bajaradi yoki fayl yuklaydi. Nofunksional talablar esa xizmat darajasini belgilaydi:
- bir soniyada qayta ishlanadigan so‘rovlar soni;
- javob berish vaqti;
- mavjudlik foizi;
- ma’lumotning izchillik darajasi;
- saqlash hajmi va o‘sish sur’ati;
- xavfsizlik hamda audit talablari.
Aniq sonlar arxitektura qarorini tekshirish imkonini beradi. Kuniga ming so‘rov oladigan ichki tizim bilan soniyasiga ming so‘rov oladigan ommaviy xizmat bir xil infratuzilmani talab qilmaydi.
Asosiy qismlar
Oddiy veb tizim mijoz, load balancer, dastur serveri, ma’lumotlar bazasi va keshdan tuzilishi mumkin. Mijoz HTTP so‘rov yuboradi, load balancer uni mavjud serverlardan biriga yo‘naltiradi, server biznes qoidalarini bajaradi va kerakli ma’lumotni bazadan oladi. Tez-tez o‘qiladigan qiymatlar keshda saqlansa, bazaga tushadigan yuk kamayadi.
Tizim kattalashganda navbat, obyekt saqlagichi, qidiruv indeksi yoki alohida servislar qo‘shilishi mumkin. Har yangi komponent imkoniyat bilan birga operatsion murakkablik ham olib keladi. Masalan, message queue uzoq vazifani fon rejimiga ajratadi, biroq xabarni takror qayta ishlash va navbat kechikishini boshqarish talab etiladi.
Ma’lumot va izchillik
Ma’lumot modeli system designning markaziy qismidir. Relatsion baza tranzaksiya va bog‘lanishlar uchun qulay, key-value ombor esa sodda kalit bo‘yicha tez murojaatni ta’minlaydi. Replikatsiya o‘qish yukini taqsimlaydi va nusxa beradi, lekin nusxalar orasida vaqtinchalik farq paydo bo‘lishi mumkin. Sharding ma’lumotni bir nechta tugunga bo‘ladi; buning evaziga tugunlararo so‘rov va qayta taqsimlash murakkablashadi.
Nosozliklarni hisobga olish
Tarmoq uzilishi, server ishdan chiqishi va tashqi xizmatning sekinlashishi taqsimlangan tizim uchun odatiy holatlardir. Timeout cheksiz kutishni to‘xtatadi, retry vaqtinchalik xatoni qayta sinaydi, circuit breaker esa ishlamayotgan xizmatga takroriy bosimni kamaytiradi. Takror yuborilgan amal zarar keltirmasligi uchun idempotency mexanizmi qo‘llanadi.
Qarorlarni hujjatlashtirish
Arxitektura diagrammasi komponentlar va aloqalarni ko‘rsatadi, ammo qaror sababi ham yozilishi kerak. Design hujjatida taxminlar, muqobil variantlar, xavf, sig‘im hisobi va kuzatuv ko‘rsatkichlari qayd etiladi. Keyinchalik yuklama o‘zgarsa, shu hujjat avvalgi tanlovning qaysi sharoitda qilinganini tushuntiradi.
Sig‘imni baholash
Dastlabki hisob taxminiy arxitekturaning qayerda cheklanishini ko‘rsatadi. Kunlik faol foydalanuvchi, har foydalanuvchining amallari va pik koeffitsienti asosida so‘rov tezligi baholanadi. Yozuv hajmi va saqlash muddati disk talabini, obyektlarning o‘rtacha kattaligi esa tarmoq trafikini beradi. Masalan, bir million obyektning har biri 20 KiB bo‘lsa, replikatsiya va indeksdan oldingi xom hajm taxminan 19 GiB bo‘ladi. Hisob aniq prognoz emas, lekin bitta tugun yetarlimi, kesh qayerda foydali va qaysi ko‘rsatkichni load test bilan tasdiqlash kerakligini ko‘rsatadigan boshlang‘ich modeldir.
Sig‘im taxmini ishlab chiqarish metrikalari paydo bo‘lgach yangilanadi. Haqiqiy trafik va obyekt hajmi dastlabki farazni tasdiqlashi yoki arxitektura chegarasini qayta hisoblashni talab qilishi mumkin.
Bog‘liq tushunchalar
software architecture, scalability, load balancing, database, cache, message queue, fault tolerance