Usijirudie au KUKAUSHA ni kanuni muhimu katika ukuzaji wa programu. Chapisho hili litakuonyesha jinsi ya kuitumia kwa usanidi wa Apache APISIX.
"Usijirudie" (DRY) ni kanuni ya ukuzaji wa programu inayolenga kupunguza marudio ya habari ambayo kuna uwezekano wa kubadilika, badala yake na vifupisho ambavyo vina uwezekano mdogo wa kubadilika, au kutumia urekebishaji wa data ambao huepuka kupunguzwa tena. .
Wazo kuu la DRY ni kwamba ikiwa utajirudia na habari inabadilika, basi lazima usasishe habari iliyobadilishwa katika sehemu nyingi. Sio tu juhudi za ziada; kuna nafasi utaisahau na kuwa na habari tofauti katika sehemu tofauti. KAVU huangaza katika kurekebisha hitilafu.
Hebu fikiria kijisehemu cha msimbo kilicho na hitilafu. Fikiria sasa kwamba umenakili kijisehemu katika sehemu mbili tofauti. Sasa, lazima urekebishe hitilafu katika sehemu hizi mbili, na hiyo ndiyo sehemu rahisi; kiumbe kigumu kujua kuhusu kurudia mara ya kwanza.
Kuna uwezekano mkubwa kwamba mtu anayenakili na yule anayerekebisha ni tofauti. Ikiwa kijisehemu kilikuwa kimerekebishwa ili kushirikiwa na kuitwa kutoka sehemu hizo mbili badala yake, unahitaji tu kurekebisha hitilafu katika sehemu hii moja.
Watu wengi huhusisha DRY na msimbo. Walakini, inaweza kuwa kikwazo zaidi na kinyume na wazo la asili.
Kanuni hiyo imetungwa na Andy Hunt na Dave Thomas katika kitabu chao The Pragmatic Programmer. Wanaitumia kwa upana ili kujumuisha schema za hifadhidata, mipango ya majaribio, mfumo wa ujenzi, hata hati.
Mifumo ya usanidi wa sauti inaruhusu KAUSHA au hata kuihimiza.
Apache APISIX inatoa usanidi wa KAVU katika sehemu mbili.
Katika muktadha wa biashara ya mtandaoni, safari yako ya mwanzo ya kufafanua njia kwenye Apache APISIX huenda inaanza kama ifuatavyo:
routes: - id: 1 name: Catalog uri: /products* upstream: nodes: "catalog:8080": 1
Ikiwa unaifahamu APISIX, tulifafanua njia ya kwenda kwenye katalogi chini ya /products
URI. Hata hivyo, kuna tatizo: pengine ungependa wanaotarajia kuwa wateja kuvinjari katalogi lakini unataka kuzuia watu kuunda, kufuta au kusasisha bidhaa. Bado, njia inalingana na kila njia ya HTTP kwa chaguo-msingi.
Tunapaswa kuruhusu watumiaji walioidhinishwa pekee kudhibiti katalogi ili kila mtu aweze kuivinjari bila malipo. Ili kutekeleza mbinu hii, tunahitaji kugawanya njia katika sehemu mbili:
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
ndio programu-jalizi rahisi zaidi ya hii
Tulirekebisha suala la usalama kwa njia rahisi iwezekanavyo: kwa kunakili-kubandika. Kwa kufanya hivyo, tulinakili sehemu upstream
. Ikiwa tunahitaji kubadilisha topolojia, kwa mfano , kwa kuongeza au kuondoa nodi, lazima tuifanye katika sehemu mbili. Inashinda kanuni ya KAVU.
Katika hali za ulimwengu halisi, haswa zinapohusisha kontena, huwezi kutekeleza upstream
kwa kuorodhesha nodes
. Unapaswa badala yake utekeleze ugunduzi wa huduma thabiti ili kushughulikia mabadiliko ya topolojia. Hata hivyo, hatua bado inasimama wakati unahitaji kubadilisha usanidi wa ugunduzi wa huduma au utekelezaji. Kwa hivyo, hoja yangu inatumika sawa kwa nodi na ugunduzi wa huduma.
Pamoja na muhtasari wa Njia , APISIX inatoa muhtasari wa Mkondo wa Juu ili kutekeleza KAUSHA. Tunaweza kuandika tena kijisehemu kilicho hapo juu kama hii:
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
Iwapo chochote kitatokea katika topolojia, lazima tusasishe mabadiliko katika mkondo mmoja wa Juu pekee.
Kumbuka kuwa kufafanua upstream
uliopachikwa na kuirejelea upstream_id
ni wa kipekee .
Eneo lingine ambalo APISIX inaweza kukusaidia KUKAUSHA usanidi wako kwa uondoaji wa Programu- jalizi. APISIX hutekeleza vipengele vingi, kama si vyote, kupitia programu-jalizi
Wacha tutekeleze toleo linalotegemea njia kwenye API yetu. Tunahitaji kuandika upya URL kabla ya kuisambaza.
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
kabla ya kusambaza
Kama ilivyo upstream
hapo juu, sehemu ya plugins
inarudiwa. Tunaweza pia kuainisha usanidi wa programu-jalizi katika kipengee maalum cha Usanidi wa Programu-jalizi . Kijisehemu kifuatacho kina athari sawa na kilicho hapo juu:
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
Wasomaji werevu wanaweza kuwa wamegundua kuwa ninakosa sehemu ya usanidi: auth-key
kilitoweka kwa njia ya ajabu! Hakika mimi niliiondoa kwa ajili ya uwazi.
Tofauti na upstream
na upstream_id
, plugins
na plugin_config_id
hazitengani . Tunaweza kurekebisha suala hilo kwa kuongeza tu plugin
inayokosekana:
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
Kwa njia hii, unaweza kuhamisha usanidi ulioshirikiwa kwa kitu plugin_config
na kuweka maalum mahali inatumika. Lakini vipi ikiwa programu-jalizi sawa na usanidi tofauti inatumiwa kwenye plugin_config
na moja kwa moja kwenye route
? Nyaraka ziko wazi juu yake:
Consumer
>Consumer Group
>Route
>Plugin Config
>Service
Kwa kifupi, usanidi wa plugin
katika route
hukataza usanidi katika plugin_config_id
. Pia huturuhusu kutoa utofauti wa apikey
kwa programu-jalizi ya key-auth
katika consumer
na kuiweka kwenye njia pekee. APISIX itapata na kutumia ufunguo kwa kila consumer
!
KUKAUSHA sio tu kuhusu msimbo; ni kuhusu usimamizi wa data kwa ujumla. Usanidi ni data na kwa hivyo iko chini ya mwavuli huu wa jumla.
APISIX inatoa chaguzi mbili za KAVU: moja ya upstream
- upstream_id
, na moja ya plugin
- plugin_config_id
. Mito ya juu ni ya kipekee; programu-jalizi huruhusu kubatilisha.
Taratibu zote mbili zinapaswa kukusaidia kuelekea KUKAUSHA usanidi wako na kuifanya iweze kudumishwa kwa muda mrefu.
Ili kwenda zaidi:
Ilichapishwa awali katika A Java Geek mnamo Septemba 1, 2024