API Gateway के साथ बैच अनुरोध प्रसंस्करण

Bobur Umurzokov

Bobur Umurzokov

April 27, 2023

Technology

बैच अनुरोध प्रसंस्करण वेब विकास में उपयोग की जाने वाली एक शक्तिशाली तकनीक है जो APIs के प्रदर्शन को बेहतर बनाने के लिए उपयोग की जाती है। यह डेवलपर्स को कई API अनुरोधों को एक ही HTTP अनुरोध/प्रतिक्रिया चक्र में समूहित करने की अनुमति देती है। दूसरे शब्दों में, एकल API अनुरोध को क्लाइंट से कई API अनुरोधों में बदला जा सकता है जो बैकेंड सर्वरों के एक समूह को भेजे जाते हैं, और प्रतिक्रियाओं को एक ही प्रतिक्रिया में समाहित करके क्लाइंट को वापस भेजा जाता है। यह क्लाइंट और सर्वर के बीच राउंड ट्रिप्स की संख्या को काफी कम कर सकता है।

इस लेख में, हम Apache APISIX में बैच अनुरोध प्रसंस्करण को कैसे लागू करें इसका पता लगाएंगे और कुछ उपयोग के मामलों पर नज़र डालेंगे जहां यह फायदेमंद हो सकता है।

यह API संरचना पैटर्न के समान है जो माइक्रोसर्विसेज आर्किटेक्चर में व्यापक रूप से लागू किया जाता है।

बैच अनुरोध प्रसंस्करण बनाम कई API कॉल

बैच अनुरोध प्रसंस्करण का उपयोग क्यों करें?

जब एक क्लाइंट सर्वर को कई API अनुरोध भेजता है, तो प्रत्येक अनुरोध के लिए एक अलग HTTP अनुरोध/प्रतिक्रिया चक्र की आवश्यकता होती है। इससे लेटेंसी बढ़ सकती है, प्रदर्शन कम हो सकता है और सर्वर लोड बढ़ सकता है। कई अनुरोधों को एक ही बैच अनुरोध में समूहित करके, HTTP अनुरोध/प्रतिक्रिया चक्रों की संख्या को कम किया जा सकता है, जिससे प्रदर्शन में सुधार होता है और लेटेंसी कम होती है।

बैच अनुरोध प्रसंस्करण उन परिदृश्यों में विशेष रूप से उपयोगी हो सकता है जहां आपको एक ही लेन-देन में कई रिकॉर्ड्स को पुनः प्राप्त करने या अपडेट करने की आवश्यकता होती है, जैसे:

  • डेटाबेस से कई रिकॉर्ड्स पुनः प्राप्त करना
  • डेटाबेस में कई रिकॉर्ड्स अपडेट करना
  • किसी कार्य को पूरा करने के लिए कई API अनुरोधों को निष्पादित करना

बैच अनुरोध प्रसंस्करण के वास्तविक उदाहरण

उदाहरण 1:

मान लीजिए कि आपके पास एक सोशल मीडिया एप्लिकेशन है जो उपयोगकर्ता के फीड को प्रदर्शित करता है, जिसमें उनके दोस्तों और उनके द्वारा फॉलो किए गए पेजों के पोस्ट शामिल होते हैं। इस फीड को भरने के लिए, आपको आवश्यक डेटा पुनः प्राप्त करने के लिए कई API अनुरोध करने की आवश्यकता होती है, जैसे:

  • उपयोगकर्ता के दोस्तों और उनके द्वारा फॉलो किए गए पेजों की सूची पुनः प्राप्त करना।
  • प्रत्येक दोस्त या पेज के लिए, उनके हाल के पोस्ट पुनः प्राप्त करना।

सोशल मीडिया एप्लिकेशन जो उपयोगकर्ता के फीड को प्रदर्शित करता है

पारंपरिक दृष्टिकोण में, आप इनमें से प्रत्येक API अनुरोध को अलग-अलग करेंगे। पहले, आप उपयोगकर्ता के दोस्तों की सूची पुनः प्राप्त करेंगे और दूसरे अनुरोध में, आप प्रत्येक उपयोगकर्ता के दोस्त के हाल के पोस्ट प्राप्त करेंगे। इससे लेटेंसी बढ़ सकती है, खासकर जब उपयोगकर्ता के बहुत सारे दोस्त हों और वे कई पेजों को फॉलो करते हों।

उदाहरण 2:

एक और उदाहरण, आपके पास एक मोबाइल एप्लिकेशन है जो उपयोगकर्ताओं को ब्राउज़ करने के लिए उत्पादों की सूची प्रदर्शित करता है। इस सूची को भरने के लिए, आपको रिमोट सर्वर से उत्पाद डेटा पुनः प्राप्त करने के लिए कई API अनुरोध करने की आवश्यकता होती है, जैसे:

  • उत्पाद आईडी की सूची पुनः प्राप्त करना।
  • प्रत्येक उत्पाद आईडी के लिए, उत्पाद विवरण (नाम, विवरण, छवि, आदि) पुनः प्राप्त करना।

उदाहरण 3:

कल्पना कीजिए कि आपके पास एक कॉन्फ्रेंस प्रबंधन के लिए एक वेब ऐप है जहां सिस्टम में कई स्पीकर हैं और आप एक स्पीकर के सत्र और संबंधित विषयों को एक ही वेब पेज पर प्रदर्शित करना चाहते हैं। एक बैकेंड कॉन्फ्रेंस API सेवा के पास इस जानकारी को उजागर करने के लिए दो अलग-अलग एंडपॉइंट्स /speaker/{speakerId}/sessions और /speaker/{speakerId}/topics हैं। एक स्पीकर से संबंधित सत्र और विषय दोनों को दिखाने के लिए, आप फ्रंटएंड ऐप से दो अनुरोध भेज सकते हैं जो एक आदर्श समाधान नहीं है। इसके बजाय, आप इन सभी अनुरोधों को एक ही HTTP अनुरोध में समूहित करने के लिए एक API गेटवे का उपयोग कर सकते हैं, जैसा कि अगले भाग में बताया गया है।

API गेटवे के साथ बैच अनुरोध प्रसंस्करण

Apache APISIX API गेटवे के साथ बैच अनुरोध प्रसंस्करण

APISIX में बैच अनुरोध प्रसंस्करण को लागू करने के लिए, आप batch-requests प्लगइन का उपयोग कर सकते हैं। यह प्लगइन आपको एक ही HTTP POST अनुरोध पेलोड में API अनुरोधों का एक सेट परिभाषित करने की अनुमति देता है। प्रत्येक अनुरोध का अपना HTTP मेथड, URL पथ, हेडर सेट और पेलोड हो सकता है। उदाहरण 3 (कॉन्फ्रेंस API अनुरोध) के लिए नीचे एक curl अनुरोध कमांड देखें:

curl -i http://{API_GATEWAY_HOST_ADDRESS}/speaker -X POST -d \ '{ "pipeline": [ { "method": "GET", "path": "/speaker/1/topics" }, { "method": "GET", "path": "/speaker/1/sessions" } ] }'

जब APISIX को एक बैच अनुरोध प्राप्त होता है, तो batch-requests प्लगइन पेलोड को पार्स करेगा और बैच में प्रत्येक अनुरोध को समानांतर में निष्पादित करेगा। प्लगइन प्रत्येक अनुरोध से प्रतिक्रियाओं को भी समाहित करेगा और उन्हें क्लाइंट को एक ही HTTP प्रतिक्रिया में वापस भेजेगा। इसे चरण-दर-चरण प्राप्त करने के लिए अगले डेमो भाग को देखें।

बैच अनुरोध प्लगइन डेमो

आप batch-requests प्लगइन का उपयोग करने से पहले, आपको Apache APISIX स्थापित करना होगा।

पूर्वापेक्षाएँ

  • Docker का उपयोग कंटेनराइज्ड etcd और APISIX स्थापित करने के लिए किया जाता है।
  • curl का उपयोग APISIX Admin API को अनुरोध भेजने के लिए किया जाता है। आप API के साथ इंटरैक्ट करने के लिए Postman जैसे आसान टूल्स का भी उपयोग कर सकते हैं।

APISIX को निम्नलिखित क्विकस्टार्ट स्क्रिप्ट के साथ आसानी से स्थापित और शुरू किया जा सकता है:

curl -sL <https://run.api7.ai/apisix/quickstart> | sh

बैकेंड सेवा (अपस्ट्रीम) को कॉन्फ़िगर करें

आपको कॉन्फ्रेंस API के लिए बैकेंड सेवा को कॉन्फ़िगर करने की आवश्यकता होगी जिसे आप अनुरोधों को रूट करना चाहते हैं। यह Apache APISIX में Admin API के माध्यम से एक अपस्ट्रीम सर्वर जोड़कर किया जा सकता है।

curl http://127.0.0.1:9180/apisix/admin/upstreams/1 -X PUT -d ' { "name": "Conferences API upstream", "desc": "Register Conferences API as the upstream", "type": "roundrobin", "scheme": "https", "nodes": { "conferenceapi.azurewebsites.net:443": 1 } }'

बैच प्रसंस्करण API के लिए एक रूट बनाएं

हमें एक नया रूट बनाने की आवश्यकता है जो /speaker के लिए अनुरोधों को इंटरसेप्ट करता है और [public-api](https://apisix.apache.org/docs/apisix/plugins/public-api/) प्लगइन का उपयोग करके बैच प्रसंस्करण के लिए एक सार्वजनिक वर्चुअल एंडपॉइंट को उजागर करता है।

curl http://127.0.0.1:9180/apisix/admin/routes/a -X PUT -d ' { "uri": "/speaker", "plugins": { "public-api": { "uri": "/apisix/batch-requests" } } }'

स्पीकर के विषय और सत्र एंडपॉइंट्स के लिए एक रूट बनाएं

अगला, हम स्पीकर के विषय और सत्र एंडपॉइंट्स (/speaker/*/topics और /speaker/*/sessions पथ मिलान) के लिए एक और रूट बनाते हैं ताकि API गेटवे द्वारा बैच अनुरोधों से निकाले गए व्यक्तिगत अनुरोधों को स्पीकर के विषय या सत्र पुनः प्राप्त करने के लिए जिम्मेदार कॉन्फ्रेंस API एंडपॉइंट्स को फॉरवर्ड किया जा सके और हम मौजूदा अपस्ट्रीम सेवा को संदर्भित करते हैं।

curl http://127.0.0.1:9180/apisix/admin/routes/b -X PUT -d ' { "methods": ["GET"], "uris": ["/speaker/*/topics","/speaker/*/sessions"], "plugins": { "proxy-rewrite":{ "host":"conferenceapi.azurewebsites.net" } }, "upstream_id":"1" }'

आप देख सकते हैं कि हम एक और proxy-rewrite प्लगइन का उपयोग कर रहे हैं और कॉन्फ्रेंस API के लिए होस्ट एड्रेस को स्पष्ट रूप से निर्दिष्ट कर रहे हैं। अन्यथा, API गेटवे DNS रूपांतरण कर सकता है और कॉन्फ्रेंस API को उसके IP एड्रेस के माध्यम से अनुरोध कर सकता है।

बैच अनुरोध प्रसंस्करण का परीक्षण करें

यहां APISIX में batch-requests प्लगइन का उपयोग करने का एक उदाहरण दिया गया है:

curl -i http://127.0.0.1:9080/speaker -X POST -d \ '{ "pipeline": [ { "method": "GET", "path": "/speaker/1/topics" }, { "method": "GET", "path": "/speaker/1/sessions" } ] }'

इस उदाहरण में, /speaker एंडपॉइंट के लिए एक रूट परिभाषित किया गया है, जो batch-requests प्लगइन के माध्यम से बैच अनुरोध प्रसंस्करण का समर्थन करता है। प्लगइन को दो अनुरोधों के एक सेट के साथ कॉन्फ़िगर किया गया है, प्रत्येक आईडी के साथ एक स्पीकर रिकॉर्ड को विषय और सत्र के साथ पुनः प्राप्त करता है। यदि आप इस कमांड को चलाते हैं, तो आपको API गेटवे से एक मर्ज्ड प्रतिक्रिया वापस मिलेगी:

[ { "body":"{\r\n \"collection\": {\r\n \"version\": \"1.0\",\r\n \"links\": [],\r\n \"items\": [\r\n {\r\n \"href\": \"https://conferenceapi.azurewebsites.net/topic/8\",\r\n \"data\": [\r\n {\r\n \"name\": \"Title\",\r\n \"value\": \"Microsoft\"\r\n }\r\n ],\r\n \"links\": [\r\n {\r\n \"rel\": \"http://tavis.net/rels/sessions\",\r\n \"href\": \"https://conferenceapi.azurewebsites.net/topic/8/sessions\"\r\n }\r\n ]\r\n },\r\n {\r\n \"href\": \"https://conferenceapi.azurewebsites.net/topic/10\",\r\n \"data\": [\r\n {\r\n \"name\": \"Title\",\r\n \"value\": \"Mobile\"\r\n }\r\n ],\r\n \"links\": [\r\n {\r\n \"rel\": \"http://tavis.net/rels/sessions\",\r\n \"href\": \"https://conferenceapi.azurewebsites.net/topic/10/sessions\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"queries\": [],\r\n \"template\": {\r\n \"data\": []\r\n }\r\n }\r\n}", "status":200, "headers":{ "Expires":"-1", "Connection":"keep-alive", "Pragma":"no-cache", "Content-Length":"953", "Server":"APISIX/3.2.0", "Content-Type":"application/vnd.collection+json", "X-AspNet-Version":"4.0.30319", "Cache-Control":"no-cache", "X-Powered-By":"ASP.NET" }, "reason":"OK" }, { "body":"{\r\n \"collection\": {\r\n \"version\": \"1.0\",\r\n \"links\": [],\r\n \"items\": [\r\n {\r\n \"href\": \"https://conferenceapi.azurewebsites.net/session/206\",\r\n \"data\": [\r\n {\r\n \"name\": \"Title\",\r\n \"value\": \"\\r\\n\\t\\t\\tjQuery Mobile and ASP.NET MVC\\r\\n\\t\\t\"\r\n },\r\n {\r\n \"name\": \"Timeslot\",\r\n \"value\": \"05 December 2013 09:00 - 10:00\"\r\n },\r\n {\r\n \"name\": \"Speaker\",\r\n \"value\": \"Scott Allen\"\r\n }\r\n ],\r\n \"links\": [\r\n {\r\n \"rel\": \"http://tavis.net/rels/speaker\",\r\n \"href\": \"https://conferenceapi.azurewebsites.net/speaker/16\"\r\n },\r\n {\r\n \"rel\": \"http://tavis.net/rels/topics\",\r\n \"href\": \"https://conferenceapi.azurewebsites.net/session/206/topics\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"queries\": [],\r\n \"template\": {\r\n \"data\": []\r\n }\r\n }\r\n}", "status":200, "headers":{ "Expires":"-1", "Connection":"keep-alive", "Pragma":"no-cache", "Content-Length":"961", "Server":"APISIX/3.2.0", "Content-Type":"application/vnd.collection+json", "X-AspNet-Version":"4.0.30319", "Cache-Control":"no-cache", "X-Powered-By":"ASP.NET" }, "reason":"OK" } ]

एक बैच अनुरोध का अधिकतम आकार API गेटवे द्वारा सीमित है। आप वर्तमान सीमाओं और अनुरोध टाइमआउट कॉन्फ़िगरेशन के लिए API गेटवे दस्तावेज़ीकरण की जांच कर सकते हैं।

टेकअवे

  • API गेटवे के साथ बैच अनुरोध प्रसंस्करण आपके API के प्रदर्शन को बेहतर बनाने के लिए एक उपयोगी तकनीक हो सकती है।
  • Apache APISIX एक प्लगइन प्रदान करता है जिसे batch-requests कहा जाता है जो डेवलपर्स को बैच अनुरोध प्रसंस्करण को आसानी से लागू करने की अनुमति देता है।

अगले कदम

API गेटवे के साथ, यह भी संभव है कि आप अपने उपयोगकर्ताओं को प्रतिक्रिया डेटा में कुछ कस्टम एग्रीगेशन प्रदान करें। आप serverless-function प्लगइन का उपयोग करके कस्टम कोड निष्पादित कर सकते हैं और बैकेंड सेवाओं से प्रतिक्रियाओं को मर्ज कर सकते हैं और इसे API उपभोक्ता को एक अलग संरचना में वापस भेज सकते हैं।

अनुशंसित सामग्री

Tags: