Modèl achitekti pratik

Hey Habr!

Nan limyè de evènman aktyèl akòz coronavirus, yon kantite sèvis Entènèt yo te kòmanse resevwa chaj ogmante. Pa egzanp, Youn nan chèn yo Vann an Detay UK tou senpleman sispann sit lòd sou entènèt li yo., paske pat gen ase kapasite. Epi li pa toujou posib pou pi vit yon sèvè pa tou senpleman ajoute ekipman ki pi pwisan, men demann kliyan yo dwe trete (oswa yo pral ale nan konpetitè).

Nan atik sa a mwen pral yon ti tan pale sou pratik popilè ki pral pèmèt ou kreye yon sèvis rapid ak fòt-toleran. Sepandan, nan plan devlopman posib, mwen chwazi sèlman sa yo ki kounye a fasil pou itilize. Pou chak atik, swa gen bibliyotèk pare, oswa ou gen opòtinite pou rezoud pwoblèm nan lè l sèvi avèk yon platfòm nwaj.

Dekale orizontal

Pwen ki pi senp epi ki pi koni. Konvansyonèlman, de plan distribisyon chaj ki pi komen yo se dekale orizontal ak vètikal. Nan ka a an premye ou pèmèt sèvis yo kouri nan paralèl, kidonk distribye chaj la ant yo. Nan dezyèm lan ou bay lòd pou sèvè ki pi pwisan oswa optimize kòd la.

Pou egzanp, mwen pral pran depo dosye nwaj abstrè, se sa ki, kèk analòg nan OwnCloud, OneDrive, ak sou sa.

Yon foto estanda nan yon kous sa a se anba a, men li sèlman demontre konpleksite nan sistèm nan. Apre yo tout, nou bezwen yon jan kanmenm senkronize sèvis yo. Kisa k ap pase si itilizatè a sove yon dosye nan tablèt la epi li vle wè li nan telefòn lan?

Modèl achitekti pratik
Diferans ki genyen ant apwòch yo: nan dekale vètikal, nou pare ogmante pouvwa a nan nœuds, ak nan dechèl orizontal, nou pare yo ajoute nouvo nœuds distribye chay la.

CQRS

Kòmandman Segregasyon Responsablite Rechèch Yon modèl olye enpòtan, paske li pèmèt kliyan diferan pa sèlman konekte ak sèvis diferan, men tou, yo resevwa menm kouran evènman yo. Benefis li yo pa tèlman evidan pou yon aplikasyon senp, men li trè enpòtan (ak senp) pou yon sèvis okipe. Sans li yo: koule done fèk ap rantre ak sortan pa ta dwe kwaze. Sa vle di, ou pa ka voye yon demann epi atann yon repons; olye de sa, ou voye yon demann nan sèvis A, men ou resevwa yon repons nan men sèvis B.

Premye bonis apwòch sa a se kapasite pou kraze koneksyon an (nan sans laj mo a) pandan y ap egzekite yon demann long. Pou egzanp, ann pran yon sekans plis oswa mwens estanda:

  1. Kliyan an voye yon demann nan sèvè a.
  2. Sèvè a te kòmanse yon tan pwosesis long.
  3. Sèvè a reponn kliyan an ak rezilta a.

Ann imajine ke nan pwen 2 koneksyon an te kase (oswa rezo a rekonekte, oswa itilizatè a te ale nan yon lòt paj, kraze koneksyon an). Nan ka sa a, li pral difisil pou sèvè a voye yon repons bay itilizatè a ak enfòmasyon sou sa egzakteman yo te trete. Sèvi ak CQRS, sekans lan pral yon ti kras diferan:

  1. Kliyan an te abònman ak mizajou.
  2. Kliyan an voye yon demann nan sèvè a.
  3. Sèvè a reponn "demann aksepte."
  4. Sèvè a reponn ak rezilta a atravè kanal la soti nan pwen "1".

Modèl achitekti pratik

Kòm ou ka wè, konplo a se yon ti kras pi konplike. Anplis, apwòch entwisyon demann-repons la manke isit la. Sepandan, jan ou ka wè, yon kraze koneksyon pandan y ap trete yon demann pa pral mennen nan yon erè. Anplis, si an reyalite itilizatè a konekte ak sèvis la nan plizyè aparèy (pa egzanp, nan yon telefòn mobil ak nan yon tablèt), ou ka asire w ke repons lan vini nan tou de aparèy.

Enteresan, kòd la pou trete mesaj fèk ap rantre yo vin menm bagay la tou (pa 100%) tou de pou evènman ki te enfliyanse pa kliyan an tèt li, ak pou lòt evènman, ki gen ladan sa ki soti nan lòt kliyan.

Sepandan, an reyalite, nou jwenn yon bonis adisyonèl akòz lefèt ke koule unidirectional ka okipe nan yon style fonksyonèl (lè l sèvi avèk RX ak menm jan an). Ak sa a se deja yon plis grav, depi nan sans aplikasyon an ka fè konplètman reyaktif, epi tou lè l sèvi avèk yon apwòch fonksyonèl. Pou pwogram gra, sa ka siyifikativman sove devlopman ak sipò resous.

Si nou konbine apwòch sa a ak dekale orizontal, Lè sa a, kòm yon bonis nou jwenn kapasite nan voye demann nan yon sèvè epi resevwa repons nan men yon lòt. Kidonk, kliyan an ka chwazi sèvis ki bon pou li, epi sistèm anndan an ap toujou kapab trete evènman yo kòrèkteman.

Evènman Sourcing

Kòm ou konnen, youn nan karakteristik prensipal yo nan yon sistèm distribye se absans la nan yon tan komen, yon seksyon komen kritik. Pou yon pwosesis, ou ka fè yon senkronizasyon (sou mutexs yo menm), nan ki ou asire w ke pa gen okenn lòt moun ap egzekite kòd sa a. Sepandan, sa a se danjere pou yon sistèm distribiye, depi li pral mande pou anlè, epi li pral tou touye tout bote nan dekale - tout eleman yo ap toujou rete tann pou youn.

Soti isit la nou jwenn yon reyalite enpòtan - yon sistèm rapid distribiye pa ka senkronize, paske Lè sa a, nou pral diminye pèfòmans. Nan lòt men an, nou souvan bezwen yon konsistans sèten ant eleman yo. Ak pou sa ou ka itilize apwòch la ak evantyèlman konsistans, kote li garanti ke si pa gen okenn chanjman done pou kèk peryòd de tan apre dènye aktyalizasyon an ("evantyèlman"), tout demann yo pral retounen dènye valè a ajou.

Li enpòtan pou konprann ke pou baz done klasik li se byen souvan itilize konsistans fò, kote chak ne gen menm enfòmasyon (sa a souvan reyalize nan ka kote tranzaksyon an konsidere kòm etabli sèlman apre dezyèm sèvè a reponn). Gen kèk detant isit la akòz nivo izolasyon yo, men lide jeneral la rete menm - ou ka viv nan yon mond konplètman amonize.

Sepandan, ann retounen nan travay orijinal la. Si yon pati nan sistèm nan ka bati ak evantyèlman konsistans, Lè sa a, nou ka konstwi dyagram sa a.

Modèl achitekti pratik

Karakteristik enpòtan nan apwòch sa a:

  • Chak demann fèk ap rantre yo mete nan yon sèl keu.
  • Pandan y ap trete yon demann, sèvis la ka mete tou travay nan lòt moun kap kriye.
  • Chak evènman fèk ap rantre gen yon idantifyan (ki nesesè pou deduplication).
  • Nat la ap travay ideolojikman selon konplo "ajoute sèlman". Ou pa ka retire eleman nan li oswa reranje yo.
  • Nat la ap travay dapre konplo FIFO (rekize pou tautoloji a). Si ou bezwen fè ekzekisyon paralèl, Lè sa a, nan yon etap ou ta dwe deplase objè nan ke moun kap kriye diferan.

Kite m 'fè ou sonje ke nou ap konsidere ka a nan depo dosye sou entènèt. Nan ka sa a, sistèm lan pral gade yon bagay tankou sa a:

Modèl achitekti pratik

Li enpòtan pou sèvis ki nan dyagram nan pa nesesèman vle di yon sèvè separe. Menm pwosesis la ka menm. Yon lòt bagay enpòtan: ideolojikman, bagay sa yo separe yon fason pou dekale orizontal ka fasil aplike.

Ak pou de itilizatè dyagram nan pral sanble sa a (sèvis ki fèt pou itilizatè diferan yo endike nan koulè diferan):

Modèl achitekti pratik

Bonis soti nan yon konbinezon konsa:

  • Sèvis tretman enfòmasyon yo separe. File yo tou separe. Si nou bezwen ogmante debi sistèm lan, Lè sa a, nou jis bezwen lanse plis sèvis sou plis serveurs.
  • Lè nou resevwa enfòmasyon nan men yon itilizatè, nou pa oblije rete tann jiskaske done yo konplètman sove. Okontrè, nou jis bezwen reponn "ok" ak Lè sa a, piti piti kòmanse travay. An menm tan an, keu la lis soti pik, depi ajoute yon nouvo objè rive byen vit, epi itilizatè a pa oblije rete tann pou yon pas konplè nan sik la tout antye.
  • Kòm yon egzanp, mwen te ajoute yon sèvis deduplication ki eseye rantre dosye ki idantik. Si li travay pou yon tan long nan 1% nan ka, kliyan an ap diman remake li (gade pi wo a), ki se yon gwo plis, depi nou pa oblije XNUMX% vitès ak serye.

Sepandan, dezavantaj yo imedyatman vizib:

  • Sistèm nou an pèdi konsistans strik li. Sa vle di ke si, pou egzanp, ou abònman nan sèvis diferan, Lè sa a, teyorikman ou ka jwenn yon eta diferan (piske youn nan sèvis yo ka pa gen tan resevwa yon notifikasyon nan keu entèn la). Kòm yon lòt konsekans, sistèm nan kounye a pa gen okenn tan komen. Sa vle di, li enposib, pou egzanp, sòt tout evènman tou senpleman pa lè arive, depi revèy ki genyen ant sèvè yo pa ka synchrone (anplis, menm tan an sou de sèvè se yon utopi).
  • Pa gen okenn evènman kounye a ka tou senpleman woule tounen (jan yo ta ka fè ak yon baz done). Olye de sa, ou bezwen ajoute yon nouvo evènman - evènman konpansasyon, ki pral chanje dènye eta a nan youn nan obligatwa. Kòm yon egzanp ki soti nan yon zòn ki sanble: san yo pa reekri istwa (ki se move nan kèk ka), ou pa ka woule tounen yon komèt nan git, men ou ka fè yon espesyal. rollback komèt, ki esansyèlman jis retounen eta a fin vye granmoun. Sepandan, tou de komèt inègza ak rollback la ap rete nan listwa.
  • Schema done a ka chanje soti nan lage nan lage, men ansyen evènman yo p ap kapab mete ajou ak nouvo estanda a (piske evènman yo pa ka chanje an prensip).

Kòm ou ka wè, Evènman Sourcing travay byen ak CQRS. Anplis, mete ann aplikasyon yon sistèm ak ke moun kap kriye efikas ak pratik, men san yo pa separe koule done, se deja difisil nan tèt li, paske ou pral gen ajoute pwen senkronizasyon ki pral netralize tout efè pozitif nan ke moun kap kriye yo. Aplike tou de apwòch nan yon fwa, li nesesè pou yon ti kras ajiste kòd pwogram lan. Nan ka nou an, lè w ap voye yon fichye nan sèvè a, repons lan vini sèlman "ok", ki vle di sèlman "operasyon pou ajoute fichye a te sove." Fòmèlman, sa pa vle di ke done yo deja disponib sou lòt aparèy (pa egzanp, sèvis deduplication la ka rebati endèks la). Sepandan, apre kèk tan, kliyan an pral resevwa yon notifikasyon nan style "fichye X te sove."

Kòm yon rezilta:

  • Nimewo a nan estati voye fichye a ap ogmante: olye pou yo klasik "fichye voye a," nou jwenn de: "fichye a te ajoute nan keu la sou sèvè a" ak "fichye a te sove nan depo." Lèt la vle di ke lòt aparèy ka deja kòmanse resevwa dosye a (ajiste pou lefèt ke ke moun kap kriye yo opere nan vitès diferan).
  • Akòz lefèt ke enfòmasyon soumèt la kounye a vini nan chanèl diferan, nou bezwen vini ak solisyon yo resevwa estati a pwosesis nan dosye a. Kòm yon konsekans sa a: kontrèman ak demann-repons klasik la, kliyan an ka rekòmanse pandan y ap trete dosye a, men estati a nan pwosesis sa a tèt li pral kòrèk. Anplis, atik sa a travay, esansyèlman, soti nan bwat la. Kòm yon konsekans: kounye a nou gen plis toleran nan echèk.

sharding

Jan sa dekri pi wo a, sistèm apwovizyone evènman yo manke konsistans strik. Sa vle di nou ka itilize plizyè depo san okenn senkronizasyon ant yo. Lè nou apwoche pwoblèm nou an, nou kapab:

  • Separe dosye pa kalite. Pou egzanp, foto / videyo ka dekode epi yo ka chwazi yon fòma pi efikas.
  • Separe kont pa peyi. Akòz anpil lwa, sa ka mande, men konplo achitekti sa a bay yon opòtinite konsa otomatikman

Modèl achitekti pratik

Si ou vle transfere done ki sòti nan yon depo nan yon lòt, Lè sa a, mwayen estanda yo pa ase ankò. Malerezman, nan ka sa a, ou bezwen sispann keu la, fè migrasyon an, ak Lè sa a, kòmanse li. Nan ka jeneral la, done yo pa ka transfere "sou vole a", sepandan, si keu evènman an estoke nèt, epi ou gen snapshots nan eta depo anvan yo, Lè sa a, nou ka repete evènman yo jan sa a:

  • Nan Evènman Sous, chak evènman gen pwòp idantifyan li (depreferans, ki pa diminye). Sa vle di nou ka ajoute yon jaden nan depo a - id dènye eleman trete a.
  • Nou kopi keu la pou tout evènman yo ka trete pou plizyè depo endepandan (premye a se youn nan ki done yo deja estoke, ak dezyèm lan se nouvo, men yo toujou vid). Dezyèm keu a, nan kou, se pa ke yo te trete ankò.
  • Nou lanse dezyèm keu a (ki se, nou kòmanse rejoue evènman yo).
  • Lè nouvo keu a relativman vid (ki vle di, diferans tan mwayèn ant ajoute yon eleman ak rekipere li se akseptab), ou ka kòmanse chanje lektè nan nouvo depo a.

Kòm ou ka wè, nou pa t 'gen, epi toujou pa genyen, konsistans strik nan sistèm nou an. Gen sèlman evantyèlman konsistans, se sa ki, yon garanti ke evènman yo trete nan menm lòd la (men pètèt ak reta diferan). Epi, lè l sèvi avèk sa a, nou ka relativman fasil transfere done san yo pa sispann sistèm nan lòt bò a nan glòb la.

Kidonk, kontinye egzanp nou an sou depo sou entènèt pou dosye, tankou yon achitekti deja ban nou yon kantite bonis:

  • Nou ka deplase objè pi pre itilizatè yo nan yon fason dinamik. Nan fason sa a ou ka amelyore kalite sèvis la.
  • Nou ka estoke kèk done nan konpayi yo. Pou egzanp, itilizatè Enterprise souvan mande pou done yo dwe estoke nan sant done kontwole (pou evite fwit done). Atravè sharding nou ka fasilman sipòte sa a. Ak travay la se menm pi fasil si kliyan an gen yon nwaj konpatib (pa egzanp, Azure pwòp tèt ou anime).
  • Ak sa ki pi enpòtan an se ke nou pa oblije fè sa. Apre yo tout, pou kòmanse, nou ta byen kontan ak yon sèl depo pou tout kont (pou kòmanse travay byen vit). Ak karakteristik kle nan sistèm sa a se ke byenke li se dilatabl, nan etap inisyal la li se byen senp. Ou jis pa bezwen imedyatman ekri kòd ki travay ak yon milyon separe ke moun kap kriye endepandan, elatriye. Si sa nesesè, sa ka fè nan tan kap vini an.

Hosting kontni estatik

Pwen sa a ka sanble byen evidan, men li toujou nesesè pou yon aplikasyon plis oswa mwens estanda chaje. Sans li se senp: tout kontni estatik distribye pa soti nan menm sèvè a kote aplikasyon an ye, men soti nan sa ki espesyal dedye espesyalman nan travay sa a. Kòm yon rezilta, operasyon sa yo fèt pi vit (nginx kondisyonèl sèvi dosye pi vit ak mwens chè pase yon sèvè Java). Plus CDN achitekti (Content livrezon rezo) pèmèt nou lokalize dosye nou yo pi pre itilizatè fen yo, ki gen yon efè pozitif sou konvenyans nan travay ak sèvis la.

Egzanp ki pi senp ak pi estanda nan kontni estatik se yon seri scripts ak imaj pou yon sit entènèt. Tout bagay se senp ak yo - yo konnen yo davans, Lè sa a, se achiv yo Uploaded nan serveurs CDN, ki soti nan kote yo distribye bay itilizatè fen.

Sepandan, an reyalite, pou kontni estatik, ou ka itilize yon apwòch yon ti jan ki sanble ak achitekti lambda. Ann retounen nan travay nou an (depo fichye sou entènèt), kote nou bezwen distribye fichye bay itilizatè yo. Solisyon ki pi senp la se kreye yon sèvis ki, pou chak demann itilizatè, fè tout chèk ki nesesè yo (otorizasyon, elatriye), ak Lè sa a, telechaje dosye a dirèkteman nan depo nou an. Dezavantaj prensipal la nan apwòch sa a se ke kontni estatik (ak yon dosye ki gen yon revizyon sèten se, an reyalite, kontni estatik) distribye pa menm sèvè a ki gen lojik biznis la. Olye de sa, ou ka fè dyagram sa a:

  • Sèvè a bay yon URL download. Li ka nan fòm file_id + kle, kote kle se yon siyati mini-dijital ki bay dwa pou jwenn aksè nan resous la pou pwochen 24 èdtan yo.
  • Fichye a distribye pa senp nginx ak opsyon sa yo:
    • Cache kontni. Depi sèvis sa a ka lokalize sou yon sèvè separe, nou te kite tèt nou yon rezèv pou tan kap vini an ak kapasite nan estoke tout dènye fichye telechaje yo sou disk.
    • Tcheke kle a nan moman kreyasyon koneksyon an
  • Si ou vle: pwosesis kontni difizyon. Pou egzanp, si nou konprese tout dosye nan sèvis la, Lè sa a, nou ka fè dezip dirèkteman nan modil sa a. Kòm yon konsekans: operasyon IO yo fè kote yo fè pati. Yon achiv nan Java pral fasilman asiyen yon anpil nan memwa siplemantè, men reekri yon sèvis ak lojik biznis nan kondisyonèl Rust / C++ ka pa efikas tou. Nan ka nou an, diferan pwosesis (oswa menm sèvis) yo itilize, ak Se poutèt sa nou ka byen efektivman separe lojik biznis ak operasyon IO.

Modèl achitekti pratik

Konplo sa a pa sanble anpil ak distribye kontni estatik (piske nou pa telechaje tout pake estatik yon kote), men an reyalite, apwòch sa a se jisteman konsène ak distribye done imuiabl. Anplis, konplo sa a ka jeneralize nan lòt ka kote kontni an pa tou senpleman estatik, men yo ka reprezante kòm yon seri blòk imuiabl ak ki pa efase (byenke yo ka ajoute).

Kòm yon lòt egzanp (pou ranfòsman): si ou te travay ak Jenkins/TeamCity, Lè sa a, ou konnen ke tou de solisyon yo ekri nan Java. Tou de nan yo se yon pwosesis Java ki okipe tou de bati orchestration ak jesyon kontni. An patikilye, yo tou de gen travay tankou "transfere yon fichye/dosye soti nan sèvè a." Kòm yon egzanp: bay zafè, transfere kòd sous (lè ajan an pa telechaje kòd la dirèkteman nan repozitwa a, men sèvè a fè li pou li), aksè nan mòso bwa. Tout travay sa yo diferan nan chaj IO yo. Sa vle di, li sanble ke sèvè a responsab pou lojik biznis konplèks dwe an menm tan an kapab efektivman pouse gwo koule nan done nan tèt li. Ak sa ki pi enteresan an se ke yon operasyon konsa ka delege nan menm nginx la dapre egzakteman menm konplo a (eksepte ke yo ta dwe ajoute kle done a nan demann lan).

Sepandan, si nou retounen nan sistèm nou an, nou jwenn yon dyagram menm jan an:

Modèl achitekti pratik

Kòm ou ka wè, sistèm nan te vin radikalman pi konplèks. Koulye a, li pa jis yon mini-pwosesis ki estoke dosye lokalman. Koulye a, sa ki nesesè se pa sipò ki pi senp, kontwòl vèsyon API, elatriye. Se poutèt sa, apre tout dyagram yo te trase, li pi bon pou evalye an detay si ekstansiblite vo pri a. Sepandan, si ou vle pou kapab elaji sistèm nan (ki gen ladan travay ak yon menm pi gwo kantite itilizatè), Lè sa a, ou pral oblije ale pou solisyon menm jan an. Men, kòm yon rezilta, sistèm nan se achitekti pare pou ogmante chaj (prèske chak eleman ka klonaj pou dekale orizontal). Sistèm nan ka mete ajou san yo pa sispann li (senpleman kèk operasyon yo pral yon ti kras ralanti).

Kòm mwen te di nan kòmansman an trè, kounye a yon kantite sèvis entènèt yo te kòmanse resevwa chaj ogmante. Ak kèk nan yo tou senpleman te kòmanse sispann travay kòrèkteman. An reyalite, sistèm yo echwe jisteman nan moman sa a lè biznis la te sipoze fè lajan. Sa vle di, olye pou yo livrezon difere, olye pou yo sijere kliyan yo "planifye livrezon ou pou mwa kap vini yo," sistèm nan tou senpleman di "ale nan konpetitè ou yo." An reyalite, sa a se pri a nan pwodiktivite ki ba: pèt yo pral rive jisteman lè pwofi yo ta pi wo.

Konklizyon

Tout apwòch sa yo te konnen anvan. Menm VK la depi lontan te itilize lide nan Hosting kontni estatik pou montre imaj. Yon anpil nan jwèt sou entènèt sèvi ak konplo a Sharding divize jwè yo an rejyon oswa separe kote jwèt (si mond lan tèt li se youn). Apwòch sourcing evènman aktivman itilize nan imèl. Pifò aplikasyon komès kote done yo toujou ap resevwa yo aktyèlman bati sou yon apwòch CQRS yo nan lòd yo kapab filtre done yo resevwa yo. Oke, dekale orizontal yo te itilize nan anpil sèvis pou byen yon tan long.

Sepandan, sa ki pi enpòtan, tout modèl sa yo te vin trè fasil pou aplike nan aplikasyon modèn (si yo apwopriye, nan kou). Clouds ofri Sharding ak dekale orizontal touswit, ki se pi fasil pase kòmande diferan sèvè devwe nan diferan sant done tèt ou. CQRS te vin pi fasil, si sèlman akòz devlopman nan bibliyotèk tankou RX. Apeprè 10 ane de sa, yon sit entènèt ra te kapab sipòte sa a. Evènman Sourcing se tou ekstrèmman fasil pou mete sou pye gras a resipyan pare ak Apache Kafka. Sa gen 10 ane sa a ta yon inovasyon, kounye a li se yon bagay komen. Se menm bagay la ak Hosting kontni estatik: akòz teknoloji ki pi pratik (ki gen ladan lefèt ke gen dokiman detaye ak yon baz done gwo repons), apwòch sa a te vin menm pi senp.

Kòm yon rezilta, aplikasyon an nan yon kantite modèl achitekti olye konplèks te vin pi senp kounye a, ki vle di li se pi bon pran yon gade pi pre nan li davans. Si nan yon aplikasyon dis ane fin vye granmoun youn nan solisyon ki anwo yo te abandone akòz pri a wo nan aplikasyon ak operasyon, kounye a, nan yon nouvo aplikasyon, oswa apre refactoring, ou ka kreye yon sèvis ki pral deja achitekti tou de ekstansib ( an tèm de pèfòmans) ak pare-fè a nouvo demann soti nan kliyan (pa egzanp, lokalize done pèsonèl).

Ak pi enpòtan: tanpri pa sèvi ak apwòch sa yo si ou gen yon aplikasyon ki senp. Wi, yo bèl ak enteresan, men pou yon sit ki gen yon vizit pik nan 100 moun, ou ka souvan jwenn pa ak yon monolit klasik (omwen sou deyò a, tout bagay andedan ka divize an modil, elatriye).

Sous: www.habr.com

Add nouvo kòmantè