Sayon nga mga sumbanan sa arkitektura

Hoy Habr!

Tungod sa karon nga mga panghitabo tungod sa coronavirus, daghang mga serbisyo sa Internet ang nagsugod nga nakadawat dugang nga load. Pananglitan, Usa sa mga kadena sa tingi sa UK nagpahunong lang sa online nga pag-order nga site., tungod kay walay igong kapasidad. Ug dili kanunay posible nga mapadali ang usa ka server pinaagi lamang sa pagdugang sa labi ka kusgan nga kagamitan, apan ang mga hangyo sa kliyente kinahanglan iproseso (o moadto sila sa mga kakompetensya).

Sa niini nga artikulo ako sa mubo nga paghisgot mahitungod sa popular nga mga buhat nga motugot kaninyo sa paghimo sa usa ka paspas ug fault-tolerant nga serbisyo. Bisan pa, gikan sa posible nga mga laraw sa pag-uswag, gipili ra nako ang mga karon sayon ​​gamiton. Alang sa matag butang, aduna kay andam nga mga librarya, o ikaw adunay oportunidad sa pagsulbad sa problema gamit ang cloud platform.

Horizontal scaling

Ang pinakasimple ug labing nailhan nga punto. Sa naandan, ang labing kasagaran nga duha nga mga laraw sa pag-apod-apod sa karga mao ang pinahigda ug bertikal nga pag-scale. Sa unang kaso gitugotan nimo ang mga serbisyo nga modagan nga managsama, sa ingon nag-apod-apod sa load sa taliwala nila. Sa ikaduha nag-order ka labi ka kusgan nga mga server o gi-optimize ang code.

Pananglitan, kuhaon nako ang abstract cloud file storage, nga mao, pipila ka analogue sa OwnCloud, OneDrive, ug uban pa.

Ang usa ka sumbanan nga hulagway sa ingon nga sirkito anaa sa ubos, apan kini nagpakita lamang sa pagkakomplikado sa sistema. Pagkahuman, kinahanglan naton nga i-synchronize ang mga serbisyo. Unsa ang mahitabo kung ang tiggamit magtipig usa ka file gikan sa tablet ug dayon gusto nga tan-awon kini gikan sa telepono?

Sayon nga mga sumbanan sa arkitektura
Ang kalainan tali sa mga pamaagi: sa bertikal scaling, andam kami sa pagdugang sa gahum sa mga node, ug sa pinahigda nga scaling, kami andam sa pagdugang sa bag-ong mga node sa pag-apod-apod sa load.

CQRS

Pagbulag sa Responsibilidad sa Pangutana sa Command Usa ka hinungdanon nga sumbanan, tungod kay gitugotan niini ang lainlaing mga kliyente dili lamang nga magkonektar sa lainlaing mga serbisyo, apan makadawat usab sa parehas nga mga sapa sa panghitabo. Ang mga benepisyo niini dili kaayo klaro alang sa usa ka yano nga aplikasyon, apan kini labi ka hinungdanon (ug yano) alang sa usa ka busy nga serbisyo. Ang esensya niini: ang umaabot ug paggawas nga mga agos sa datos kinahanglan dili mag-intersect. Sa ato pa, dili ka makapadala og hangyo ug magpaabot og tubag; hinuon, magpadala ka og hangyo sa serbisyo A, apan makadawat og tubag gikan sa serbisyo B.

Ang unang bonus niini nga pamaagi mao ang abilidad sa pagbungkag sa koneksyon (sa halapad nga diwa sa pulong) samtang nagpatuman sa usa ka taas nga hangyo. Pananglitan, magkuha kita og mas daghan o dili kaayo standard nga han-ay:

  1. Ang kliyente nagpadala usa ka hangyo sa server.
  2. Ang server nagsugod sa taas nga panahon sa pagproseso.
  3. Ang server mitubag sa kliyente uban sa resulta.

Atong mahanduraw nga sa punto 2 ang koneksyon naputol (o ang network nakonektar pag-usab, o ang user miadto sa laing panid, nagputol sa koneksyon). Sa kini nga kaso, maglisud ang server nga magpadala usa ka tubag sa tiggamit nga adunay kasayuran bahin sa kung unsa gyud ang giproseso. Gamit ang CQRS, ang pagkasunod-sunod mahimong gamay nga lahi:

  1. Ang kliyente nag-subscribe sa mga update.
  2. Ang kliyente nagpadala usa ka hangyo sa server.
  3. Ang server mitubag "gidawat ang hangyo."
  4. Ang server mitubag sa resulta pinaagi sa channel gikan sa punto nga "1".

Sayon nga mga sumbanan sa arkitektura

Sama sa imong nakita, ang laraw labi ka komplikado. Dugang pa, ang intuitive nga hangyo-tubag nga pamaagi nawala dinhi. Bisan pa, ingon sa imong nakita, ang usa ka break sa koneksyon samtang nagproseso sa usa ka hangyo dili mosangpot sa usa ka sayup. Dugang pa, kung sa tinuud ang tiggamit konektado sa serbisyo gikan sa daghang mga aparato (pananglitan, gikan sa usa ka mobile phone ug gikan sa usa ka tablet), mahimo nimong masiguro nga ang tubag moabut sa duha nga mga aparato.

Makapainteres, ang code alang sa pagproseso sa umaabot nga mga mensahe mahimong parehas (dili 100%) alang sa mga panghitabo nga naimpluwensyahan mismo sa kliyente, ug alang sa ubang mga panghitabo, lakip ang gikan sa ubang mga kliyente.

Bisan pa, sa tinuud nakakuha kami usa ka dugang nga bonus tungod sa kamatuoran nga ang unidirectional nga dagan mahimong madumala sa usa ka istilo nga magamit (gamit ang RX ug parehas). Ug kini usa na ka seryoso nga dugang, tungod kay sa esensya ang aplikasyon mahimo nga hingpit nga reaktibo, ug usab gamit ang usa ka praktikal nga pamaagi. Alang sa tambok nga mga programa, kini makadaginot pag-ayo sa kalamboan ug pagsuporta sa mga kapanguhaan.

Kung gihiusa namon kini nga pamaagi sa pinahigda nga pag-scale, nan ingon usa ka bonus makuha namon ang abilidad sa pagpadala mga hangyo sa usa ka server ug makadawat mga tubag gikan sa lain. Sa ingon, ang kliyente makapili sa serbisyo nga kombenyente alang kaniya, ug ang sistema sa sulod makahimo gihapon sa pagproseso sa mga panghitabo sa husto.

Pagkuha sa Panghitabo

Sama sa imong nahibal-an, usa sa mga nag-unang bahin sa usa ka gipang-apod-apod nga sistema mao ang pagkawala sa usa ka sagad nga oras, usa ka sagad nga kritikal nga seksyon. Alang sa usa ka proseso, mahimo nimo ang usa ka pag-synchronize (sa parehas nga mutexes), diin sigurado ka nga wala’y lain nga nagpatuman niini nga code. Bisan pa, delikado kini alang sa usa ka sistema nga gipang-apod-apod, tungod kay magkinahanglan kini og overhead, ug patyon usab ang tanan nga katahum sa pag-scale - ang tanan nga mga sangkap maghulat pa alang sa usa.

Gikan dinhi nakakuha kami usa ka hinungdanon nga kamatuoran - ang usa ka paspas nga pag-apod-apod nga sistema dili ma-synchronize, tungod kay makunhuran namon ang pasundayag. Sa laing bahin, kasagaran nagkinahanglan kita og usa ka piho nga pagkamakanunayon tali sa mga sangkap. Ug alang niini mahimo nimong gamiton ang pamaagi sa sa katapusan pagkamakanunayon, diin gigarantiyahan nga kung wala’y mga pagbag-o sa datos sa pila ka yugto sa panahon pagkahuman sa katapusan nga pag-update ("sa katapusan"), ang tanan nga mga pangutana ibalik ang katapusan nga gi-update nga kantidad.

Mahinungdanon nga masabtan nga alang sa mga klasiko nga database kini kanunay nga gigamit lig-on nga pagkamakanunayon, diin ang matag node adunay parehas nga kasayuran (kini kanunay nga makab-ot sa kaso diin ang transaksyon giisip nga gitukod lamang pagkahuman sa pagtubag sa ikaduha nga server). Adunay pipila ka mga kalingawan dinhi tungod sa mga lebel sa pagkahimulag, apan ang kinatibuk-ang ideya nagpabilin nga pareho - mahimo ka magpuyo sa usa ka hingpit nga nahiuyon nga kalibutan.

Apan, mobalik kita sa orihinal nga buluhaton. Kung ang bahin sa sistema mahimo nga matukod nga adunay sa katapusan pagkamakanunayon, unya makahimo kita sa mosunod nga diagram.

Sayon nga mga sumbanan sa arkitektura

Importante nga mga bahin niini nga pamaagi:

  • Ang matag umaabot nga hangyo gibutang sa usa ka pila.
  • Samtang nagproseso sa usa ka hangyo, ang serbisyo mahimo usab nga magbutang sa mga buluhaton sa ubang mga pila.
  • Ang matag umaabot nga panghitabo adunay usa ka identifier (nga gikinahanglan alang sa deduplication).
  • Ang pila sa ideolohiyang nagtrabaho sumala sa "idugang lamang" nga pamaagi. Dili nimo matangtang ang mga elemento gikan niini o mahan-ay kini pag-usab.
  • Ang pila naglihok sumala sa FIFO scheme (pasensya sa tautolohiya). Kung kinahanglan nimo nga buhaton ang parallel execution, unya sa usa ka yugto kinahanglan nimo nga ibalhin ang mga butang sa lainlaing mga pila.

Tugoti ako nga pahinumdoman ka nga among gikonsiderar ang kaso sa pagtipig sa file sa online. Sa kini nga kaso, ang sistema motan-aw sama niini:

Sayon nga mga sumbanan sa arkitektura

Importante nga ang mga serbisyo sa diagram wala magpasabot nga lahi nga server. Bisan ang proseso mahimong parehas. Laing butang ang importante: sa ideolohiya, kining mga butanga gibulag sa paagi nga ang horizontal scaling dali nga magamit.

Ug alang sa duha ka tiggamit ang diagram mahimong sama niini (ang mga serbisyo nga gituyo alang sa lainlaing mga tiggamit gipakita sa lainlaing mga kolor):

Sayon nga mga sumbanan sa arkitektura

Mga bonus gikan sa ingon nga kombinasyon:

  • Ang mga serbisyo sa pagproseso sa impormasyon gibulag. Gibulag usab ang mga pila. Kung kinahanglan namon nga madugangan ang throughput sa sistema, nan kinahanglan namon nga maglansad daghang mga serbisyo sa daghang mga server.
  • Sa diha nga kita makadawat og impormasyon gikan sa usa ka user, kita dili kinahanglan nga maghulat hangtud nga ang data hingpit nga maluwas. Sa kasukwahi, kinahanglan lang natong tubagon ang "ok" ug dayon anam-anam nga magsugod sa pagtrabaho. Sa parehas nga oras, ang pila nagpahapsay sa mga taluktok, tungod kay ang pagdugang usa ka bag-ong butang dali nga mahitabo, ug ang tiggamit dili kinahanglan maghulat alang sa usa ka kompleto nga pag-agi sa tibuuk nga siklo.
  • Ingon usa ka pananglitan, nagdugang ako usa ka serbisyo sa deduplikasyon nga nagsulay sa paghiusa sa parehas nga mga file. Kung kini molihok sa dugay nga panahon sa 1% sa mga kaso, ang kliyente halos dili makamatikod niini (tan-awa sa ibabaw), nga usa ka dako nga dugang, tungod kay dili na kami kinahanglan nga XNUMX% nga tulin ug kasaligan.

Bisan pa, ang mga disbentaha makita dayon:

  • Ang atong sistema nawad-an sa iyang higpit nga pagkamakanunayon. Kini nagpasabut nga kung, pananglitan, nag-subscribe ka sa lainlaing mga serbisyo, nan sa teorya mahimo ka makakuha usa ka lahi nga estado (tungod kay ang usa sa mga serbisyo mahimo’g wala’y oras nga makadawat usa ka pahibalo gikan sa internal nga pila). Ingon sa laing sangputanan, ang sistema karon walay komon nga panahon. Kana mao, imposible, pananglitan, ang paghan-ay sa tanan nga mga panghitabo pinaagi lamang sa oras sa pag-abot, tungod kay ang mga orasan tali sa mga server mahimo’g dili magkadungan (dugang pa, ang parehas nga oras sa duha nga mga server usa ka utopia).
  • Wala’y mga panghitabo nga mahimo na lang ibalik (sama sa mahimo sa usa ka database). Hinuon, kinahanglan nimong idugang ang bag-ong panghitabo − panghitabo sa kompensasyon, nga magbag-o sa katapusang estado sa gikinahanglan. Ingon usa ka pananglitan gikan sa parehas nga lugar: kung wala’y pagsulat pag-usab sa kasaysayan (nga dili maayo sa pipila ka mga kaso), dili nimo ma-roll back ang usa ka commit sa git, apan mahimo ka maghimo usa ka espesyal rollback pasalig, nga sa esensya nagbalik lang sa daan nga estado. Bisan pa, ang mga sayup nga nahimo ug ang rollback magpabilin sa kasaysayan.
  • Ang data schema mahimong mausab gikan sa pagpagawas ngadto sa pagpagawas, apan ang daan nga mga panghitabo dili na ma-update sa bag-ong sumbanan (tungod kay ang mga panghitabo dili mausab sa prinsipyo).

Sama sa imong nakita, ang Event Sourcing maayo ang pagtrabaho sa CQRS. Dugang pa, ang pagpatuman sa usa ka sistema nga adunay episyente ug kombenyente nga mga pila, apan kung wala’y pagbulag sa mga agos sa datos, lisud na sa iyang kaugalingon, tungod kay kinahanglan nimo nga idugang ang mga punto sa pag-synchronize nga mag-neutralize sa tibuuk nga positibo nga epekto sa mga pila. Ang pagpadapat sa duha ka mga pamaagi sa usa ka higayon, gikinahanglan nga gamay ang pag-adjust sa code sa programa. Sa among kaso, kung magpadala usa ka file sa server, ang tubag moabut ra "ok", nga nagpasabut lamang nga "ang operasyon sa pagdugang sa file naluwas." Sa pormal nga paagi, wala kini magpasabot nga ang datos anaa na sa ubang mga himan (pananglitan, ang serbisyo sa deduplikasyon makahimo pag-usab sa indeks). Bisan pa, pagkahuman sa pila ka oras, ang kliyente makadawat usa ka pahibalo sa istilo sa "file X na-save na."

Isip resulta:

  • Ang gidaghanon sa mga status sa pagpadala sa file nagkadaghan: imbes sa klasiko nga "gipadala nga file," makakuha kami og duha: "ang file gidugang sa pila sa server" ug "ang file gitipigan sa storage." Ang ulahi nagpasabut nga ang ubang mga aparato mahimo na magsugod sa pagdawat sa file (gipasibo alang sa kamatuoran nga ang mga pila naglihok sa lainlaing mga tulin).
  • Tungod sa kamatuoran nga ang impormasyon sa pagsumite karon moabut pinaagi sa lain-laing mga channels, kita kinahanglan nga moabut uban sa mga solusyon sa pagdawat sa pagproseso status sa file. Ingon usa ka sangputanan niini: dili sama sa klasiko nga hangyo-tubag, ang kliyente mahimong i-restart samtang giproseso ang file, apan ang kahimtang sa kini nga pagproseso mismo husto. Dugang pa, kini nga butang nagtrabaho, sa panguna, sa gawas sa kahon. Ingon usa ka sangputanan: kita karon mas matugoton sa mga kapakyasan.

Pag-ambit

Sama sa gihulagway sa ibabaw, ang mga sistema sa pagpangita sa panghitabo kulang sa higpit nga pagkamakanunayon. Kini nagpasabot nga kita makagamit sa daghang mga storage nga walay bisan unsa nga pag-synchronize tali kanila. Sa pagduol sa atong problema, mahimo natong:

  • Pagbulag sa mga file pinaagi sa tipo. Pananglitan, ang mga hulagway/video mahimong ma-decode ug mas episyente nga format ang mapili.
  • Ibulag ang mga account sa nasud. Tungod sa daghang mga balaod, mahimo kini nga gikinahanglan, apan kini nga laraw sa arkitektura awtomatiko nga naghatag sa ingon nga oportunidad

Sayon nga mga sumbanan sa arkitektura

Kung gusto nimo ibalhin ang data gikan sa usa ka storage ngadto sa lain, dili na igo ang standard nga paagi. Ikasubo, sa kini nga kaso, kinahanglan nimo nga hunongon ang pila, buhata ang paglalin, ug dayon sugdan kini. Sa kinatibuk-an nga kaso, ang data dili mabalhin "sa langaw", bisan pa, kung ang queue sa panghitabo hingpit nga gitipigan, ug ikaw adunay mga snapshot sa miaging mga estado sa pagtipig, nan mahimo namon nga i-replay ang mga panghitabo sama sa mosunod:

  • Sa Tinubdan sa Hitabo, ang matag panghitabo adunay kaugalingon nga identifier (mas maayo, dili pagkunhod). Kini nagpasabot nga makadugang kita og field sa storage - ang id sa katapusang naprosesong elemento.
  • Gidoble namo ang pila aron ang tanan nga mga panghitabo maproseso alang sa daghang mga independente nga pagtipig (ang una mao ang usa diin ang datos gitipigan na, ug ang ikaduha bag-o, apan wala’y sulod). Ang ikaduha nga pila, siyempre, wala pa giproseso.
  • Gilunsad namo ang ikaduhang pila (nga mao, nagsugod kami sa pag-replay sa mga panghitabo).
  • Kung medyo walay sulod ang bag-ong pila (nga mao, ang kasagaran nga kalainan sa oras tali sa pagdugang sa usa ka elemento ug pagkuha niini madawat), mahimo nimong sugdan ang pagbalhin sa mga magbabasa sa bag-ong pagtipig.

Sama sa imong nakita, wala kami, ug wala gihapon, estrikto nga pagkamakanunayon sa among sistema. Adunay usa lamang ka pagkamakanunayon, nga mao, usa ka garantiya nga ang mga panghitabo giproseso sa parehas nga han-ay (apan posible nga adunay lainlaing mga paglangan). Ug, gamit kini, dali ra naton mabalhin ang data nga wala’y paghunong sa sistema sa pikas bahin sa kalibutan.

Busa, ang pagpadayon sa among panig-ingnan bahin sa online nga pagtipig alang sa mga file, ang ingon nga arkitektura naghatag na kanamo daghang mga bonus:

  • Mahimo natong ibalhin ang mga butang nga mas duol sa mga tiggamit sa dinamikong paagi. Niining paagiha mapauswag nimo ang kalidad sa serbisyo.
  • Mahimo natong tipigan ang pipila ka datos sulod sa mga kompaniya. Pananglitan, ang mga tiggamit sa Enterprise kasagaran nagkinahanglan sa ilang mga datos nga tipigan sa kontroladong mga sentro sa datos (aron malikayan ang mga pagtagas sa datos). Pinaagi sa sharding dali ra natong masuportahan kini. Ug ang buluhaton mas sayon ​​kung ang kustomer adunay usa ka katugbang nga panganod (pananglitan, Gi-host sa kaugalingon ni Azure).
  • Ug ang labing hinungdanon nga butang mao nga dili naton kinahanglan buhaton kini. Human sa tanan, sa pagsugod, kami malipay kaayo sa usa ka storage alang sa tanang mga account (aron makasugod sa pagtrabaho dayon). Ug ang yawe nga bahin sa kini nga sistema mao nga bisan kung kini mapalapad, sa una nga yugto kini yano ra. Dili nimo kinahanglan nga isulat dayon ang code nga magamit sa usa ka milyon nga bulag nga independente nga mga pila, ug uban pa. Kung gikinahanglan, mahimo kini sa umaabot.

Static Content Hosting

Kini nga punto ingon og klaro kaayo, apan gikinahanglan gihapon kini alang sa mas daghan o dili kaayo standard nga loaded nga aplikasyon. Ang esensya niini yano: ang tanan nga static nga sulud giapod-apod dili gikan sa parehas nga server diin nahimutang ang aplikasyon, apan gikan sa mga espesyal nga gipahinungod nga espesipiko sa kini nga buluhaton. Ingon usa ka sangputanan, kini nga mga operasyon gihimo nga labi ka paspas (kondisyon nga nginx nagsilbi nga mga file nga mas paspas ug dili kaayo mahal kaysa usa ka server sa Java). Dugang nga arkitektura sa CDN (Content Delivery Network) nagtugot kanamo sa pagpangita sa among mga file nga mas duol sa mga end user, nga adunay positibo nga epekto sa kasayon ​​​​sa pagtrabaho uban sa serbisyo.

Ang pinakayano ug pinaka-standard nga pananglitan sa static content mao ang set sa mga script ug mga hulagway para sa usa ka website. Ang tanan yano ra sa kanila - nahibal-an na sila daan, unya ang archive gi-upload sa mga server sa CDN, gikan diin kini giapod-apod sa mga end user.

Bisan pa, sa tinuud, alang sa static nga sulud, mahimo nimong gamiton ang usa ka pamaagi nga medyo parehas sa arkitektura sa lambda. Balikan nato ang atong buluhaton (online file storage), diin kinahanglan natong ipang-apod-apod ang mga file ngadto sa mga tiggamit. Ang pinakasimple nga solusyon mao ang paghimo og serbisyo nga, alang sa matag hangyo sa user, buhaton ang tanang gikinahanglan nga mga pagsusi (awtorisasyon, ug uban pa), ug dayon i-download ang file direkta gikan sa among storage. Ang nag-unang disbentaha niini nga pamaagi mao nga ang static nga sulod (ug ang usa ka file nga adunay usa ka piho nga rebisyon, sa pagkatinuod, static nga sulod) giapod-apod sa samang server nga naglangkob sa negosyo nga lohika. Hinunoa, mahimo nimong himoon ang mosunod nga diagram:

  • Naghatag ang server og URL sa pag-download. Mahimo kini sa porma nga file_id + key, diin ang yawe usa ka mini-digital nga pirma nga naghatag katungod sa pag-access sa kapanguhaan sa sunod nga XNUMX ka oras.
  • Ang file giapod-apod sa yano nga nginx nga adunay mga mosunud nga kapilian:
    • Pag-cache sa sulod. Tungod kay kini nga serbisyo mahimong makit-an sa usa ka bulag nga server, gibilin namon ang among kaugalingon nga usa ka reserba alang sa umaabot nga adunay katakus sa pagtipig sa tanan nga labing bag-ong na-download nga mga file sa disk.
    • Pagsusi sa yawe sa panahon sa paghimo sa koneksyon
  • Opsyonal: streaming nga pagproseso sa sulud. Pananglitan, kung among i-compress ang tanan nga mga file sa serbisyo, mahimo namon nga i-unzipping direkta sa kini nga module. Ingon usa ka sangputanan: Ang mga operasyon sa IO gihimo kung diin sila nahisakop. Ang usa ka archiver sa Java dali nga mogahin ug daghang dugang nga memorya, apan ang pagsulat pag-usab sa usa ka serbisyo nga adunay lohika sa negosyo sa mga kondisyon sa Rust/C++ mahimo usab nga dili epektibo. Sa among kaso, lainlain nga mga proseso (o bisan mga serbisyo) ang gigamit, ug busa mahimo namon nga epektibo nga mabulag ang lohika sa negosyo ug mga operasyon sa IO.

Sayon nga mga sumbanan sa arkitektura

Kini nga laraw dili kaayo parehas sa pag-apod-apod sa static nga sulud (tungod kay wala namon gi-upload ang tibuuk nga static nga pakete sa usa ka lugar), apan sa tinuud, kini nga pamaagi tukma nga nabalaka sa pag-apod-apod sa dili mausab nga datos. Dugang pa, kini nga laraw mahimong i-generalize sa ubang mga kaso diin ang sulud dili yano nga static, apan mahimong irepresentar isip usa ka hugpong sa dili mausab ug dili matangtang nga mga bloke (bisan kung mahimo kini idugang).

Ingon sa laing pananglitan (alang sa pagpalig-on): kung nagtrabaho ka sa Jenkins/TeamCity, nan nahibal-an nimo nga ang duha nga mga solusyon gisulat sa Java. Ang duha niini usa ka proseso sa Java nga nagdumala sa pagtukod sa orkestra ug pagdumala sa sulud. Sa partikular, silang duha adunay mga buluhaton sama sa "pagbalhin sa usa ka file / folder gikan sa server." Ingon nga usa ka pananglitan: pag-isyu sa mga artifact, pagbalhin sa source code (kung ang ahente dili mag-download sa code direkta gikan sa repository, apan ang server naghimo niini alang kaniya), pag-access sa mga troso. Ang tanan niini nga mga buluhaton lahi sa ilang IO load. Kana mao, kini nahimo nga ang server nga responsable sa komplikado nga lohika sa negosyo kinahanglan nga sa samang higayon makahimo sa epektibong pagduso sa dagkong mga dagan sa datos pinaagi sa iyang kaugalingon. Ug ang labing makapaikag mao nga ang ingon nga operasyon mahimong itugyan sa parehas nga nginx sumala sa parehas nga laraw (gawas nga ang data key kinahanglan idugang sa hangyo).

Bisan pa, kung mobalik kami sa among sistema, makakuha kami parehas nga diagram:

Sayon nga mga sumbanan sa arkitektura

Sama sa imong nakita, ang sistema nahimong labi ka komplikado. Karon dili lang kini usa ka mini nga proseso nga nagtipig sa mga file sa lokal. Karon ang gikinahanglan dili ang pinakasimple nga suporta, kontrol sa bersyon sa API, ug uban pa. Busa, human madibuho ang tanan nga mga diagram, labing maayo nga susihon sa detalye kung ang pagpalapad ba takus sa gasto. Bisan pa, kung gusto nimo nga mapalapad ang sistema (lakip ang pagtrabaho kauban ang labi ka daghan nga mga tiggamit), nan kinahanglan ka nga moadto alang sa parehas nga mga solusyon. Apan, isip resulta, ang sistema andam na sa arkitektura alang sa dugang nga load (halos matag component mahimong ma-clone para sa horizontal scaling). Ang sistema mahimong ma-update nga walay paghunong niini (sa yano nga pipila ka mga operasyon gamay nga hinay).

Sama sa akong giingon sa sinugdanan, karon daghang mga serbisyo sa Internet ang nagsugod nga nakadawat dugang nga load. Ug ang uban kanila nagsugod na lang sa paghunong sa pagtrabaho sa husto. Sa tinuud, ang mga sistema napakyas sa tukma sa higayon nga ang negosyo kinahanglan nga mokita. Kana mao, imbes nga i-defer ang paghatud, imbis nga isugyot sa mga kostumer nga "planoha ang imong paghatud sa umaabot nga mga bulan," giingon lang sa sistema nga "adto sa imong mga kakompetensya." Sa tinuud, kini ang presyo sa mubu nga produktibidad: ang mga kapildihan mahitabo gyud kung ang ganansya mahimong labing kataas.

konklusyon

Ang tanan niini nga mga pamaagi nahibal-an kaniadto. Ang parehas nga VK dugay nang gigamit ang ideya sa Static Content Hosting aron ipakita ang mga imahe. Daghang mga dula sa online ang naggamit sa laraw sa Sharding aron bahinon ang mga magdudula sa mga rehiyon o aron mabulag ang mga lokasyon sa dula (kung ang kalibutan mismo usa ra). Aktibo nga gigamit ang pamaagi sa Event Sourcing sa email. Kadaghanan sa mga aplikasyon sa pamatigayon diin ang mga datos kanunay nga nadawat sa tinuud gitukod sa usa ka pamaagi sa CQRS aron mahimo nga masala ang datos nga nadawat. Aw, ang horizontal scaling gigamit sa daghang mga serbisyo sa dugay na nga panahon.

Apan, ang labing importante, kining tanan nga mga sumbanan nahimong sayon ​​​​kaayo nga magamit sa modernong mga aplikasyon (kon kini angay, siyempre). Gitanyag dayon sa mga panganod ang Sharding ug horizontal scaling, nga labi ka dali kaysa sa pag-order sa lainlaing mga dedikado nga server sa lainlaing mga sentro sa datos sa imong kaugalingon. Ang CQRS nahimong mas sayon, kung tungod lamang sa pagpalambo sa mga librarya sama sa RX. Mga 10 ka tuig na ang milabay, usa ka talagsaon nga website ang makasuporta niini. Ang Event Sourcing dali ra usab nga ma-set up salamat sa mga andam nga sudlanan nga adunay Apache Kafka. 10 ka tuig na ang milabay kini usa ka kabag-ohan, karon kini kasagaran. Parehas kini sa Static Content Hosting: tungod sa mas sayon ​​​​nga mga teknolohiya (lakip ang kamatuoran nga adunay detalyado nga dokumentasyon ug usa ka dako nga database sa mga tubag), kini nga pamaagi nahimong mas simple.

Ingon usa ka sangputanan, ang pagpatuman sa daghang labi ka komplikado nga mga sumbanan sa arkitektura nahimo’g labi ka yano, nga nagpasabut nga mas maayo nga susihon kini pag-ayo. Kung sa usa ka napulo ka tuig nga aplikasyon ang usa sa mga solusyon sa ibabaw gibiyaan tungod sa taas nga gasto sa pagpatuman ug operasyon, karon, sa usa ka bag-ong aplikasyon, o pagkahuman sa pag-refactor, mahimo ka maghimo usa ka serbisyo nga mahimo nang arkitektura nga mapadako ( sa mga termino sa pasundayag) ug andam na sa mga bag-ong hangyo gikan sa mga kliyente (pananglitan, aron ma-localize ang personal nga datos).

Ug labing hinungdanon: palihug ayaw gamita kini nga mga pamaagi kung ikaw adunay usa ka yano nga aplikasyon. Oo, sila matahum ug makapaikag, apan alang sa usa ka site nga adunay usa ka peak nga pagbisita sa 100 ka mga tawo, kanunay nimo nga makuha ang usa ka klasiko nga monolith (labing menos sa gawas, ang tanan sa sulod mahimong bahinon sa mga module, ug uban pa).

Source: www.habr.com

Idugang sa usa ka comment