Tarqalgan ilovalarning qurilish bloklari. Nolga yaqinlik

Tarqalgan ilovalarning qurilish bloklari. Nolga yaqinlik

Dunyo bir joyda turmaydi. Taraqqiyot yangi texnologik muammolarni keltirib chiqaradi. O'zgaruvchan talablarga muvofiq, axborot tizimlari arxitekturasi rivojlanishi kerak. Bugun biz voqealarga asoslangan arxitektura, koncurrency, concurrency, asynchrony va bularning barchasi bilan Erlangda qanday qilib tinch yashashingiz mumkinligi haqida gaplashamiz.

kirish

Loyihalashtirilgan tizimning o'lchamiga va unga qo'yiladigan talablarga qarab, biz, ishlab chiquvchilar, tizimda ma'lumot almashish usulini tanlaymiz. Aksariyat hollarda xizmatlarning o'zaro ta'sirini tashkil qilish uchun ishchi variant broker bilan sxema bo'lishi mumkin, masalan, RabbitMQ yoki kafka asosida. Ammo ba'zida voqealar oqimi, SLA va tizim ustidan nazorat darajasi shunday bo'ladiki, biz uchun tayyor xabarlar mos kelmaydi. Albatta, siz transport qatlami va klaster shakllanishi uchun mas'uliyatni o'z zimmangizga olib, tizimni biroz murakkablashtirishingiz mumkin, masalan, ZeroMQ yoki nanomsg. Ammo agar tizim yetarli darajada tarmoqli kengligi va standart Erlang klasterining imkoniyatlariga ega boβ€˜lsa, unda qoβ€˜shimcha ob’ektni joriy etish masalasi batafsil oβ€˜rganish va iqtisodiy asoslashni talab qiladi.

Reaktiv taqsimlangan ilovalar mavzusi juda keng. Maqola formatini saqlab qolish uchun bugungi muhokama mavzusi faqat Erlang/Elixir asosida qurilgan bir hil muhitlar bo'ladi. Erlang/OTP ekotizimi sizga eng kam kuch sarflagan holda reaktiv arxitekturani amalga oshirish imkonini beradi. Lekin har qanday holatda, bizga xabarlar qatlami kerak bo'ladi.

Nazariy asos

Dizayn maqsadlar va cheklovlarni aniqlashdan boshlanadi. Asosiy maqsad rivojlanish uchun rivojlanish sohasida emas. Biz xavfsiz va kengaytiriladigan vositani olishimiz kerak, uning asosida biz turli darajadagi zamonaviy ilovalarni yaratishimiz va eng muhimi, ishlab chiqishimiz mumkin: kichik auditoriyaga xizmat ko'rsatadigan yagona serverli ilovalardan boshlab, keyinchalik ular 50 tagacha klasterlarga aylanishi mumkin. -60 tugun, klaster federatsiyalari bilan tugaydi. Shunday qilib, asosiy maqsad - yakuniy tizimni ishlab chiqish va egalik qilish xarajatlarini kamaytirish orqali maksimal foyda olishdir.

Yakuniy tizim uchun 4 ta asosiy talabni ajratib ko'rsatamiz:

  • Π‘hodisaga yo'naltirilgan.
    Tizim doimo voqealar oqimidan o'tishga va kerakli harakatlarni bajarishga tayyor;
  • Мmasshtablilik.
    Alohida bloklar vertikal va gorizontal ravishda o'lchanishi mumkin. Butun tizim cheksiz gorizontal o'sishga qodir bo'lishi kerak;
  • Оxatolarga chidamlilik.
    Barcha darajalar va barcha xizmatlar nosozliklardan avtomatik ravishda tiklanishi kerak;
  • Π“kafolatlangan javob vaqti.
    Vaqt qimmatli va foydalanuvchilar uzoq kutmasliklari kerak.

"Bu mumkin bo'lgan kichik dvigatel" haqidagi eski ertakni eslaysizmi? Loyihalashtirilgan tizim prototip bosqichidan muvaffaqiyatli chiqishi va progressiv bo'lishi uchun uning poydevori minimal talablarga javob berishi kerak. SMOG.

Infratuzilma vositasi va barcha xizmatlar uchun asos sifatida xabar almashishga yana bir nuqta qo'shiladi: dasturchilar uchun foydalanish qulayligi.

Tadbirga yo'naltirilgan

Ilova bitta serverdan klasterga o'sishi uchun uning arxitekturasi bo'sh ulanishni qo'llab-quvvatlashi kerak. Asinxron model bu talabga javob beradi. Unda jo'natuvchi va qabul qiluvchi xabarning axborot yuki haqida qayg'uradi va tizim ichida uzatish va marshrutlash haqida qayg'urmaydi.

Miqyosi

Masshtablilik va tizim samaradorligi bir-birining yonida. Ilova komponentlari barcha mavjud resurslardan foydalana olishi kerak. Imkoniyatlardan qanchalik samarali foydalana olsak va qayta ishlash usullarini qanchalik optimallashtirsak, uskunaga shuncha kam pul sarflaymiz.

Bitta mashina ichida Erlang yuqori raqobat muhitini yaratadi. Parallellik va parallellik o'rtasidagi muvozanat Erlang VM uchun mavjud bo'lgan operatsion tizim iplari sonini va ushbu oqimlardan foydalanadigan rejalashtiruvchilar sonini tanlash orqali o'rnatilishi mumkin.
Erlang jarayonlari holatni taqsimlamaydi va bloklanmaydigan rejimda ishlaydi. Bu an'anaviy blokirovkaga asoslangan ilovalarga qaraganda nisbatan past kechikish va yuqori o'tkazuvchanlikni ta'minlaydi. Erlangning rejalashtiruvchisi protsessor va IO ning adolatli taqsimlanishini ta'minlaydi va blokirovkaning yo'qligi ilovaga hatto eng yuqori yuklanishlar yoki nosozliklar paytida ham javob berishga imkon beradi.

Klaster darajasida utilizatsiya qilish muammosi ham mavjud. Klasterdagi barcha mashinalar bir xil yuklangan bo'lishi va tarmoqning ortiqcha yuklanmaganligi muhimdir. Vaziyatni tasavvur qilaylik: foydalanuvchi trafigi kiruvchi balanschilarga tushadi (haproxy, nginx va boshqalar), ular qayta ishlash so'rovlarini mavjud backendlar to'plami o'rtasida imkon qadar teng taqsimlaydi. Ilova infratuzilmasi doirasida kerakli interfeysni amalga oshiradigan xizmat faqat oxirgi mildir va dastlabki so'rovga javob berish uchun bir qator boshqa xizmatlarni so'rashi kerak bo'ladi. Ichki so'rovlar ham marshrutlash va muvozanatni talab qiladi.
Ma'lumotlar oqimlarini samarali boshqarish uchun xabarlar ishlab chiquvchilarga marshrutlash va yuk balansini boshqarish uchun interfeys bilan ta'minlashi kerak. Buning yordamida ishlab chiquvchilar mikroservis shakllaridan (agregator, proksi-server, zanjir, filial va boshqalar) foydalanib, ham standart muammolarni, ham kamdan-kam uchraydigan muammolarni hal qilishlari mumkin.

Biznes nuqtai nazaridan, masshtablilik risklarni boshqarish vositalaridan biridir. Asosiysi, uskunadan optimal foydalanish orqali mijozlarning talablarini qondirish:

  • Taraqqiyot natijasida asbob-uskunalarning quvvati oshganda. Nomukammal dasturiy ta'minot tufayli u ishlamay qolmaydi. Erlang vertikal ravishda yaxshi o'lchaydi va har doim barcha CPU yadrolari va mavjud xotiradan foydalana oladi;
  • Bulutli muhitda biz joriy yoki bashorat qilingan yukga qarab jihozlar miqdorini boshqarishimiz va SLAni kafolatlashimiz mumkin.

xatolarga chidamlilik

Keling, ikkita aksiomani ko'rib chiqaylik: "Muvaffaqiyatsizliklar qabul qilinishi mumkin emas" va "Muvaffaqiyatsizliklar har doim bo'ladi". Biznes uchun dasturiy ta'minotning ishdan chiqishi pul yo'qotilishini anglatadi va bundan ham yomoni, obro'ning yo'qolishi. Mumkin bo'lgan yo'qotishlar va nosozliklarga chidamli dasturiy ta'minotni ishlab chiqish xarajatlari o'rtasidagi muvozanatni ko'pincha murosa topish mumkin.

Qisqa muddatda nosozliklarga chidamlilikni o'z ichiga olgan arxitektura tayyor klasterlash yechimlarini sotib olishga pul tejaydi. Ular qimmat va ularda ham xatolar bor.
Uzoq muddatda xatolarga chidamli arxitektura rivojlanishning barcha bosqichlarida o'zini ko'p marta to'laydi.
Kod bazasida xabar almashish rivojlanish bosqichida tizim ichidagi komponentlarning o'zaro ta'sirini batafsil ishlab chiqishga imkon beradi. Bu nosozliklarga javob berish va ularni boshqarish vazifasini soddalashtiradi, chunki barcha muhim komponentlar nosozliklarni bartaraf qiladi va natijada paydo bo'lgan tizim dizayn bo'yicha nosozlikdan keyin qanday qilib avtomatik ravishda normal holatga qaytishni biladi.

Javob berish

Muvaffaqiyatsizliklardan qat'i nazar, dastur so'rovlarga javob berishi va SLA talablariga javob berishi kerak. Haqiqat shundaki, odamlar kutishni xohlamaydilar, shuning uchun korxonalar shunga moslashishi kerak. Ko'proq va ko'proq ilovalar juda sezgir bo'lishi kutilmoqda.
Javob beruvchi ilovalar deyarli real vaqtda ishlaydi. Erlang VM yumshoq real vaqt rejimida ishlaydi. Birja savdosi, tibbiyot va sanoat uskunalarini nazorat qilish kabi ba'zi sohalar uchun qattiq real vaqt rejimi muhim ahamiyatga ega.
Javob beruvchi tizimlar UXni yaxshilaydi va biznesga foyda keltiradi.

Dastlabki xulosa

Ushbu maqolani rejalashtirayotganda, men xabar almashish brokerini yaratish va unga asoslangan murakkab tizimlarni yaratish bo'yicha tajribam bilan o'rtoqlashmoqchi edim. Ammo nazariy va motivatsion qism juda keng bo'lib chiqdi.
Maqolaning ikkinchi qismida men almashinuv punktlarini amalga oshirishning nuanslari, xabar almashish naqshlari va ularni qo'llash haqida gapiraman.
Uchinchi qismda xizmatlarni tashkil etish, marshrutlash va balanslashning umumiy masalalarini ko'rib chiqamiz. Keling, tizimlarning masshtabliligi va nosozliklarga chidamliligining amaliy tomoni haqida gapiraylik.

Birinchi qismning oxiri.

foto @lucabravo.

Manba: www.habr.com

a Izoh qo'shish