Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma

Salom hamkasblar.

Bugun biz sizning e'tiboringizga zamonaviy dasturiy ta'minot tizimlarini loyihalash tamoyillarini nisbatan kichik hajmda bayon etishni o'z zimmasiga olgan Tugberk Ugurluning maqolasining tarjimasini taklif etamiz. Muallifning o'zi haqida qisqacha aytganda:

Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma
2019 yildan boshlab arxitektura naqshlari + dizayn naqshlari kabi ulkan mavzuni habro maqolasida yoritish mutlaqo mumkin emasligi sababli, biz nafaqat janob Urug'lining matnini, balki u muloyimlik bilan kiritgan ko'plab havolalarni ham tavsiya qilamiz. Agar sizga yoqsa, biz taqsimlangan tizimlar dizayni haqida yanada yuqori ixtisoslashtirilgan matnni nashr etamiz.

Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma

Oniy rasm Isaak Smit Unsplash dan

Agar siz hech qachon noldan dasturiy ta'minot tizimini loyihalash kabi qiyinchiliklarga duch kelmagan bo'lsangiz, unda bunday ishni boshlaganingizda, ba'zida qaerdan boshlash kerakligi ham aniq emas. O'ylaymanki, siz aniq nimani loyihalashtirmoqchi ekanligingiz haqida ozmi-ko'pmi ishonchli tasavvurga ega bo'lishingiz uchun avval chegaralarni chizishingiz kerak, keyin esa yengingizni shimib, shu chegaralar ichida ishlashingiz kerak. Boshlang'ich nuqta sifatida siz mahsulot yoki xizmatni (o'zingizga juda yoqadigan ideal) olishingiz va uni qanday amalga oshirishni aniqlashingiz mumkin. Ushbu mahsulotning qanchalik sodda ko'rinishi va u qanchalik murakkabligini o'z ichiga olganiga hayron bo'lishingiz mumkin. Esdan chiqarma: oddiy - odatda murakkab, va bu yaxshi.

O'ylaymanki, tizimni loyihalashni boshlagan har bir kishiga beradigan eng yaxshi maslahat bu: hech qanday taxmin qilmang! Eng boshidanoq siz ushbu tizim haqida ma'lum bo'lgan faktlarni va u bilan bog'liq umidlarni ko'rsatishingiz kerak. Dizayningizni boshlashingizga yordam beradigan ba'zi yaxshi savollar:

  • Biz hal qilmoqchi bo'lgan muammo nima?
  • Tizimimiz bilan o'zaro aloqada bo'ladigan eng yuqori foydalanuvchilar soni qancha?
  • Biz ma'lumotlarni yozish va o'qishning qanday naqshlaridan foydalanamiz?
  • Kutilayotgan muvaffaqiyatsizlik holatlari qanday, biz ularni qanday hal qilamiz?
  • Tizimning barqarorligi va mavjudligi uchun qanday umidlar mavjud?
  • Ishlayotganingizda tashqi tekshirish va tartibga solish bilan bog'liq har qanday talablarni hisobga olishingiz kerakmi?
  • Biz qanday turdagi maxfiy ma'lumotlarni saqlamoqchimiz?

Bular men uchun ham, professional faoliyat yillarim davomida ishtirok etgan jamoalar uchun ham foydali bo'lgan bir nechta savollar. Agar siz ushbu savollarga javoblarni bilsangiz (va siz ishlashingiz kerak bo'lgan kontekstga tegishli bo'lgan har qanday boshqa), unda siz asta-sekin muammoning texnik tafsilotlarini o'rganishingiz mumkin.

Dastlabki darajani o'rnating

Bu yerda β€œasosiy” deganda nimani nazarda tutyapman? Darhaqiqat, bizning davrimizda dasturiy ta'minot sanoatidagi aksariyat muammolarni mavjud usullar va texnologiyalar yordamida "echish mumkin". Shunga ko'ra, ushbu landshaftda navigatsiya qilish orqali siz boshqa birov sizdan oldin hal qilishi kerak bo'lgan muammolarga duch kelganingizda ma'lum bir boshlanishga erishasiz. Shuni unutmangki, dasturlar biznes va foydalanuvchi muammolarini hal qilish uchun yozilgan, shuning uchun biz muammoni eng oddiy va sodda (foydalanuvchi nuqtai nazaridan) hal qilishga intilamiz. Nima uchun buni eslash muhim? Balki siz koordinatalar tizimingizda barcha muammolar uchun noyob yechimlarni izlashni yoqtirasiz, chunki β€œagar hamma joyda namunalarga amal qilsam, men qanday dasturchiman” deb o'ylaysiz? Aslida, Bu erda san'at qaerda va nima qilish kerakligi haqida qaror qabul qiladi. Albatta, har birimiz vaqti-vaqti bilan o'ziga xos muammolar bilan shug'ullanishimiz kerak, ularning har biri haqiqiy qiyinchilikdir. Biroq, agar bizning boshlang'ich darajamiz aniq belgilangan bo'lsa, unda biz kuchimizni nimaga sarflashni bilamiz: oldimizga qo'yilgan muammoni hal qilishning tayyor variantlarini izlash yoki uni yanada chuqurroq o'rganish va chuqurroq tushunish.

O'ylaymanki, men sizni ishontira oldim, agar mutaxassis ba'zi ajoyib dasturiy ta'minot tizimlarining arxitektura komponenti nima ekanligini ishonchli tushunsa, bu bilim me'mor san'atini egallash va ushbu sohada mustahkam asos yaratish uchun ajralmas bo'ladi.

Xo'sh, qaerdan boshlash kerak? U Donna Martina GitHub da nomli ombor mavjud tizim-dizayn-primer, undan siz keng ko'lamli tizimlarni loyihalashni o'rganishingiz mumkin, shuningdek, ushbu mavzu bo'yicha intervyularga tayyorgarlik ko'rishingiz mumkin. Omborda misollar bo'lgan bo'lim mavjud haqiqiy arxitekturalar, bu erda, xususan, ularning tizimlarini loyihalashga qanday yondashishlari ko'rib chiqiladi ba'zi taniqli kompaniyalarMasalan, Twitter, Uber va boshqalar.

Biroq, ushbu materialga o'tishdan oldin, amalda duch keladigan eng muhim arxitektura muammolarini batafsil ko'rib chiqaylik. Bu juda muhim, chunki siz o'jar va ko'p qirrali muammoning KO'P jihatlarini aniqlab olishingiz va keyin uni ma'lum bir tizimda amaldagi qoidalar doirasida hal qilishingiz kerak. Jekson Gabbard, deb yozdi Facebookning sobiq xodimi Tizim dizayni bo'yicha intervyular haqida 50 daqiqalik video, u erda u yuzlab abituriyentlarni tekshirish bo'yicha o'z tajribasi bilan o'rtoqlashdi. Video katta tizim dizayni va bunday lavozimga nomzod izlashda muhim ahamiyatga ega bo'lgan muvaffaqiyat mezonlariga katta e'tibor qaratsa-da, u tizimlarni loyihalashda eng muhim narsalar haqida keng qamrovli manba bo'lib xizmat qiladi. Men ham taklif qilaman xulosa bu video.

Ma'lumotlarni saqlash va olish haqida bilimlarni shakllantirish

Odatda, ma'lumotlaringizni uzoq muddatda qanday saqlash va olish haqidagi qaroringiz tizimning ishlashiga jiddiy ta'sir qiladi. Shuning uchun, avvalo, tizimingizning kutilgan yozish va o'qish xususiyatlarini tushunishingiz kerak. Keyin siz ushbu ko'rsatkichlarni baholay olishingiz va qilingan baholashlar asosida tanlov qilishingiz kerak. Biroq, mavjud ma'lumotlarni saqlash usullarini tushunsangizgina, bu ishni samarali bajarishingiz mumkin. Asosan, bu bilan bog'liq mustahkam bilimni nazarda tutadi ma'lumotlar bazasini tanlash.

Ma'lumotlar bazalarini juda kengaytiriladigan va bardoshli ma'lumotlar tuzilmalari deb hisoblash mumkin. Shuning uchun ma'lumotlar tuzilmalari haqidagi bilim ma'lum bir ma'lumotlar bazasini tanlashda siz uchun juda foydali bo'lishi kerak. Masalan, Redis har xil turdagi qiymatlarni qo'llab-quvvatlaydigan ma'lumotlar strukturasi serveridir. Bu sizga ro'yxatlar va to'plamlar kabi ma'lumotlar tuzilmalari bilan ishlashga va taniqli algoritmlardan foydalangan holda ma'lumotlarni o'qishga imkon beradi, masalan, LRU, bunday ishlarni bardoshli va juda qulay uslubda tashkil qilish.

Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma

Oniy rasm Samuel Zeller Unsplash dan

Turli xil ma'lumotlarni saqlash naqshlari haqida etarlicha tushunchaga ega bo'lganingizdan so'ng, ma'lumotlarning izchilligi va mavjudligini o'rganishga o'ting. Avvalo, siz tushunishingiz kerak CAP teoremasi hech bo'lmaganda umumiy ma'noda va keyin o'rnatilgan naqshlarni diqqat bilan ko'rib chiqish orqali ushbu bilimlarni jilolang mustahkamlik ΠΈ foydalanish imkoniyati. Shunday qilib, siz ushbu soha haqida tushunchaga ega bo'lasiz va ma'lumotlarni o'qish va yozish aslida ikki xil muammo ekanligini tushunasiz, ularning har biri o'ziga xos qiyinchiliklarga ega. Bir nechta izchillik va mavjudlik naqshlari bilan qurollangan holda, siz ilovalaringizga silliq ma'lumotlar oqimini ta'minlab, tizim ish faoliyatini sezilarli darajada oshirishingiz mumkin.

Va nihoyat, ma'lumotlarni saqlash muammolari haqida suhbatni yakunlab, keshlashni ham eslatib o'tishimiz kerak. Mijoz va serverda bir vaqtning o'zida ishlashi kerakmi? Keshingizda qanday ma'lumotlar bo'ladi? Va nima uchun? Keshni bekor qilishni qanday tashkil qilasiz? Bu muntazam ravishda, ma'lum vaqt oralig'ida amalga oshiriladimi? Ha bo'lsa, qanchalik tez-tez? Men ushbu mavzularni o'rganishni boshlashni tavsiya qilaman keyingi bo'lim yuqorida aytib o'tilgan tizim dizayn astar.

Muloqot naqshlari

Tizimlar turli komponentlardan iborat; Bu bir xil jismoniy tugun ichida ishlaydigan turli jarayonlar yoki tarmog'ingizning turli qismlarida ishlaydigan turli mashinalar bo'lishi mumkin. Tarmog'ingizdagi ushbu resurslarning ba'zilari shaxsiy bo'lishi mumkin, ammo boshqalari ochiq bo'lishi va ularga tashqaridan kirishi mumkin bo'lgan iste'molchilar uchun ochiq bo'lishi kerak.

Ushbu resurslarning bir-biri bilan aloqasini, shuningdek, butun tizim va tashqi dunyo o'rtasida axborot almashinuvini ta'minlash kerak. Tizimlarni loyihalash kontekstida biz yana bir qator yangi va noyob muammolarga duch kelamiz. Keling, ular qanday foydali bo'lishi mumkinligini ko'rib chiqaylik asinxron vazifa oqimlari, va nima pTurli xil aloqa shakllari mavjud.

Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma

Oniy rasm Toni Stoddard Unsplash dan

Tashqi dunyo bilan aloqani tashkil qilishda bu har doim juda muhimdir xavfsizlik, uni ta'minlash ham jiddiy va faol ravishda olib borilishi kerak.

Ulanish taqsimoti

Ishonchim komilki, ushbu mavzuni alohida bo'limga qo'yish hamma uchun o'zini oqlaydi. Shunga qaramay, men bu kontseptsiyani bu erda batafsil taqdim etaman va men ushbu bo'limdagi material "ulanish taqsimoti" atamasi bilan eng aniq tasvirlangan deb hisoblayman.

Tizimlar ko'plab komponentlarni to'g'ri ulash orqali shakllanadi va ularning bir-biri bilan aloqasi ko'pincha belgilangan protokollar, masalan, TCP va UDP asosida tashkil etiladi. Biroq, bunday protokollar ko'pincha yuqori yuk ostida ishlaydigan va foydalanuvchi ehtiyojlariga juda bog'liq bo'lgan zamonaviy tizimlarning barcha ehtiyojlarini qondirish uchun ko'pincha etarli emas. Ko'pincha tizimdagi bunday yuqori yuklarni engish uchun ulanishlarni taqsimlash usullarini topish kerak.

Ushbu taqsimot taniqli bo'lganlarga asoslangan domen nomlari tizimi (DNS). Bunday tizim yukni taqsimlashda yordam berish uchun vaznli round robin va kechikishga asoslangan usullar kabi domen nomini o'zgartirishga imkon beradi.

Yukni muvozanatlash muhim ahamiyatga ega va bugungi kunda biz bilan shug'ullanadigan deyarli har bir yirik Internet tizimi bir yoki bir nechta yuk balansi orqasida joylashgan. Yuk balanslagichlari mijoz so'rovlarini bir nechta mavjud misollar bo'ylab tarqatishga yordam beradi. Yuk balanslagichlari ham apparat, ham dasturiy ta'minotda mavjud, ammo amalda siz ko'pincha dasturiy ta'minot bilan shug'ullanishingiz kerak, masalan HAProksi ΠΈ ELB. Teskari proksi kontseptual jihatdan ham yuk balanslagichlariga juda o'xshaydi, garchi birinchi va ikkinchi o'rtasida diapazon mavjud aniq farqlar. Sizning ehtiyojlaringiz asosida tizimni loyihalashda ushbu farqlarni hisobga olish kerak.

haqida ham bilishingiz kerak kontentni yetkazib berish tarmoqlari (CDN). CDN - proksi-serverlarning global taqsimlangan tarmog'i bo'lib, u geografik jihatdan ma'lum bir foydalanuvchiga yaqinroq joylashgan tugunlardan ma'lumotlarni etkazib beradi. Agar siz JavaScript, CSS va HTML-da yozilgan statik fayllar bilan ishlasangiz, CDN-lardan foydalanish afzalroqdir. Bundan tashqari, bugungi kunda trafik menejerlarini ta'minlaydigan bulutli xizmatlar keng tarqalgan, masalan, Azure Traffic Manager, dinamik kontent bilan ishlashda sizga global tarqatish va kam kechikish imkonini beradi. Biroq, bunday xizmatlar odatda fuqaroligi bo'lmagan veb-xizmatlar bilan ishlashingiz kerak bo'lgan hollarda foydalidir.

Keling, biznes mantig'i haqida gapiraylik. Biznes mantig'ini, vazifa oqimlarini va komponentlarini tuzish

Shunday qilib, biz tizimning turli infratuzilma jihatlarini muhokama qilishga muvaffaq bo'ldik. Ehtimol, foydalanuvchi tizimingizning barcha elementlari haqida o'ylamaydi va ochig'ini aytganda, ularga umuman ahamiyat bermaydi. Foydalanuvchi sizning tizimingiz bilan o'zaro aloqada bo'lish qanday ekanligi, buni amalga oshirish orqali nimaga erishish mumkinligi, shuningdek, tizim foydalanuvchi buyruqlarini qanday bajarishi, foydalanuvchi ma'lumotlari bilan nima va qanday ishlashi bilan qiziqadi.

Ushbu maqolaning sarlavhasidan ko'rinib turibdiki, men dasturiy ta'minot arxitekturasi va tizim dizayni haqida gapirmoqchi edim. Shunga ko'ra, men dasturiy ta'minot komponentlari qanday yaratilganligini tavsiflovchi dasturiy ta'minot dizayni naqshlarini qamrab olishni rejalashtirmaganman. Biroq, men bu haqda qanchalik ko'p o'ylasam, dasturiy ta'minot dizayni naqshlari va arxitektura naqshlari o'rtasidagi chiziq juda xiralashgan va bu ikki tushuncha bir-biri bilan chambarchas bog'liqdek tuyuladi. Keling, misol qilib olaylik hodisani ro'yxatdan o'tkazish (voqea manbasi). Ushbu me'moriy naqshni qabul qilganingizdan so'ng, u tizimingizning deyarli barcha jihatlariga ta'sir qiladi: ma'lumotlarni uzoq muddatli saqlash, tizimingizda qabul qilingan izchillik darajasi, undagi komponentlarning shakli va boshqalar. Shuning uchun men biznes mantig'i bilan bevosita bog'liq bo'lgan ba'zi me'moriy naqshlarni eslatib o'tishga qaror qildim. Garchi ushbu maqola oddiy ro'yxat bilan cheklanishi kerak bo'lsa ham, men sizni u bilan tanishishingizni va ushbu naqshlar bilan bog'liq g'oyalar haqida o'ylashingizni tavsiya qilaman. Mana marhamat:

Hamkorlik yondashuvlari

Siz o'zingizni loyihada tizimni loyihalash jarayoni uchun javobgar bo'lgan ishtirokchi sifatida topishingiz dargumon. Aksincha, siz o'zingizning vazifangiz ichida ham, tashqarisida ham ishlaydigan hamkasblar bilan muloqot qilishingiz kerak bo'ladi. Bunday holda, tanlangan texnologiya echimlarini hamkasblaringiz bilan baholashingiz, biznes ehtiyojlarini aniqlashingiz va vazifalarni qanday qilib eng yaxshi parallellashtirishni tushunishingiz kerak bo'lishi mumkin.

Dasturiy ta'minot arxitekturasi va tizimlari dizayni: Katta rasm va manbalar bo'yicha qo'llanma

Oniy rasm Kaleydiko Unsplash dan

Birinchi qadam, siz erishmoqchi bo'lgan biznes maqsadi nima ekanligini va qanday harakatlanuvchi qismlar bilan shug'ullanishingiz kerakligini aniq va umumiy tushunishni rivojlantirishdir. Guruhlarni modellashtirish texnikasi, xususan hujum voqealari (voqea bo'roni) bu jarayonni sezilarli darajada tezlashtirishga yordam beradi va muvaffaqiyatga erishish imkoniyatini oshiradi. Bu ishni siz tasvirlashdan oldin yoki keyin bajarish mumkin xizmatlaringiz chegaralari, so'ngra mahsulot pishib qolganda uni chuqurlashtiring. Bu erda erishiladigan izchillik darajasiga asoslanib, siz ham shakllantirishingiz mumkin umumiy til siz ishlayotgan cheklangan kontekst uchun. Tizimingiz arxitekturasi haqida gapirishingiz kerak bo'lganda, uni foydali deb topishingiz mumkin C4 modeli, taklif qilingan Saymon Braun, ayniqsa, siz muloqot qilmoqchi bo'lgan narsalarni tasavvur qilib, muammoning tafsilotlariga qanchalik ko'p kirishingiz kerakligini tushunishingiz kerak bo'lganda.

Ehtimol, ushbu mavzu bo'yicha boshqa etuk texnologiya mavjud bo'lib, u Domenga asoslangan dizayndan kam emas. Biroq, biz qandaydir tarzda mavzu sohasini tushunishga qaytamiz, shuning uchun bu sohadagi bilim va tajriba Domenga asoslangan dizayn siz uchun foydali bo'lishi kerak.

Manba: www.habr.com

a Izoh qo'shish