Introduksiyon

Ang arkitekturang Microservices ay naging isang nangingibabaw na huwaran para sa pagtatayo ng mga sistemang pangkalidad, nagsasarili, at pang-edukasyon na software. Gayunpaman, ang paglipat mula sa mga aplikasyong monolito tungo sa pamamahagi ng mga serbisyo ay nagpapakilala ng bagong mga mikroskopikong peristensiya sa pagitan ng mga serbisyo, hindi malinaw na mga hangganan, at kahirapan sa pagsubok at paglalagay. Paglalapat ng mga prinsipyong SOLID tungo sa mga microservice na mas madaling makagawa ng mga disenyong may mga direksiyong ekwasyong pang-ulo, mga hamongrambong pang-on. Ang limang bagay-oritipikong mga eksitomikong mga eksiyon, kapag na ito ay na pag-oritwal ng mga eksing-oritibo, mga eksistensiyal na mga eksibong mga eksiyon, mga eksibong mga eksiyon, mga eksitibo at mga eksiyon, mga eksiyon, mga eksibong mga eksitibo, mga eksiyon, mga eksitibo at mga eksiyon, mga

Ano ba ang mga Simulaing OLID?

Ang SOLID ay isang acronym na ipinakilala ni Robert C. Martin (Uncle Bob) na kumakatawan sa limang prinsipyo ng disenyo na humihimok ng mga mapanatili at ekstensibong object-orienteng kodigo. Sa isang microservices na konteksto, ang mga prinsipyong ito ay nagsasalin upang i-decoupled, ituon ang mga serbisyo at malinaw na kontrata sa pagitan nila.

Simulain sa Pag - aasawa sa Pananagutan (SRP)

Ang isang klase o module ay dapat na may isa, at isa lamang, na dahilan upang magbago. Sa microservices, ito ay nangangahulugan na ang bawat serbisyo ay dapat na may isang kakayahan sa negosyo o subdomain. halimbawa, ang isang serbisyo ng pangangasiwa ng order ay dapat na mag-ayos lamang ng mga pangyayari sa lifecycle, hindi ang pagpoproseso ng bayad o imbentaryong pagsubaybay.Ito ay nagbabawas sa pagsabog ng mga pagbabago at gumagawa sa mga serbisyo na independiyenteng ma-i-i-i-up.

Open/Klosed Principle (OCP)

Ang mga software entity ay dapat bukas para sa extension ngunit sarado para sa modipikasyon.Aprivied to microservices, ang mga serbisyo ay dapat maglantad ng matatag na interfaces (APIs o mga kontrata ng pangyayari) na maaaring palawigin na may bagong mga katangian nang hindi binabago ang umiiral na code. Ito ay kadalasang nakakamit sa pamamagitan ng bersyoned APIs, pangyayaring ebolusyong scha, o mga arkitekturang plin.

Simulain ng Pagpapailalim sa Liskov (LSP)

Ang mga bagay sa isang subclass ay dapat palitan ng mga bagay ng isang subclass nang hindi naaapektuhan ang pagiging tama ng programa. Para sa mga microservice, tinitiyak ng LSP na ang iba't ibang pagpapatupad ng isang service interface (hal.g, isang tarangkahang pambayad na maaaring mag-iba mula sa Stripe patungo sa PayPal) ay gumagawi nang walang pagbabago at maaaring palitan nang hindi nasisira ang mga mamimili.

Mga Simulain sa Pag - aasawa (ISP)

Maraming mga client-specific interfaces ay mas mabuti kaysa sa isang pangkalahatang-layuning interface. Sa microservices, ito ay nagsasalin sa maliit, nakatutok na APIs o mga pagpapakahulugan sa pangyayari na nababagay sa bawat mga pangangailangan ng mga customerior. Halimbawa, ang isang serbisyo ng parokyano ay maaaring maglantad ng mga hiwalay na endpoints para sa profile recombinantial, address management, at ang kalagayan ng katapatan sa halip na isang momentic ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ .

Dependensiya Pagbabagong Simulain (DIP)

Depende sa mga abstrakto, hindi sa mga konkretong konkretong pang-kompyuter, mga serbisyo ay dapat depende sa mga abstraktong interface gaya ng mga koredor ng mensahe, mga tarangkahan ng API, o mga meshekto sa halip na mga hardcoded reference sa iba pang mga serbisyo.Ito ay nagpapangyari sa pagpapalit-palit ng mga pagpapatupad, pagpapakilala ng mga circuit breaker, o pagdaragdag ng mga patong na pang-masayting na hindi binabago ang lohika sa negosyo.

Kung Bakit Mapanganib ang mga Simulaing ISANG Kabihasnan sa mga Microservice

Ang mga prinsipyong SOCerservice ay likas na nangangailangan ng malinaw na mga hangganan, maluwag na pagsasanib, at mataas na kompleks ng SOLID ay nagbibigay ng isang napatunayang balangkas upang makamit ang mga katangiang ito. kung wala ito, ang mga koponan ay kadalasang nahuhulog sa mga anti-paterno tulad ng ⁇ distributed monogenics, ang ⁇ kung saan ang mga serbisyo ay mahigpit na pinagsanib sa pamamagitan ng mga kabahaging database o chatty APIs. Ang paglalapat ng SOLID ay pumipigil dito sa pamamagitan ng pag-impwersabliko ng paghihiwalay ng mga alalahanin sa antas ng arkitektura.

Bukod diyan, habang dumarami ang mga serbisyo, ang halaga ng mga pagbabago ay tumataas nang husto kung hindi naaaasikaso ang mga dependensiya.

Mga Pakinabang ng Pagkakapit ng mga Simulaing SOLID sa Microservices

Nakapanatiling Matatag

Halimbawa, kapag ang bawat serbisyo ay may iisang pananagutan, ang pagbabago sa isang serbisyo ay bihirang makaapekto sa iba.Ang pagdaragdag ng bagong verification celect sa isang authoration service ay hindi nangangailangan ng mga pagbabago sa user profile service.Ang pagbubukod na ito ay lubhang nakababawas sa regresyon testing cover at mga panganib sa paglalagay ng standing. Ang mga pangkat ay maaaring maglabas ng mga update sa mga serbisyo ng indibiduwal sa kanilang sariling kadependiyente, na bumibilis ang mga siklo ng paghahatid.

Mas Mahusay na Pag - aanak

Ang mga serbisyong dinisenyo kasama ng SRP at ISP ay likas na mas maraming granularidad. Ang granularidad na ito ay nagpapahintulot sa mga organisasyon na sukatin lamang ang mga bahagi na nakakaranas ng mas mataas na pangangailangan. Halimbawa, ang isang video blowing platform nito ay maaaring umere sa transcoding service nito nang hiwalay mula sa metadata seeup service nito. Dahil ang dependencies ay baligtad (DIP), ang isang serbisyo ay hindi nangangailangan ng pag-scaping ang mga partner nito sa pascubang-kant.

Mas Madaling makibagay at Muling Mabagay

Tinitiyak ng Interface declusion na ang mga serbisyo ay naglalantad lamang ng kailangan ng mga mamimili.Ito ay nagpapaliit sa mga kompyuter na iyon at gumagawa sa mga interface na muling magagamit sa pamamagitan ng mga maramihang mamimili. halimbawa, ang isang serbisyong pantelebisyon na may hiwalay na interfaces para sa email, SMS, at nagtutulak ng mga notasyon ay maaaring magamit muli sa pamamagitan ng kaayusan, pag-asta, at account services nang hindi nangangailangan ng mga pagbabago. Ang bukas/conclusion na prinsipyo ay nakadaragdag pa sa mga bagong notasyon channel (e., WebSocket) nang hindi nababago ang mga umiiral na interfaces.

Mas Mabuting Pagsubok

Ang mga serbisyong pang-iisahan na may mga mahusay na kahulugang interface ay mas madaling masubukan. Unit pagsubok ng isang serbisyo na umaasa sa mga abstraksyon (DIP) sa halip na mga kongkretong serbisyo ay pumapayag sa mga developer na gumamit ng mga kumplikado o stub. Ang pagsubok sa integrasyon ay nagiging mas simple dahil ang bawat serbisyo ay maaaring tumakbo nang nakabukod laban sa isang test guest. Ang mas mataas na saklaw ng pagsubok ay humahantong sa mas kaunting insidente ng produksiyon at mas mabilis na mga presyments.

Maling Pagpaparaya at Pagrereresulta

Sa pamamagitan ng pagsunod sa DIP, ang mga serbisyo ay umaasa sa mga abstraktong channel na gaya ng message queues o serbisyo mesh proxies. Ang mga abstraksiyong ito ay maaaring magpatupad ng mga retries, timeout, circuit breaker, at mga maramihang stage nang hindi binabago ang mga lohika sa serbisyo. halimbawa, ang isang serbisyong order na nagpapadala ng mga pangyayaring pagbabayad sa pamamagitan ng isang broker ng mensahe (DIP) ay patuloy na kikilos kahit na kung ang serbisyong pagbabayad ay pansamantalang hindi naisahan, habang ang mga pangyayari ay pinag-isang proseso para sa kalaunan.

Mas Madaling Pagsakay at Pagtutot ng Team Autonomy

Kapag ang mga serbisyo ay sumusunod sa SRP at ISP, ang kanilang mga responsibilidad ay malinaw at limitado. Ang mga bagong developer ay maaaring maunawaan agad ang isang serviceifics na layunin. Ang mga pangkat ay maaaring magkaroon ng isang set ng mga kaugnay na serbisyo nang hindi nangangailangan ng malalim na kaalaman sa iba. Ito ay nagpapangyari sa mga uri ng autonomous, cross-functional teams na ipinangangako ng microservices.

Praktikal na Pagkakapit ng SOLID sa Microservices

Pagpapakahulugan sa mga Hangganan ng Paglilingkod sa Pamamagitan ng SRP

Sa isang e-commerce system, ang bawat konteksto ay nagiging serbisyo, at sa isang e-commerce system, ay lumilikha ng hiwalay na serbisyo para sa katalogo, kariton, order, bayad, kargamento, at reviews. Ang bawat serbisyo ay pagmamay-ari ng mga data at mga tuntunin sa negosyo. Iwasan ang paglikha ng isang ⁇ utilness serviceificity na naghahalo ng mga responsibilidad.

Pagdisenyo ng mga Mapagkakatiwalaang Interface na may OCP at ISP

Gumawa ng mga interface na depinisyon (contracts) gamit ang protobuf, OpenAPI, o AsyncAPI.Enure Ang mga interface na ito ay bersyoned at extensionsible. Halimbawa, ang isang ⁇ order na nilikha na larongi ⁇ ay dapat isama ang mga field na tiyak mo, ngunit payagan ang mga hinaharap na field sa pamamagitan ng mga insectual na katangian. Iwasan ang mga pagbabago sa pamamagitan ng pagdaragdag ng mga bagong endpoint o mga uri ng mensahe sa halip na baguhin ang mga umiiral na mga ent.

Pag - iisip na Hindi Katatawang May LSP

Kapag ang maramihang serbisyo ay nagpapatupad ng iisang interface (hal., maramihang mga tarangkahang pambayad), na pinapaliit ang kontrata. Sumulat ng mga pagsubok sa pagsasama na tumitiyak sa anumang pagpapatupad ng mga ito na sumusunod sa inaasahang gawi (hal., ang pagtanggap ng kabayaran ay nagbubunga ng tagumpay o kabiguan sa pamamagitan ng hindi nagbabagong mga kodigo ng pagkakamali).

Nakaaapekto sa mga Suliranin sa Pagmememersiya at Paglilingkod sa Messh

Sa halip na serbisyo Ang A ay gumagawa ng direktang tawag sa serbisyo B, magkaroon ng serbisyo Isang paglalathala sa isang tagapag-ayos ng mensahe (Kafka, RabbitMQ) o gumagamit ng isang serbisyo mesh (Istio, Linkerd). Ang serbisyo mesh ay maaaring humawak ng mga patakarang retry, timeout, at circuit-trail.Ang lohikang pangnegosyo sa loob ng serbisyo A ay nananatiling gnostiko sa nakapailalim na network.

Mga Hamon at Pag - aasikaso

Ang pagkakapit ng mga prinsipyong SOLID sa microservices ay may mga hamon. over-segmentation (ISP appearances official) ay maaaring humantong sa chatty interfaces at napakaraming serbisyo, tumataas na operasyonal na itaas. Gayundin, ang mahigpit na SRP ay maaaring maging sanhi ng paglikha ng mga koponan ng microservices para sa bawat maliit na unit ng trabaho, na nagbubunga ng ⁇ nanoservices.[Tances] Ang ⁇ ay susi.

Isa pang hamon ang pag-version at paatras na pag-aalsa.[kailangan ng maingat na mga patakarang depreksyon ng OCP. Ang mga kasangkapang katulad ng schema registry (Confluent Schema Registry, Apicurio) ay makatutulong sa pag-aaasal ng mga antas ng kompyuter.

Sa huli, ang team culture at organization coordination matter. kung walang malinaw na pagmamay-ari at komunikasyon, kahit na ang mga mahusay-kahulugang mga serbisyo ng SOLID ay maaaring maging mahigpit na mag-alsa sa pamamagitan ng mga ugaling pang-organisasyon (hal., kabahaging database o kabahaging aklatan).[kailangan ng sanggunian] Continuous integration at mga gawain ng Devops ay dapat suportahan ang independiyenteng pag-astancement.

Pagsasaayos

Ang pagsunod sa mga prinsipyo ng SOLID sa arkitekturang mikroservices ay hindi isang balagang pilak, ngunit ito ay isang malakas na gabay para sa mga sistema ng pagtatayo na maaaring panatilihin, ma-ccalable, at matatag. Sa pamamagitan ng pagtutuon ng pansin sa mga malinaw na responsibilidad, matatag na mga kontrata, substitute-gradyal interfaces, at pabagu-bago na mga dependensiya, maiiwasan ng mga koponan ang maraming karaniwang silo ng mga sistemang ipinamamahagi.[T] Ang pamumuhunan sa mga disenyong upfront ay nagbabayad habang ang sistema ay lumalaki at nagbabagong-anyo. Para sa karagdagang pagbasa, galugarin ang Martin Fowler[TFTLC.[T][T][T][T][T][T][T][T][TLL.[T] Ang orihinal na mga konsepto [[TLCLC.[TLC.[TLCLC.[T] Ang mga konsepto [[T] [[T] [[T] ay nagbibigay ng mga prinsipyong ito ay[T] [[TLC.[T] Ang orihinal na nagbibigay ng mga konsepto