API Gateway nima?
Microservice
Tasavvur qiling online do’kon yaratmoqchisiz. Ilovangizda quyidagi imkoniyatlar mavjud:
- Buyurtma berish
- Mahsulot haqida ma’lumotlar olish
- Mahsulot ro’yxatini olish
Shu xususiyatar asosida bizda bir nechta servislar(mikroservices) mavjud:
- Product Service
- Order Service
- Pricing Service
- Account Service
- Customer Review Service
- Inventory Service
Ilovangizdan foydalanish davomida foydalanuvchi bir necha servislardan foydalanadi. Agar siz asosiy oynaga kirib biror bir mahsulotga qidiruv bersangiz, mahsulotlar roʻyxatini chiqarib beradi. Bu roʻyxat shakllanish jarayonida yuqoridagi servislarga murojaat qilib mahsulot nomi, narxi, mahsulot tarixi va hokazolarni list ko’rinishida taqdim etadi. (quyidagi rasm)
Shunday qilib mahsulotni ko’rsatadigan kod product servis, account servis, customer review servis lardan ma’lumotlarni olib bizga ko’rsatadi.
Bu grafikdagi klient ilovasi API kompasitor vazifasini bajaradi. U bir nechta servis larni chaqiradi va birlashtiradi.
Bu holatda maummo nimada?
Yondashuv oqilona bo’lib ko’rinsada unda jiddiy muammolar mavjud.
- User ma’lumotlarini olish uchun birnechta api ga request jo’natish Foydalanuvchi ma’lumotini olish uchun bir nechta so’rovlarni amalga oshirish kerak va foydalanuvchi so’rovlarini ketma-ketlikda bajarish kerak. Bu ketma-ketlikni amalga oshirish uchun api kompozitsiyon kodini yozish talab qilinadi va bu potensial murakkab vazifa.
- Servis lar o’zgarishidagi muammolar(Lack Of Encapsulation) Ma’lumki servislarga to’g’ridan to’g’ri kirishda ko’plab muammolar mavjud. Application rivojlanib borar ekan, bazida api larni o’zgartirishga to’g’ri keladi. Natijada o’zgargan api lardan foydalanayotgan mijozlarda(web, andorid, iOS) larda api bilan bo’gliq muammolar paydo bo’ladi.
- Mos kelmaydigan protokol(Unfriendly Protocol). Bazi servis lar gRPC yoki AMQP messaging protokollar ishlatilishi mumkin. Bu ichki servis lar uchun juda zo’r yechim bo’lishi mumkin. Lekin mobile klient yoki veb klientlar uchun anchgina muammo bo’lishi mumkin. Yoki baʼzi bir protokol mexanizmlarini klient platformalarida moslashtirish qiyin bo’lishi mumkin.
Bu holatda qanday yechim qilish mumkin? degan tabiiy savol tug’ilishi mumkun. Endi bu muammoni yechimi haqida gaplashsak.
Yechim:
API Gateway(AG) — bu mikroservislar to’plami uchun yagona kirish nuqtasi vazifasini bajaradigan servis.
API Gateway klientdan kelgan request(soʻrov)larni qabul qiladi, ularni tegishli mikroservis larga yo’naltiradi va ularni javobini mijozga qaytaradi.
API Gateway marshrutlash, autentifikatsiya va rate limiting kabi vazifalar uchun javobgardir. Bu mikroservislarga o’zlarining individual vazifalariga e’tibor qaratish imkonini beradi va tizimning umumiy ishlashi va mashtablashni(scalability) yaxshilaydi.
Request Routing
API Gatewayning asosiy funktsiyalaridan biri so’rovlarni marshrutlashdir. API Gatewayning so’rovlarni mos keladigan servislarga yo’naltirish orqali ba’zi API operatsiyalarini amalga oshiradi. So’rovni qabul qilganda, API Gateway requestni qaysi servisga yo’naltirish kerakligini ko’rsatadigan marshrutlash xaritasiga murojaat qiladi.
API Composition
API Gateway API tarkibini ham ta’minlaydi. Men buni bazi bir misol yordamida tushuntiraman.
Yuqoridagi rasmda ko’rsatilganidek, Android klient bir nechta API so’rovlarini amalga oshiryapti.
Yuqoridagi rasmda ko’rsatilganidek, API Gateway API tarkibini taqdim etadi, bu esa android klientga bitta API so’rovi yordamida ma’lumotlarni samarali tarzda olish imkonini beradi.
Protocol Translation
API Gateway shuningdek, protokol tarjimasini ham ta’minlaydi. Application servislari ichki protokollar yig’indisidan , jumladan REST va gRPCdan foydalansa ham, u tashqi mijozlarga RESTful API taqdim etishi mumkin. Zarur bo’lganda, ba’zi API operatsiyalarini amalga oshirish RESTful tashqi API va ichki gRPC asoslangan API o’rtasida ma’lumotlarni almashina oladi.
API Gateway har bir mijozga xos va mos API lar bilan ta’minlaydi
Bitta yagona API bilan bog’liq muammo shundaki, turli mijozlar ko’pincha turli talablarga ega. Masalan, getOrder API operatsiyasi mahsulot ma’lumotlarini, to’lov ma’lumotlarini va inventar ma’lumotlarini qaytaradi. Ba’zi hollarda, barcha mijozlar barcha ma’lumotlarga muhtoj emas. Aytaylik, mobil mijozga faqat ma’lumotlarning bir qismi kerak. Bu holatda Yechim API Gatewayni har bir mijozga o’z APIsi bilan ta’minlaydi. Masalan, API Gateway getOrder Android, iOS va brauzer mijozi uchun turli xil APIlarni taqdim etishi mumkin.
API Gateway Patternning asosiy xususiyatlari
API Gateway bir nechta afzalliklarni beradi . Mijoz so’rovini bajarish va ichki mikroservislarga yo’naltirishimiz sababli, biz API Gateway ni ba’zi foydali xususiyatlardan foydalanishimiz mumkin bo’ladi .
Xususiyatlarni ko’rib chiqaylik.
𝗥𝗼𝘂𝘁𝗶𝗻𝗴: API Gateway mijozlardan soʻrovlarni qabul qiladi va ularni tegishli mikroservisga yoʻnaltiradi. Bu mijozlarga bitta kirish nuqtasi orqali turli xil mikroservislarga kirish imkonini beradi, bu esa umumiy tizim dizaynini soddalashtiradi.
𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆: API Gateway mijozlarni autentifikatsiya qilish va mikroservislar uchun kirishni boshqarish siyosatini amalga oshirish uchun ishlatilishi mumkin. Bu mikroservislarga faqat vakolatli mijozlar kirishini ta’minlashga yordam beradi va ruxsatsiz kirishning oldini olishga yordam beradi.
𝐓𝐫𝐚𝐧𝐬𝐟𝐨𝐫𝐦𝗶𝗻𝗴 𝐫𝐞𝐪𝐮𝐞𝐬𝐭𝐬 𝐚𝐧𝐝 𝐫𝐞𝐬𝐩𝐨𝐧𝐬𝐞𝐬 : API Gateway turli mijozlarning so’rovlarini qondirish yoki turli xil backend arxitekturasiga mos kelish uchun kiruvchi so’rovlarni va chiquvchi javoblarni backendda o’zgartirishi mumkin.
𝗥𝗮𝘁𝗲 𝗹𝗶𝗺𝗶𝘁𝗶𝗻𝗴: Siz API Gateway bilan mijozning mikroservislarga kirishini cheklashingiz mumkin. Bu xizmat hujumlarini bartaraf etishi va boshqa turdagi zararli xatti-harakatlarning oldini olishga yordam beradi.
𝗟𝗼𝗮𝗱 𝗯𝗮𝗹𝗮𝗻𝗰𝗶𝗻𝗴: API Gateway kiruvchi soʻrovlarni mikroservisning bir nechta namunalari(instances) oʻrtasida taqsimlashi mumkin, bu tizimda koʻproq soʻrovlarni boshqarish imkonini beradi va uning samaradorligini oshiradi.
𝗖𝗮𝗰𝗵𝗶𝗻𝗴: API Gateway mikroservislar javoblarni keshlashi mumkin va buning natijasida mikroservislarga yuborilishi kerak boʻlgan soʻrovlar sonini kamaytiradi va tizimning umumiy ish faoliyatini yaxshilaydi.
𝗦𝗲𝗿𝘃𝗲𝗿𝗹𝗲𝘀𝘀 𝗲𝘅𝗲𝗰𝘂𝘁𝗶𝗼𝗻: API Gateway boshqa servislar bilan integratsiyalasha oladi.
𝗖𝗶𝗿𝗰𝘂𝗶𝘁 𝗯𝗿𝗲𝗮𝗸𝗲𝗿: API Gateway kaskadli nosozliklardan himoyalanish va tizimingiz chidamliligini oshirishga yordam beradigan breaker patternlarni amalga oshirish uchun ishlatilishi mumkin.
𝗥𝗲𝘃𝗲𝗿𝘀𝗲 𝗽𝗿𝗼𝘅𝘆: API Gateway kiruvchi soʻrovlarni soʻrov yoʻli yoki boshqa mezonlar asosida tegishli backend xizmatiga yoʻnaltiruvchi teskari proksi-server sifatida ishlashi mumkin.
𝗔𝗣𝗜 𝘃𝗲𝗿𝘀𝗶𝗼𝗻𝗶𝗻𝗴: API Gateway API versiyasini amalga oshirish uchun ishlatilishi mumkin, bu sizga APIning bir nechta versiyasini saqlash va bir versiyadan ikkinchisiga oʻtishni boshqarish imkonini beradi.
API Gateway ishonchli bo’lishi kerak. Buning uchun load balancer oqali gateway ni bir nechta nusxalarini(replicalari) ishga tushirish kerak. Agar bitta gateway o’chib qolsa yoki nimadur bo’lsa, load balancer so’rovlarni boshqa instancega(gateway) yo’naltiradi.
Manba : Mehmet Ozkaya, Arslan Ahmad, Jonatan Natanael Siaxan
(Ingliz tilidagi baʼzi atamalar tarjima qilinmagan)