Microservices

Microservices нь нэгэн төрлийн архитектур загвар юм. Microservices-ын талаар ярихын өмнө, эхлээд дараах ойлголтуудыг тайлбарлъя.

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

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

Polyglot Microservices – Энэ зүгээр л microservices. Харин, бүх систем чинь адилхан хэл дээр хөгжүүлэлт хийгдсэн байх албагүй, системийн онцлогоос хамааран өөр өөр хэл дээр хөгжүүлэгдсэн байхыг ингэж нэрлэнэ.

Microservices-ын талаар бага зэрэг ойлголттой болсон байх. Хэрвээ жижиг систем хөгжүүлж байгаа бол, зүгээр monolithic-ээр явсан нь дээр байх. Нэг нийтлэл уншиж байхад, “систем хөгжүүлэлтийн сүүлийн шат нь microservices юм” гэсэн байна лээ. Тэгэхээр, системийн чинь хэрэглэгчийн тоо нь ихсээд, scaling шаардлагатай болж ирэх үед, нэгэн төрлийн сонголт болгон харахад гэмгүй болов уу.

Одоо microservices давуу талуудын талаар ярилцъя.

Хялбар код менежмент болон хөгжүүлэлт
Monolithic системийн хувьд, ямар нэгэн шинэ зүйл нэмэх болгонд кодын чинь хэмжээ ихсэнэ. Бүхэл нэг код тул, аль нэг газар алдаа гаргахад л бусад газарт нөлөөлөх болно. Мөн, хөгжүүлэгч бүр тэр код руу хандаж байгаа тул, явцын дунд, хэн нь аль хэсгийг хариуцаж байгаа нь харагдахаа больж эхлэнэ. Харин microservices-ын хувьд, систем тус бүр тус тусдаа кодтой байх тул, кодын хэмжээ замбараагүй өсөж хяналтаас гарахаас сэргийлж чадах юм. Мөн систем бүрийг тусгай багуудад хариуцуулснаар, тэр систем нь өөрийн гэсэн эзэнтэй болж, байнга арчилж, сайжруулахад амар болно. Мөн дараагийн хувилбарыг тэс өөрөөр хийхээр шийдсэн бол, зөвхөн тэр системээ л дахин бичихэд хангалттай. Харин monolithic системийн хувьд, аль хэдийн өөр зүйлүүдтэй хэт уялдаа хамааралтай болчихсон байх тул, өөрчлөлт хийхэд хэцүү байх болно.

Availability
Монгол хэл рүү юу гэж орчуулахаа мэдсэнгүй. Ер нь бол, систем чинь унахгүй, зогсолтгүй ажиллах чадвар л юм уу даа. Monolithic системийн хувьд, нэг газар л алдаа гарахад систем чинь тэр чигээрээ унах магадлалтай. Жишээ нь асар том PHP дээр бичигдсэн систем байлаа гэхэд, нэг semicolon мартахад л систем чинь тэр чигээрээ зогсоно.
Харин microservices-ын хувьд, ямар систем унаснаас хамаарч систем-ын зарим хэсгүүд ажиллах боломжтой юм.

Уян хатан scaling
Одоо бараг ихэнх газрууд auto-scaling хийдэг болсон байх. Серверийн ачааллаас хамаараад, шинэ instance үүсгэх эсвэл устгадаг. Microservices-ын хувьд систем тус бүр дээр scaling хийх боломжтой юм.

Гэх мэт олон давуу талтай юм. Өөр давуу талууд бас байгаа, тэгэхдээ яг одоо санаанд орж ирэхгүй байна.

Жишээ болгож миний блогоо бичиж байгаа WordPress-ыг monolithic болон microservices байдлаар дүрслэх гэж оролдъё.
Monolithic WordPress
Microservices WordPress (2)

Харж байгаачлан, microservices загвар нь жижиг систем болон, цөөн хүнтэй компанид тохиромжгүй байж мэдэх юм. Харин дээр дурьдсанчлан, хэрвээ хэрэгчлэгчийн тоо ихсээд scaling хийх шаардлагатай болсон үед хэрэгтэй загвар юм.
Миний мэдэхээр ямар ч байсан, Amazon, Netflix, LinkedIn гэх мэт бараг бүх их хэрэглэгчтэй компаниуд microservices загварыг ашигладаг. Миний хувьд, өөрөө ийм архитектур гаргаж байгаагүй ч, одоо ажиллаж байгаа прожект дээр, ирээдүйд ийм загвар луу шилжих талаар ярилцаж байгаа болохоор судалж байгаа юм.

За дараагийн бичлэгээр уулзах хүртэй баяртай!