Unsaon paghunong sa pagkabalaka ug pagsugod sa pagpuyo nga walay monolith

Unsaon paghunong sa pagkabalaka ug pagsugod sa pagpuyo nga walay monolith

Kitang tanan ganahan og mga istorya. Gusto namon nga maglingkod sa palibot sa kalayo ug maghisgot bahin sa among nangaging mga kadaugan, away, o yano nga kasinatian sa among trabaho.

Karon usa ra ka adlaw. Ug bisan kung wala ka sa sunog karon, kami adunay usa ka istorya alang kanimo. Ang istorya kung giunsa kami nagsugod sa pagtrabaho kauban ang pagtipig sa Tarantool.

Kaniadto, ang among kompanya adunay usa ka magtiayon nga "monolith" ug usa ka "kisame" alang sa tanan, diin kini nga mga monolith hinay apan sigurado nga nagkaduol, nga naglimite sa paglupad sa among kompanya, ang among pag-uswag. Ug dihay klaro nga pagsabot: usa ka adlaw maigo nato pag-ayo kining kisame.

Kini karon ang nagpatigbabaw nga ideolohiya sa pagbulag sa tanan ug sa tanan, gikan sa kagamitan hangtod sa lohika sa negosyo. Ingon usa ka sangputanan, kami, pananglitan, adunay duha ka DC nga halos independente sa lebel sa network. Ug unya ang tanan hingpit nga lahi.

Karon, adunay daghang mga himan ug mga himan alang sa paghimo sa mga pagbag-o sa porma sa CI / CD, K8S, ug uban pa. Sa panahon nga "monolitik", wala na namo kinahanglana ang daghang langyaw nga mga pulong. Igo na lang nga matul-id ang "storage" sa database.

Apan ang panahon nagpadayon, ug ang gidaghanon sa mga hangyo nagpadayon uban niini, usahay ang pagpamusil sa RPS nga labaw sa among mga kapabilidad. Sa pagsulod sa mga nasud sa CIS ngadto sa merkado, ang load sa database processor sa unang monolith wala mahulog ubos sa 90%, ug ang RPS nagpabilin sa lebel sa 2400. Ug kini dili lamang mga gagmay nga mga tigpili, apan daghang mga pangutana nga adunay usa ka pundok sa mga tseke ug JOINs nga mahimong modagan hapit sa katunga sa data batok sa background sa dako nga IO.

Sa diha nga ang hingpit nga pagbaligya sa Black Friday nagsugod sa pagpakita sa talan-awon - ug ang Wildberries mao ang usa sa mga una nga naghupot niini sa Russia - ang sitwasyon nahimong hingpit nga masulub-on. Human sa tanan, ang load sa ingon nga mga adlaw misaka sa tulo ka mga panahon.
Oh, kini nga "monolitikong mga panahon"! Sigurado ko nga nakasinati ka og susama, ug dili gihapon nimo masabtan kung giunsa kini mahitabo kanimo.

Unsa ang imong mahimo - ang uso kay kinaiyanhon sa teknolohiya. Mga 5 ka tuig na ang milabay, kinahanglan namong hunahunaon pag-usab ang usa niini nga mga mod sa porma sa usa ka kasamtangan nga site sa .NET ug MS SQL server, nga maampingong gitipigan ang tanang lohika sa site mismo. Gitipigan nako kini pag-ayo nga ang paggabas sa ingon nga monolith nahimo’g usa ka taas ug dili gyud kadali nga kalipayan.
Usa ka gamay nga digression.

Sa lainlaing mga panghitabo ako nag-ingon: "kung wala ka makakita sa usa ka monolith, nan dili ka motubo!" Interesado ako sa imong opinyon bahin niini nga butang, palihug isulat kini sa mga komento.

Usa ka Tingog sa Dalugdog

Balik ta sa atong "bonfire". Sa pag-apod-apod sa load sa "monolithic" functionality, kami nakahukom sa pagbahin sa sistema ngadto sa microservices base sa opensource teknolohiya. Tungod kay, sa labing gamay, sila mas barato sa sukod. Ug kami adunay 100% nga pagsabut nga kinahanglan namon nga sukdon (ug daghan). Human sa tanan, na niadtong panahona posible nga makasulod sa mga merkado sa silingang mga nasud, ug ang gidaghanon sa mga pagrehistro, ingon man ang gidaghanon sa mga order, nagsugod sa pagtubo nga mas kusog.

Sa pag-analisar sa unang mga kandidato alang sa pagbiya gikan sa monolith ngadto sa microservices, nakaamgo kami nga ang 80% sa pagsulat niini gikan sa back office systems, ug pagbasa gikan sa front office. Una sa tanan, nabalaka kini sa usa ka magtiayon nga hinungdanon nga mga subsystem alang kanamo - data sa tiggamit ug usa ka sistema alang sa pagkalkula sa katapusan nga kantidad sa mga butang base sa kasayuran bahin sa dugang nga mga diskwento sa kustomer ug mga kupon.

Gi-indent. Karon makahadlok nga mahanduraw, apan dugang sa nahisgutan sa ibabaw nga mga subsystem, ang mga katalogo sa produkto, usa ka shopping cart sa gumagamit, usa ka sistema sa pagpangita sa produkto, usa ka sistema sa pagsala alang sa mga katalogo sa produkto, ug lainlaing mga klase sa mga sistema sa rekomendasyon gikuha usab gikan sa among monolith. Alang sa operasyon sa matag usa kanila, adunay lainlain nga mga klase sa makitid nga gipahiangay nga mga sistema, apan kaniadto silang tanan nagpuyo sa usa ka "balay".

Nagplano dayon kami nga ibalhin ang datos bahin sa among mga kliyente sa sharded system. Ang pagtangtang sa pag-andar alang sa pagkalkula sa katapusang gasto sa mga butang nanginahanglan maayo nga scalability alang sa pagbasa, tungod kay kini nagmugna sa labing kadaghan nga load sa RPS ug mao ang labing lisud nga ipatuman alang sa database (daghang datos ang nalambigit sa proseso sa pagkalkula).

Ingon usa ka sangputanan, naghimo kami usa ka laraw nga haum kaayo sa Tarantool.

Nianang panahona, alang sa operasyon sa mga microservice, gipili ang mga laraw alang sa pagtrabaho kauban ang daghang mga sentro sa datos sa virtual ug hardware nga mga makina. Sama sa gipakita sa mga numero, ang mga kapilian sa pagkopya sa Tarantool gipadapat sa parehas nga master-master ug master-slave mode.

Unsaon paghunong sa pagkabalaka ug pagsugod sa pagpuyo nga walay monolith
Arkitektura. Opsyon 1. Serbisyo sa tiggamit

Sa kasamtangan nga panahon, adunay 24 shards, ang matag usa adunay 2 nga mga higayon (usa alang sa matag DC), tanan sa master-master mode.

Sa ibabaw sa database mao ang mga aplikasyon nga maka-access sa mga replika sa database. Ang mga aplikasyon nagtrabaho kauban ang Tarantool pinaagi sa among naandan nga librarya, nga nagpatuman sa interface sa drayber sa Tarantool Go. Nakita niya ang tanan nga mga replika ug mahimo nga magtrabaho kauban ang agalon sa pagbasa ug pagsulat. Sa tinuud, gipatuman niini ang modelo nga set sa replika, nga nagdugang lohika alang sa pagpili sa mga replika, paghimo pag-usab, usa ka circuit breaker ug limitasyon sa rate.

Sa kini nga kaso, posible nga i-configure ang palisiya sa pagpili sa kopya sa konteksto sa mga shards. Pananglitan, roundrobin.

Unsaon paghunong sa pagkabalaka ug pagsugod sa pagpuyo nga walay monolith
Arkitektura. Opsyon 2. Serbisyo para sa pagkuwenta sa katapusang kantidad sa mga butang

Pipila ka bulan ang milabay, kadaghanan sa mga hangyo alang sa pagkalkulo sa katapusang gasto sa mga butang miadto sa usa ka bag-ong serbisyo, nga, sa prinsipyo, nagtrabaho nga walay mga database, apan pipila ka mga panahon ang milabay ang tanan giproseso 100% sa usa ka serbisyo uban sa Tarantool ubos sa hood.

Ang database sa serbisyo naglangkob sa 4 nga mga masters diin ang synchronizer nagkolekta sa datos, ug ang matag usa niini nga mga masters sa pagkopya nag-apod-apod sa datos sa mga readonly nga mga replika. Ang matag agalon adunay gibana-bana nga 15 nga mga replika.

Bisan sa una o sa ikaduha nga laraw, kung ang usa ka DC dili magamit, ang aplikasyon makadawat mga datos sa ikaduha.

Angay nga matikdan nga ang pagkopya sa Tarantool medyo flexible ug mahimong ma-configure sa runtime. Sa ubang mga sistema, mitungha ang mga kalisdanan. Pananglitan, ang pagbag-o sa max_wal_senders ug max_replication_slots nga mga parametro sa PostgreSQL nanginahanglan og restart sa wizard, nga sa pipila ka mga kaso mahimong mosangpot sa pagkaputol sa mga koneksyon tali sa aplikasyon ug sa DBMS.

Pangita ug kamo makakaplag!

Ngano nga wala namo buhata kini "sama sa normal nga mga tawo", apan gipili ang usa ka dili tipikal nga paagi? Nagdepende kini sa giisip nga normal. Daghang mga tawo ang kasagarang maghimo usa ka pungpong gikan sa Mongo ug ipakaylap kini sa tulo ka geo-apod-apod nga DC.

Niadtong panahona, aduna na kami duha ka proyekto sa Redis. Ang una usa ka cache, ug ang ikaduha usa ka padayon nga pagtipig alang sa dili kaayo kritikal nga datos. Lisud kaayo kaniya, tungod sa among sala. Usahay daghang mga volume ang naa sa yawe, ug matag karon ug unya ang site dili maayo. Gigamit namo kini nga sistema sa master-slave nga bersyon. Ug adunay daghang mga kaso diin adunay nahitabo sa agalon ug naguba ang pagkopya.

Kana mao, ang Redis maayo alang sa walay estado nga mga buluhaton, dili mga stateful. Sa prinsipyo, gitugotan niini ang pagsulbad sa kadaghanan nga mga problema, apan kung kini mga solusyon nga hinungdanon nga kantidad nga adunay usa ka pares nga mga indeks. Apan si Redis niadtong panahona medyo nasubo sa pagpadayon ug pagkopya. Dugang pa, adunay mga reklamo bahin sa pasundayag.

Naghunahuna kami bahin sa MySQL ug PostgreSQL. Apan ang una sa usa ka paagi wala makuha kanamo, ug ang ikaduha usa ka labi ka sopistikado nga produkto sa iyang kaugalingon, ug dili angay nga magtukod og yano nga mga serbisyo niini.
Gisulayan namon ang RIAK, Cassandra, bisan usa ka database sa graph. Kini ang tanan nga mga patas nga solusyon nga dili angay alang sa papel sa usa ka kinatibuk-ang unibersal nga himan alang sa paghimo og mga serbisyo.

Sa katapusan kami mipuyo sa Tarantool.

Kami milingi niini sa diha nga kini anaa sa bersyon 1.6. Interesado kami niini pinaagi sa symbiosis sa key-value ug ang pagpaandar sa usa ka relational database. Adunay mga ikaduha nga indeks, mga transaksyon ug mga luna, kini sama sa mga lamesa, apan dili yano, mahimo nimong tipigan ang lainlaing gidaghanon sa mga kolum niini. Apan ang makapatay nga bahin sa Tarantool mao ang mga sekundaryong indeks nga gihiusa sa yawe nga kantidad ug transaksyon.

Ang responsive nga Russian-speaking nga komunidad, andam sa pagtabang sa chat, usab adunay papel. Aktibo namong gigamit kini ug direktang nagpuyo sa chat. Ug ayaw kalimti ang bahin sa desente nga pagpadayon nga wala’y klaro nga mga sayup ug sayup. Kung imong tan-awon ang among kasaysayan sa Tarantool, kami adunay daghang kasakit ug mga kapakyasan sa pagkopya, apan wala gyud kami nawala nga datos tungod sa sayup niini!

Ang pagpatuman nagsugod sa usa ka lisud nga pagsugod

Niadtong panahona, ang among nag-unang development stack mao ang .NET, diin walay connector alang sa Tarantool. Nagsugod dayon kami og usa ka butang sa Go. Nagtrabaho kini og maayo uban ni Lua. Ang nag-unang problema niadtong panahona mao ang pag-debug: sa .NET ang tanan maayo niini, apan human niana lisud ang pag-unlod ngadto sa kalibutan sa naka-embed nga Lua, kung wala kay debugging gawas sa mga troso. Dugang pa, tungod sa pipila ka rason ang pagkopya matag karon ug unya nabungkag, mao nga kinahanglan nakong susihon ang istruktura sa makina sa Tarantool. Ang chat nakatabang niini, ug sa gamay nga sukod, ang dokumentasyon; usahay among gitan-aw ang code. Nianang panahona, ang dokumentasyon kay-ayo.

Mao nga, sa paglabay sa daghang mga bulan, nakahimo ako sa paglibot sa akong ulo ug nakakuha og disente nga mga sangputanan gikan sa pagtrabaho kauban ang Tarantool. Nagtipon kami og mga pag-uswag sa reference sa git nga nakatabang sa pagporma sa bag-ong mga microservice. Pananglitan, sa diha nga ang usa ka buluhaton mitungha: sa paghimo sa usa ka lain nga microservice, ang developer mitan-aw sa tinubdan code sa reference solusyon sa repository, ug kini gikuha dili labaw pa kay sa usa ka semana sa paghimo sa usa ka bag-o nga.

Espesyal kini nga mga panahon. Sa naandan, mahimo kang moadto sa admin sa sunod nga lamesa ug mangutana: "Hatagi ako usa ka virtual machine." Mga traynta minutos ang milabay ang sakyanan diha na kanimo. Gikonektar nimo ang imong kaugalingon, gi-install ang tanan, ug gipadala kanimo ang trapiko.

Karon dili na kini molihok: kinahanglan nimo nga idugang ang pag-monitor ug pag-log sa serbisyo, tabunan ang pagpaandar sa mga pagsulay, pag-order usa ka virtual nga makina o paghatud sa Kuber, ug uban pa. Sa kinatibuk-an, kini mahimong mas maayo niini nga paagi, bisan tuod kini magdugay ug mas makasamok.

Bahina ug pagmando. Unsa may labot ni Lua?

Adunay usa ka seryoso nga problema: pipila ka mga team dili makahimo sa kasaligan nga paglansad sa mga pagbag-o sa usa ka serbisyo nga adunay daghang lohika sa Lua. Kanunay kini nga giubanan sa serbisyo nga dili molihok.

Kana mao, ang mga developers nag-andam sa usa ka matang sa kausaban. Ang Tarantool nagsugod sa paghimo sa paglalin, apan ang replica anaa gihapon sa daan nga code; Ang pipila ka DDL o uban pa nga moabut didto pinaagi sa pagkopya, ug ang code nahulog ra tungod kay wala kini gikonsiderar. Ingon usa ka sangputanan, ang pamaagi sa pag-update alang sa mga administrador gibutang sa A4 sheet: hunong ang pagkopya, pag-update niini, pag-on sa replikasyon, pagpalong dinhi, pag-update didto. Nightmare!

Ingon usa ka sangputanan, karon kami kanunay nga naningkamot nga wala’y mahimo sa Lua. Gamita lang ang iproto (usa ka binary protocol alang sa pagpakig-uban sa server), ug mao na. Tingali kini usa ka kakulang sa kahibalo sa mga nag-develop, apan gikan niini nga punto sa panglantaw ang sistema komplikado.

Dili kami kanunay nga buta nga nagsunod niini nga script. Karon wala kami itom ug puti: ang tanan naa sa Lua, o ang tanan naa sa Go. Nasabtan na nato kung unsaon nato kini paghiusa aron dili kita magdugay sa mga problema sa paglalin.

Asa na ang Tarantool karon?
Ang Tarantool gigamit sa serbisyo alang sa pagkalkulo sa katapusang gasto sa mga butang nga gikonsiderar ang mga kupon sa diskwento, nailhan usab nga "Promoter". Sama sa akong giingon kaniadto, siya karon nagretiro: gipulihan siya sa usa ka bag-ong serbisyo sa katalogo nga adunay pre-calculated nga mga presyo, apan unom ka bulan ang milabay ang tanan nga mga kalkulasyon gihimo sa Promotizer. Kaniadto, ang katunga sa lohika niini gisulat sa Lua. Duha ka tuig ang milabay, ang serbisyo nahimo nga usa ka pasilidad sa pagtipig, ug ang lohika gisulat pag-usab sa Go, tungod kay ang mga mekaniko sa mga diskwento nausab gamay ug ang serbisyo kulang sa pasundayag.

Usa sa labing kritikal nga serbisyo mao ang profile sa gumagamit. Sa ato pa, ang tanan nga tiggamit sa Wildberries gitipigan sa Tarantool, ug adunay mga 50 ka milyon niini. Usa ka sistema nga gibahin sa user ID, nga giapod-apod sa daghang mga DC nga konektado sa mga serbisyo sa Go.
Sumala sa RPS, ang Promoter kaniadto ang nanguna, nga nakaabot sa 6 ka libo nga mga hangyo. Sa usa ka higayon kami adunay 50-60 ka kopya. Karon ang nanguna sa RPS mao ang mga profile sa user, mga 12 ka libo. Kini nga serbisyo naggamit sa custom sharding, gibahin sa mga han-ay sa mga user ID. Ang serbisyo nagsilbi labaw pa sa 20 nga mga makina, apan kini daghan kaayo; nagplano kami nga pakunhuran ang gigahin nga mga kapanguhaan, tungod kay ang kapasidad sa 4-5 nga mga makina igo na alang niini.

Ang serbisyo sa sesyon mao ang among una nga serbisyo sa vshard ug Cartridge. Ang pag-set up sa vshard ug pag-update sa Cartridge nanginahanglan pipila ka paningkamot gikan kanamo, apan sa katapusan ang tanan nahimo.

Ang serbisyo alang sa pagpakita sa lainlaing mga banner sa website ug sa mobile application mao ang usa sa mga una nga gipagawas direkta sa Tarantool. Nailhan kini nga serbisyo tungod sa kamatuoran nga kini 6-7 ka tuig ang edad, kini naglihok pa ug wala pa ma-reboot. Gigamit ang master-master replication. Wala gyud nabuak.

Adunay usa ka pananglitan sa paggamit sa Tarantool alang sa dali nga pag-andar sa pakisayran sa usa ka sistema sa bodega aron dali nga masusi ang kasayuran sa pipila ka mga kaso. Gisulayan namon nga gamiton ang Redis alang niini, apan ang datos sa panumduman mikuha ug daghang luna kaysa Tarantool.

Ang mga serbisyo sa usa ka lista sa paghulat, mga suskrisyon sa kliyente, karon nga uso nga mga istorya ug gi-defer nga mga butang nagtrabaho usab sa Tarantool. Ang katapusan nga serbisyo sa memorya mokabat sa mga 120 GB. Kini ang labing komprehensibo nga serbisyo sa ibabaw.

konklusyon

Salamat sa mga sekondaryang indeks nga gihiusa sa yawe nga kantidad ug transactionality, ang Tarantool haum kaayo alang sa mga arkitektura nga nakabase sa microservice. Bisan pa, nakasugat kami mga kalisud sa paglansad sa mga pagbag-o sa mga serbisyo nga adunay daghang lohika sa Lua - ang mga serbisyo kanunay nga mihunong sa pagtrabaho. Wala namo kini mabuntog, ug sa paglabay sa panahon miabut kami sa lain-laing mga kombinasyon sa Lua ug Go: nahibal-an namo kung asa gamiton ang usa ka pinulongan ug asa gamiton ang lain.

Unsa pa ang basahon sa hilisgutan

Source: www.habr.com

Idugang sa usa ka comment