Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүдsophiagworld-д LOST

Энэ нийтлэлд инженерүүдэд сая сая хэрэглэгчдийн ханддаг том хэмжээний үйлчилгээтэй ажиллахад туслах нийтлэг хэв маягийг агуулсан болно. 

Зохиогчийн туршлагаас харахад энэ нь бүрэн жагсаалт биш, гэхдээ үнэхээр юм үр дүнтэй зөвлөгөө өгөх. За ингээд эхэлцгээе.

Дэмжлэгээр орчуулсан Mail.ru үүлэн шийдэл.

Эхний түвшин

Доор жагсаасан арга хэмжээнүүд нь хэрэгжүүлэхэд харьцангуй хялбар боловч үр нөлөө нь өндөр. Хэрэв та өмнө нь туршиж үзээгүй бол мэдэгдэхүйц сайжруулалтыг хараад гайхах болно.

Дэд бүтцийг код болгон

Зөвлөмжийн эхний хэсэг нь дэд бүтцийг код болгон хэрэгжүүлэх явдал юм. Энэ нь та бүхэл бүтэн дэд бүтцийг байрлуулах программын аргатай байх ёстой гэсэн үг юм. Энэ нь төвөгтэй мэт санагдаж байгаа ч үнэндээ бид дараах кодын тухай ярьж байна.

100 виртуал машин байршуулах

  • Ubuntu-тай
  • Тус бүрдээ 2 ГБ RAM
  • Тэд дараах кодтой байх болно
  • Эдгээр параметрүүдтэй

Та дэд бүтцийнхээ өөрчлөлтийг хянаж, хувилбарын хяналтыг ашиглан хурдан буцаах боломжтой.

Миний дотор байгаа модернист хүн та Kubernetes/Docker програмыг ашиглан дээрх бүх зүйлийг хийж болно гэж хэлсэн, түүний зөв.

Үүнээс гадна та тогооч, хүүхэлдэй эсвэл Терраформ ашиглан автоматжуулалт хийж болно.

Тасралтгүй интеграци ба хүргэлт

Өргөтгөх боломжтой үйлчилгээг бий болгохын тулд татах хүсэлт бүрийг бүтээх, турших дамжуулах хоолойтой байх нь чухал юм. Туршилт нь маш энгийн байсан ч гэсэн таны байршуулсан кодыг хөрвүүлэхийг баталгаажуулах болно.

Энэ үе шатанд та дараах асуултанд хариулдаг. Миний ассемблей эмхэтгэж, шалгалт өгөх үү, энэ нь хүчинтэй юу? Энэ нь бага бар мэт санагдаж болох ч олон асуудлыг шийддэг.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Эдгээр хачиг харах шиг сайхан зүйл байхгүй

Энэ технологийн хувьд та Github, CircleCI эсвэл Jenkins-ийг үнэлэх боломжтой.

Ачаалал тэнцвэржүүлэгч

Тиймээс бид траффикийг дахин чиглүүлж, бүх зангилаанууд дээр ижил ачааллыг хангахын тулд ачаалал тэнцвэржүүлэгчийг ажиллуулахыг хүсч байна, эсвэл алдаа гарсан тохиолдолд үйлчилгээ үргэлжлэх болно.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Ачаалал тэнцвэржүүлэгч нь ихэвчлэн замын хөдөлгөөний хуваарилалтыг сайн хийдэг. Хамгийн сайн туршлага бол нэг ч алдаа гаргахгүйн тулд тэнцвэрээ хэтрүүлэх явдал юм.

Ерөнхийдөө ачаалал тэнцвэржүүлэгчийг таны ашигладаг үүлэн дээр тохируулсан байдаг.

RayID, корреляцийн ID эсвэл хүсэлтийн UUID

Та ийм мессеж бүхий програмын алдаатай тулгарч байсан уу: "Ямар нэгэн зүйл буруугаар эргэсэн. Энэ ID-г хадгалаад манай туслах баг руу илгээнэ үү"?

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Өвөрмөц танигч, корреляцийн ID, RayID эсвэл аль нэг хувилбар нь хүсэлтийг амьдралынхаа туршид хянах боломжийг олгодог өвөрмөц танигч юм. Энэ нь бүртгэлийн бүх хүсэлтийн замыг хянах боломжийг танд олгоно.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Хэрэглэгч А системд хүсэлт гаргаж, дараа нь А нь В-тэй холбогдож, C-тэй холбогдож, X-д хадгалдаг бөгөөд дараа нь хүсэлтийг А руу буцаана.

Хэрэв та алсаас виртуал машинтай холбогдож хүсэлтийн замыг хянах гэж оролдвол (мөн ямар дуудлага хийгдэж байгааг гараар уялдуулах) бол та галзуурах болно. Өвөрмөц танигчтай байх нь амьдралыг илүү хялбар болгодог. Энэ бол таны үйлчилгээ нэмэгдэхийн хэрээр цаг хэмнэх хамгийн энгийн зүйлсийн нэг юм.

Дундаж түвшин

Энд байгаа зөвлөгөө нь өмнөх зөвлөмжүүдээс илүү төвөгтэй боловч зөв хэрэгсэл нь ажлыг хөнгөвчлөх бөгөөд жижиг, дунд компаниудад ч гэсэн хөрөнгө оруулалтын өгөөжийг өгдөг.

Төвлөрсөн мод бэлтгэл

Баяр хүргэе! Та 100 виртуал машин байршуулсан байна. Маргааш нь Гүйцэтгэх захирал ирж, уг үйлчилгээг турших явцад гарсан алдааны талаар гомдоллодог. Энэ нь бидний дээр дурдсан харгалзах ID-г мэдээлдэг боловч сүйрэлд хүргэсэн машиныг олохын тулд 100 машины бүртгэлийг үзэх шаардлагатай болно. Тэгээд маргаашийн илтгэлээс өмнө олох хэрэгтэй.

Хэдийгээр энэ нь хөгжилтэй адал явдал мэт сонсогдож байгаа ч бүх сэтгүүлийг нэг дороос хайх чадвартай байх нь дээр. Би ELK стекийн суулгасан функцийг ашиглан логуудыг төвлөрүүлэх асуудлыг шийдсэн: энэ нь хайлт хийх боломжтой бүртгэлийн цуглуулгыг дэмждэг. Энэ нь тодорхой сэтгүүл олох асуудлыг шийдвэрлэхэд үнэхээр тусална. Бонус болгон та график болон бусад хөгжилтэй зүйлсийг үүсгэж болно.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
ELK стек функц

Хяналтын агентууд

Нэгэнт таны үйлчилгээ хэвийн ажиллаж байгаа тул та үүнийг хэвийн ажиллаж байгаа эсэхийг шалгах хэрэгтэй. Үүнийг хийх хамгийн сайн арга бол хэд хэдэн удаа ажиллуулах явдал юм агентууд, аль нь зэрэгцээ ажиллаж, ажиллаж байгаа, үндсэн үйлдлүүд хийгдсэн эсэхийг шалгана.

Энэ үед та үүнийг шалгана уу гүйлтийн бүтэц нь сайн мэдрэгдэж, сайн ажилладаг.

Жижиг, дунд хэмжээний төслүүдийн хувьд би API-г хянах, баримтжуулах зорилгоор Postman-г санал болгож байна. Гэхдээ ерөнхийдөө та ямар ч үед тасалдал үүссэнийг мэдэж, цаг тухайд нь мэдэгдэх арга зам байгаа эсэхийг шалгахыг хүсч байна.

Ачааллаас хамааран автоматаар масштаблах

Энэ бол маш энгийн. Хэрэв танд VM үйлчилгээ үзүүлэх хүсэлт байгаа бөгөөд санах ойн ашиглалт 80% дөхөж байгаа бол та түүний нөөцийг нэмэгдүүлэх эсвэл кластерт илүү олон VM нэмэх боломжтой. Эдгээр үйлдлүүдийг автоматаар гүйцэтгэх нь ачааллын дор уян хатан хүчийг өөрчлөхөд маш сайн байдаг. Гэхдээ та хэр их мөнгө зарцуулахдаа үргэлж болгоомжтой байж, боломжийн хязгаар тогтоох хэрэгтэй.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Ихэнх үүлэн үйлчилгээнүүдийн хувьд та үүнийг илүү олон сервер эсвэл илүү хүчирхэг сервер ашиглан автоматаар масштаблахаар тохируулах боломжтой.

Туршилтын систем

Шинэчлэлтүүдийг аюулгүйгээр нэвтрүүлэх сайн арга бол хэрэглэгчдийн 1%-д нэг цагийн турш ямар нэг зүйлийг туршиж үзэх явдал юм. Мэдээжийн хэрэг та ийм механизмыг ажиллаж байгааг харсан. Жишээлбэл, Facebook нь үзэгчдийн зарим хэсгийг өөр өнгөөр ​​харуулдаг эсвэл үсгийн хэмжээг өөрчилдөг бөгөөд хэрэглэгчид өөрчлөлтийг хэрхэн хүлээж авч байгааг харах боломжтой. Үүнийг A/B тест гэж нэрлэдэг.

Тэр ч байтугай шинэ функц гаргахыг туршилтаар эхлүүлж, дараа нь үүнийг хэрхэн гаргахаа тодорхойлж болно. Мөн та үйлчилгээнийхээ доройтолд хүргэж буй функц дээр үндэслэн тохиргоог "санах" эсвэл өөрчлөх боломжтой болно.

Нарийвчилсан түвшин

Хэрэгжүүлэхэд нэлээд хэцүү зөвлөмжүүд энд байна. Танд арай илүү нөөц хэрэгтэй байх тул жижиг эсвэл дунд хэмжээний компани үүнийг удирдахад хэцүү байх болно.

Цэнхэр ногоон байршуулалт

Үүнийг би “Эрлангийн” задлах арга гэж нэрлэдэг. Утасны компаниуд гарч ирэхэд Эрланг өргөн хэрэглэгдэх болсон. Утасны дуудлагыг чиглүүлэхэд зөөлөн унтраалга ашиглаж эхэлсэн. Эдгээр унтраалга дээрх програм хангамжийн гол зорилго нь системийг шинэчлэх үед дуудлагыг таслахгүй байх явдал байв. Эрланг өмнөх модулийг гацахгүйгээр шинэ модулийг ачаалах сайхан аргатай.

Энэ алхам нь ачаалал тэнцвэржүүлэгч байгаа эсэхээс хамаарна. Таны програм хангамжийн N хувилбар байгаа бөгөөд N+1 хувилбарыг ашиглахыг хүсч байна гэж төсөөлөөд үз дээ. 

Та бид чадна зүгээр л үйлчилгээгээ зогсоож, хэрэглэгчдэдээ тохирсон цагтаа дараагийн хувилбарыг гаргаад хэсэг хугацаанд ажиллахгүй болно. Гэхдээ танд байгаа гэж бодъё Үнэхээр SLA-ийн хатуу нөхцөл. Тиймээс SLA 99,99% нь таныг офлайнаар ажиллах боломжтой гэсэн үг юм зөвхөн жилд 52 минут.

Хэрэв та үнэхээр ийм үзүүлэлтэд хүрэхийг хүсч байгаа бол нэгэн зэрэг хоёр байршуулалт хийх хэрэгтэй. 

  • яг одоо байгаа нь (N);
  • дараагийн хувилбар (N+1). 

Та ачааллын тэнцвэржүүлэгчид регрессийг идэвхтэй хянаж байх хооронд хөдөлгөөний тодорхой хувийг шинэ хувилбар руу (N+1) чиглүүлэхийг хэлээрэй.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Энд бид сайн ажилладаг ногоон N байршуулалттай байна. Бид энэ байршуулалтын дараагийн хувилбар руу шилжихийг оролдож байна

Эхлээд бид N+1 байршуулалт нь бага хэмжээний траффиктэй ажилладаг эсэхийг шалгахын тулд үнэхээр жижиг тест илгээдэг.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Эцэст нь хэлэхэд, бид автоматжуулсан шалгалтын багцтай бөгөөд тэдгээрийг байрлуулж дуустал ажиллуулдаг. Хэрэв чи маш их болгоомжтой байгаарай, та муу регрессийн үед хурдан буцаахын тулд N байршуулалтыг үүрд хадгалах боломжтой:

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Хэрэв та илүү дэвшилтэт түвшинд шилжихийг хүсч байвал цэнхэр-ногоон байршуулалтын бүх зүйлийг автоматаар ажиллуулаарай.

Аномали илрүүлэх, автоматаар бууруулах

Төвлөрсөн бүртгэлтэй, сайн бүртгэлтэй гэдгээ харгалзан илүү өндөр зорилго тавих боломжтой. Жишээлбэл, бүтэлгүйтлийг урьдчилан таамаглах. Функцуудыг монитор, логууд дээр хянаж, янз бүрийн диаграммуудыг бүтээдэг бөгөөд та юу буруу болохыг урьдчилан таамаглах боломжтой.

Үүл үйлчилгээтэй байхдаа хэрхэн тайван унтах вэ: архитектурын үндсэн зөвлөмжүүд
Аномали илэрсэний дараа та үйлчилгээ үзүүлж буй зарим сэжүүрүүдийг шалгаж эхэлнэ. Жишээлбэл, CPU-ийн ачаалал ихсэх нь хатуу диск доголдож байгааг илтгэж болох бол хүсэлтийн өсөлт нь таны хэмжээг нэмэгдүүлэх шаардлагатай байгааг илтгэж болно. Энэ төрлийн статистик мэдээлэл нь үйлчилгээг идэвхтэй болгох боломжийг олгодог.

Эдгээр ойлголтуудын тусламжтайгаар та ямар ч хэмжигдэхүүнээр хэмжиж, машин, мэдээллийн сан, холболт болон бусад нөөцийн шинж чанарыг идэвхтэй, идэвхтэй өөрчлөх боломжтой.

Тэгээд л болоо!

Хэрэв та үүлэн үйлчилгээг бий болгож байгаа бол энэ тэргүүлэх чиглэлүүдийн жагсаалт танд маш их бэрхшээлээс зайлсхийх болно.

Анхны нийтлэлийн зохиогч уншигчдыг санал хүсэлтээ үлдээж, өөрчлөлт оруулахыг урьж байна. Нийтлэлийг зохиогчийн хүсэлтээр нээлттэй эх сурвалж болгон түгээдэг Github дээр хүлээн авдаг.

Энэ сэдвээр өөр юу унших вэ:

  1. Явж, CPU кэш
  2. Хэрэгжүүлэх загвар бүхий далайн дээрэмчлэлийн сүнстэй Кубернетес
  3. Telegram дахь Kubernetes-ийн эргэн тойронд манай суваг

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх