ProHoster > KÄ mÄrogot no 1 lÄ«dz 100 000 lietotÄju
KÄ mÄrogot no 1 lÄ«dz 100 000 lietotÄju
Daudzi jaunizveidotie uzÅÄmumi to ir piedzÄ«vojuÅ”i: katru dienu reÄ£istrÄjas daudz jaunu lietotÄju, un izstrÄdes komanda cÄ«nÄs, lai pakalpojums darbotos.
TÄ ir jauka problÄma, taÄu tÄ«meklÄ« ir maz skaidras informÄcijas par to, kÄ rÅ«pÄ«gi mÄrogot tÄ«mekļa lietojumprogrammu no nekÄ lÄ«dz simtiem tÅ«kstoÅ”u lietotÄju. Parasti ir vai nu ugunsdzÄsÄ«bas risinÄjumi, vai vÄjÄs vietas risinÄjumi (un bieži vien abi). TÄpÄc cilvÄki izmanto diezgan kliÅ”ejiskus paÅÄmienus, lai savu amatieru projektu pÄrvÄrstu par kaut ko patieÅ”Äm nopietnu.
MÄÄ£inÄsim filtrÄt informÄciju un pierakstÄ«sim pamatformulu. MÄs soli pa solim paplaÅ”inÄsim mÅ«su jauno fotoattÄlu koplietoÅ”anas vietni Graminsta no 1 lÄ«dz 100 000 lietotÄju.
UzrakstÄ«sim, kÄdas konkrÄtas darbÄ«bas ir jÄveic, kad auditorija palielinÄs lÄ«dz 10, 100, 1000, 10 000 un 100 000 cilvÄku.
1 lietotÄjs: 1 maŔīna
GandrÄ«z katrai lietojumprogrammai, neatkarÄ«gi no tÄ, vai tÄ ir vietne vai mobilÄ lietojumprogramma, ir trÄ«s galvenie komponenti:
API
datubÄze
klients (paÅ”a mobilÄ lietojumprogramma vai vietne)
Datu bÄzÄ tiek glabÄti pastÄvÄ«gi dati. API apkalpo pieprasÄ«jumus Å”iem datiem un ap tiem. Klients pÄrsÅ«ta datus lietotÄjam.
NonÄcu pie secinÄjuma, ka ir daudz vieglÄk runÄt par lietojumprogrammas mÄrogoÅ”anu, ja no arhitektÅ«ras viedokļa klients un API entÄ«tijas ir pilnÄ«bÄ nodalÄ«tas.
Kad mÄs pirmo reizi sÄkam veidot lietojumprogrammu, visus trÄ«s komponentus var palaist vienÄ serverÄ«. Dažos veidos tas ir lÄ«dzÄ«gs mÅ«su izstrÄdes videi: viens inženieris palaiž datu bÄzi, API un klientu tajÄ paÅ”Ä maŔīnÄ.
TeorÄtiski mÄs to varÄtu izvietot mÄkonÄ« vienÄ DigitalOcean Droplet vai AWS EC2 instancÄ, kÄ parÄdÄ«ts zemÄk:
Å emot to vÄrÄ, ja vietnÄ bÅ«s vairÄk nekÄ viens lietotÄjs, gandrÄ«z vienmÄr ir jÄga veltÄ«t datu bÄzes slÄni.
10 lietotÄji: datu bÄzes pÄrvietoÅ”ana uz atseviŔķu lÄ«meni
Datu bÄzes sadalÄ«Å”ana pÄrvaldÄ«tos pakalpojumos, piemÄram, Amazon RDS vai Digital Ocean Managed Database, mums ilgi kalpos. Tas ir nedaudz dÄrgÄks nekÄ paÅ”mitinÄÅ”ana vienÄ datorÄ vai EC2 instancÄ, taÄu, izmantojot Å”os pakalpojumus, jÅ«s saÅemat daudz noderÄ«gu paplaÅ”inÄjumu, kas noderÄs nÄkotnÄ: vairÄku reÄ£ionu dublÄÅ”ana, lasÄmas kopijas, automÄtiska. dublÄjumkopijas un daudz kas cits.
Tagad sistÄma izskatÄs Å”Ädi:
100 lietotÄji: klienta pÄrvietoÅ”ana uz atseviŔķu lÄ«meni
Par laimi mÅ«su pirmajiem lietotÄjiem mÅ«su lietojumprogramma ļoti patika. Satiksme kļūst stabilÄka, tÄpÄc ir pienÄcis laiks pÄrcelt klientu uz atseviŔķu lÄ«meni. JÄpiebilst, ka atdalÄ«Å”ana entÄ«tijas ir galvenais mÄrogojamas lietojumprogrammas izveides aspekts. TÄ kÄ viena sistÄmas daļa saÅem lielÄku trafiku, mÄs varam to sadalÄ«t, lai kontrolÄtu, kÄ pakalpojums tiek mÄrogots, pamatojoties uz konkrÄtiem trafika modeļiem.
TÄpÄc man patÄ«k domÄt, ka klients ir noŔķirts no API. TÄdÄjÄdi ir ļoti viegli domÄt par izstrÄdi vairÄkÄm platformÄm: tÄ«meklim, mobilajam tÄ«meklim, iOS, Android, darbvirsmas lietojumprogrammÄm, treÅ”o puÅ”u pakalpojumiem utt. Tie visi ir tikai klienti, kas izmanto vienu un to paÅ”u API.
PiemÄram, tagad mÅ«su lietotÄji visbiežÄk lÅ«dz atbrÄ«vot mobilo aplikÄciju. Atdalot klienta un API entÄ«tijas, tas kļūst vienkÄrÅ”Äk.
Lietas virzÄs uz augÅ”u. Graminsta lietotÄji augÅ”upielÄdÄ arvien vairÄk fotoattÄlu. Pieaug arÄ« reÄ£istrÄciju skaits. MÅ«su vienÄ«gajam API serverim ir grÅ«ti sekot lÄ«dzi visai trafikai. Vajag vairÄk dzelzs!
Slodzes balansÄtÄjs ir ļoti spÄcÄ«gs jÄdziens. GalvenÄ ideja ir tÄda, ka mÄs ievietojam slodzes lÄ«dzsvarotÄju API priekÅ”Ä, un tas sadala trafiku atseviŔķÄm pakalpojumu instancÄm. TÄdÄ veidÄ mÄs mÄrogojam horizontÄli, tas nozÄ«mÄ, ka mÄs pievienojam vairÄk serveru ar vienu un to paÅ”u kodu, palielinot apstrÄdÄto pieprasÄ«jumu skaitu.
MÄs ievietosim atseviŔķus slodzes balansÄtÄjus tÄ«mekļa klienta un API priekÅ”Ä. Tas nozÄ«mÄ, ka varat palaist vairÄkas instances, kurÄs darbojas API kods un tÄ«mekļa klienta kods. Slodzes lÄ«dzsvarotÄjs novirzÄ«s pieprasÄ«jumus uz serveri, kas ir mazÄk noslogots.
Å eit mÄs iegÅ«stam vÄl vienu svarÄ«gu priekÅ”rocÄ«bu - atlaiÅ”anu. Ja viena instance neizdodas (iespÄjams, ir pÄrslogota vai avarÄjusi), mums paliek citi, kas turpina atbildÄt uz ienÄkoÅ”ajiem pieprasÄ«jumiem. Ja darbotos tikai viens gadÄ«jums, tad kļūmes gadÄ«jumÄ visa sistÄma avarÄtu.
Slodzes balansÄtÄjs nodroÅ”ina arÄ« automÄtisku mÄrogoÅ”anu. MÄs varam to konfigurÄt, lai palielinÄtu gadÄ«jumu skaitu pirms maksimÄlÄs slodzes un samazinÄtu to, kad visi lietotÄji guļ.
Izmantojot slodzes lÄ«dzsvarotÄju, API lÄ«meni var mÄrogot gandrÄ«z bezgalÄ«gi, vienkÄrÅ”i pievienojot jaunus gadÄ«jumus, palielinoties pieprasÄ«jumu skaitam.
PiezÄ«me. Å obrÄ«d mÅ«su sistÄma ir ļoti lÄ«dzÄ«ga tai, ko PaaS uzÅÄmumi, piemÄram, Heroku vai Elastic Beanstalk, piedÄvÄ AWS (tÄpÄc tie ir tik populÄri). Heroku ievieto datubÄzi atseviÅ”Ä·Ä resursdatorÄ, pÄrvalda automÄtiskÄs mÄrogoÅ”anas slodzes balansÄtÄju un ļauj mitinÄt tÄ«mekļa klientu atseviŔķi no API. Tas ir lielisks iemesls, lai izmantotu Heroku agrÄ«nÄs stadijas projektiem vai jaunizveidotiem uzÅÄmumiem ā jÅ«s saÅemat visus pamatpakalpojumus no kastes.
10 000 lietotÄju: CDN
VarbÅ«t mums tas bija jÄdara jau paÅ”Ä sÄkumÄ. PieprasÄ«jumu apstrÄde un jaunu fotoattÄlu pieÅemÅ”ana sÄk radÄ«t pÄrÄk lielu slodzi mÅ«su serveriem.
Å ajÄ posmÄ jums ir jÄizmanto mÄkoÅpakalpojums statiska satura - attÄlu, video un daudz ko citu - glabÄÅ”anai (AWS S3 vai Digital Ocean Spaces). Parasti mÅ«su API vajadzÄtu izvairÄ«ties no tÄdu darbÄ«bu veikÅ”anas kÄ attÄlu rÄdÄ«Å”ana un attÄlu augÅ”upielÄde serverÄ«.
VÄl viena mÄkoÅa mitinÄÅ”anas priekÅ”rocÄ«ba ir CDN (AWS Å”o papildinÄjumu sauc par Cloudfront, taÄu daudzi mÄkoÅu krÄtuves pakalpojumu sniedzÄji to piedÄvÄ jau no kastes). CDN automÄtiski saglabÄ mÅ«su attÄlus keÅ”atmiÅÄ dažÄdos datu centros visÄ pasaulÄ.
Lai gan mÅ«su galvenais datu centrs var atrasties Ohaio Å”tatÄ, ja kÄds pieprasa attÄlu no JapÄnas, mÄkoÅa pakalpojumu sniedzÄjs izveidos kopiju un saglabÄs to savÄ JapÄnas datu centrÄ. NÄkamÄ persona, kas pieprasÄ«s Å”o attÄlu JapÄnÄ, to saÅems daudz ÄtrÄk. Tas ir svarÄ«gi, ja strÄdÄjam ar lieliem failiem, piemÄram, fotoattÄliem vai videoklipiem, kuru lejupielÄde un pÄrsÅ«tÄ«Å”ana uz planÄtas aizÅem ilgu laiku.
100 000 lietotÄju: datu slÄÅa mÄrogoÅ”ana
CDN ir daudz palÄ«dzÄjis: satiksme pieaug pilnÄ ÄtrumÄ. Slavenais video emuÄru autors Mavids Mobriks tikko reÄ£istrÄjÄs pie mums un ievietoja savu āstÄstuā, kÄ saka. Pateicoties slodzes lÄ«dzsvarotÄjam, CPU un atmiÅas lietojums API serveros tiek uzturÄts zems (darbojas desmit API gadÄ«jumi), taÄu mÄs sÄkam saÅemt daudz pieprasÄ«jumu noildzes... no kurienes rodas Å”Ädas aizkaves?
Nedaudz iedziļinoties metrikÄ, redzam, ka CPU datu bÄzes serverÄ« ir noslogots par 80-90%. MÄs esam pie robežas.
Datu slÄÅa mÄrogoÅ”ana, iespÄjams, ir vissarežģītÄkÄ vienÄdojuma daļa. API serveri apkalpo bezvalsts pieprasÄ«jumus, tÄpÄc mÄs vienkÄrÅ”i pievienojam vairÄk API gadÄ«jumu. Deguns vairÄkums datu bÄzes to nevar izdarÄ«t. RunÄsim par populÄrÄm relÄciju datu bÄzes pÄrvaldÄ«bas sistÄmÄm (PostgreSQL, MySQL u.c.).
keÅ”atmiÅa
Viens no vienkÄrÅ”Äkajiem veidiem, kÄ palielinÄt mÅ«su datu bÄzes veiktspÄju, ir ieviest jaunu komponentu: keÅ”atmiÅas slÄni. VisizplatÄ«tÄkÄ keÅ”atmiÅas saglabÄÅ”anas metode ir atmiÅÄ esoÅ”s atslÄgu vÄrtÄ«bu ierakstu veikals, piemÄram, Redis vai Memcached. LielÄkajai daļai mÄkoÅu ir Å”o pakalpojumu pÄrvaldÄ«ta versija: Elasticache pakalpojumÄ AWS un Memorystore pakalpojumÄ Google Cloud.
KeÅ”atmiÅa ir noderÄ«ga, ja pakalpojums veic daudzus atkÄrtotus zvanus uz datu bÄzi, lai izgÅ«tu to paÅ”u informÄciju. BÅ«tÄ«bÄ mÄs piekļūstam datubÄzei tikai vienu reizi, saglabÄjam informÄciju keÅ”atmiÅÄ un vairs nepieskaramies tai.
PiemÄram, mÅ«su Graminsta servisÄ katru reizi, kad kÄds dodas uz zvaigznes Mobrika profila lapu, API serveris datu bÄzÄ pieprasa informÄciju no viÅa profila. Tas notiek atkal un atkal. TÄ kÄ Mobrika profila informÄcija nemainÄs ar katru pieprasÄ«jumu, tas ir lieliski piemÄrots keÅ”atmiÅai.
MÄs saglabÄsim rezultÄtus no datu bÄzes Redis pÄc atslÄgas user:id ar derÄ«guma termiÅu 30 sekundes. Tagad, kad kÄds dodas uz Mobrika profilu, mÄs vispirms pÄrbaudÄm Redis, un, ja dati ir, mÄs tos vienkÄrÅ”i pÄrsÅ«tÄm tieÅ”i no Redis. Tagad vietnes populÄrÄkÄ profila pieprasÄ«jumi praktiski neielÄdÄ mÅ«su datu bÄzi.
VÄl viena vairuma keÅ”atmiÅas pakalpojumu priekÅ”rocÄ«ba ir tÄ, ka tos ir vieglÄk mÄrogot nekÄ datu bÄzes serverus. Redis ir iebÅ«vÄts Redis Cluster režīms. LÄ«dzÄ«gi kÄ slodzes balansÄtÄjs1, tas ļauj izplatÄ«t Redis keÅ”atmiÅu vairÄkÄs iekÄrtÄs (ja nepiecieÅ”ams, tÅ«kstoÅ”iem serveru).
GandrÄ«z visas liela mÄroga lietojumprogrammas izmanto keÅ”atmiÅu; tÄ ir absolÅ«ti neatÅemama Ätras API sastÄvdaļa. ÄtrÄka vaicÄjumu apstrÄde un produktÄ«vÄks kods ir svarÄ«gi, taÄu bez keÅ”atmiÅas ir gandrÄ«z neiespÄjami pakalpojumu mÄrogot miljoniem lietotÄju.
Lasiet kopijas
Kad datu bÄzes vaicÄjumu skaits ir ievÄrojami pieaudzis, vÄl viena lieta, ko mÄs varam darÄ«t, ir datu bÄzes pÄrvaldÄ«bas sistÄmÄ pievienot lasÄmÄs kopijas. Izmantojot iepriekÅ” aprakstÄ«tos pÄrvaldÄ«tos pakalpojumus, to var izdarÄ«t ar vienu klikŔķi. LasÄ«tÄ kopija paliks aktuÄla galvenajÄ datu bÄzÄ un ir pieejama SELECT priekÅ”rakstiem.
Å eit ir mÅ«su sistÄma tagad:
NÄkamie soļi
TÄ kÄ lietojumprogramma turpina mÄrogot, mÄs turpinÄsim atdalÄ«t pakalpojumus, lai tos mÄrogotu neatkarÄ«gi. PiemÄram, ja mÄs sÄkam lietot Websockets, tad ir jÄga Websockets apstrÄdes kodu ievilkt atseviÅ”Ä·Ä pakalpojumÄ. MÄs varam to ievietot jaunÄs instancÄs aiz mÅ«su paÅ”u slodzes balansÄtÄja, kas var palielinÄt un samazinÄt, pamatojoties uz atvÄrtiem Websockets savienojumiem un neatkarÄ«gi no HTTP pieprasÄ«jumu skaita.
TÄpat turpinÄsim cÄ«nÄ«ties ar ierobežojumiem datu bÄzes lÄ«menÄ«. TieÅ”i Å”ajÄ posmÄ ir pienÄcis laiks izpÄtÄ«t datu bÄzes sadalÄ«Å”anu un sadalÄ«Å”anu. Abas pieejas prasa papildu pieskaitÄmÄs izmaksas, taÄu ļauj gandrÄ«z neierobežoti mÄrogot datubÄzi.
MÄs arÄ« vÄlamies instalÄt uzraudzÄ«bas un analÄ«zes pakalpojumu, piemÄram, New Relic vai Datadog. Tas palÄ«dzÄs jums noteikt lÄnus vaicÄjumus un saprast, kur ir nepiecieÅ”ami uzlabojumi. Veicot mÄrogoÅ”anu, mÄs vÄlamies koncentrÄties uz vÄjo vietu atraÅ”anu un to novÄrÅ”anu, bieži izmantojot dažas no iepriekÅ”ÄjÄm sadaļÄm sniegtajÄm idejÄm.
avoti
Å Ä« ziÅa ir iedvesmota no viena no mani iecienÄ«tÄkie ieraksti par augstu mÄrogojamÄ«bu. Es gribÄju padarÄ«t rakstu nedaudz precÄ«zÄku projektu sÄkuma posmiem un atsaistÄ«t to no viena pÄrdevÄja. Noteikti izlasiet, ja jÅ«s interesÄ Å”Ä« tÄma.
Zemsvītras piezīmes
Lai gan slodzes sadalÄ«juma ziÅÄ vairÄkos gadÄ«jumos tas ir lÄ«dzÄ«gs, Redis klastera pamatÄ esoÅ”Ä ievieÅ”ana ļoti atŔķiras no slodzes balansÄtÄja. [atgriezties]