
Үйлчилгээнд суурилсан архитектур гэж юу вэ?

Ц.Биндэрцэцэг
Багш


Ц.Биндэрцэцэг
Багш
Бидний өдөр тутмын амьдралд ашигладаг программ, аппликейшн, систем бүр “үйлчилгээ”-нд суурилдаг гэвэл та итгэх үү?
Онлайн захиалга хийх, банкны гүйлгээ хийх, мэдээ унших гэх мэтчилэн эдгээр нь жижиг үйлчилгээ бүхий программуудын нэгдэл юм. Харин тэдгээрийг хэрхэн зохион байгуулж, хооронд нь уялдуулдаг вэ? Хариулт нь Service-Oriented Architecture (SOA) буюу Үйлчилгээнд суурилсан архитектур юм.
SOA нь программуудыг бие даасан, дахин ашиглах боломжтой үйлчилгээ (service) болгон бүтээдэг программ хангамжийн зохиомжийн арга юм. Эдгээр үйлчилгээг стандарт протокол ашиглан сүлжээгээр дамжуулан ашиглах боломжтой. Үйлчилгээ бүр тодорхой функц гүйцэтгэдэг бөгөөд бусад программууд дахин ашиглах боломжтой тул хөгжүүлэлт илүү уян хатан, өргөтгөхөд хялбар болдог. Үндсэн зарчмууд нь:
Formal contract : Үйлчилгээ нь тодорхойлолттой бөгөөд хэрэглэгчтэй харилцахдаа энэ гэрээг дагана. Гэрээнд үйлчилгээний төгсгөлийн цэг, мессеж солилцох формат, үйл ажиллагаа, оролт, гаралт гэх мэт багтдаг. Гэрээ тодорхой, тогтвортой байх нь чухал.
Abstraction : Үйлчилгээний логик нь хэрэглэгчээс нуугддаг. Хэрэглэгч зөвхөн үйлчилгээг ашиглахад шаардлагатай мэдээллийг л хардаг.
Loose coupling : Үйлчилгээ ба хэрэглэгч нь бие биетэйгээ аль болох бие даасан байдлаар ажиллана. Энэ нь хөгжүүлэлтийг чөлөөтэй, аюулгүй болгодог.
Autonomy : Үйлчилгээнүүд өөрийн логик, гүйцэтгэлийн орчныг хянах боломжтой. Ингэснээр үйлчилгээ илүү найдвартай ажиллана.
Reusability : Үйлчилгээг олон программ, бизнес процесст дахин ашиглах боломжтой байхаар зохион байгуулна.
Discoverability : Үйлчилгээг мета өгөгдлөөр тэмдэглэснээр бусад прогрмам, агентууд хялбархан олох боломжтой болно.
Composability : Үйлчилгээ нь бусад үйлчилгээнүүдтэй нийлж илүү нарийн төвөгтэй системийг бүтээхэд оролцож чадна.
Statelessness : Боломжтой бол үйлчилгээг төлөвийн өгөгдлөөс хараат бус зохион байгуулна, ингэснээр илүү өргөтгөх боломжтой болно.
Эдгээр зарчмуудын тусламжтайгаар SOA нь орчин үеийн программ, системүүдийг уялдаа холбоотой, найдвартай, дахин ашиглах боломжтой болдог.

Давуу тал нь:
SOA-д үйлчилгээ бүр бие даасан тул нэг удаа хөгжүүлсэн үйлчилгээг олон систем, олон программд давтан ашиглаж болно.
Үйлчилгээнүүд хоорондоо loosely coupled байдаг учраас нэгийг өөрчлөхөд бусдад нөлөөлөхгүй. Энэ нь хөгжүүлэлт, шинэчлэлийг илүү хурдан болгодог.
SOA нь өөр өөр программчлалын хэл, сервер, платформ дээрх үйлчилгээнүүдийг нэг системд нэгтгэх боломж олгодог.
Үйлчилгээнүүд тодорхой API эсвэл протоколоор дамжуулан хүсэлт илгээсэн хэн бүхэнд нээлттэй байдаг.
Жижиг, тусгаарлагдсан үйлчилгээ бүрийг тестлэх, алдаа илрүүлэх нь том монолит системээс илүү хялбар.
Сул тал нь:
Үйлчилгээнүүд хооронд олон удаа өгөгдөл солилцоно. Хүсэлт бүр баталгаажуулалт, өгөгдөл дамжуулалт шаарддаг тул энэ нь системийн ачаалал, хариу өгөх хугацаанд нөлөөлдөг.
SOA-г хэрэгжүүлэхийн тулд зохистой архитектур, сервер, интеграцийн систем, хөгжүүлэлтийн цаг зэрэгт их хэмжээний нөөц шаардлагатай.
Хэдэн арваас хэдэн зуун үйлчилгээнүүд хоорондоо мессеж солилцох үед тэдгээрийг хянах, удирдах, лог хөтлөх, мониторинг хийх нь нарийн төвөгтэй болдог.
Сүүлийн жилүүдэд “үйлчилгээ төвтэй” хоёр архитектур болох SOA болон Microservices хоорондоо төстэй санагддаг учир хүмүүс андуурах нь түгээмэл байдаг. Хэдий уг хоёр систем нь жижиг, бие даасан хэсгүүдэд хуваах зарчимтай боловч хэрэгжих хүрээ, зорилго, бүтэц нь өөр байдаг.
Ихэвчлэн томоохон байгууллагын комплекс, төвлөрсөн системүүдэд ашиглагддаг.
Үйлчилгээнүүд хоорондын уялдаа их, харилцааны бүтэц төвлөрсөн байдаг.
Legacy systems интеграци хийхэд маш тохиромжтой.
Жижиг, бие даасан, өөрийн дата ба логиктой хөнгөн жинтэй үйлчилгээний багц.
Тус бүрдээ API-гаар шууд харилцдаг тул төвлөрсөн ESB байх шаардлагагүй.
Cloud-native аппликейшн, стартап шийдэл, олон хэрэглэгчтэй уян хатан системд илүү ашиглагдана.
Үйлчилгээнүүд бүрэн хараат бус тул өөр өөр технологи, хэл дээр хөгжүүлэх боломжтой.
SOA нь томоохон байгууллагын төвлөрсөн системд илүү тохиромжтой байдаг бол Microservices нь илүү жижиг, бүрэн тусгаарлагдсан үйлчилгээний бүтэцтэйгээр хөгжүүлэлтэд шинэ боломжууд нээдэг. Хэдий ялгаатай ч хоёр систем нь жижиглэх, тусгаарлах, дахин ашиглах зарчимд суурилдгаараа технологийн ертөнцөд үргэлж үнэ цэнтэй хэвээр байсаар байна.