Vissza a bloghoz

ProCat Solutions

Előbb a szerver, aztán a funkció: elindult a ProCat Solutions

Kézi deploy péntek délután, API-kulcs a forráskódban, mentés sehol. Egy budapesti mikrovállalkozás, amely az infrastruktúrával kezdi a fejlesztést.

ProCat Solutions indulásinfrastruktúrabackenddocker
Megosztás
Előbb a szerver, aztán a funkció: elindult a ProCat Solutions

Egyetlen szerver, amin minden fut, mentés nélkül. Az új verzió péntek délután, kézzel, SSH-n megy ki. Az elmúlt években több projektet láttunk közelről, amely így működött, egészen az első komolyabb terhelésig vagy az első biztonsági incidensig. Ez a ProCat Solutions Kft. blogjának első bejegyzése. Budapesti mikrovállalkozás vagyunk, néhány fős csapat, szoftvert fejlesztünk, ahogy a városban több száz másik cég is. A különbség a sorrendben van: mi abból az infrastruktúrából indulunk ki, amin a rendszer élesben futni fog, a funkciólista csak utána jön.

Kis budapesti iroda két asztallal, laptopokkal és jegyzetfüzettel

Amikor elfogynak az alapok

Ezek a projektek gyorsan és látványosan indultak. A bajok mindig ugyanazok voltak:

  • egyetlen szerver, amin minden fut, mentés nélkül,
  • API-kulcsok a forráskódban, jogosultságkezelés nélkül,
  • adatbázis, amit senki nem indexelt, mert a fejlesztői gépen gyors volt,
  • deploy kézzel, SSH-n keresztül, péntek délután.

Egyik sem egzotikus hiba. Mind abból fakad, hogy a rendszer arra készült, hogy „működjön, ha megnyomom a gombot”. Arra senki nem tervezte, hogy akkor is működjön, ha ezer ember nyomja egyszerre, és közben elszáll egy diszk.

Mi a másik végén kezdjük. Először tisztázzuk, hol fut majd a rendszer, mekkora terhelést kell kibírnia, mi történik hiba esetén, hogyan kerül ki az új verzió, és ki fér hozzá az adatokhoz. A funkciók erre épülnek. Ettől még nem tervezünk túl minden projektet. A döntéseket viszont előre és tudatosan hozzuk meg, mielőtt a helyzet kikényszerítené őket.

Négy elv

Minden projektünkben ugyanezeket követjük.

Production-ready architektúra az első naptól. A fejlesztői környezet ugyanúgy Dockerben fut, mint az éles. Ugyanaz az Nginx-konfiguráció, ugyanazok a környezeti változók, ugyanaz a PostgreSQL-verzió. A „nálam működik” jelenségnek így esélye sincs.

Biztonságos API-struktúra. Minden API-t úgy tervezünk, mintha nyilvános lenne: hitelesítés, jogosultságkezelés, bemeneti validáció, rate limiting. Ez akkor térül meg, amikor a belső API-ból egyik napról a másikra partnerek felé kitett API lesz.

Magas rendelkezésre állás. Többzónás redundancia nem minden projektnek kell. Automatikus mentés, egészségügyi ellenőrzés (health check), hiba esetén újraindulás és dokumentált helyreállítási folyamat viszont mindegyiknek.

Saját üzemeltetett infrastruktúra. VPS-eken és dedikált szervereken dolgozunk, Linux, Docker és Nginx alapokon. A felhőszolgáltatókkal nincs bajunk, ez tudatos választás. A legtöbb ügyfelünknek kiszámítható költség és teljes kontroll kell. Egy percek alatt skálázódó, de nehezen átlátható számlával kevesebbet nyernek.

Fejlesztők rendszertervet rajzolnak egy táblára

Szűk stack, ismert hibák

A stackünk szándékosan keskeny. Backend oldalon Node.js (NestJS és Express) és Laravel, adatbázisként PostgreSQL, gyorsítótárként és üzenetsorként Redis. Konténerizáláshoz Docker, reverse proxyként Nginx, alatta Linux. Frontenden és mobilon React, Angular és React Native.

A divatnak ebben nincs szerepe. Ezeknek a technológiáknak évek óta ismerjük a hibáit is. Egy eszközt akkor teszünk felelősen éles rendszerbe, ha tudjuk, hogyan viselkedik memóriaszűkében, mit csinál, ha megszakad az adatbázis-kapcsolat, és hogyan frissíthető biztonságosan.

Érdekel minket a telekommunikáció (SIP, VoIP, PSTN-integráció), és figyeljük a blockchain és a gépi tanulás fejleményeit is. Ezekről akkor írunk, amikor valós tapasztalat lesz mögötte.

Mi kerül ide

Termékbemutató és sajtóközlemény nem. Arról írunk, amit munka közben tanulunk:

  • konkrét architektúra-döntésekről és azok következményeiről,
  • hibákról, amiket elkövettünk, és amiket másoknak nem kellene,
  • üzemeltetési tapasztalatokról: monitorozás, mentés, terheléses tesztelés,
  • új területekről, ahová belépünk, és ahol az első lépéseket dokumentáljuk.

Fejlesztőknek írunk, akik hasonló munkát végeznek, és döntéshozóknak, akik érteni akarják, mi zajlik a rendszerük motorháztetője alatt. Ha egy megoldás nálunk nem vált be, azt is leírjuk.

A következő hónapok

A nagy terhelésű REST API-k tervezéséről és a többbérlős (multi-tenant) SaaS-architektúrákról írunk először, mert most ezeken dolgozunk a legtöbbet. Aki hozzászólna valamelyik témához, vagy hasonló problémán dolgozik, az hello@procats.hu címen ér el minket.

A következő bejegyzésben már kód és konfiguráció is lesz.

Megosztás
Széchenyi Terv Plusz kedvezményezetti infoblokk
QR Code