Traefik से APISIX तक, Horizon Robotics का Ingress Controller में अन्वेषण

Xin Zhang

October 10, 2022

Ecosystem

ऑटोमोटिव उद्योग में, अधिकांश कंपनियां स्वायत्त ड्राइविंग और नई ऊर्जा की ओर बढ़ रही हैं। विशेष रूप से स्वायत्त ड्राइविंग के लिए, प्रत्येक कंपनी ने स्वायत्त ड्राइविंग मॉडल के विकास और प्रशिक्षण को पूरा करने के लिए बहुत सारे संसाधन निवेश किए हैं।

इस प्रक्रिया में, उत्पाद के तेजी से पुनरावृत्ति के दौरान व्यापार की स्थिरता और दक्षता कैसे सुनिश्चित की जाए?

यह लेख Horizon Robotics के AI विकास प्लेटफॉर्म को एक उदाहरण के रूप में लेगा, यह देखने के लिए कि API गेटवे Apache APISIX और Ingress Controller ने Horizon Robotics के R&D टीम को इस समस्या को हल करने में कैसे मदद की।

गेटवे तुलना

Traefik की सीमाएं

APISIX Ingress Controller का उपयोग करने से पहले, व्यापार प्रणाली द्वारा उपयोग किया जाने वाला Ingress Controller Traefik1.x था, लेकिन कई समस्याएं थीं।

  • Traefik 1.x Ingress के माध्यम से रूटिंग नियमों को कॉन्फ़िगर करता है, और कुछ प्लगइन्स को Annotation जोड़कर कॉन्फ़िगर करने की आवश्यकता होती है। इस तरह, आप केवल वर्तमान Ingress के तहत सभी नियमों के लिए प्लगइन्स जोड़ सकते हैं, और अधिक सूक्ष्म कॉन्फ़िगरेशन प्राप्त नहीं कर सकते।
  • Traefik 1.x विशिष्ट नियमों के दृश्य कॉन्फ़िगरेशन का समर्थन नहीं करता है और ब्राउज़र के माध्यम से अनुरोध URL तक पहुंचकर सीधे एक विशिष्ट सेवा का पता नहीं लगा सकता है।
  • Traefik का डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल (ConfigMap) में केवल कुछ गुण होते हैं, और कई डिफ़ॉल्ट कॉन्फ़िगरेशन को आधिकारिक दस्तावेज़ीकरण के माध्यम से जाना पड़ता है, और कुछ पैरामीटर NGINX डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ असंगत होते हैं, जिससे रखरखाव अधिक कठिन हो जाता है।

उपरोक्त समस्याओं के जवाब में, Horizon Robotics की तकनीकी टीम ने Ingress Controller को बदलने का निर्णय लिया। चयन प्रक्रिया की शुरुआत में, टीम ने Traefik को 2.0 में अपग्रेड करने पर विचार किया ताकि उपरोक्त समस्याओं को हल किया जा सके, लेकिन चूंकि हमें एक नए CRD का उपयोग करने की भी आवश्यकता थी और माइग्रेशन लागत महंगी थी, इसलिए हमें अन्य Ingress Controller समाधानों को भी आजमाना पड़ा।

APISIX Ingress Controller के लाभ

चयन के प्रारंभिक चरण में, हमने मुख्य रूप से Apache APISIX, Kong और Envoy की तुलना की। हालांकि, अन्य समाधान कार्यक्षमता या प्रदर्शन के मामले में मौजूदा परिदृश्यों की आवश्यकताओं को पूरा नहीं कर सकते थे, APISIX Ingress को छोड़कर। इसलिए, हमने अंततः APISIX Ingress को चुना। कुछ सामान्य विशेषताओं के अलावा, हम निम्नलिखित बिंदुओं में अधिक रुचि रखते हैं।

  • समृद्ध प्लगइन्स: प्लगइन्स पारिस्थितिक रूप से मजबूत हैं, और APISIX द्वारा समर्थित सभी प्लगइन्स को apisix-ingress-controller का उपयोग करके घोषणात्मक रूप से कॉन्फ़िगर किया जा सकता है, और ApisixRoute के तहत एकल बैकएंड के लिए प्लगइन्स को अनुकूलित किया जा सकता है।
  • दृश्य कॉन्फ़िगरेशन: APISIX डैशबोर्ड के साथ, आप प्रत्येक apisix route देख सकते हैं। और यदि एक ही डोमेन को कई namespaces या YAML फ़ाइलों में कॉन्फ़िगर किया गया है, तो आप APISIX डैशबोर्ड के साथ पथ उपसर्ग को खोजकर संघर्ष की स्थिति में जल्दी से पता लगा सकते हैं।
  • सूक्ष्म सत्यापन: APISIX Ingress Controller उन संसाधनों को सत्यापित करता है जो इसके द्वारा प्रबंधित CRD में घोषित किए गए हैं। यदि CRD में एक अस्तित्वहीन सेवा घोषित की जाती है, तो त्रुटि संदेश ApisixRoute के event में संग्रहीत किया जाएगा और परिवर्तन प्रभावी नहीं होगा, जो कुछ हद तक दुरुपयोग के कारण होने वाली समस्याओं को कम कर सकता है।
  • समृद्ध विशेषताएं: APISIX हॉट अपडेट और हॉट प्लगइन्स, प्रॉक्सी अनुरोध पुनर्लेखन, एकाधिक प्रमाणीकरण, बहुभाषी प्लगइन विकास और कई अन्य विशेषताओं का समर्थन करता है। अधिक जानकारी के लिए कृपया APISIX features देखें।
  • सक्रिय समुदाय: अन्य ओपन सोर्स समाधानों के समुदायों की तुलना में, APISIX के पास Slack, GitHub और मेलिंग सूची पर कई सक्रिय रखरखावकर्ता और योगदानकर्ता हैं।
  • उच्च प्रदर्शन: जैसा कि आप नीचे दिए गए चार्ट से देख सकते हैं, APISIX का प्रदर्शन Envoy के दबाव परीक्षण की तुलना में लगभग 120% है, और जितने अधिक कोर होते हैं, QPS अंतर उतना ही बड़ा होता है।

QPS

समग्र आर्किटेक्चर

जैसा कि आप नीचे दिए गए आर्किटेक्चर डायग्राम से देख सकते हैं, APISIX Ingress सभी ट्रैफ़िक के लिए प्रवेश बिंदु के रूप में कार्य करता है। सभी पहुंचे ट्रैफ़िक APISIX Ingress के माध्यम से अपस्ट्रीम (व्यापार सेवाएं) में प्रवेश करते हैं, चाहे वह कमांड लाइन टूल्स, वेब, SaaS प्लेटफॉर्म या OpenAPI से हो। प्रमाणीकरण के लिए, चूंकि कंपनी के पास स्वयं एक समर्पित प्रमाणीकरण सेवा है, यह सीधे APISIX के forward-auth प्लगइन का उपयोग करके बाहरी प्रमाणीकरण प्राप्त करती है।

आर्किटेक्चर

गेटवे परत पर, सभी ट्रैफ़िक डोमेन नाम के माध्यम से प्रवेश करते हैं, और ट्रैफ़िक पहले LVS से गुजरेगा, जो बैकएंड APISIX नोड को आगे बढ़ाएगा, और फिर APISIX रूटिंग नियमों के अनुसार ट्रैफ़िक को संबंधित Pod में वितरित करेगा। LVS पर, उन्होंने APISIX Ingress का डिफ़ॉल्ट पोर्ट 9180 से 80 में बदल दिया ताकि LVS सीधे APISIX Ingress की ओर इशारा कर सके, जिससे ट्रैफ़िक को आगे बढ़ाना आसान हो जाता है।

फ्लो चार्ट

परिदृश्य

समग्र आर्किटेक्चर को समझने के बाद, हम कुछ परिदृश्य साझा करेंगे जो हमारी कंपनी वर्तमान में APISIX Ingress के साथ लागू कर रही है।

बड़े आकार की फ़ाइल अपलोड

पहला बड़ी फ़ाइल अपलोड परिदृश्य है, जो सामान्य कंपनियों में कम आम हो सकता है, लेकिन AI मॉडल प्रशिक्षण करने वाली कंपनियों में अधिक आम है। यह परिदृश्य मुख्य रूप से Horizon Robotics मॉडल प्रशिक्षण प्रणाली में है, जहां R&D द्वारा एकत्रित डेटा को नेटवर्क के माध्यम से सिस्टम में अपलोड किया जाता है, और डेटा का आकार आमतौर पर कई सौ GB से अधिक होता है, और APISIX के किसी भी पैरामीटर को समायोजित किए बिना अपलोड किए गए डेटा की मात्रा बहुत अधिक होने पर OOM हो जाता है।

iTerm

क्योंकि डिफ़ॉल्ट client_body_buffer_size 1MB है, जब बफर भर जाता है, तो अस्थायी फ़ाइलें डिस्क पर लिखी जाती हैं, जिससे उच्च डिस्क IO होता है।

यदि अस्थायी फ़ाइलों को लिखे जाने वाले निर्देशिका को साझा मेमोरी (/dev/shm) की ओर इशारा किया जाता है, तो यह फिर से उच्च APISIX (कैश) का कारण बनता है।

मॉनिटर

निरंतर डिबगिंग के बाद, हमने पाया कि कारण यह था कि APISIX ने स्ट्रीमिंग अपलोड सक्षम नहीं किया था। इस परिदृश्य के लिए, हमने APISIX संस्करण को 2.11 से 2.13 में अपग्रेड किया और APISIX पैरामीटर को समायोजित किया। पहले, हमने APISIX ConfigMap से पैरामीटर proxy_request_buffering को बंद कर दिया ताकि स्ट्रीमिंग अपलोड सक्षम हो सके। दूसरा, हमने APISIX Ingress Controller द्वारा प्रदान किए गए CRD ApisixPluginConfig से पुन: प्रयोज्य कॉन्फ़िगरेशन निकाला और इस परिदृश्य की आवश्यकता वाले रूट्स के लिए client_max_body_size को namespace स्तर कॉन्फ़िगरेशन के रूप में गतिशील रूप से सेट किया।

डिबग

मल्टी-क्लाउड वातावरण में सेवा कॉल

मल्टी-क्लाउड वातावरण में सेवा कॉल के लिए, व्यापार ट्रैफ़िक का एक हिस्सा पहले स्थानीय IDC पर पहुंचता है, और फिर APISIX Ingress के माध्यम से Pod तक पहुंचता है। Pod में कुछ सेवाएं डोमेन नाम के माध्यम से AliCloud की सेवाओं तक पहुंचती हैं। इसके अलावा, सेवा द्वारा अन्य सेवाओं को आमंत्रित करने वाले कुछ परिदृश्य भी मुख्य रूप से मल्टी-क्लाउड प्रशिक्षण के लिए मौजूद हैं। उपयोगकर्ता IDC को प्रवेश बिंदु के रूप में लेंगे और संबंधित क्लाउड क्लस्टर को कार्य जमा करने के लिए क्लस्टर का चयन करेंगे।

मल्टी-क्लाउड आर्किटेक्चर

forward-auth के साथ बाहरी प्रमाणीकरण

जब हमने पहली बार APISIX Ingress का उपयोग शुरू किया, तो APISIX forward-auth प्लगइन का समर्थन नहीं करता था, इसलिए हमने apisix-go-plugin-runner के आधार पर एक कस्टम प्लगइन परिभाषित किया, लेकिन इसने एक अतिरिक्त gRPC कॉल की परत बनाई, जिससे डिबगिंग कठिन हो गई और लॉगिंग अदृश्य हो गई। चूंकि APISIX ने इस साल की शुरुआत में forward-auth प्लगइन का समर्थन किया, हमने कस्टम प्लगइन को आधिकारिक प्लगइन से बदल दिया, जिससे एक gRPC कॉल की परत कम हो गई और मॉनिटरिंग अधिक सुविधाजनक हो गई।

प्रमाणीकरण आर्किटेक्चर

एप्लिकेशन मॉनिटरिंग

एप्लिकेशन मॉनिटरिंग में, हमने APISIX Prometheus प्लगइन को वैश्विक रूप से सक्षम किया और अपने स्वयं के व्यापार के लिए कुछ डिबगिंग और अनुकूलन किया, जैसे कि वास्तविक समय संयोजन, QPS, APISIX वास्तविक समय API सफलता दर, और APISIX वास्तविक समय बैंडविड्थ को जोड़कर APISIX की अधिक सूक्ष्म मॉनिटरिंग की।

मॉनिटरिंग

सारांश

हम वर्तमान में Apache APISIX Ingress Controller का उपयोग केवल अपनी कुछ व्यापार लाइनों के लिए ट्रैफ़िक गेटवे के रूप में कर रहे हैं, और अन्य व्यापारों को लाइव करेंगे ताकि समुदाय को अधिक समृद्ध एप्लिकेशन परिदृश्य प्रदान किया जा सके। यदि आप भी Ingress Controller समाधानों की तुलना कर रहे हैं, तो हम आशा करते हैं कि यह लेख आपको कुछ संकेत देगा। अधिक से अधिक उपयोगकर्ता Apache APISIX Ingress का उपयोग उत्पादन वातावरण में कर रहे हैं, और यदि आप भी APISIX Ingress का उपयोग कर रहे हैं, तो कृपया अपने उपयोग के मामलों को समुदाय में साझा करें।

Tags: