Egyszerű skálázódás
Már korábban is felmerült, de A frontend állapota 2017-ben című fórumtémában az egyik fő érv az állapot szerveroldalon történő kezelése ellen az volt, hogy ez jelentősen megnehezíti a backend munkáját, legrosszabb esetben az egész szolgáltatás jelentős lelassulását, leállását okozhatja. Mivel a téma fontos, ezért érdemes külön foglalkozni vele.
Sokszor a legegyszerűbb lehet a szerveroldalon a hardverelemek jobbra, gyorsabbra cserélése, a memória bővítése például jótékony hatással van mindenre: az operációs rendszer vagy az adatbázisszerver többmindent tud gyorsítótárazni, de ugyanígy a merevlemezek cseréje SSD-re is jelentősen javíthat a válaszidőkön.
Ha egy szerver már nem bírja, a legkönnyebb az adatbázist egy másik (virtuális) gépre áttenni. Előtte viszont érdemes összegyűjteni a lassú lekérdezéseket, MySQL alatt a Slow query log bekapcsolásával. Ha ezek megvannak, tudjuk őket elemezni az
A replikációval legtöbbször az olvasási teljesítményt lehet elosztani több szerver között, például a Postgres-XL nevű program a nevéből adódóan PostgreSQL alatt valósítja meg ezt a funkciót, komoly, több rétegű alkalmazás saját terheléselosztóval. Ez akkor jöhet jól, ha az adatbázisainkat nem tudjuk több részre bontani.
A használt programozási nyelv is adhat szilánkolásra lehetőséget, a PHP is tud szolgáltatásként futni (PHP-FPM), amit akár több szerverre is kioszthatunk. Itt is fontos a mérés, hogy tudjuk, alkalmazásunk egyes funkciói közül melyik teljesít a legrosszabbul.
A párhuzamosan elindított kérések a zárolás mellett több erőforrást is igényelnek, mert – főleg régebbi böngészőkön – annyi külön handshake műveletet kell elvégezni, HTTP fejléceket küldözgetni, külön elvégezni az azonosítást, jogosultságokat ellenőrizni stb.
A fentiek miatt célszerű egymással összefüggő, tipikusan scripttel előállított erőforrások esetében egy felhasználói interakciónál egy kérést indítani, így
■ Elmélet
A skálázódás egy szolgáltatás fontos tulajdonsága, amely azt a képességét adja meg, hogy nagy terhelés esetén a rendszer hogyan viselkedik, mekkora válaszidők várhatóak. Ez utóbbi sokmindentől függ, külsőleg a kliens szerverhez való kapcsolódási sebességétől (például mobiltelefonon befolyásolja az időjárás, a térerő, az adott cellán lévő más felhasználók száma), valamint az egyes rendszerkomponensektől (milyen programkörnyezetet választottunk, mennyi adattal kell dolgoznunk, milyen kapcsolat van a részegységek között, mekkora a terhelésük stb.). Egy alkalmazás bármelyik összetevője lehet szűk keresztmetszet, ami kihatással van az egészre, így fontos a megfelelő tervezés.Gyakorlat
Az első és legfontosabb, hogy folyamatosan mérni kell az egyes részek teljesítményét. Ha van hozzáférésünk, az operációs rendszer feladatkezelőjében láthatjuk, hogy az egyes processzek mekkora CPU terhelést okoznak és mennyi memóriát foglalnak, de lehetőség van szoftverből is figyelni az erőforrásokat, például a Nagios segítségével.Sokszor a legegyszerűbb lehet a szerveroldalon a hardverelemek jobbra, gyorsabbra cserélése, a memória bővítése például jótékony hatással van mindenre: az operációs rendszer vagy az adatbázisszerver többmindent tud gyorsítótárazni, de ugyanígy a merevlemezek cseréje SSD-re is jelentősen javíthat a válaszidőkön.
Ha egy szerver már nem bírja, a legkönnyebb az adatbázist egy másik (virtuális) gépre áttenni. Előtte viszont érdemes összegyűjteni a lassú lekérdezéseket, MySQL alatt a Slow query log bekapcsolásával. Ha ezek megvannak, tudjuk őket elemezni az
EXPLAIN SELECT ...
paranccsal, amely megmondja, melyik rész teljesít gyatrán, amit felgyorsíthatunk néhány jól elhelyezett index-szel.A replikációval legtöbbször az olvasási teljesítményt lehet elosztani több szerver között, például a Postgres-XL nevű program a nevéből adódóan PostgreSQL alatt valósítja meg ezt a funkciót, komoly, több rétegű alkalmazás saját terheléselosztóval. Ez akkor jöhet jól, ha az adatbázisainkat nem tudjuk több részre bontani.
Szilánkok
Az egymással össze nem függő komponenseket ún. shardokba tudjuk szervezni, ami több szintű lehet. Ilyen az, amikor az adatbázis másik szerverre kerül, és ezt is bonthatjuk több részre, például az adatok egyik részét az egyik, a többit egy másik szolgálja ki.A használt programozási nyelv is adhat szilánkolásra lehetőséget, a PHP is tud szolgáltatásként futni (PHP-FPM), amit akár több szerverre is kioszthatunk. Itt is fontos a mérés, hogy tudjuk, alkalmazásunk egyes funkciói közül melyik teljesít a legrosszabbul.
Szoftverarchitektúra
A bevezetőben említett cikkében janoszen felteszi a kérdést: Mi történik akkor, ha egy felhasználó párhuzamosan két lekérdezést indít? Az ott kifejtett indokok miatt valóban csak sorosan lehet kiszolgálni a válaszokat, viszont ez több dolgot is felvet. Egyrészt komolyabb oldal, ahol pénzügyi adatokkal dolgoznak (például számlázás), nem is működhet másként, mert csak így lehet biztosítani a konzisztenciát. Másrészt az ember egyszerre csak egy dologra tud figyelni, hiába van két szeme – miért indítana el több kérést? Harmadrészt a számítógépen vagy mobilon is a beviteli eszközökkel is egy időben csak egy inputot lehet adni: egy helyre lehet kattintani, egy beviteli mezőbe lehet írni, egyvalamit lehet simogatni.A párhuzamosan elindított kérések a zárolás mellett több erőforrást is igényelnek, mert – főleg régebbi böngészőkön – annyi külön handshake műveletet kell elvégezni, HTTP fejléceket küldözgetni, külön elvégezni az azonosítást, jogosultságokat ellenőrizni stb.
A fentiek miatt célszerű egymással összefüggő, tipikusan scripttel előállított erőforrások esetében egy felhasználói interakciónál egy kérést indítani, így
- összességében mindenképp hamarabb fog végződni a művelet,
- hamarabb és egyszerre tudjuk kirajzolni a képernyőre az adatokat,
- tehát jobb lesz a felhasználói élmény,
- alacsonyabb szerverterhelés,
- egyszerűbb lesz az alkalmazás, olcsóbb fejlesztés és karbantartás,
- kombinálva a szilánkokkal a rendszer sokkal jobban fog skálázódni.
Na ez egy hasznosabb cikk
Bár egyetértek vele, hogy "premature optimisation is the root of all evil", egy architektúra megtervezésénél a skálázhatóság (nem skálázás) számításba vétele nem premature optimisation. De az egy tulajdonsága egy rendszernek, hogy mennyi erőforrással lehet később skálázni.
Továbbá egy rendszer nem baj, ha képes elviselni a mindenkori legnagyobb loadjának a dupláját.
Úgy érted, hogyha eleve egy
Ilyesmi, de nem azt mondom,
Az IT rendszerek kiszolgálói egy cég céljainak. Egy cég kifejezett célja pedig a növekedés. Ezért a lefejlesztett rendszerek képesek kell legyenek ésszerű határokon belül (pénzügyi és időbeli) a bővülésre. Ez a bővülés lehet akár (hirtelen és átmeneti, vagy tartós) terhelés növekedés, akár feature-ök hozzáadása. Ezért ha már előre és menet közben is gondolnak erre a fejlesztők, akkor az lehet komoly spórolás a megrendelőnek hosszabb távon. Ezek szerintem szinte minden rendszerre igazak. Ami a kérdés - és gondolom HG is inkább erre gondolt az írásában -, hogy nem minden rendszernek kell felkészülnie a masszív (horizontális) skálázódásra a 0. napon.
Tervezés
Nemzetközi piacon ugyanígy nehéz labdába rúgni a multik mellett.
Ezek miatt direkt skálázásra tervezni egyszerűen pazarlás, és nem szolgálja a megrendelők érdekeit.
Szerintem olvasd el még
Átlag
Egy átlag weboldalnak teljesen megfelelő egy keretrendszer használata, vagy akár saját fejlesztés. Ahol pedig már kicsit is fontos adatokkal dolgoznak, például pénzügyekkel, a munkamenetekhez járó beépített zárolás kifejezetten fontos a konzisztens működés érdekében, és biztonságosabb is, mint a tokenes megoldás.
János is és te is nagy cégeknek dolgoztok, ahol egyszerűen mások a követelmények minden szempontból.
Szerintem kicsit
Továbbá janoszen is és én is leírtuk már, hogy pont a nagy pénzmozgásokat kezelő rendszereknél nem feltétlenül jellemző a lockolás. Mi pl igen nagy pénzmozgással dolgozunk, de nem hogy lockolás nincs, de még tranzakció, sőt, szinkron DB írás sincsen.
Amit viszont én valójában írtam - csak megint valami más lett belelátva -, hogy ha egy rendszer kapacitása az aktuális üzleti igények kiszolgálásának határán mozog (annál nem képes többre), akkor valójában gátja a megrendelő növekedésének. Legyen szó akár teljesítményről, akár üzleti funkciók bevezetéséről. Ezért hoztam múltkor példának a pénzügyi kereskedő cégek számára hamarosan kötelezővé váló skálázódási képességet (a mindenkori legnagyobb loadjuk dupláját kell tudják kezelni mindenféle probléma nélkül).
A masszív horizontális skálázódás egy tök másik dolog. Olyannyira nem arra gondoltam, hogy még explicit le is írtam, hogy nem arra gondolok :)
Érdemes megnézni az
A saját tapasztalataim pedig azok, hogy a cégek csórók, jobb híján megelégszenek egy Facebook weboldallal, mert erre van keret, az eggyel jobbak már használnak Excelt, hogya folyamataikat kezeljék, de ez független a kommunikációtól, a számlázástól stb.
Szóval itthon erre van igény és kereslet, az átlag cégnek fogalma sincs arról, mi a big data vagy a felhő.
Én elhiszem, hogy vannak olyan szolgáltatások, ahol fontos a minél gyorsabb válaszidő, de akkor most visszautalnék a korábbi vitára, ahol a frontend keretrendszerek, mint az angular meg a react: ezekkel igencsak jól le lehet rontani a teljesítményt. Hoztam is példát, a mi rendszerünk ugyanazt az ezervalahányszáz elemből álló űrlapot tízszer gyorsabban renderelte le, mint a React, vagy például Pepitáék részére készítettem egy demót, amit a MiniCRM egy másodperc alatt jelenített meg, az nekem 30-35ms körül volt.
Az átlag cégek pénzügyei kimerülnek abban, hogy számláznak, nyilvántartják a termékeiket, például raktárban, van esetleg egy webshopjuk, ahonnan lehet rendelni, esetleg egy banki API-n keresztül tudják kezelni a bankszámláikat. Ezekre a feladatokra teljesen megfelel a http munkamenethez járó zárolás.
Kíváncsiságból megnéztem a
http://www.tankonyvtar.hu/hu/tartalom/tamop425/2011-0001-526_margitay_az_erveles/ch11s03.html
A weblaboron hirdetők
Nálunk van pl kb 1500 ember, akik mind komolyan megfinanszírozott projecteken dolgoznak, jó eszközökkel, megtervezett architektúrákon. Csak Magyarországon. És ok, nem mind fejlesztő, vagy tesztelő, de akkor is jelentős szám. És saját fülemmel hallottam, hogy többszáz fejlesztőnek tudnánk akár holnap munkát adni. Ha lennének... És ilyen cégből van itthon még egy pár. A lényeg, hogy többezer fejlesztő és tesztelő dolgozik Magyarországon olyan ügyfeleknek, akik áldoznak az IT-ra, és szükségük van minőségi (jellemzően skálázódó is) megoldásokra.
Egy dolog igaz: ezek jellemzően nem magyar ügyfelek, de főleg nem kkv-k. De ha fejlesztői szemmel nézzük, nagyon komoly lehetőségek vannak már itthon is azoknak, akik erre nyitottak.
Nem tudom, miért lenne a
Biztos van ilyenekre is szükség, de az átlag cégnek nem.
Tehát akkor hajtanak végre (harmadik féllel) pénzügyi tranzakciókat.
Nem tudom, miért lenne a
Igaza van
Azok találkoznak a skálázás problematikájával akik nagy terhelésű webes rendszereken dolgoznak, mert havi pár millió felhasználótól kezdve a "rendszergazda megoldja" csak korlátozottan megoldás, de még így is rengeteg startupot látok amelyek infrastuktúrája dölöngél, mert össze vissza van tákolva csak hogy valahogy működjön. Ehhez természetesen társul a 22 éves "CTO" megfelelően nagy arca, aki mindenféle javítási és stabilizálási javaslatra személyes támadással reagál.
Kérdések
Ezek tényleg fontos kérdések.
Egy ismerősöm például egy Közép-európai szolgáltatás fejlesztésén dolgozik, rengeteg ügyféllel és hatalmas adatforgalommal, náluk például minden adatbázisírást egy MySQL szerver végez (az olvasás pedig replikálva van).
De ami engem igazán izgat, amire még nem kaptam választ (vagy nem voltam figyelmes), hogy mondjuk nálunk (vállalatirányítási rendszer) létfontosságú az adatok zárolása a kérés idejére, mert véletlenül sem fordulhat elő, hogy két, párhuzamosan indított kérés inkonzisztens állapotot hozzon létre, ezt a PHP beépített munkamenetkezelőjén kívül milyen alternatívával lehet megoldani? Mik a kulcsszavak, amin el lehet indulni?
Mi a munkamenetben akár megabájtos méretben is tárolunk adatokat. A tokenes cikked hatására viszont elkezdtem kiszervezni a dolgokat, ami szimulált terheléstesztnél növelte a reszponzivitást, de jelenleg egyébként nem okoz problémát.
Teljesen
Az altalam hasznalt (Javas) technologiat szandekosan ugy terveztuk, hogy OOP-s kodot olvasni tudo PHP vagy Java programozo minden tovabbi nelkul bele tud vagni. Olyannyira, hogy a fonokom, aki csak nagyon korlatozott muszaki tudassal rendelkezik, kepes elolvasni es megerteni a kodot. Itt meg kell emlitenem, hogy szandekosan nem hasznaltam olyan Java-specifikus technologiakat amik egy PHP programozonak pl. idegenek, mert a cel az volt, hogy akar a Javas, akar a PHPs vilagbol is tudjunk felvenni embereket anelkul, hogy massziv problemakba utkoznenk.
Mutatok peldat az egyik sajat projektembol:
Adattarolasilag van egy egyszeru ORM mogotte, szoval ha van egy uj valami amit tarolni kell azt eleg konnyen meg lehet valositani. (Itt ORM alatt ne a Doctrine szintu overkillre gondolj, hanem inkabb query builder + betolto.)
A frontendesunk ettol a rendszertol nagyon boldog, mert egyreszt kap egy automatikusan generalt API doksit, masreszt nincs implicit state a szerver oldalon amit figyelembe kell vennie. Meghivja az API-t, ami a maga reszerol csak azt engedi meg ami uzletileg kivanatos es validalja neki az adatokat (a
FieldValidationFailedException
egy ertelmes, strukturalt hibaobjektumot ad vissza). Neki meg csak az urlap validaciot sem kell megepitenie, mert a szerver 30-60 ms-en belul ugyis valaszol. Sajat bevallasa szerint ritkan lat ennyire atlathatoan strukturalt rendszert.Szerintem itt a megertes kulcsa az, hogy API-ket gondolsz az alkalmazasodra es nem MVC-kent, mert MVC strukturabol en eddig csak kuszasagot lattam kisulni.
Ez esetben az ismerosod es csapata ugye tisztaban van azzal, hogy az olvasas adott esetben regi adatokat olvas? Ha igen, es ez nem problema, akkor nagyobb terheles eseten meg lehet nezni a CAP haromszogbol a CP helyett egy AP rendszert is, hiszen olvasasra igy is AP. (Eventual consistency)
Nagyon nehez altalanossagban valaszolni, ez mindig a feladattol es a konkret uzleti kovetelmenyektol fugg. A zarolast bizonyos esetekben nem lehet elkerulni, de pl. a tranzakciok helyes hasznalata mar sokat tud javitani a helyzeten, illetve ez lehetove teszi azt, hogy ne csak egy gepen az adatbazis szerver (pl. Galera clusterrel). Itt erdemes figyelni arra, hogy milyen izolacios szintet hasznalsz az adatbazisnal. Ezen felul erdemes lehet bizonyos feladatokat queue-ba kiszervezni, nem kozvetlenul a request kapcsan feldolgozni.
Nezzunk egy konkret peldat. Legyen egy elszamolasi rendszer, ahol semmikeppen nem szeretnenk ha negativba menne a felhasznalo egyenlege (noha nagyon sok rendszer ezt nem teszi). Ez esetben hasznalhatsz pl. Galera clustert. A Galera cluster allhat 3 gepbol, es a tranzakcioban updatelheted a user egyenleget. Itt fontos az, hogy tenyleg ugyanaz a sor legyen updatelve. Az update soran ha parhuzamosan hajtodik vegre, a commit kiadasakor egy deadlock hibat fogsz kapni. Ezt ha kodbol lekezeled, ujra tudod futtatni a feldolgozast, vagy vissza tudod dobni a felhasznalonak a hibat. Ezen modszer elonye az, hogy van 3 geped, es a MySQL replikacioval ellentetben mindig konzisztensek lesznek az adataid.
Ez persze nem idealis, sokkal jobb ha az uzleti logikat meg lehet egy kicsit hajlitani.
Egyebkent nekem a szemelyes tapasztalatom az, hogy meg akik hasznalnak is tranzakciokat, ritnak tudjak fejbol felemlegetni az izolacios szinteket, szoval lehet hogy nem is volt olyan fontos az abszolut es 1000%-os lockolas. Sok esetben az is elegendo, ha az olyan adatokat amiket egyutt updatelunk egy helyen tarolunk, es azokat amiket kulon updatelunk, kulon tarolunk.
létfontosságú az adatok
1) A lock granularitásának csökkentése (nem az egész request sorosítása, lásd critical section fogalma)
2) Requestek particionálása pl userid alapján workerekre, dedikált 1 consumeres queue-n keresztül. Így egyáltalán nincs szükség lockolásra a business logicban, mert a design nem enged konkurens hozzáférést.
A kettes jobb párhuzamosíthatóságot biztosít, valamivel komplexebb infrastruktúra mellett, alacsonyabb (megoldástól függően) válaszidőkkel, főleg a tail latency értékekre (hisz nincs contention, illetve csak minimális a queue-ba írásnál).
Az egyes megoldás meg egyszerűbb, csak egy distributed lock kell jó helyre, vagy ha 1 gépről van szó, akkor valami gépen belüli shared lock is működhet. Ha csak a request végén írtok az outputra, ezt utóbbi esetben megteheti a session_start hátrább mozgatása csak a business logic köré. De én arra nem építenék, mert a session lockolása valójában nem egy contractja a sessionnek.
Esetedben inkább az egyest választanám. Akkor is akár, ha nincs teljesítmény gondotok, mert segít pl a kódszervezésben is.
Kicsit bővebben írtam az alapokról a cikkben, ami itt végül nem jelent meg. Ha úgy gondolod janoszen, eldobom neked. Ha úgy találod, menjen refaktorra, ha még foglalkozol az oldallal. Vagy kirakom ide fórum témának. Guglidocsban írtam (bruttó 19 oldal), de bbcode-ba beszerkesztve is megvan.
Johet
Cikk: Johet minden content, a beszerkesztes nem tul nagy melo, azt megcsinalom en. Ha hosszu, max tobb reszre bontjuk. Sztem folytassuk privatban ;)
Ment
Második
Viszont, mivel nálunk a rendszer alapvető működése az, hogy egy felhasználótól egyszerre csak egy kérés érkezik, igazából nem tudom, milyen problémát tud okozni az, hogy az adott felhasználó miatt egy darab egyedi fájl ötven - négyszáz ezredmásodpercre le van zárolva? Nincsenek hosszú folyamatok, a feldolgozási idő nagy része az adatbázisra való várással megy el.
Semmit
Dokumentáció
Viszont ezek után felmerülhet a kérdés, hogy ha nekünk sikerült megoldani, hogy a zárolás ne okozzon gondot a skálázódásnál, akkor azt mások is meg tudják-e valósítani? Mert szerintem az esetek túlnyomó többségében ez kivitelezhető.
Bele fogsz futni
Akkor lesznek problemaid ha redundans setupot szeretnel automatikus failoverrel. Jatszhatsz master-masterrel elotte levo load balancerrel, de ott failoverkor keletkezhet key clashing, ami miatt leallhat a replikacio, illetve failoverkor elveszik a lock. Ha ezzel szemben pl. Galerat szeretnel hasznalni, ott azonnal dobhatod ki a lockolos mokat mert a Galera nem tamogatja a SELECT..FOR UPDATE mukodest.
Vagy ha filerendszer alapu sessionoket hasznalsz, akkor kulon kuzdes lesz az egesz ala tenni performans cluster filerendszert ami irasra es olvasasra is ertelmes sebesseget produkal. A filerendszer lassusaga mindenfele nehezen debugolhato performance issue-t tud okozni, es a cluster filerendszerek karbanartasa, kulonosen nagyobb terheles eseten, nem trivialis.
Persze hasznalhatsz a load balancerben sticky sessionoket is hogy mindig egy backendre menjen egy adott session, de ennek megvannak a sajat problemai, mint pl. hogy konnyen elofordulhat a "feloldalas" terheles, illetve ha leallitod az egyik backendet, az azon levo sessionok repulnek.
Messze
Egyébként postgresql-t használunk a licensze miatt, és ha szükséges, áttérünk postgresql XL-re.
A redundáns setup automatikus failoverrel érdekes téma, majd utánaolvasok. Jobban belegondolva itt jöhet elő a probléma a fájlrendszer alapú munkamenetekkel.
Dehogynem találkoznak. A JMS,
Úgy általánosságban szerintem kicsit félre van értve a skálázás fogalma ebben a szálban. Ha 2 gépen tudsz tolni valamit, akkor azt skáláztad 2 gépre. Vagy tudod 1000 gépre skálázni. Nyilván a 2 dolog teljesen más architekturát igényel. Én kimondottan nem a másodikra gondoltam.
Ha alá raksz egy nagyobb vasat, akkor is skáláztad (már ha az segít).
De még egyszer, ami az én eredeti állításom volt: a rendszernek mindig többet kell bírjon, mint amit kap. Ha nem így van, akkor jön a dőlés-borulás a 22 éves CTO-val együtt, amit írtál is.
Valamint a scalability és a load tolerance tulajdonságai egy architektúrának, aminek megfontolásával érdemes architektúrát választani. A lényeg, hogy ennek tudatosnak kell legyen, és a businesst kell támogassa (itt kell figyelembe venni a business goalokat), nem a fejlesztőt/architectet.
Egy szó mint száz, nem ugyanarról beszéltünk szerintem.
JMS,...
Jól hangzik. :D
Valóban, nagyon szerencsés
Szoktam én is elképedni interjúkon, amikor azt mondják, hogy a fejlesztői gép után mehet prodra, mert tesztelve volt. De persze, nincs minden cégnek kerete fenntartani párhuzamos rendszereket tesztelésre. Az tény, hogy ebben pl nagyon nem mindegy milyen helyen dolgozik az ember. Nálunk pl több szintű dev, qa, perf, uat stb rendszereken megy át minden, mielőtt kiérne prodra. Plusz komolyan monitorozzák és supportálják a devek is a rendszerünket ezeken a környezeteken, hogy egyrészt elkapjuk az esetleges bugokat, másrészt hogy megtanuljuk hogy néz ki üzemeltetői oldalról a rendszerünk. De ez persze nem általános, ilyen szinten ezt én se láttam korábbi projetjeimen. Csak 1-2 környezet volt, vagy az sem. Ez nyilvánvalóan nagyon nincs ingyen. Meg nem is mindenki szereti, sokan a falra másznak a devopsos munkától. Pedig belenevel az emberbe egy kis fegyelmet :)
Tök jó, szerintem legalább
Jelen allas
Mindenhol azt sulykolják,
Alapvetően arról van szó,
Szoktam olvasni, hallani itt-ott, hogy a megrendelő motivációjának és a folyamatoknak a megértése a BA feladata. Hát... a BA írja a kódot? Ki fog döntést hozni az implementációval kapcsolatban? Hogy ismerné fel a BA, hogy épp csúszik félre egy feature implementációja?
De ugyanez üzemeltetésnél is. Az egyik legjobb példa, ami nálunk előkerül, az a logolás, alertelés. Megírjuk az üzenetet, kódból nézve értelmes. Aztán meglátjuk a monitoring toolban, vagy nyomozunk valamit... és akkor vissza kell menni javítani :)
Én is így látom, ha két ember
(Az emag tudtommal román.)
Attol fugg
Skálázódás
- Ne tárolj fájlokat helyi fájlrendszeren. Ez annyira meg tud szivatni, hogy még. Az S3 és társai filléres összegekbe kerülnek.
- Ha sessionöket használsz, írd DB-be őket.
- Ha DB-t használsz, készülj fel arra, hogy más szerverről olvasol mint írsz.
- Legyen egy tisztességes deploy rendszered (pl. deployer-rel).
- Ha lehet, kerüld el a soktáblás SQL queryket és a vastag ORM-eket, mert ezek meg fogják akadályozni, hogy bizonyos feladatokra átállj nem relációs adatbázisokra.
Ezek szinte triviális dolgok, ha idejében gondolsz rá, de hihetetlen szívás mennyiség ha nem gondolsz rá.
Továbbiak
Fájlok
Ha több mint egy gépen fut a rendszered, akkor nincs jelenleg olyan technológia ami egy mappát automatikusan minden gépen láthatóvá tesz és úgy működik mint egy helyi fájlrendszer. Vagyis még ha használsz is valamilyen cluster filerendszert, ami önmagában problémás, nehezen konfigurálható és monitorozható, stb., akkor is bele fogsz futni olyan problémákba, mint hogy nem lesz zárolás, stb. A cluster filerendszerek, mint olyan, kerülendő technológia, hacsak nincs az embernek egy 4-5 fős üzemeltetői csapata 0-24 ügyeletre, de még akkor is érdemes jól megfontolni.
Sokkal egyszerűbb az adatokat egy objektum adatbázisba tenni, ezek ugyanis nem támogatják a klasszikus fájlrendszer szemantikákat (részleges olvasás, stb), ezek sokkal egyszerűbb, kevésbé hibaérzékeny rendszerek.
Ami a munkameneteket illeti, igen, igazad van, éppen ezért érdemes megfontolni a teljes elfelejtésüket és nem mindent belepakolni egy zsákba. Erről itt írtam: http://weblabor.hu/cikkek/sessionmentes-weboldalak Ez persze gondolkodást és odafigyelést igényel, nem lehet "főtesszük a szimfonit és majd két hét alatt készen leszünk" módszerrel fejleszteni.
clusterFS?
Ennyire nincs rá szükség?
Vagy ennyire le van maradva a világ ezen része a VMS mögött?
Nem
Nem mennek bele az osszes reszletbe, mert akkor itt ulunk holnapig. A lenyeg az, hogy alkalmazas fejlesztokent sok fajdalomtol tudod megkimelni magad, ha nem arra apellalsz hogy majd lesz egy POSIX-compliant filerendszer alattad.
Sokszor a legegyszerűbb lehet
Az a gond, hogy a vertikális skálázódással nagyon nehéz azonnal reagálni egy pillanatnyi túlterheltségre. Most kell, 64 mag és 1 tb memória, holnap már nem.
Horizontálisan, felhőben, megfelelő konfig mellett simán észre sem kéne venni, hogy 10 000 helyett 500 000 kliens kéreget.