Kif tiskala minn 1 għal 100 utent

Ħafna startups għaddew minn dan: folol ta 'utenti ġodda jirreġistraw kuljum, u t-tim tal-iżvilupp jitħabat biex iżomm is-servizz jaħdem.

Hija problema sabiħa li jkollok, iżda ftit hemm informazzjoni ċara fuq il-web dwar kif tiskala b'attenzjoni applikazzjoni tal-web mix-xejn għal mijiet ta' eluf ta' utenti. Tipikament hemm jew soluzzjonijiet tan-nar jew soluzzjonijiet ta 'konġestjoni (u ħafna drabi t-tnejn). Għalhekk, in-nies jużaw tekniki pjuttost cliched biex iskalaw il-proġett tad-dilettanti tagħhom f'xi ħaġa tassew serja.

Ejja nippruvaw niffiltraw l-informazzjoni u ikteb il-formula bażika. Se nżidu s-sit ġdid tagħna ta' qsim tar-ritratti Graminsta pass pass minn 1 għal 100 utent.

Ejja nikteb liema azzjonijiet speċifiċi jeħtieġ li jittieħdu meta l-udjenza tiżdied għal 10, 100, 1000, 10 u 000 ruħ.

Utent 1: magna 1

Kważi kull applikazzjoni, kemm jekk tkun websajt jew applikazzjoni mobbli, għandha tliet komponenti ewlenin:

  • API
  • database
  • klijent (applikazzjoni mobbli stess jew websajt)

Id-database taħżen data persistenti. L-API taqdi talbiet lil u madwar din id-dejta. Il-klijent jittrasmetti data lill-utent.

Wasalt għall-konklużjoni li huwa ħafna aktar faċli li titkellem dwar l-iskala ta 'applikazzjoni jekk, mil-lat arkitettoniku, il-klijent u l-entitajiet API huma kompletament separati.

Meta l-ewwel nibdew nibnu applikazzjoni, it-tliet komponenti kollha jistgħu jitħaddmu fuq l-istess server. F'ċerti modi, dan huwa simili għall-ambjent ta 'żvilupp tagħna: inġinier wieħed imexxi d-database, l-API, u l-klijent fuq l-istess magna.

Fit-teorija, nistgħu niskjerawha fis-sħaba fuq istanza waħda DigitalOcean Droplet jew AWS EC2, kif muri hawn taħt:
Kif tiskala minn 1 għal 100 utent
B'dan, jekk se jkun hemm aktar minn utent wieħed fuq sit, kważi dejjem jagħmel sens li tiddedika saff ta 'database.

10 utenti: ċċaqlaq id-database għal livell separat

Il-qsim tad-database f'servizzi ġestiti bħal Amazon RDS jew Digital Ocean Managed Database se jservina tajjeb għal żmien twil. Huwa ftit aktar għali minn self-hosting fuq magna waħda jew istanza EC2, iżda b'dawn is-servizzi tikseb ħafna estensjonijiet utli mill-kaxxa li se jkunu utli fil-futur: backup multi-reġjun, repliki aqra, awtomatiku backups, u aktar.

Hekk tidher is-sistema issa:
Kif tiskala minn 1 għal 100 utent

100 utent: iċċaqlaq il-klijent għal livell separat

Fortunatament, l-ewwel utenti tagħna għoġbu ħafna l-applikazzjoni tagħna. It-traffiku qed isir aktar stabbli, għalhekk wasal iż-żmien li tmexxi l-klijent għal livell separat. Għandu jiġi nnutat li separazzjoni entitajiet huwa aspett ewlieni tal-bini ta 'applikazzjoni skalabbli. Peress li parti waħda tas-sistema tirċievi aktar traffiku, nistgħu naqsmuha biex nikkontrollaw kif is-servizz jiskala bbażat fuq mudelli speċifiċi tat-traffiku.

Huwa għalhekk li nixtieq naħseb li l-klijent huwa separat mill-API. Dan jagħmilha faċli ħafna li wieħed jaħseb dwar l-iżvilupp għal pjattaformi multipli: web, web mobbli, iOS, Android, applikazzjonijiet tad-desktop, servizzi ta 'partijiet terzi, eċċ. Dawn kollha huma biss klijenti li jużaw l-istess API.

Pereżempju, issa l-utenti tagħna ħafna drabi jitolbu li jirrilaxxaw applikazzjoni mobbli. Jekk tissepara l-entitajiet tal-klijent u tal-API, dan isir aktar faċli.

Hekk tidher sistema bħal din:

Kif tiskala minn 1 għal 100 utent

1000 utent: żid load balancer

L-affarijiet qed iħarsu 'l fuq. L-utenti ta' Graminsta qed itellgħu aktar u aktar ritratti. In-numru ta’ reġistrazzjonijiet qed jikber ukoll. Is-server waħdieni tal-API tagħna qed ikollu diffiċli biex ilaħħaq mat-traffiku kollu. Bżonn aktar ħadid!

Load balancer huwa kunċett qawwi ħafna. L-idea ewlenija hija li npoġġu load balancer quddiem l-API, u dan iqassam it-traffiku għal każijiet ta 'servizz individwali. Dan huwa kif niskala orizzontalment, jiġifieri nżidu aktar servers bl-istess kodiċi, u nżidu n-numru ta 'talbiet li nistgħu nipproċessaw.

Se npoġġu load balancers separati quddiem il-klijent tal-web u quddiem l-API. Dan ifisser li tista 'tmexxi każijiet multipli li jħaddmu kodiċi API u kodiċi tal-klijent tal-web. Il-load balancer se jidderieġi t-talbiet lejn is-server li huwa inqas mgħobbi.

Hawnhekk nieħdu vantaġġ ieħor importanti - is-sensja. Meta istanza waħda tfalli (forsi mgħobbija żżejjed jew ġġarraf), nibqgħu b'oħrajn li jkomplu jwieġbu għat-talbiet li jkunu deħlin. Jekk kien hemm biss istanza waħda taħdem, allura f'każ ta 'falliment is-sistema kollha tiġġarraf.

Il-balancer tat-tagħbija jipprovdi wkoll skalar awtomatiku. Nistgħu kkonfigurawha biex inżidu n-numru ta 'każijiet qabel l-ogħla tagħbija, u nnaqqsuha meta l-utenti kollha jkunu qed jorqdu.

Bil-bilanċjar tat-tagħbija, il-livell API jista 'jiġi skalat kważi indefinittivament, sempliċement billi żżid każijiet ġodda hekk kif in-numru ta' talbiet jiżdied.

Kif tiskala minn 1 għal 100 utent

Nota. Bħalissa s-sistema tagħna hija simili ħafna għal dak li joffru kumpaniji PaaS bħal Heroku jew Elastic Beanstalk fuq AWS barra mill-kaxxa (u għalhekk huma tant popolari). Heroku jpoġġi d-database fuq host separat, jimmaniġġja bilanċjar tat-tagħbija awto-scaling, u jippermettilek tospita l-klijent tal-web separatament mill-API. Din hija raġuni kbira biex tuża Heroku għal proġetti tal-istadju bikri jew startups - ikollok is-servizzi bażiċi kollha barra mill-kaxxa.

10 utent: CDN

Forsi kellna għamilna dan mill-bidu nett. L-ipproċessar tat-talbiet u l-aċċettazzjoni ta’ ritratti ġodda qed jibdew ipoġġu wisq piż fuq is-servers tagħna.

F'dan l-istadju, għandek bżonn tuża servizz tal-cloud għall-ħażna ta 'kontenut statiku - immaġini, vidjows u ħafna aktar (AWS S3 jew Spazji Oċean Diġitali). B'mod ġenerali, l-API tagħna għandha tevita li timmaniġġja affarijiet bħall-għoti ta' immaġini u t-tlugħ ta' immaġini fuq is-server.

Vantaġġ ieħor tal-cloud hosting huwa s-CDN (AWS isejjaħ dan is-add-on Cloudfront, iżda ħafna fornituri tal-ħażna tas-sħab joffruh barra mill-kaxxa). Is-CDN awtomatikament jaħżen l-immaġini tagħna f'diversi ċentri tad-dejta madwar id-dinja.

Għalkemm iċ-ċentru tad-dejta ewlieni tagħna jista 'jkun jinsab f'Ohio, jekk xi ħadd jitlob immaġini mill-Ġappun, il-fornitur tal-cloud jagħmel kopja u jaħżinha fiċ-ċentru tad-dejta Ġappuniż tiegħu. Il-persuna li jmiss li titlob din l-immaġni fil-Ġappun se tirċieviha ħafna aktar malajr. Dan huwa importanti meta naħdmu b'fajls kbar, bħal ritratti jew vidjows, li jieħdu ħafna żmien biex iniżżlu u jittrasmettu madwar il-pjaneta.

Kif tiskala minn 1 għal 100 utent

100 utent: skalar tas-saff tad-dejta

Is-CDN għen ħafna: it-traffiku qed jikber b'veloċità sħiħa. Il-video blogger famuż Mavid Mobrick għadu kemm irreġistra magħna u poġġiet l-"istorja", kif jgħidu. Grazzi għall-load balancer, l-użu tas-CPU u tal-memorja fuq is-servers tal-API jinżammu baxxi (għaxar istanzi tal-API qed jaħdmu), iżda qed nibdew niksbu ħafna timeouts fuq talbiet... minn fejn ġej dan id-dewmien?

Tħaffer ftit fil-metriċi, naraw li s-CPU fuq is-server tad-database huwa 80-90% mgħobbi. Aħna fil-limitu.

L-iskala tas-saff tad-dejta hija probabbilment l-aktar parti diffiċli tal-ekwazzjoni. Is-servers tal-API jaqdu talbiet mingħajr stat, għalhekk aħna sempliċement inżidu aktar istanzi tal-API. Imnieħer il-maġġoranza databases ma jistgħux jagħmlu dan. Se nitkellmu dwar sistemi ta 'ġestjoni ta' database relazzjonali popolari (PostgreSQL, MySQL, eċċ.).

caching

Wieħed mill-eħfef modi biex tiżdied il-prestazzjoni tad-database tagħna huwa li nintroduċi komponent ġdid: is-saff tal-cache. L-aktar metodu komuni ta' caching huwa maħżen tar-rekords ta' valur ewlieni fil-memorja, bħal Redis jew Memcached. Il-biċċa l-kbira tas-sħab għandhom verżjoni ġestita ta’ dawn is-servizzi: Elasticache fuq AWS u Memorystore fuq Google Cloud.

Cache huwa utli meta servizz jagħmel ħafna sejħiet ripetuti lid-database biex jirkupra l-istess informazzjoni. Essenzjalment, aħna naċċessaw id-database darba biss, naħżnu l-informazzjoni fil-cache, u ma nerġgħux tmissha.

Pereżempju, fis-servizz Graminsta tagħna, kull darba li xi ħadd imur fil-paġna tal-profil tal-istilla Mobrik, is-server tal-API jistaqsi fid-database għal informazzjoni mill-profil tiegħu. Dan jiġri għal darb'oħra u għal darb'oħra. Peress li l-informazzjoni tal-profil ta 'Mobrik ma tinbidilx ma' kull talba, hija eċċellenti għall-caching.

Aħna se nżommu fil-cache r-riżultati mid-database f'Redis biċ-ċavetta user:id b'perjodu ta' validità ta' 30 sekonda. Issa, meta xi ħadd imur għall-profil ta 'Mobrik, l-ewwel niċċekkjaw Redis, u jekk id-dejta tkun hemm, aħna sempliċiment tittrasferiha direttament minn Redis. Issa t-talbiet lill-aktar profil popolari fuq is-sit prattikament ma jgħabbix id-database tagħna.

Vantaġġ ieħor tal-biċċa l-kbira tas-servizzi ta' caching huwa li huma aktar faċli biex jiġu skalati minn servers ta' database. Redis għandu mod Redis Cluster inkorporat. Simili għal load balancer1, jippermettilek tqassam il-cache Redis tiegħek fuq magni multipli (fuq eluf ta' servers jekk meħtieġ).

Kważi l-applikazzjonijiet kollha fuq skala kbira jużaw il-caching; hija assolutament parti integrali minn API veloċi. Ipproċessar tal-mistoqsijiet aktar mgħaġġel u kodiċi aktar produttiv huma kollha importanti, iżda mingħajr cache huwa kważi impossibbli li skala servizz għal miljuni ta 'utenti.

Aqra Repliki

Meta n-numru ta 'mistoqsijiet għad-database żdied ħafna, ħaġa oħra li nistgħu nagħmlu hija li nżidu repliki tal-qari fis-sistema ta' ġestjoni tad-database. Bis-servizzi ġestiti deskritti hawn fuq, dan jista 'jsir fi klikk waħda. Ir-replika tal-qari se tibqa' attwali fid-database prinċipali u hija disponibbli għad-dikjarazzjonijiet SELECT.

Hawnhekk hawn is-sistema tagħna issa:

Kif tiskala minn 1 għal 100 utent

Passi li jmiss

Hekk kif l-applikazzjoni tkompli tiskala, aħna se nkomplu nisseparaw is-servizzi biex niskalawhom b'mod indipendenti. Pereżempju, jekk nibdew nużaw Websockets, allura jagħmel sens li iġbed il-kodiċi tal-ipproċessar tal-Websockets f'servizz separat. Nistgħu npoġġuh f'każijiet ġodda wara l-balancer tat-tagħbija tagħna stess, li jista 'jkabbar u 'l isfel ibbażat fuq konnessjonijiet Websockets miftuħa u irrispettivament min-numru ta' talbiet HTTP.

Se nkomplu niġġieldu wkoll ir-restrizzjonijiet fil-livell tad-database. Huwa f'dan l-istadju li wasal iż-żmien li tistudja l-qsim u l-qsim tad-database. Iż-żewġ approċċi jeħtieġu overhead addizzjonali, iżda jippermettulek tiskala id-database kważi b'mod indefinit.

Irridu wkoll ninstallaw servizz ta’ monitoraġġ u analiżi bħal New Relic jew Datadog. Dan jgħinek tidentifika mistoqsijiet bil-mod u tifhem fejn hu meħtieġ titjib. Hekk kif niskalaw, irridu niffokaw fuq is-sejba ta 'konġestjonijiet u l-eliminazzjoni tagħhom—spiss nużaw xi wħud mill-ideat minn taqsimiet preċedenti.

Sorsi

Din il-kariga hija ispirata minn wieħed minn il-postijiet favoriti tiegħi dwar iskalabbiltà għolja. Ridt nagħmel l-artiklu ftit aktar speċifiku għall-istadji inizjali tal-proġetti u ħollha minn bejjiegħ wieħed. Kun żgur li taqra jekk inti interessat f'dan is-suġġett.

Noti f'qiegħ il-paġna

  1. Għalkemm simili f'termini ta 'distribuzzjoni tat-tagħbija fuq każijiet multipli, l-implimentazzjoni sottostanti ta' cluster Redis hija differenti ħafna minn load balancer. [ritorn]

Kif tiskala minn 1 għal 100 utent

Sors: www.habr.com

Żid kumment