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 байдлаар дүрслэх гэж оролдъё.
Харж байгаачлан, microservices загвар нь жижиг систем болон, цөөн хүнтэй компанид тохиромжгүй байж мэдэх юм. Харин дээр дурьдсанчлан, хэрвээ хэрэгчлэгчийн тоо ихсээд scaling хийх шаардлагатай болсон үед хэрэгтэй загвар юм.
Миний мэдэхээр ямар ч байсан, Amazon, Netflix, LinkedIn гэх мэт бараг бүх их хэрэглэгчтэй компаниуд microservices загварыг ашигладаг. Миний хувьд, өөрөө ийм архитектур гаргаж байгаагүй ч, одоо ажиллаж байгаа прожект дээр, ирээдүйд ийм загвар луу шилжих талаар ярилцаж байгаа болохоор судалж байгаа юм.
За дараагийн бичлэгээр уулзах хүртэй баяртай!
Сайн уу,
Юуны өмнө баярлалаа, дажгүй нийтлэл болжээ.
Дараах эдэн зүйл дээр өөрийн сэтгэгдлээ бичлээ.
>
Нэг нийтлэл уншиж байхад, “систем хөгжүүлэлтийн сүүлийн шат нь microservices юм” гэсэн байна лээ. Тэгэхээр, системийн чинь хэрэглэгчийн тоо нь ихсээд, scaling шаардлагатай болж ирэх үед, нэгэн төрлийн сонголт болгон харахад гэмгүй болов уу
Юуны өмнө одоо байгаа monolithic системийн чинь асуудал нь юу байгааг нилээн ул суурьтай авч үзэх хэрэгтэй болов уу. Хэдийгээр микросервис гэх архетиктур маш олон зүйл амалж байгаа боловч яг өөрчлөх шаардлага (асуудлууд) байгаа эсэхийг оновчтой тодорхой болгохгүй бол өөртөө хэт ахадсан зүйл ч болж магадгүй байхаа.
>
Харин monolithic системийн хувьд, аль хэдийн өөр зүйлүүдтэй хэт уялдаа хамааралтай болчихсон байх тул, өөрчлөлт хийхэд хэцүү байх болно.
Миний бодлоор аль аль загварын аргуудад нь давуу болон сул талууд байгаа. Жишээлбэл monolithic загварын нэг давуу тал бүх зүйлүүд тань ганц эх үүсвэрээс бүрдэж байгаа тул deployment хийхэд хялбар, хурдан байх болно. Мэдээж асуудал системийн хэмжээ, нарийн төвөгтэй байдал, хөгжүүлж байгаа хүмүүсийн тоо, бүтэц зэргээс хамаарах нь тодорхой.
>
Харж байгаачлан, microservices загвар нь жижиг систем болон, цөөн хүнтэй компанид тохиромжгүй байж мэдэх юм.Харин дээр дурьдсанчлан, хэрвээ хэрэгчлэгчийн тоо ихсээд scaling хийх шаардлагатай болсон үед хэрэгтэй загвар юм.
Асуудлын гол нь хэрэглэгчийн тоо гэхээсээ илүү системийн нарийн төвөгтэй байдал болов уу.
Ихэвчлэн аливаа том системүүд нилээд төвөгтэй болоод ирэхээр аяндаа аль нэг тодорхой хэсгийг хариуцаж авдаг баг, мэргэжилтэнгүүд бий болоод ирнэ. Тиймээс тэдгээр багуудын ажилууд ямар загвараар явбал илүү үр дүнтэй, хурдан явагдах гэсэн шаардлагаас дагуу аль загварыг сонгохоо шийдэх нь дээр байхаа.
>
Хэрвээ жижиг систем хөгжүүлж байгаа бол, зүгээр monolithic-ээр явсан нь дээр байх.
Энэ дээр санал нэг байна. http://martinfowler.com/bliki/MonolithFirst.html энийг нэг үзээрэй. Яагаад шууд microservice загвараар том системийг хөгжүүлж болохгүй талаар тодорхой тайлбарласан байгаа.
Нэг жижиг анзаарсан зүйл гэвэл тэр 2 дугаар зураг дээр (microservices) чи Comment, Post, Authentication сервисүүдээ DataService-тэй холбоцон байна лээ. Миний бодлоор микросервис-үүд зөвхөн хоорондоо API-иар холбогдох ёстой. Тиймээс өгөгдлийн баазууд нь тус тусдаа өөр хоорондоо ямар ч холбоогүй байна.
Миний бодлоор микросервисийн хамгийн чухал зүйл нь “Business Capability” буюу системийн нэг бизнес функцыг хариуцаж, гүйцэтгэх.
Үүнийг мөн нэг хараарай.
– http://martinfowler.com/articles/microservices.htm
– http://www.infoq.com/news/2014/08/microservices-monoliths
Миний хувьд гэвэл манай компани одоогоор нилээн том monolithic загвараар явж байгаа. Шилжих, солих талаар нилээд яригдаж байгаа ч эхлээд боломжтой хэсгүүдийн хил хязгаарыг (boundary) болгосны дараа л эхний нэг, хоёр сервисүүд яг тусдаа гарах байх.
За маш урт сэтгэгдэл бичсэнд уучлаарай хө. 🙂