Ki jan yo echèl soti nan 1 a 100 itilizatè

Anpil demaraj te pase nan sa a: foul moun nan nouvo itilizatè yo enskri chak jou, ak ekip devlopman an lite pou kenbe sèvis la kouri.

Li se yon pwoblèm bèl genyen, men gen ti enfòmasyon klè sou entènèt la sou kòman yo ak anpil atansyon echèl yon aplikasyon entènèt soti nan pa gen anyen nan dè santèn de milye de itilizatè. Tipikman gen swa solisyon dife oswa solisyon anbouteyaj (e souvan tou de). Se poutèt sa, moun sèvi ak teknik olye kliche pou echèl pwojè amatè yo nan yon bagay ki vrèman grav.

Ann eseye filtre enfòmasyon an epi ekri fòmil debaz la. Nou pral ogmante nouvo sit pataje foto nou an Graminsta etap pa etap soti nan 1 a 100 itilizatè.

Ann ekri ki aksyon espesifik yo dwe pran lè odyans lan ogmante a 10, 100, 1000, 10 ak 000 moun.

1 itilizatè: 1 machin

Prèske chak aplikasyon, kit se yon sit entènèt oswa yon aplikasyon mobil, gen twa eleman kle:

  • API
  • baz done
  • kliyan (aplikasyon mobil tèt li oswa sit entènèt)

Baz done a estoke done ki pèsistan. API a sèvi demann nan ak alantou done sa yo. Kliyan an transmèt done bay itilizatè a.

Mwen te rive nan konklizyon an ke li pi fasil pou pale sou echèl yon aplikasyon si, nan yon pwen de vi achitekti, kliyan an ak antite API yo konplètman separe.

Lè nou kòmanse bati yon aplikasyon, tout twa eleman yo ka kouri sou menm sèvè a. Nan kèk fason, sa a sanble ak anviwònman devlopman nou an: yon enjenyè kouri baz done a, API, ak kliyan sou menm machin nan.

Nan teyori, nou ta ka deplwaye li nan nwaj la sou yon sèl DigitalOcean Droplet oswa AWS EC2 egzanp, jan yo montre anba a:
Ki jan yo echèl soti nan 1 a 100 itilizatè
Avèk sa di, si pral gen plis pase yon itilizatè sou yon sit, li prèske toujou fè sans dedye yon kouch baz done.

10 itilizatè: deplase baz done a nan yon nivo separe

Divize baz done a nan sèvis jere tankou Amazon RDS oswa Digital Ocean Managed Database pral sèvi nou byen pou yon tan long. Li se yon ti kras pi chè pase self-hosting sou yon sèl machin oswa egzanp EC2, men ak sèvis sa yo ou jwenn yon anpil nan ekstansyon itil soti nan bwat la ki pral vin an sou la men nan lavni: backup milti-rejyon, li kopi, otomatik. sovgad, ak plis ankò.

Men sa sistèm nan sanble kounye a:
Ki jan yo echèl soti nan 1 a 100 itilizatè

100 itilizatè: deplase kliyan an nan yon nivo separe

Erezman, premye itilizatè nou yo te vrèman renmen aplikasyon nou an. Trafik ap vin pi estab, kidonk li lè pou deplase kliyan an nan yon nivo separe. Li ta dwe remake ke separasyon antite se yon aspè kle nan bati yon aplikasyon évolutive. Kòm yon pati nan sistèm nan resevwa plis trafik, nou ka divize li pou kontwole fason sèvis la echèl ki baze sou modèl trafik espesifik.

Se poutèt sa mwen renmen panse a kliyan an kòm separe de API a. Sa fè li trè fasil pou reflechi sou devlopman pou plizyè tribin: entènèt, entènèt mobil, iOS, Android, aplikasyon pou Desktop, sèvis twazyèm pati, elatriye. Yo tout se jis kliyan ki sèvi ak menm API a.

Pou egzanp, kounye a itilizatè nou yo pi souvan mande pou yo lage yon aplikasyon mobil. Si ou separe kliyan an ak antite API, sa vin pi fasil.

Men ki jan yon sistèm konsa sanble:

Ki jan yo echèl soti nan 1 a 100 itilizatè

1000 itilizatè: ajoute balans chaj

Bagay yo ap monte. Itilizatè Graminsta yo ap telechaje plis ak plis foto. Kantite anrejistreman an ap grandi tou. Sèvè API sèl nou an ap gen yon moman difisil pou kenbe ak tout trafik la. Bezwen plis fè!

Load balancer se yon konsèp trè pwisan. Lide kle a se ke nou mete yon balans chaj devan API a, epi li distribye trafik nan ka sèvis endividyèl yo. Sa a se fason nou echèl orizontal, sa vle di nou ajoute plis serveurs ak menm kòd la, ogmante kantite demann nou ka trete.

Nou pral mete balans chaj separe devan kliyan entènèt la ak devan API a. Sa vle di ou ka kouri plizyè ka kouri kòd API ak kòd kliyan entènèt. Ekilib chaj la pral dirije demann nan sèvè a ki mwens chaje.

Isit la nou jwenn yon lòt avantaj enpòtan - redondance. Lè yon egzanp echwe (petèt twò chaje oswa fè aksidan), nou rete ak lòt moun ki kontinye reponn a demann fèk ap rantre. Si te gen yon sèl egzanp k ap travay, Lè sa a, nan ka ta gen echèk tout sistèm nan ta aksidan.

Balanse chaj la tou bay dekale otomatik. Nou ka konfigirasyon li pou ogmante kantite ka anvan chaj maksimòm, epi diminye li lè tout itilizatè yo ap dòmi.

Avèk yon balans chaj, nivo API a ka ogmante prèske endefiniman, tou senpleman ajoute nouvo ka kòm kantite demann ogmante.

Ki jan yo echèl soti nan 1 a 100 itilizatè

Remak. Kounye a sistèm nou an sanble anpil ak sa konpayi PaaS tankou Heroku oswa Elastic Beanstalk sou AWS ofri soti nan bwat la (ki se poukisa yo tèlman popilè). Heroku mete baz done a sou yon lame separe, jere yon balans chaj oto-echèl, epi li pèmèt ou òganize kliyan entènèt la separeman de API a. Sa a se yon gwo rezon pou itilize Heroku pou premye etap pwojè oswa demaraj - ou jwenn tout sèvis debaz yo soti nan bwat la.

10 itilizatè: CDN

Petèt nou ta dwe fè sa depi nan kòmansman an. Pwosesis demann ak aksepte nouvo foto ap kòmanse mete twòp presyon sou serveurs nou yo.

Nan etap sa a, ou bezwen sèvi ak yon sèvis nwaj pou estoke kontni estatik - imaj, videyo ak plis ankò (AWS S3 oswa Digital Ocean Spaces). An jeneral, API nou an ta dwe evite manyen bagay tankou sèvi imaj ak telechaje imaj sou sèvè a.

Yon lòt avantaj nan hosting nwaj se CDN a (AWS rele sa a ajoute sou Cloudfront, men anpil founisè depo nwaj ofri li soti nan bwat la). CDN a otomatikman kachèt imaj nou yo nan divès sant done atravè mond lan.

Malgre ke sant done prensipal nou an ka sitiye nan Ohio, si yon moun mande yon imaj soti nan Japon, founisè nwaj la pral fè yon kopi epi estoke li nan sant done Japonè yo. Pwochen moun ki mande imaj sa a nan Japon ap resevwa li pi vit. Sa a enpòtan lè nou travay ak gwo dosye, tankou foto oswa videyo, ki pran anpil tan pou telechaje ak transmèt atravè planèt la.

Ki jan yo echèl soti nan 1 a 100 itilizatè

100 itilizatè: Eskalad kouch done a

CDN te ede anpil: trafik ap grandi a tout vitès. Pi popilè videyo blogger Mavid Mobrick jis anrejistre avèk nou epi afiche "istwa" l ', jan yo di. Mèsi a balans chaj la, CPU ak memwa itilizasyon sou sèvè API yo kenbe ba (dis ka API kouri), men nou kòmanse jwenn anpil delè sou demann... ki kote reta sa yo soti?

Fouye yon ti kras nan mezi yo, nou wè ke CPU a sou sèvè baz done a se 80-90% chaje. Nou nan limit la.

Echèl kouch done a se pwobableman pati ki pi difisil nan ekwasyon an. Sèvè API sèvi demann apatrid, kidonk nou tou senpleman ajoute plis ka API. Nen majorite a baz done pa ka fè sa. Nou pral pale sou sistèm jesyon baz done relasyon popilè (PostgreSQL, MySQL, elatriye).

kachèt

Youn nan fason ki pi fasil pou ogmante pèfòmans baz done nou an se prezante yon nouvo eleman: kouch kachèt la. Metòd kachèt ki pi komen an se yon magazen dosye kle-valè nan memwa, tankou Redis oswa Memcached. Pifò nwaj yo gen yon vèsyon jere nan sèvis sa yo: Elasticache sou AWS ak Memorystore sou Google Cloud.

Yon kachèt itil lè yon sèvis fè anpil apèl repete nan baz done a pou rekipere menm enfòmasyon an. Esansyèlman, nou jwenn aksè nan baz done a sèlman yon fwa, estoke enfòmasyon yo nan kachèt la, epi nou pa manyen li ankò.

Pou egzanp, nan sèvis Graminsta nou an, chak fwa yon moun ale nan paj pwofil zetwal Mobrik la, sèvè API a mande baz done a pou enfòmasyon ki soti nan pwofil li. Sa rive ankò e ankò. Depi enfòmasyon pwofil Mobrik la pa chanje ak chak demann, li ekselan pou kachèt.

Nou pral kache rezilta yo nan baz done a nan Redis pa kle user:id ak yon peryòd validite 30 segonn. Koulye a, lè yon moun ale nan pwofil Mobrik a, nou premye tcheke Redis, epi si done yo la, nou tou senpleman transfere li dirèkteman nan Redis. Koulye a, demann nan pwofil ki pi popilè sou sit la pratikman pa chaje baz done nou an.

Yon lòt avantaj nan pifò sèvis kachèt se ke yo pi fasil pou echèl pase serveurs baz done. Redis gen yon mòd Redis Cluster entegre. Menm jan ak yon balans chaj1, li pèmèt ou distribye kachèt Redis ou atravè plizyè machin (nan plizyè milye serveurs si sa nesesè).

Prèske tout aplikasyon gwo echèl itilize kachèt; li se yon pati absoliman entegral nan yon API rapid. Pwosesis demann pi rapid ak kòd ki pi pwodiktif yo tout enpòtan, men san yon kachèt li prèske enposib pou echèl yon sèvis pou dè milyon de itilizatè.

Li Replik

Lè kantite demann nan baz done a ogmante anpil, yon lòt bagay nou ka fè se ajoute kopi li nan sistèm jesyon baz done a. Avèk sèvis jere ki dekri anwo a, sa ka fè nan yon sèl klike sou. Replik li a ap rete aktyèl nan baz done prensipal la epi li disponib pou deklarasyon SELECT.

Men sistèm nou an kounye a:

Ki jan yo echèl soti nan 1 a 100 itilizatè

Pwochen etap yo

Pandan aplikasyon an ap kontinye ogmante, n ap kontinye separe sèvis yo pou n ap ogmante yo poukont yo. Pou egzanp, si nou kòmanse itilize Websockets, Lè sa a, li fè sans pou rale kòd la pwosesis Websockets nan yon sèvis separe. Nou ka mete l sou nouvo sikonstans dèyè balans pwòp chaj nou an, ki ka monte ak desann baze sou koneksyon Websockets ouvè ak kèlkeswa kantite demann HTTP.

Nou pral kontinye goumen tou kont restriksyon nan nivo baz done a. Li se nan etap sa a ke li lè yo etidye baz done patisyon ak sharding. Tou de apwòch mande pou anplis anlè, men pèmèt ou echèl baz done a prèske endefiniman.

Nou vle tou enstale yon sèvis siveyans ak analiz tankou New Relic oswa Datadog. Sa ap ede ou idantifye demann dousman epi konprann ki kote amelyorasyon nesesè. Pandan n ap echèl, nou vle konsantre sou jwenn bouch boutèy ak elimine yo—souvan itilize kèk nan lide yo nan seksyon anvan yo.

Sous

Pòs sa a enspire pa youn nan posts pi renmen m 'sou évolutivité segondè. Mwen te vle fè atik la yon ti kras pi espesifik pou premye etap yo nan pwojè ak demare li nan men yon sèl machann. Asire w ou li si w enterese nan sijè sa a.

Nòt anba paj

  1. Malgre ke menm jan an tèm de distribisyon chaj nan plizyè ka, aplikasyon an kache nan yon gwoup Redis trè diferan de yon balans chaj. [retounen]

Ki jan yo echèl soti nan 1 a 100 itilizatè

Sous: www.habr.com

Add nouvo kòmantè