Miért nincs probléma nálunk rendszergazdák és fejlesztők között

A rendszergazdás topikban látott sok-sok hozzászólás ihlette ezt a bejegyzést. Nagyon sokféleképpen tudnak egymás lábára lépni rendszergazdák és fejlesztők, szépen le van írva amott, én is tapasztaltam már ezek egy részét. A jelenlegi munkahelyen viszont még sincs ilyen probléma. Leírom, miért.

Először is, nálunk rendszergazda szó szerint nincs is. Leginkább csak mérnökök vannak: megtervezik az egységes szerver konfigokat és egyéb hálózati hardvereket meg a desktop gépeket is, egységes OS-t raknak rájuk, a szerverekre egy orchestration réteget, afölé meg sok-sok szolgáltatás szoftverét. Ez mind sok-sok külön csapat. Egy részük software engineer, más részük site reliability engineer. Meg vannak persze technikusok vagy nem tudom hogy hívják, akik a hardvereket fizikailag pakolgatják, velük még nem találkoztam.

Rendszergazdák egyik kedvenc témája a root jog a desktop gépeken. Nálunk van. Kellhet egyedi szoftvereket telepíteni, szolgáltatásokat állítgatni-indítgatni, hálózatot izélgetni, stb. Sokkal egyszerűbb az élet roottal, anélkül a rendszer szívatna minket. Miért nincs belőle gond? Kártékony szoftverek és magatartás ellen természetesen van védelem, meg policyk, és ha valaki kinyírja a gépét, negyed óra újratelepíteni az egységes image-ből, minimális interakcióval. Tehát ilyen gonddal meg mi nem szívatunk rendszergazdákat.

Másik gyakori dolog, amit rendszergazdáktól hallok, hogy fejlesztői szemétdomb. Ilyen nincs.

Nézzük előbb forrás oldalról. Egységesen Bazel-szerű build rendszer van a reljes forráskód repóban, aminek egyik fő erénye a reprodukálható és izolált buildek. Bármi forrást kicsekkol valaki, az pöccre le fog fordulni. Akár új ember először a csapat projektjét, akár egy random ember egy másik random team projektjét. Láttam már olyat korábbi munka során, ahol a forráskód első buildje egy soklépéses, transzcendentális folyamat volt (ezt másold ide, azt installáld, amazt a scriptet futtasd le, ha valami nem fordult elsőre, akkor másodikra már jó volt, stb.). Egy jó build rendszeren rengeteg minden múlik. Ha leülök egy újonnan telepített gép elé, percek múlva már produktívan kódolni tudok. Meg persze van egységes formázás, automatikusan és folytonosan futó tesztek, code review, stb., tehát nem csak fordul a kód, de működik is.

Ha meg van írva a szoftver, először le kell tesztelni lokálisan. Futtatni akarod? Bazel run és már megy is, lehet neki küldeni a requesteket. Úgy szokás, hogy a build fájlban megvannak azok a default configok, amikkel simán elindul a szolgáltatás. Ehhez nem kell rendszergazdai segítség, sem VM, nem kell még igazi szerveren futtatni sem, lokálisan is már nagyon hasonlít az igazira. Tesztelni akarod? Bazel test és már megy is. Pici unit teszttől durva nagy integrációs tesztig minden fut vele. Mock, fake, másik csapat szervere sandboxban, ez mind elérhető általában. Nagyon egységesen vannak kialakítva az interfészek, nem szokott nagy varázslat lenni, hogy két rendszer beszélgessen egymással.

Most jön a relevánsabb rész, igazi szerveren kell futtatni valamit. Itt is van dev, meg prod, meg ilyesmi környezetek, de hardveresen mind ugyanaz. K8S-szerű orchestration van. Nekem két dolgot kell hozzá csinálni: csomagot a forrásból (Bazel megoldja, kb. statikusan linkelt binárist szül, tehát nem kell hozzá semmi egyéb, hogy fusson rögtön bárhol), és egy config fájlt (amiben benne van, hogy hány példányban fusson, mennyi CPU, RAM, port, stb. kell neki, lokális diszk nincs). Fellövöm és fut. Egyszerű API-ja van, fejlesztőként is triviális használni segítség nélkül. Kapacitás van elég, persze nagyobb dolgokhoz szükséges erőforrást tervezni, de kisebbekhez nem. Devben megnézem, hogy működik-e, illetve lehet rajta load testet csinálni, erőforrás igényeket masszírozni, aztán ha minden jó, mehet prodba. Continuous delivery-szerűség van, ha egyszer elindult, akkor utána már könnyű rávenni, hogy magától frissüljön pl. naponta, prod-ot is beleértve (ha megírtam a kellő magabiztosságot adó automatizált teszteket). A végletekig automatizálva van minden lépés, szinte varázslat (de nem úgy varázslat, hogy bonyolult, vagy néha megy-néha nem), telepítési kézikönyv is pl. tök fölösleges egy ilyen környezetben.

Szintén sima fejlesztőként könnyű hozzá monitoringot, alerteket gyártani. Loggolásra, debuggolásra, teljesítmény mérésére teljesen egységes, beépített megoldások vannak. Tehát egy egyszerűbb szolgáltatás 100% fejlesztőkkel is futni tud. Nagyobb projekteken össze lehet dolgozni egy site reliability engineer csapattal, akik elláthatnak jó tanácsokkal (megbízhatóság, skálázhatóság témakörben főleg), segíthetnek monitoringot beállítani, erőforrást tervezni, vállalhatnak ügyeletet, stb. Nagyjából ezek a felelősségkörök megfelelnek rendszergazdaságnak. (Vagy devops? Én ebben az életben már nem akarom megérteni, hogy mi az.) De inkább egy oldalon állunk, és hardverhez egyikünk se nyúl, csak az egységes production rendszerekkel dolgozunk mindketten. Mivel megvannak a határok, hogy kinek mi a dolga, és a közös cél, ezért nem jellemző, hogy egymásnak keresztbe tennénk véletlenül se.

És még egy fontos dolog: mi van, ha gáz van? Először is, legtöbbször vannak SLO-k és forgatókönyvek, tehát tudjuk, hogy ha valami nem megy, az miért baj, merre kell elindulni, és mikor sikerült megoldani. A kultúra része, hogy nincs ujjal mutogatás (blameless culture). Nincs olyan jellemzően, hogy egy személy az oka valaminek. Ha szar a kód, legalább két ember látta a review miatt. Ha szar a config, azt is, mert az is verziókezelt. Ha valaki egyszemélyesen olyan parancsot adott ki, amitől valami szétesett, az egy szisztematikus probléma (miért létezik ilyen parancs egyáltalán/miért esett szét tőle az a rendszer/miért lehet valami kritikus dolgot review nélkül izélgetni). Tűzoltás után postmortemet írunk, aminek fő célja, hogy minden érintett (vagy más is) tanulhasson belőle, és kiosztjuk a feladatokat, hogy hogyan lehet még megbízhatóbb a rendszerünk.

TLDR: kultúra, kölcsönös bizalom, jól kitalált feladatkörök, igényes technológiai megoldások, automatizálás -> mindenki produktív.

Hozzászólások

Szerkesztve: 2019. 12. 22., v – 09:56

Azért, azt hozzá kell tenni, hogy ez egy olyan hely, amit vitrinben lehetne mutogatni. Ahol sem az emberi, sem a tárgyi erőforrások szükségességét nem vitatja senki. Sajnos az életben az ilyen cégek olyan ritkák, mint a fehér holló. Főleg, ha valaki pl. a KKV szektrorban tevékenykedik.

Érdekes téma egyébként, címlapra tettem.

trey @ gépház

Te is szoktad dicsérni a munkahelyedet, hogy jól szervezett, jó a hangulat. A legkisebb cégeknél is ki lehet alakítani hatékony folyamatokat, hatékony csapatmunkát.

Csak az emberek nagy részére az alábbi hozzáállás a jellemző, és előbb utóbb őket is fel kell venni. Főleg ha nagyon alacsony a munkanélküliség, azaz nem is kell akarniuk ezen változtatni.

Kit érdekel, jó az úgy.
5 perc alatt beleírom/belövöm/...
Nem értek hozzá, tehát sz.r.
...

Vannak nagyon alulfizetett területek, ott veszett fene az egész, de ahol ki lehet termelni egészséges profitot, ott "csak a főnökön múlik".

"A legkisebb cégeknél is ki lehet alakítani hatékony folyamatokat, hatékony csapatmunkát."

A fentit szerintem pont nem lehet megcsinalni egy kicsi cegnel, egyszeruen nincs annyi ember ahany csoportot emlit a leirasban. Egyebkent pont ez a kerdes maradt bennem az olvasas utan, hany emebrrel tud ez mukodni?

1. A kicsi és az alulméretezett között van különbség.

Nyilván ha túl sok mindent kell csinálni, akkor akármilyen hatékonyság mellett bele fog dőlni akár a kicsi, akár a nagy cég. Viszont a hatékonyság sokat tud lendíteni az áteresztőképességen.

2. Az említett fogalmak nem emberek meg csoportok, hanem szerepkörök. Egy ember nyugodtan dolgozhat több szerepkörben is.

Tudom, a HUP-on nem népszerű az a nézet, hogy létezhetnek olyan munkák is, amelyek kevésbé specifikusak, mint mondjuk a "grep-hez -v kapcsoló elhelyező", de dolgozom együtt ilyen kollégákkal és bizony léteznek és az üzleti célok elérésében sokkal hatékonyabbak, mint a nagyon erősen specializált kollégák.

Ez az erzesem tamadt nekem is.

Rogton ott nem lehet magyar valosagra huzni, hogy irja fogalmam sincs kik es hol pakolgatjak a dolgokat.

Hat ize, nekem volt olyan helyem, hogy meg az elektromos halozat kiepitesenel is segedmunkazni kellett. Fejlesztok is be lettek vonva a szekreny cipelesbe...

Every single person is a fool, insane, a failure, or a bad person to at least ten people.

Nekem is volt olyan otthon, hogy SWE-ként pakolgattam a merevlemezeket, mert a rendszergazda nem csinált mindent jól, én meg élveztem ezt a részét is, ez is egy jó tapasztalatszerzés volt, de már nem csinálnám. A lényeg az, hogy nem törvényszerű, hogy így legyen. Ki lehet adni a hardvert X csapatnak, a következő réteget Y-nak, stb., jól definiált interfészekkel a komponensek között, és akkor megy minden hatékonyan. Csak a nagyon kicsi KKV-k azok, ahol ez nem tud működni.

"Rogton ott nem lehet magyar valosagra huzni, hogy irja fogalmam sincs kik es hol pakolgatjak a dolgokat."

Erre van a felhő.

"amit vitrinben lehetne mutogatni"

Azért kap szidást is rendesen, pl. a HUP-on is :D

"sem az emberi, sem a tárgyi erőforrások szükségességét nem vitatja senki"

De azt is tudja mindenki, hogy egyik sem végtelen, fontos a hatékony kihasználás is.

"Érdekes téma egyébként, címlapra tettem."

De ha jönnek a trollok, inkább dugd el :). Oktató szándék volt, hírverés és nevesítés nélkül, de nem biztos, hogy mindenki így látja majd...

Ehhez úgy látom sokban hozzájárul az, hogy a fejlesztők sem gondolják magukról, hogy mindenhez is értenek, és elfogadják a reliability engineer javaslatait. Ez sok esetben nincs így más helyeken. 

A blameless culture is dícséretes, pláne ha tényleg működik is. Ez is szokott nagyon kérdéses pont lenni. 

Mindehhez pedig kell még egy valami, amiről nem írtál: haladó gondolkodású vezetők. 

Where do you want to go today?
[nobody@salcay:~]$_

"haladó gondolkodású vezetők"

Laszlo Bock - Work Rules könyvét tudom ajánlani. Csupa olyan dolog, amit magyar céges is megtehetnének akár. Csak egy kultúraváltást azért nem könnyű levezényelni, ha már kialakultak a rossz szokások. Illetve a középvezetők nagy része technikai háttérrel jött, így könnyű megérteni egymást.

Jol hangzik, de azert nem ez az altalanos. Viszont legalabb neked bejott a jo hely, grat :)

echo crash > /dev/kmem

Szerkesztve: 2019. 12. 22., v – 12:21

Azt hiszem, ez leginkább a cégvezető elköteleződésén múlik, aztán az ezt az elvet követő főnökön. Gratulálok nekik és a csapatotoknak egyaránt.
Sajnos a legtöbb KKV még mindig az egyszemélyes rambóktól üzemel stabilan. Helyettesíthetőség csak részben, szabadságon bekapcsolt telefon annál inkább.

Ez a no heroes ez a legnagyobb okorsegek egyike, amivel csak talalkoztam. Megis mi mas motivalna egy lelkes munkaerot, mint az, hogy megoldhat egy vilagmeretu problemat?

A blameless culture, mint "mindenert legalabb ketten hibasak, QA-val egyutt harman" az jo. De ez a "no heroes" ez okorseg. Neha igenis javitgatni kell hajnal 3ig. (Evente max 1x). Es ezert kell recognition.

Egyetértek veled és félreértetted a linkelt oldalt (tényleg nem volt nagyon kifejtve). Vannak néha kiugró teljesítmények és van érte elismerés és jutalom. A hero az olyan, amikor egy ember hosszú távon egy szisztematikus problémát a saját hátán visz el, amit nem is a jutalomért csinál. Na, az rossz. Mondok egy példát: a 10 fős csapat 9 tagja folyamatosan szar kódokat commitol, hősünk pedig szombat-vasárnap ezeket javítgatja.

Jól emlékszem, hogy te Ausztriában élsz?

Bizisten, nem kötekedésből. :)

De amit leírtál az A Tökéletes Világban működik, ahol az erőforrás végtelen, az ügyfélszám 1-nél korlátozódik, és a cég alkalmazottak szempontjából zéró fluktuációval működik. És minden alkalmazott egyszerre okos, kedves, polihisztor, boldog ... stb

Ilyen környezetben viszont nem lennének kihívások... ;)

Viszont ez:

kultúra, kölcsönös bizalom, jól kitalált feladatkörök, igényes technológiai megoldások, automatizálás -> mindenki produktív.

nálunk is működik. Tudunk dolgozni. Bár nem az általad lerajzolt édenkertben.

A cikket ihlető topicban leírt egyetlen mondat, egy korábbi melóhelyen szerzett súlyos sebeimet tépte fel, amiatt érveltem kissé agresszíven. ;) Bocsika... ;)

"A megoldásra kell koncentrálni nem a problémára."

Lehet én vagyok balta arc, de szerintem semmi baj nincs azzal, amit leírtál. Teljesen biztos vagyok abban is, hogy vagyunk egy páran, akiknek volt olyan munkahelye, ahol valami nem így működött, és olyan is ami viszont igen. 

A fluktuáció ennek valóban be tud tenni, még tökéletes állapotában is, mert nem mindenki a helyi viszonyok miatt kényszerül váltani (hanem mondjuk valamilyen élethelyzet miatt). 

Where do you want to go today?
[nobody@salcay:~]$_

"Bazel is the Worst Build System, Except for All the Others"
Viccet félretéve: Mondj jobbat: Kellett már foglalkoznom make / automake / cmake / cmake + ninja alapú build rendszerekkel, de eddig egyedül a bazel az amivel a legkevesebb szopás van

Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

Senki nem mondta, hogy mindent egy nagy root-ból kell managelni: monorepo-n belül is kezelhetsz több Workspace-t.
De várj, segítek, mondom milyen bazel sz*pásokkal találkoztam én már:
- build időben generált file-ok leírása
- több workspace-ek közötti kereszthivatkozások (főleg ha van névütközés is valahol)
- genrule-ból hívott automake / cmake "gányolás" (jobb kifejezésem nincs rá), mert valami ökör fejlesztő nem akarta megírni a saját bazel rule-ját

És ezek után még mindig azt mondom, hogy inkább bazel, mint make / automake / cmake (+ninja), főleg ha monorepo-ról beszélünk, mert azokban aztán meg még inkább lehet gányolni, és olyan inkonzisztens build rendszert összerakni, hogy keresztbe állnak a szemeid amíg kidebugolod (been there, done that)

Az embert 2 éven át arra tanítják hogyan álljon meg a 2 lábán, és hogyan beszéljen... Aztán azt mondják neki: -"Ülj le és kuss legyen!"..

Kellhet egyedi szoftvereket telepíteni, szolgáltatásokat állítgatni-indítgatni, hálózatot izélgetni, stb.

Change Management ebben az esetben hogy működik nálatok?

IT szakemberek lap/desktopjara change managementet implementalni szerintem barki max.egszer probal meg. Meg sose lattam olyat, h a gyakorlatban is mukodott volna. Nalunk fel eve ujra eszebe jutott valakinek, h ho vegevel bizony vevezetne. Gondolom eppen letudott egy MS certified iskolazast. Kuldtem egy listat a csapatom altal hasznalt egyedi programokrol (gyakorlatilag mind ingyenes + 1-2 licencelt db), kuldott a szomszed csapat fonoke is egyet. Kerdeztem is egy honappal kesobb, h akkor mi lesz? Azota se jott valasz...

Off: a statikusan linkelt binárisodban benne van az Oracle klienstől az libxml2-ig minden?

Nalunk is kb hasonlo a helyzet, inkabb az a mentalitas, hogy fogjuk meg es vigyuk egyutt. Van egy csapat, aki uzemelteti a kozos K8s clustert, de senki nem mondja, hogy muszaj hasznalni. A CI/CD cucc (Travis + Spinnaker) tud mashova is kodot kipakolni (akar a sajat szerveredre, cloudba, akarmi).

Nyilvan itt sincs kolbaszbol a kerites, de en inkabb azt erzem, hogy kozosen oldunk meg problemakat es nem egymast ekezzuk. A ceg nem magyar es nem is itthon dolgozom, de van magyar irodank :)

Amit leírtál azt egy nagyon komplex (és/vagy millió apró részből álló) rendszer teszi lehetővé aminek minden egyes kicsi darabjára van dedikált csapat. """"Könnyű"""" úgy tökéletesre összecsiszolni a rendszer minden apró részét hogy szinte kivétel nélkül minden saját házon belüli fejlesztés vagy ha nem az akkor olyan support van mögötte mintha az lenne. Ami a nálatok lévő dev/prod környezetet illeti az szintén egyedülálló a világon https://landing.google.com/sre/sre-book/chapters/production-environment 

Mindez persze nem csökkenti a munkakörnyezeted erényeit, meg persze, a hozzáállás nem pénz kérdése, csak éppen ilyen infrastruktúra (cégvezetés/ember/szoftver/gép/pénz együtt) nem éppen általános. Sajnos. Meg hát a cég ahol dolgozol ott a főtevékenység a szoftverfejlesztés (tehát a területhez kompetens vezetők aránya magasabb mint más cégeknél), ezzel szemben gyanítom a másik topickban sok történet nem swdev főtevékenységű cégnél esett meg.

Ez igy van. Amit leirt a cikk iroja, remekul tud mukodni egy szoftverfejleszto vagy informatikahoz szorosan kapcsolodo cegnel, de egy olyan helyen, ahol az IT alapvetoen "kiszolgaloszemelyzet", elso a gyartas es a kozepvezetok informatikai ismerete lenyegeben zero, ez teljesen elkepzelhetlen. Annak ellenere, hogy maguk az informatikai rendszerek nelkul a gyartas 5 masodperc utan megallna....

Itt sincs végtelen erőforrás, tehát itt is vannak olyan megoldandó problémák, hogy pl. egyen már kevesebb RAM-ot az a cucc, vagy (ami még fontosabb) legyen már kisebb a latency. A másik topik szerint ez sok helyen feszkót okoz, pedig független az infra méretétől. Kisebb infrához arányosan kisebb személyzet kell, de attól még működhetne jól egy közepes vagy kis cég is. Kis cégben rá kell jönni, hogy 1 db rendszergazda és 1..10 barkácsszerver helyett jobban megéri a felhő vagy másfajta kiszervezés, közepes cégben már el tudnak tartani 2-3 ilyen embert és akkor az ő felelősségi körüket jól el lehet határolni. Az meg, hogy nincs ujjal mutogatás, együtt dolgozunk, nem nevezzük szemétdombnak a másik oldalt, stb., az kultúra, szemlélet kérdése. Még ha van is pénzbeli vonzata, várhatóan pozitív a végső egyenleg. A tech stack nagyrésze olyan, ami valamilyen formában bárkinek elérhető (én úgy kezdtem, hogy még sose hallottam CI/CD-ről és konténerekről előtte, aztán az utóbbi 5 évben nagy divat lett, és csomó nyílt megoldás van rá), vagy csak a nagy méret és a szükség szülte (tehát másnak nincs rá szüksége).