እራስህን አትድገም ወይም DRY በሶፍትዌር ልማት ውስጥ ጠቃሚ መርህ ነው። ይህ ልጥፍ ወደ Apache APISIX ውቅር እንዴት እንደሚተገበር ያሳየዎታል። የ DRY መርህ "ራስህን አትድገም" (DRY) የመረጃ ድግግሞሾችን በመቀነስ ሊለወጡ የሚችሉ መረጃዎችን በመቀነስ፣ የመለወጥ እድላቸው አነስተኛ በሆነ ረቂቅ በመተካት ወይም የውሂብ ኖርማልላይዜሽን በመጠቀም የሶፍትዌር ልማት መርህ ነው። . -- ዊኪፔዲያ - ራስህን አትድገም። ከDRY በስተጀርባ ያለው ዋናው ሃሳብ እራስዎን ከደገሙ እና መረጃው ከተቀየረ, የተለወጠውን መረጃ በበርካታ ቦታዎች ማዘመን አለብዎት. ተጨማሪ ጥረት ብቻ አይደለም; ስለሱ የመርሳት እና በተለያዩ ቦታዎች ላይ የተለያዩ መረጃዎችን የማግኘት እድል አለ. DRY የሳንካ ጥገና ላይ ያበራል። ስህተት ያለበትን የኮድ ቅንጣቢ አስቡት። እስቲ አስቡት አሁን ቅንጣቢውን በሁለት የተለያዩ ቦታዎች ገልብጠውታል። አሁን በእነዚህ ሁለት ቦታዎች ላይ ስህተቱን ማስተካከል አለብዎት, እና ያ ቀላል ክፍል ነው; ስለ ማባዛቱ በመጀመሪያ ማወቅ በጣም ከባድ ነው። የሚባዛው ሰው እና የሚያስተካክለው የተለያየ የመሆን እድሉ ከፍተኛ ነው። ቅንጣቢው ሊጋራ የሚችል ተብሎ በአዲስ መልክ ከተሰራ እና በምትኩ ከሁለቱ ቦታዎች ከተጠራ፣በዚህ አንድ ቦታ ላይ ስህተቱን ማስተካከል ብቻ ያስፈልግዎታል። ብዙ ሰዎች DRYን ከኮድ ጋር ያዛምዳሉ። ሆኖም ግን, ከዋናው ሀሳብ የበለጠ ውስን እና ተቃራኒ ሊሆን ይችላል. መርሆው በአንዲ ሀንት እና ዴቭ ቶማስ The Pragmatic Programmer በተሰኘ መጽሐፋቸው ተቀርጿል። የውሂብ ጎታ ንድፎችን, የሙከራ እቅዶችን, የግንባታ ስርዓቱን እና ሰነዶችን ጭምር ለማካተት በሰፊው ይተገብራሉ. -- ዊኪፔዲያ - ራስህን አትድገም። የድምፅ ውቅር ስርዓቶች DRYን ይፈቅዳሉ ወይም ያበረታቱታል። በApache APISIX ውስጥ ደረቅ Apache APISIX DRY ውቅር በሁለት ቦታዎች ያቀርባል። የደረቁ የላይ ዥረቶች በኢ-ኮሜርስ አውድ ውስጥ፣ በApache APISIX ላይ ያለውን መንገድ ለመወሰን የጀማሪ ጉዞዎ ምናልባት በሚከተለው መልኩ ይጀምራል። routes: - id: 1 name: Catalog uri: /products* upstream: nodes: "catalog:8080": 1 APISIXን የምታውቁ ከሆነ፣ ወደ ካታሎግ የሚወስደውን መንገድ በ ዩአርአይ ገለፅን። ነገር ግን፣ አንድ ችግር አለ፡ ምናልባት ደንበኞች ሊሆኑ የሚችሉ ካታሎጉን እንዲያስሱ ይፈልጋሉ ነገር ግን ሰዎች ምርቶችን እንዳይፈጥሩ፣ እንዳይሰርዙ ወይም እንዳያዘምኑ መከልከል ይፈልጋሉ። ሆኖም መንገዱ በነባሪነት ከእያንዳንዱ የኤችቲቲፒ ዘዴ ጋር ይዛመዳል። /products ሁሉም ሰው በነጻነት ማሰስ እንዲችል ካታሎጉን እንዲያስተዳድሩ የተረጋገጡ ተጠቃሚዎች ብቻ መፍቀድ አለብን። ይህንን አካሄድ ተግባራዊ ለማድረግ መንገዱን ለሁለት መክፈል አለብን፡- routes: - id: 1 name: Read the catalogue methods: [ "GET", "HEAD" ] #1 uri: /products* upstream: #2 nodes: "catalog:8080": 1 - id: 1 name: Read the catalogue methods: [ "PUT", "POST", "PATCH", "DELETE" ] #3 uri: /products* plugins: key-auth: ~ #4 upstream: #2 nodes: "catalog:8080": 1 ግጥሚያ አሰሳ የተባዛ ወደላይ! ተዛማጅ አስተዳደር ይህንን መንገድ መጠቀም የሚችሉት የተረጋገጡ ሸማቾች ብቻ ናቸው። ለዚህ በጣም ቀላሉ ተሰኪ ነው። key-auth የደህንነት ጉዳዩን በተቻለ መጠን በቀላል መንገድ አስተካክለነዋል፡ በመገልበጥ። ይህን በማድረግ ክፍል አባዛነው። ቶፖሎጂን መለወጥ ካስፈለገን ኖዶችን በመጨመር ወይም በማስወገድ በሁለት ቦታዎች ላይ ማድረግ አለብን. የ DRY መርህን ያሸንፋል. upstream ለምሳሌ በገሃዱ ዓለም ሁኔታዎች፣ በተለይም ኮንቴይነሮችን በሚያካትቱበት ጊዜ፣ በመዘርዘር አይተገብሩትም። በምትኩ የቶፖሎጂ ለውጦችን ለማስተናገድ ተለዋዋጭ መተግበር አለብህ። ሆኖም፣ የአገልግሎት ግኝቱን ውቅረት ወይም አተገባበር መቀየር ሲፈልጉ ነጥቡ አሁንም ይቆማል። ስለዚህ፣ የእኔ ነጥብ በአንጓዎች እና በአገልግሎት ግኝቶች ላይ በእኩልነት ይሠራል። nodes upstream የአገልግሎት ግኝትን ማጠቃለያው ጋር፣ APISIX DRYን ለመተግበር ረቂቅ ያቀርባል። ከላይ ያለውን ቅንጭብ እንደሚከተለው ልንጽፈው እንችላለን፡- ከመስመር ወደ ላይ የሚወጣ upstreams: - id: 1 #1 name: Catalog nodes: "catalog:8080": 1 routes: - id: 1 name: Read the catalogue methods: [ "GET", "HEAD" ] uri: /products* upstream_id: 1 #2 - id: 1 name: Read the catalogue methods: [ "PUT", "POST", "PATCH", "DELETE" ] uri: /products* upstream_id: 1 #2 plugins: key-auth: ~ በመታወቂያ ወደ ላይ ያለውን ዥረት ይግለጹ 1 በመንገዱ ላይ ያመልክቱ በቶፖሎጂ ውስጥ የሆነ ነገር ከተከሰተ ለውጡን ማዘመን ያለብን በነጠላ ላይ ብቻ ነው። Upstream የተካተተውን ዥረት መግለፅ እና በ ማጣቀስ መሆናቸውን ልብ ይበሉ። upstream upstream_id እርስ በርስ የሚጣረሱ DRY Plugin ውቅር APISIX የእርስዎን ውቅረት በ abstraction ለማድረቅ የሚረዳዎት ሌላ ቦታ። APISIX ሁሉንም ባይሆን በፕለጊኖች አማካኝነት አብዛኞቹን ባህሪያት ይተገበራል። Plugin በእኛ ኤፒአይ ላይ እንተግብረው። ዩአርኤሉን ከማስተላለፍዎ በፊት እንደገና መፃፍ አለብን። በዱካ ላይ የተመሠረተ ሥሪትን routes: - id: 1 name: Read the catalogue methods: [ "GET", "HEAD" ] uri: /v1/products* upstream_id: 1 plugins: proxy-rewrite: regex_uri: [ "/v1(.*)", "$1" ] #1 - id: 1 name: Read the catalogue methods: [ "PUT", "POST", "PATCH", "DELETE" ] uri: /v1/products* upstream_id: 1 plugins: proxy-rewrite: regex_uri: [ "/v1(.*)", "$1" ] #1 ከማስተላለፍዎ በፊት ቅድመ ቅጥያውን ያስወግዱ /v1 ልክ እንደሚታየው፣ ክፍል የተባዛ ነው። እንዲሁም የተሰኪውን ውቅረት በተወሰነ ነገር ውስጥ መመዘን እንችላለን። የሚከተለው ቅንጣቢ ከላይ ካለው ጋር ተመሳሳይ ውጤት አለው፡ upstream plugins Plugin Config plugin_configs: - id: 1 #1 plugins: proxy-rewrite: regex_uri: [ "/v1(.*)", "$1" ] routes: - id: 1 name: Read the catalogue methods: [ "GET", "HEAD" ] uri: /v1/products* upstream_id: 1 plugin_config_id: 1 #2 - id: 1 name: Read the catalogue methods: [ "PUT", "POST", "PATCH", "DELETE" ] uri: /v1/products* upstream_id: 1 plugin_config_id: 1 #2 በልዩ ነገር ውስጥ የተሰኪውን ውቅር ፍጠር ዋቢ አድርገው አስተዋይ አንባቢዎች የማዋቀሪያው ክፍል እንደጎደለኝ አስተውለው ይሆናል፡ የ በሚስጥር ጠፋ! በእርግጥ፣ ለግልጽነት ስል አስወግጄዋለሁ። auth-key እንደ እና ፣ እና ። የጎደለውን በማከል ችግሩን መፍታት እንችላለን፡- upstream upstream_id plugins plugin_config_id እርስ በርሳቸው የሚለያዩ አይደሉም plugin routes: - id: 1 name: Read the catalogue methods: [ "GET", "HEAD" ] uri: /v1/products* upstream_id: 1 plugin_config_id: 1 - id: 1 name: Read the catalogue methods: [ "PUT", "POST", "PATCH", "DELETE" ] uri: /v1/products* upstream_id: 1 plugin_config_id: 1 plugins: key-auth: ~ #1 አስተካክል! በዚህ መንገድ የተጋራውን ውቅረት ወደ ነገር ማንቀሳቀስ እና የተወሰነውን ወደ ሚመለከተው ቦታ ማቆየት ይችላሉ። ግን ተመሳሳይ ፕለጊን ከተለያዩ ውቅሮች ጋር በፕለጊን_ እና በቀጥታ ላይ ጥቅም ላይ ቢውልስ? ስለእሱ በጣም ግልፅ ነው- plugin_config plugin_config route ሰነዱ > > > > Consumer Consumer Group Route Plugin Config Service በአጭሩ፣ ላይ ያለው ውቅር በ ውስጥ ያለውን ውቅረት ይሽራል። እንዲሁም ውስጥ ፕለጊን የ ተለዋዋጭ እንድናቀርብ ያስችለናል እና መንገድ ላይ ብቻ እንድናዘጋጅ ያስችለናል። APISIX ለእያንዳንዱ ቁልፉን ያገኛል እና ይጠቀማል! route plugin plugin_config_id consumer key-auth apikey consumer ማጠቃለያ DRY ስለ ኮድ ብቻ አይደለም; ስለ ዳታ አስተዳደር በአጠቃላይ ነው። ማዋቀር ውሂብ ነው ስለዚህም በዚህ አጠቃላይ ዣንጥላ ስር ይወድቃል። APISIX ሁለት የDRY አማራጮችን ያቀርባል አንድ - , እና አንድ - . የላይ ዥረቶች ብቸኛ ናቸው; ፕለጊኖች ከልክ በላይ መቃወም ይፈቅዳሉ. upstream upstream_id plugin plugin_config_id ሁለቱም ዘዴዎች ውቅርዎን ለማድረቅ እና በረጅም ጊዜ ውስጥ የበለጠ እንዲቆይ ለማድረግ ሊረዱዎት ይገባል። የበለጠ ለመሄድ፡- እራስህን አትድገም መርህ ውቅር የማዋሃድ ቅድሚያ በመጀመሪያ በሴፕቴምበር 1፣ 2024 በ ላይ ታትሟል A Java Geek