OpenResty के तृतीय-पक्ष पैकेजों को LuaRocks और OPM के माध्यम से कैसे प्रबंधित करें?
API7.ai
September 17, 2022
पिछले पोस्ट में, हमने कुछ आधिकारिक OpenResty प्रोजेक्ट्स का सामान्य अवलोकन प्राप्त किया। हालांकि, यदि हम OpenResty को प्रोडक्शन वातावरण में उपयोग करते हैं, तो OpenResty पैकेज के साथ आने वाली ये लाइब्रेरीज़ अपर्याप्त हैं। उदाहरण के लिए, HTTP अनुरोध भेजने के लिए कोई lua-resty लाइब्रेरी नहीं है, और Kafka के साथ इंटरैक्ट करने का कोई तरीका नहीं है।
तो हमें क्या करना चाहिए?
क्योंकि OpenResty, NGINX का एक फोर्क नहीं है, न ही यह NGINX का कुछ मानक लाइब्रेरीज़ के साथ पुनः पैकेजिंग है, बल्कि यह सिर्फ NGINX को अंतर्निहित नेटवर्क लाइब्रेरी के रूप में उपयोग करता है।
NGINX का उपयोग करते समय, आप यह नहीं सोचते कि कस्टम HTTP अनुरोध कैसे शुरू करें और Kafka के साथ कैसे इंटरैक्ट करें। और OpenResty की दुनिया में, cosocket के लिए धन्यवाद, डेवलपर्स जल्दी से lua-resty-http और lua-resty-kafka लिख सकते हैं ताकि इन आवश्यकताओं को पूरा किया जा सके, जैसे कि आप Python, PHP आदि जैसी डेवलपमेंट भाषाओं के साथ कर सकते हैं।
आपके लिए एक और सलाह: आपको उपरोक्त समस्याओं को हल करने के लिए किसी भी Lua दुनिया की लाइब्रेरी का उपयोग नहीं करना चाहिए, बल्कि cosocket की lua-resty-* लाइब्रेरी का उपयोग करना चाहिए। Lua दुनिया की लाइब्रेरीज़ ब्लॉकिंग का परिचय दे सकती हैं, जो अन्यथा उच्च-प्रदर्शन सेवा को कई गुना कम कर देती हैं। यह OpenResty शुरुआती लोगों के लिए एक सामान्य गलती है और आसानी से ध्यान नहीं दिया जाता है।
तो हम इन नॉन-ब्लॉकिंग lua-resty-* लाइब्रेरीज़ को कैसे ढूंढें? आगे, मैं आपको निम्नलिखित तरीकों से परिचित कराऊंगा।
OPM
OPM (OpenResty Package Manager) OpenResty के साथ आने वाला पैकेज मैनेजर है और OpenResty इंस्टॉल करने के बाद इसका उपयोग किया जा सकता है। हम opm search http कमांड का उपयोग करके HTTP अनुरोध भेजने वाली लाइब्रेरी ढूंढने का प्रयास कर सकते हैं।
पहली बार क्वेरी धीमी हो सकती है, आमतौर पर कुछ सेकंड लगते हैं। opm.openresty.org PostgreSQL डेटाबेस से एक क्वेरी करेगा और परिणामों को कुछ समय के लिए कैश करेगा।
openresty/lua-resty-upload Streaming reader and parser for HTTP file uploading based on ngx_lua cosocket
जब आप इस परिणाम को देखते हैं, तो आप सोच सकते हैं: इस lua-resty-upload पैकेज का HTTP भेजने से क्या लेना-देना है?
यह पता चला है कि जब OPM ने खोज की, तो उसने पैकेज नाम और पैकेज प्रोफाइल दोनों को खोजा, जिसमें बाद वाले कीवर्ड का उपयोग किया गया। यही कारण है कि उपरोक्त खोज कुछ सेकंड तक चलती है। यह PostgreSQL के अंदर स्ट्रिंग की पूर्ण-पाठ खोज करता है।
लेकिन, वैसे भी, यह रिटर्न अनुकूल नहीं है। चलिए कीवर्ड को संशोधित करें और इसे फिर से खोजें।
$ opm search lua-resty-http ledgetech/lua-resty-http Lua HTTP client cosocket driver for OpenResty/ngx_lua pintsized/lua-resty-http Lua HTTP client cosocket driver for OpenResty/ngx_lua agentzh/lua-resty-http Lua HTTP client cosocket driver for OpenResty/ngx_lua
OpenResty की दुनिया में, यदि आप cosocket का उपयोग करके एक पैकेज लागू करते हैं, तो आपको lua-resty उपसर्ग का उपयोग करना चाहिए, यह एक अलिखित नियम है।
खोज परिणामों को देखते हुए, OPM योगदानकर्ता के GitHub रिपॉजिटरी पते को पैकेज नाम के रूप में उपयोग करता है, यानी GitHub ID / repo नाम। यह तीन lua-resty-http तृतीय-पक्ष लाइब्रेरीज़ लौटाता है। हमें कौन सा चुनना चाहिए?
पैकेज चुनने से पहले, आइए इसके स्टार काउंट और अंतिम अपडेट समय को देखें: केवल एक दर्जन स्टार; अंतिम अपडेट 2016 में हुआ था। यह एक छोड़ा गया गड्ढा है। गहराई से देखने पर, pintsized/lua-resty-http और ledgetech/lua-resty-http एक ही रिपॉजिटरी की ओर इशारा करते हैं। इसलिए आप जो भी चुनें, यह समान है।
साथ ही, OPM की वेबसाइट अपेक्षाकृत सरल है और पैकेज डाउनलोड की संख्या या इस पैकेज के लिए निर्भरताएं प्रदान नहीं करती है। आपको यह पता लगाने में अधिक समय लगाना चाहिए कि कौन सी lua-resty लाइब्रेरीज़ उपयोग करने के लिए सही हैं, जबकि यह मेन्टेनर का काम होना चाहिए।
LuaRocks
LuaRocks OpenResty की दुनिया के लिए एक और पैकेज मैनेजर है, जो OPM से पहले जन्मा था। OPM के विपरीत, जिसमें केवल OpenResty से संबंधित पैकेज होते हैं, LuaRocks में Lua दुनिया की लाइब्रेरीज़ भी होती हैं। उदाहरण के लिए, LuaRocks में LuaSQL-MySQL एक पैकेज है जो Lua दुनिया में MySQL से कनेक्ट करता है और OpenResty में उपयोग नहीं किया जा सकता है।
अभी भी HTTP लाइब्रेरी को उदाहरण के रूप में उपयोग करते हुए, आइए LuaRocks का उपयोग करके खोजने का प्रयास करें।
$ luarocks search http
जैसा कि आप देख सकते हैं, यह भी कई पैकेज लौटाता है।
हम कीवर्ड को फिर से बदल सकते हैं।
$ luarocks search lua-resty-http
इस बार केवल एक पैकेज लौटाया गया। हम LuaRocks वेबसाइट पर जा सकते हैं और इस पैकेज के विवरण को देख सकते हैं। यहां वेबसाइट पेज का एक स्क्रीनशॉट है।

उपरोक्त स्क्रीनशॉट में लेखक, लाइसेंस, GitHub URL, डाउनलोड की संख्या, फीचर सारांश, संस्करण इतिहास, निर्भरताएं आदि शामिल हैं। OPM के विपरीत, LuaRocks सीधे GitHub उपयोगकर्ता जानकारी का उपयोग नहीं करता है, बल्कि डेवलपर्स को LuaRocks के साथ अलग से पंजीकरण करने की आवश्यकता होती है।
ओपन-सोर्स API गेटवे प्रोजेक्ट, Apache APISIX, LuaRocks का उपयोग पैकेज प्रबंधन के लिए करता है। आइए संक्षेप में जांच करें कि APISIX का पैकेज प्रबंधन कॉन्फ़िगरेशन कैसे लिखा गया है।
APISIX का नवीनतम संस्करण 2.15 है, और आप Apache APISIX प्रोजेक्ट के तहत apisix-2.15.0-0.rockspec फ़ाइल पा सकते हैं।
package = "apisix" version = "2.15.0-0" supported_platforms = {"linux", "macosx"} source = { url = "git://github.com/apache/apisix", branch = "2.15.0", } description = { summary = "Apache APISIX is a cloud-native microservices API gateway, delivering the ultimate performance, security, open source and scalable platform for all your APIs and microservices.", homepage = "https://github.com/apache/apisix", license = "Apache License 2.0", } dependencies = { "lua-resty-ctxdump = 0.1-0", "lua-resty-dns-client = 6.0.2", "lua-resty-template = 2.0", "lua-resty-etcd = 1.8.2", "api7-lua-resty-http = 0.2.0", "lua-resty-balancer = 0.04", "lua-resty-ngxvar = 0.5.2", "lua-resty-jit-uuid = 0.0.7", "lua-resty-healthcheck-api7 = 2.2.0", "api7-lua-resty-jwt = 0.2.4", "lua-resty-hmac-ffi = 0.05", "lua-resty-cookie = 0.1.0", "lua-resty-session = 3.10", "opentracing-openresty = 0.1", "lua-resty-radixtree = 2.8.2", "lua-protobuf = 0.3.4", "lua-resty-openidc = 1.7.5", "luafilesystem = 1.7.0-2", "api7-lua-tinyyaml = 0.4.2", "nginx-lua-prometheus = 0.20220527", "jsonschema = 0.9.8", "lua-resty-ipmatcher = 0.6.1", "lua-resty-kafka = 0.20-0", "lua-resty-logger-socket = 2.0.1-0", "skywalking-nginx-lua = 0.6.0", "base64 = 1.5-2", "binaryheap = 0.4", "api7-dkjson = 0.1.1", "resty-redis-cluster = 1.02-4", "lua-resty-expr = 1.3.1", "graphql = 0.0.2", "argparse = 0.7.1-1", "luasocket = 3.0rc1-2", "luasec = 0.9-1", "lua-resty-consul = 0.3-2", "penlight = 1.9.2-1", "ext-plugin-proto = 0.5.0", "casbin = 1.41.1", "api7-snowflake = 2.0-1", "inspect == 3.1.1", "lualdap = 1.2.6-1", "lua-resty-rocketmq = 0.3.0-0", "opentelemetry-lua = 0.1-3", "net-url = 0.9-1", "xml2lua = 1.5-2", "nanoid = 0.1-1", "lua-resty-mediador = 0.1.2-1" } build = { type = "make", build_variables = { CFLAGS="$(CFLAGS)", LIBFLAG="$(LIBFLAG)", LUA_LIBDIR="$(LUA_LIBDIR)", LUA_BINDIR="$(LUA_BINDIR)", LUA_INCDIR="$(LUA_INCDIR)", LUA="$(LUA)", OPENSSL_INCDIR="$(OPENSSL_INCDIR)", OPENSSL_LIBDIR="$(OPENSSL_LIBDIR)", }, install_variables = { ENV_INST_PREFIX="$(PREFIX)", ENV_INST_BINDIR="$(BINDIR)", ENV_INST_LIBDIR="$(LIBDIR)", ENV_INST_LUADIR="$(LUADIR)", ENV_INST_CONFDIR="$(CONFDIR)", }, }
जैसा कि आप फ़ाइल से देख सकते हैं, निर्भरताएं lua-resty-* लाइब्रेरीज़ और शुद्ध Lua दुनिया की लाइब्रेरीज़ के साथ मिश्रित हैं, जिन्हें केवल OPM का उपयोग करके आंशिक रूप से इंस्टॉल किया जा सकता है। कॉन्फ़िगरेशन लिखने के बाद, LuaRocks के अपलोड कमांड का उपयोग करके इस कॉन्फ़िगरेशन को अपलोड करें, और उपयोगकर्ता LuaRocks का उपयोग करके APISIX को डाउनलोड और इंस्टॉल कर सकते हैं।
LuaRocks इसका समर्थन करता है। आप .rockspec फ़ाइल में C स्रोत कोड का पथ और नाम निर्दिष्ट कर सकते हैं, और LuaRocks इसे स्थानीय रूप से आपके लिए संकलित करेगा। OPM अभी तक इस सुविधा का समर्थन नहीं करता है।
awesome-resty
awesome-resty प्रोजेक्ट OpenResty के लिए उपलब्ध लगभग सभी पैकेजों को बनाए रखता है, जिन्हें श्रेणियों में व्यवस्थित किया गया है। यह सबसे अच्छी जगह है जब आप अनिश्चित होते हैं कि कोई उपयुक्त तृतीय-पक्ष पैकेज है या नहीं।
आइए HTTP लाइब्रेरी को उदाहरण के रूप में लें। awesome-resty में यह स्वाभाविक रूप से नेटवर्किंग श्रेणी में आता है।
lua-resty-http by @pintsized — Lua HTTP client cosocket driver for OpenResty / ngx_lua lua-resty-http by @liseen — Lua http client driver for the ngx_lua based on the cosocket API lua-resty-http by @DorianGray — Lua HTTP client driver for ngx_lua based on the cosocket API lua-resty-http-simple — Simple Lua HTTP client driver for ngx_lua lua-resty-httpipe — Lua HTTP client cosocket driver for OpenResty / ngx_lua lua-resty-httpclient — Nonblocking Lua HTTP Client library for aLiLua & ngx_lua lua-httpcli-resty — Lua HTTP client module for OpenResty lua-resty-requests — Yet Another HTTP Library for OpenResty
हम देखते हैं कि lua-resty-http के लिए आठ तृतीय-पक्ष लाइब्रेरीज़ हैं। पिछले परिणामों की तुलना में, हमने केवल 2 OPM का उपयोग करके और केवल 1 LuaRocks में पाया। हालांकि, यदि चुनना मुश्किल है, तो पहले वाले का उपयोग करें, जो LuaRocks में समान है।
प्रयोग करने के इच्छुक इंजीनियरों के लिए, मैं अंतिम लाइब्रेरी की सिफारिश करता हूं: lua-resty-requests, एक अधिक मानव-अनुकूल HTTP एक्सेस लाइब्रेरी, जिसका इंटरफ़ेस स्टाइल Python के प्रसिद्ध Requests के समान है। यदि आप मेरी तरह Python प्रेमी हैं, तो आप lua-resty-requests से प्यार करेंगे, जो OpenResty समुदाय में सक्रिय tokers द्वारा लिखे गए हैं ताकि आप उन्हें आत्मविश्वास से उपयोग कर सकें।
सारांश
एक ओपन-सोर्स प्रोजेक्ट को फलने-फूलने के लिए, न केवल हार्डकोर टेक्नोलॉजी, अच्छी डॉक्यूमेंटेशन और पूर्ण परीक्षण की आवश्यकता होती है, बल्कि एक पारिस्थितिकी तंत्र की भी आवश्यकता होती है जो अधिक डेवलपर्स और कंपनियों को एक साथ लाता है। जैसा कि Apache Way ने कहा: कोड से अधिक समुदाय।
OpenResty के लिए कोई व्यवस्थित शिक्षण सामग्री नहीं है, कोई आधिकारिक कोड गाइड नहीं है, और कई अनुकूलन बिंदु ओपन-सोर्स प्रोजेक्ट में लिखे गए हैं, लेकिन अधिकांश डेवलपर्स जानते हैं कि वे क्या बात कर रहे हैं लेकिन यह नहीं जानते कि क्यों। यही इस ईबुक का उद्देश्य है। इसे सीखने के बाद, मुझे आशा है कि आप अधिक कुशल OpenResty कोड लिख सकते हैं और OpenResty से संबंधित ओपन-सोर्स प्रोजेक्ट्स में अधिक कुशलता से भाग ले सकते हैं, उदाहरण के लिए, Apache APISIX।
OpenResty पारिस्थितिकी तंत्र के बारे में आप क्या सोचते हैं? टिप्पणी करने के लिए स्वतंत्र महसूस करें, और आइए इसके बारे में बात करें। साथ ही, इस लेख को साझा करने के लिए स्वागत है।