{"id":36721,"date":"2019-10-31T22:13:20","date_gmt":"2019-10-31T19:13:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-dark-razvertyvaet-kod-za-50-ms\/"},"modified":"2019-10-31T22:13:20","modified_gmt":"2019-10-31T19:13:20","slug":"kak-dark-razvertyvaet-kod-za-50-ms","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-dark-razvertyvaet-kod-za-50-ms","title":{"rendered":"Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt\" src=\"\/wp-content\/uploads\/2019\/08\/c159a36eb52bf488f3a70ea511690366.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Min\u00e9l gyorsabb a fejleszt\u00e9si folyamat, ann\u00e1l gyorsabban fejl\u0151dik a technol\u00f3giai v\u00e1llalat.<\/p>\n<p><\/p>\n<p>Sajnos a modern alkalmaz\u00e1sok ellen\u00fcnk dolgoznak \u2014 rendszereinknek val\u00f3s id\u0151ben kell friss\u00fclni\u00fck, mik\u00f6zben senkinek sem zavarhatj\u00e1k meg az \u00fczletmenetet, \u00e9s nem vezethetnek le\u00e1ll\u00e1sokhoz. Az ilyen rendszerekben val\u00f3 telep\u00edt\u00e9s bonyolult feladatt\u00e1 v\u00e1lik, \u00e9s m\u00e9g a kis csapatok sz\u00e1m\u00e1ra is \u00f6sszetett folyamatos sz\u00e1ll\u00edt\u00e1si csatorn\u00e1kat ig\u00e9nyel.<\/p>\n<p><\/p>\n<p>Ezek a csatorn\u00e1k \u00e1ltal\u00e1ban sz\u0171k alkalmaz\u00e1s\u00faak, lassan m\u0171k\u00f6dnek \u00e9s megb\u00edzhatatlanok. A fejleszt\u0151knek el\u0151sz\u00f6r manu\u00e1lisan kell azokat l\u00e9trehozniuk, majd kezelni\u00fck \u0151ket, ez\u00e9rt a c\u00e9gek gyakran eg\u00e9sz DevOps csapatokat alkalmaznak erre.<\/p>\n<p><\/p>\n<p>A csatorn\u00e1k sebess\u00e9ge hat\u00e1rozza meg a fejleszt\u00e9s sebess\u00e9g\u00e9t. A legjobb csapatokn\u00e1l a telep\u00edt\u00e9si folyamat 5\u201310 percet vesz ig\u00e9nybe, de \u00e1ltal\u00e1ban sokkal tov\u00e1bb tart, \u00e9s egy telep\u00edt\u00e9shez t\u00f6bb \u00f3r\u00e1ra van sz\u00fcks\u00e9g.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>A Darkn\u00e1l ez 50 ms-ba telik. <em>\u00d6tven. Millisekundum.<\/em>. A Dark egy <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/darklang\/the-design-of-dark-59f5d38e52d2\">komplex megold\u00e1s programoz\u00e1si nyelvvel, szerkeszt\u0151vel \u00e9s infrastrukt\u00far\u00e1val,<\/a><\/noindex>amelyet kifejezetten a folyamatos sz\u00e1ll\u00edt\u00e1sra terveztek, \u00e9s a Dark minden aspektusa, bele\u00e9rtve mag\u00e1t a nyelvet, a biztons\u00e1gos, azonnali telep\u00edt\u00e9s \u00e9rdek\u00e9ben lett kialak\u00edtva.<\/p>\n<p><\/p>\n<h3 id=\"pochemu-konveyery-nepreryvnoy-postavki-takie-medlennye\">Mi\u00e9rt olyan lass\u00faak a folyamatos sz\u00e1ll\u00edt\u00e1si csatorn\u00e1k?<\/h3>\n<p><\/p>\n<p>Tegy\u00fck fel, hogy van egy Python webalkalmaz\u00e1sunk, \u00e9s m\u00e1r l\u00e9trehoztunk egy csod\u00e1latos \u00e9s modern folyamatos sz\u00e1ll\u00edt\u00e1si csatorn\u00e1t. A fejleszt\u0151, aki minden nap ezzel a projekttel foglalkozik, valahogy \u00edgy l\u00e1tja egy apr\u00f3 v\u00e1ltoztat\u00e1s telep\u00edt\u00e9s\u00e9t:<\/p>\n<p><\/p>\n<h3 id=\"vnesenie-izmeneniy\">V\u00e1ltoztat\u00e1sok v\u00e9grehajt\u00e1sa.<\/h3>\n<p><\/p>\n<ul>\n<li>\u00daj \u00e1g l\u00e9trehoz\u00e1sa a gitben.<\/li>\n<li>V\u00e1ltoztat\u00e1sok v\u00e9grehajt\u00e1sa a funkci\u00f3kapcsol\u00f3 m\u00f6g\u00f6tt.<\/li>\n<li>Modul\u00e1ris tesztel\u00e9s a v\u00e1ltoztat\u00e1sok ellen\u0151rz\u00e9s\u00e9re a funkci\u00f3kapcsol\u00f3val \u00e9s an\u00e9lk\u00fcl.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"pul-rekvest\">Pull k\u00e9r\u00e9s.<\/h3>\n<p><\/p>\n<ul>\n<li>A v\u00e1ltoztat\u00e1sok elk\u00f6telez\u00e9se.<\/li>\n<li>A v\u00e1ltoztat\u00e1sok elk\u00fcld\u00e9se a t\u00e1voli repository-ba a githubon.<\/li>\n<li>Pull k\u00e9r\u00e9s.<\/li>\n<li>A CI build automatikusan, a h\u00e1tt\u00e9rben t\u00f6rt\u00e9nik.<\/li>\n<li>K\u00f3dellen\u0151rz\u00e9s.<\/li>\n<li>M\u00e9g n\u00e9h\u00e1ny ellen\u0151rz\u00e9s, ha sz\u00fcks\u00e9ges.<\/li>\n<li>A v\u00e1ltoztat\u00e1sok egyes\u00edt\u00e9se a git master\u00e9vel.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"ci-vypolnyaetsya-na-mastere\">A CI a masteren fut.<\/h3>\n<p><\/p>\n<ul>\n<li>Frontend f\u00fcgg\u0151s\u00e9gek telep\u00edt\u00e9se npm-en kereszt\u00fcl.<\/li>\n<li>HTML+CSS+JS er\u0151forr\u00e1sok \u00f6ssze\u00e1ll\u00edt\u00e1sa \u00e9s optimaliz\u00e1l\u00e1sa.<\/li>\n<li>Modul\u00e1ris \u00e9s funkcion\u00e1lis tesztek futtat\u00e1sa a frontendben.<\/li>\n<li>Python f\u00fcgg\u0151s\u00e9gek telep\u00edt\u00e9se a PyPI-b\u00f3l.<\/li>\n<li>Modul\u00e1ris \u00e9s funkcion\u00e1lis tesztek futtat\u00e1sa a backendben.<\/li>\n<li>Integr\u00e1ci\u00f3s tesztel\u00e9s mindk\u00e9t v\u00e9g\u00e9n.<\/li>\n<li>Frontend er\u0151forr\u00e1sok k\u00fcld\u00e9se a CDN-re.<\/li>\n<li>Kont\u00e9ner l\u00e9trehoz\u00e1sa a Python programhoz.<\/li>\n<li>A kont\u00e9ner regisztr\u00e1l\u00e1sa<\/li>\n<li>A Kubernetes-manifeszt friss\u00edt\u00e9se<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zamena-starogo-koda-novym\">A r\u00e9gi k\u00f3d lecser\u00e9l\u00e9se \u00fajra<\/h3>\n<p><\/p>\n<ul>\n<li>A Kubernetes t\u00f6bb p\u00e9ld\u00e1nyt ind\u00edt el az \u00faj kont\u00e9nerb\u0151l<\/li>\n<li>A Kubernetes v\u00e1rakozik, hogy a p\u00e9ld\u00e1nyok m\u0171k\u00f6d\u0151k\u00e9pesek legyenek<\/li>\n<li>A Kubernetes p\u00e9ld\u00e1nyokat ad hozz\u00e1 a HTTP terhel\u00e9seloszt\u00f3hoz<\/li>\n<li>A Kubernetes v\u00e1rakozik, am\u00edg a r\u00e9gi p\u00e9ld\u00e1nyok haszn\u00e1latb\u00f3l nem ker\u00fclnek ki<\/li>\n<li>A Kubernetes le\u00e1ll\u00edtja a r\u00e9gi p\u00e9ld\u00e1nyokat<\/li>\n<li>A Kubernetes megism\u00e9tli ezeket a m\u0171veleteket, am\u00edg az \u00faj p\u00e9ld\u00e1nyok teljesen nem v\u00e1ltj\u00e1k le a r\u00e9giakat<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"vklyuchenie-novogo-pereklyuchatelya-funkcii\">Az \u00faj funkci\u00f3kapcsol\u00f3 aktiv\u00e1l\u00e1sa<\/h3>\n<p><\/p>\n<ul>\n<li>Az \u00faj k\u00f3dot csak \u00f6nmag\u00e1ra aktiv\u00e1lj\u00e1k, hogy biztos\u00edts\u00e1k, minden rendben van-e<\/li>\n<li>Az \u00faj k\u00f3d 10% -\u00e1nak aktiv\u00e1l\u00e1sa, m\u0171k\u00f6d\u00e9si \u00e9s \u00fczleti metrik\u00e1k nyomon k\u00f6vet\u00e9se<\/li>\n<li>Az \u00faj k\u00f3d 50% -\u00e1nak aktiv\u00e1l\u00e1sa, m\u0171k\u00f6d\u00e9si \u00e9s \u00fczleti metrik\u00e1k nyomon k\u00f6vet\u00e9se<\/li>\n<li>Az \u00faj k\u00f3d 100% -\u00e1nak aktiv\u00e1l\u00e1sa, m\u0171k\u00f6d\u00e9si \u00e9s \u00fczleti metrik\u00e1k nyomon k\u00f6vet\u00e9se<\/li>\n<li>V\u00e9g\u00fcl az eg\u00e9sz folyamatot megism\u00e9tlik, hogy elt\u00e1vol\u00edts\u00e1k a r\u00e9gi k\u00f3dot \u00e9s a kapcsol\u00f3t<\/li>\n<\/ul>\n<p><\/p>\n<p>A folyamat az eszk\u00f6z\u00f6kt\u0151l, a nyelvt\u0151l \u00e9s a szolg\u00e1ltat\u00f3-orient\u00e1lt architekt\u00far\u00e1kt\u00f3l f\u00fcgg, de \u00e1tfog\u00f3an \u00edgy n\u00e9z ki. Nem eml\u00edtettem az adatb\u00e1zis-migr\u00e1ci\u00f3val t\u00f6rt\u00e9n\u0151 telep\u00edt\u00e9seket, mivel ezek alapos tervez\u00e9st ig\u00e9nyelnek, de lentebb elmondom, hogyan kezeli ezt a Dark.<\/p>\n<p><\/p>\n<p>Itt sok \u00f6sszetev\u0151 van, \u00e9s sok k\u00f6z\u00fcl\u00fck egyszer\u0171en lelass\u00edthat, meghib\u00e1sodhat, id\u0151szakos versenyt okozhat vagy \u00f6sszeoml\u00e1shoz vezethet a m\u0171k\u00f6d\u00e9si rendszerben.<\/p>\n<p><\/p>\n<p>R\u00e1ad\u00e1sul ezek a pipeline-ok szinte mindig speci\u00e1lis esetekre k\u00e9sz\u00fclnek, \u00edgy neh\u00e9z benn\u00fck megb\u00edzni. Sokaknak vannak napjaik, amikor a k\u00f3dot nem lehet telep\u00edteni, mert a Dockerfile probl\u00e9m\u00e1s, az egyik a sok szolg\u00e1ltat\u00e1s k\u00f6z\u00fcl le\u00e1llt, vagy a sz\u00fcks\u00e9ges szakember szabads\u00e1gon van.<\/p>\n<p><\/p>\n<p>R\u00e1ad\u00e1sul sok ezek k\u00f6z\u00fcl a l\u00e9p\u00e9sek k\u00f6z\u00fcl val\u00f3j\u00e1ban semmi hasznosat nem tesznek. Kor\u00e1bban sz\u00fcks\u00e9gesek voltak, amikor a k\u00f3dot azonnal a felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra telep\u00edtett\u00fck, de most m\u00e1r vannak kapcsol\u00f3k az \u00faj k\u00f3dhoz, \u00e9s ezek a folyamatok elk\u00fcl\u00f6n\u00fcltek. A v\u00e9geredm\u00e9ny az, hogy a k\u00f3d telep\u00edt\u00e9se (ahol a r\u00e9gi hely\u00e9be \u00faj l\u00e9p) most m\u00e1r egyszer\u0171en egy felesleges kock\u00e1zatt\u00e1 v\u00e1lt.<\/p>\n<p><\/p>\n<p>Term\u00e9szetesen ez egy nagyon \u00e1tgondolt pipeline. A csapat, amelyik l\u00e9trehozta, nem sajn\u00e1lta az id\u0151t \u00e9s a p\u00e9nzt a gyors telep\u00edt\u00e9shez. A telep\u00edt\u00e9si pipeline-ok \u00e1ltal\u00e1ban sokkal lassabbak \u00e9s megb\u00edzhatatlanabbak.<\/p>\n<p><\/p>\n<h3 id=\"realizaciya-nepreryvnoy-postavki-v-dark\">A folyamatos sz\u00e1ll\u00edt\u00e1s megval\u00f3s\u00edt\u00e1sa a Darkban<\/h3>\n<p><\/p>\n<p>A megszak\u00edt\u00e1s n\u00e9lk\u00fcli ell\u00e1t\u00e1s annyira fontos a Dark sz\u00e1m\u00e1ra, hogy az elej\u00e9t\u0151l fogva kevesebb mint m\u00e1sodpercen bel\u00fcli id\u0151t c\u00e9loztunk meg. Minden l\u00e9p\u00e9st \u00e1tn\u00e9zt\u00fcnk a cs\u0151vezet\u00e9kben, hogy elt\u00e1vol\u00edtsuk a felesleges r\u00e9szeket, \u00e9s a marad\u00e9kot optimaliz\u00e1ljuk. \u00cdgy t\u00e1vol\u00edtottuk el a l\u00e9p\u00e9seket.<\/p>\n<p><\/p>\n<blockquote><p>Jessie Frazelle (<noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/jessfraz\">Jessie Frazelle<\/a><\/noindex>) \u00faj sz\u00f3t tal\u00e1lt ki, a deployless-t (telep\u00edt\u00e9s n\u00e9lk\u00fcli) a Sikertelen Szoftverfejleszt\u00e9si Konferenci\u00e1n Reykjavikban.<\/p><\/blockquote>\n<p>Azonnal d\u00f6nt\u00f6tt\u00fcnk arr\u00f3l, hogy a Dark a \u201edeployless\u201d (k\u00f6sz\u00f6nj\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/jessfraz\">Jessie Frazelle<\/a><\/noindex> a neologizmus\u00e9rt). A deployless azt jelenti, hogy b\u00e1rmilyen k\u00f3d azonnal telep\u00fcl \u00e9s k\u00e9sz a haszn\u00e1latra a produkci\u00f3s k\u00f6rnyezetben. Term\u00e9szetesen nem hagyjuk figyelmen k\u00edv\u00fcl a hib\u00e1s vagy hi\u00e1nyos k\u00f3dot (a biztons\u00e1gi elveket al\u00e1bb r\u00e9szletezem).<\/p>\n<p><\/p>\n<p>A Dark bemutat\u00f3j\u00e1n gyakran k\u00e9rdezt\u00e9k, hogyan siker\u00fclt ennyire felgyors\u00edtani a telep\u00edt\u00e9st. Furcsa k\u00e9rd\u00e9s. Val\u00f3sz\u00edn\u0171leg az emberek azt hiszik, hogy kital\u00e1ltunk egy szupertechnol\u00f3gi\u00e1t, amely \u00f6sszehasonl\u00edtja a k\u00f3dot, kompakt\u00e1lja, kont\u00e9nerbe csomagolja, virtu\u00e1lis g\u00e9pet ind\u00edt, hidegen ind\u00edtja a kont\u00e9nert, \u00e9s mindezt 50 ms alatt v\u00e9gzi. Ez val\u00f3sz\u00edn\u0171leg nem lehets\u00e9ges. De egy speci\u00e1lis telep\u00edt\u0151motort hoztunk l\u00e9tre, amelynek minderre nincs sz\u00fcks\u00e9ge.<\/p>\n<p><\/p>\n<p>A Dark az \u00e9rtelmez\u0151ket a felh\u0151ben ind\u00edtja. Tegy\u00fck fel, hogy k\u00f3dot \u00edrsz egy f\u00fcggv\u00e9nyben vagy HTTP-esem\u00e9nykezel\u0151ben. A k\u00fcl\u00f6nbs\u00e9get (diff) egy absztrakt szintaktikai f\u00e1ba (AST), amelyet a szerkeszt\u0151nk \u00e9s a szervereink bels\u0151leg haszn\u00e1lnak, k\u00fcldj\u00fck a szervereinkre, majd ezt a k\u00f3dot ind\u00edtjuk el, amikor k\u00e9rd\u00e9s \u00e9rkezik. \u00cdgy a telep\u00edt\u00e9s eg\u00e9szen egyszer\u0171en egy adatb\u00e1zisbejegyz\u00e9snek t\u0171nik - azonnali \u00e9s elemi. A telep\u00edt\u00e9s olyan gyors, mert mag\u00e1ban foglalja a lehet\u0151 legkevesebbet.<\/p>\n<p><\/p>\n<p>A j\u00f6v\u0151ben a Darkb\u00f3l egy infrastrukt\u00fara-kompil\u00e1tort tervez\u00fcnk l\u00e9trehozni, amely l\u00e9trehozza \u00e9s elind\u00edtja az ide\u00e1lis infrastrukt\u00far\u00e1t a nagy teljes\u00edtm\u00e9ny \u00e9s megb\u00edzhat\u00f3s\u00e1g \u00e9rdek\u00e9ben. Az azonnali telep\u00edt\u00e9s term\u00e9szetesen nem t\u0171nik el.<\/p>\n<p><\/p>\n<h2 id=\"bezopasnoe-razvertyvanie\">Biztons\u00e1gos telep\u00edt\u00e9s<\/h2>\n<p><\/p>\n<h3 id=\"strukturirovannyy-redaktor\">Szerkesztett k\u00f6rnyezet<\/h3>\n<p><\/p>\n<p>A k\u00f3d a Darkban a Dark sz\u00f6vegszerkeszt\u0151ben \u00edr\u00f3dik. A struktur\u00e1lt szerkeszt\u0151 nem enged\u00e9lyez szintaktikai hib\u00e1kat. A Darkban gyakorlatilag nincs szintaxis-elemz\u0151. Am\u00edg be\u00edrod a sz\u00f6veget, k\u00f6zvetlen\u00fcl az absztrakt szintaktikai f\u00e1val (AST) dolgozunk, mint <noindex><a rel=\"nofollow\" href=\"http:\/\/danmidwood.com\/content\/2014\/11\/21\/animated-paredit.html\">Paredit<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/ravichugh.github.io\/sketch-n-sketch\/\">Sketch-n-Sketch<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/gregoor.github.io\/tofu\/\">Tofu<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/notes\/kent-beck\/prune-a-code-editor-that-is-not-a-text-editor\/1012061842160013\/\">Prune<\/a><\/noindex> \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/mps\/\">MPS<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>B\u00e1rmely befejezetlen k\u00f3dnak a Darkban megengedett v\u00e9grehajt\u00e1si szemantik\u00e1ja van, k\u00f6r\u00fclbel\u00fcl \u00fagy, mint a <noindex><a rel=\"nofollow\" href=\"https:\/\/hazel.org\/\">typed holes a Hazelben<\/a><\/noindex>. P\u00e9ld\u00e1ul, ha megv\u00e1ltoztatja a f\u00fcggv\u00e9nyh\u00edv\u00e1st, t\u00e1roljuk a r\u00e9gi f\u00fcggv\u00e9nyt, am\u00edg az \u00faj haszn\u00e1lhat\u00f3v\u00e1 nem v\u00e1lik.<\/p>\n<p><\/p>\n<p>Minden programnak a Darkban megvan a saj\u00e1t jelent\u00e9se, ez\u00e9rt a befejezetlen k\u00f3d nem zavarja meg a befejezett m\u0171k\u00f6d\u00e9s\u00e9t.<\/p>\n<p><\/p>\n<h3 id=\"rezhimy-redaktirovaniya\">Szerkeszt\u00e9si m\u00f3dok<\/h3>\n<p><\/p>\n<p>A Darkban k\u00e9t esetben \u00edr k\u00f3dot. Az els\u0151: \u00faj k\u00f3dot \u00edr, \u00e9s egyed\u00fcli felhaszn\u00e1l\u00f3. P\u00e9ld\u00e1ul, ha a REPL-ben van, \u00e9s m\u00e1s felhaszn\u00e1l\u00f3k sosem f\u00e9rhetnek hozz\u00e1, vagy ez egy \u00faj HTTP \u00fatvonal, amelyre sehol nem hivatkozik. Itt \u00f3vint\u00e9zked\u00e9sek n\u00e9lk\u00fcl lehet dolgozni, \u00e9s \u00f6n most valahogy \u00edgy dolgozik a fejleszt\u0151i k\u00f6rnyezetben.<\/p>\n<p><\/p>\n<p>A m\u00e1sodik helyzet: a k\u00f3dot m\u00e1r haszn\u00e1lj\u00e1k. Ha a k\u00f3don forgalom megy kereszt\u00fcl (f\u00fcggv\u00e9nyek, esem\u00e9nykezel\u0151k, adatb\u00e1zisok stb.), \u00f3vatosnak kell lenni. Ehhez blokkoljuk az \u00f6sszes haszn\u00e1lt k\u00f3dot, \u00e9s k\u00f6vetelj\u00fck, hogy struktur\u00e1ltabb eszk\u00f6z\u00f6ket haszn\u00e1ljon a szerkeszt\u00e9shez. Az struktur\u00e1lt eszk\u00f6z\u00f6kr\u0151l lentebbi r\u00e9szben besz\u00e9lek: f\u00fcggv\u00e9nykapcsol\u00f3k HTTP \u00e9s esem\u00e9nykezel\u0151khez, er\u0151teljes migr\u00e1ci\u00f3s platformok adatb\u00e1zisokhoz \u00e9s egy \u00faj verzi\u00f3kezel\u00e9si m\u00f3dszer a f\u00fcggv\u00e9nyek \u00e9s t\u00edpusok sz\u00e1m\u00e1ra.<\/p>\n<p><\/p>\n<h3 id=\"pereklyuchateli-funkciy\">F\u00fcggv\u00e9nykapcsol\u00f3k<\/h3>\n<p><\/p>\n<p>Az egyik m\u00f3dja <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/darklang\/the-design-of-dark-59f5d38e52d2\">a felesleges bonyodalom elt\u00e1vol\u00edt\u00e1sa<\/a><\/noindex> a Darkban az, hogy t\u00f6bb probl\u00e9m\u00e1t egy megold\u00e1ssal orvosol. A f\u00fcggv\u00e9nykapcsol\u00f3k sok k\u00fcl\u00f6nb\u00f6z\u0151 feladatot l\u00e1tnak el: a helyi fejleszt\u0151i k\u00f6rnyezet helyettes\u00edt\u00e9se, a git \u00e1gak, a k\u00f3d telep\u00edt\u00e9se \u00e9s term\u00e9szetesen a hagyom\u00e1nyos, lass\u00fa \u00e9s ellen\u0151rz\u00f6tt \u00faj k\u00f3d kiad\u00e1sa.<\/p>\n<p><\/p>\n<p>A f\u00fcggv\u00e9nykapcsol\u00f3 l\u00e9trehoz\u00e1sa \u00e9s telep\u00edt\u00e9se a szerkeszt\u0151nkben egy l\u00e9p\u00e9sben t\u00f6rt\u00e9nik. \u00dcres teret hoz l\u00e9tre az \u00faj k\u00f3d sz\u00e1m\u00e1ra, \u00e9s hozz\u00e1f\u00e9r\u00e9si vez\u00e9rl\u0151elemeket biztos\u00edt a r\u00e9gi \u00e9s \u00faj k\u00f3dhoz, valamint gombokat \u00e9s parancsokat a fokozatos \u00e1t\u00e1ll\u00e1shoz az \u00faj k\u00f3dra vagy annak kiz\u00e1r\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>A f\u00fcggv\u00e9nykapcsol\u00f3k be\u00e9p\u00edtve vannak a Dark nyelvbe, \u00e9s m\u00e9g a befejezetlen kapcsol\u00f3k is v\u00e9gzik a feladatukat \u2014 ha a felt\u00e9tel a kapcsol\u00f3ban nem teljes\u00fcl, a r\u00e9gi, blokkolt k\u00f3d fog futni.<\/p>\n<p><\/p>\n<h3 id=\"sreda-razrabotki\">Fejleszt\u0151i k\u00f6rnyezet<\/h3>\n<p><\/p>\n<p>A funkci\u00f3v\u00e1lt\u00f3k helyettes\u00edtik a helyi fejleszt\u00e9si k\u00f6rnyezetet. Ma a csapatoknak neh\u00e9z nyomon k\u00f6vetni\u00fck, hogy mindenki azonos verzi\u00f3j\u00fa eszk\u00f6z\u00f6ket \u00e9s k\u00f6nyvt\u00e1rakat haszn\u00e1ljon (k\u00f3dform\u00e1z\u00f3 eszk\u00f6z\u00f6k, linterek, csomagkezel\u0151k, ford\u00edt\u00f3k, preprocesszorok, tesztel\u0151eszk\u00f6z\u00f6k stb.). A Dark-ban nincs sz\u00fcks\u00e9g helyben telep\u00edtett f\u00fcgg\u0151s\u00e9gek kezel\u00e9s\u00e9re, helyi Docker telep\u00edt\u00e9sre vagy m\u00e1s l\u00e9p\u00e9sekre, hogy b\u00e1rmilyen szinten hasonl\u00f3s\u00e1got biztos\u00edtsanak a fejleszt\u00e9si \u00e9s a termel\u00e9si k\u00f6rnyezet k\u00f6z\u00f6tt. <noindex><a rel=\"nofollow\" href=\"https:\/\/thenewstack.io\/honeycombs-charity-majors-go-ahead-test-in-production\/\">Tekintettel arra, hogy az ilyen jelleg\u0171 egyenl\u0151s\u00e9g \u00edgy is lehetetlen<\/a><\/noindex>, m\u00e9g csak \u00fagy sem tetteti mag\u00e1t, hogy t\u00f6reksz\u00fcnk r\u00e1.<\/p>\n<p><\/p>\n<p>Ahelyett, hogy egy kl\u00f3nozott lok\u00e1lis k\u00f6rnyezetet hozn\u00e1nk l\u00e9tre, a Dark funkci\u00f3v\u00e1lt\u00f3i egy \u00faj homokoz\u00f3t hoznak l\u00e9tre a termel\u00e9sben, amely helyettes\u00edti a fejleszt\u00e9si k\u00f6rnyezetet. A j\u00f6v\u0151ben azt is tervezz\u00fck, hogy homokoz\u00f3kat hozzunk l\u00e9tre az alkalmaz\u00e1s m\u00e1s r\u00e9szeihez (p\u00e9ld\u00e1ul az adatb\u00e1zis azonnali kl\u00f3njaihoz), b\u00e1r ez jelenleg nem t\u0171nik olyan fontosnak.<\/p>\n<p><\/p>\n<h3 id=\"vetki-i-razvertyvaniya\">\u00c1gak \u00e9s telep\u00edt\u00e9sek<\/h3>\n<p><\/p>\n<p>Jelenleg sz\u00e1mos m\u00f3dja van az \u00faj k\u00f3d bevezet\u00e9s\u00e9nek a rendszerekbe: git \u00e1gak, telep\u00edt\u00e9si szakaszok \u00e9s funkci\u00f3v\u00e1lt\u00f3k. Ezek egy probl\u00e9m\u00e1t oldanak meg a munkafolyamat k\u00fcl\u00f6nb\u00f6z\u0151 r\u00e9szein: a git a telep\u00edt\u00e9s el\u0151tti szakaszokban, a telep\u00edt\u00e9s az \u00faj k\u00f3dra val\u00f3 v\u00e1lt\u00e1s pillanat\u00e1ban, m\u00edg a funkci\u00f3v\u00e1lt\u00f3k a \u00faj k\u00f3d kontroll\u00e1lt kiad\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>A leghat\u00e9konyabb m\u00f3dszer a funkci\u00f3v\u00e1lt\u00f3k (amelyek a legk\u00f6nnyebben \u00e9rthet\u0151k \u00e9s haszn\u00e1lhat\u00f3k). Ezekkel teljesen el lehet hagyni a m\u00e1sik kett\u0151 m\u00f3dszert. K\u00fcl\u00f6n\u00f6sen hasznos elhagyni a telep\u00edt\u00e9st - ha m\u00e1r \u00fagyis funkci\u00f3v\u00e1lt\u00f3kat haszn\u00e1lunk a k\u00f3d aktiv\u00e1l\u00e1s\u00e1ra, akkor a l\u00e9p\u00e9s a szerverek \u00faj k\u00f3dra v\u00e1lt\u00e1s\u00e1ra csak felesleges kock\u00e1zatokat teremt.<\/p>\n<p><\/p>\n<p>A git haszn\u00e1lata neh\u00e9zkes, k\u00fcl\u00f6n\u00f6sen a kezd\u0151k sz\u00e1m\u00e1ra, \u00e9s ez nagym\u00e9rt\u00e9kben korl\u00e1tozza, de cser\u00e9be vannak k\u00e9nyelmes \u00e1gai. Sok git hib\u00e1t sim\u00edtottunk el. A Dark val\u00f3s id\u0151ben szerkeszthet\u0151 \u00e9s lehet\u0151v\u00e9 teszi a Google Dokumentumok st\u00edlus\u00fa egy\u00fcttm\u0171k\u00f6d\u00e9st, hogy ne kelljen k\u00f3dot k\u00fcldeni, \u00e9s ritk\u00e1bban kelljen reb\u00e1zis egy\u00fcttm\u0171k\u00f6dni \u00e9s egyes\u00edteni.<\/p>\n<p><\/p>\n<p>A funkci\u00f3k \u00e1tkapcsol\u00f3i a biztons\u00e1gos telep\u00edt\u00e9s alapj\u00e1t k\u00e9pezik. Az azonnali telep\u00edt\u00e9sekkel egy\u00fctt lehet\u0151v\u00e9 teszik a koncepci\u00f3k gyors tesztel\u00e9s\u00e9t kis szegmensekben, alacsony kock\u00e1zattal, ahelyett, hogy egy nagyobb v\u00e1ltoztat\u00e1st alkalmazn\u00e1nk, amely \u00f6sszeomlaszthatja a rendszert.<\/p>\n<p><\/p>\n<h3 id=\"versionirovanie\">Verzi\u00f3kezel\u00e9s<\/h3>\n<p><\/p>\n<p>A funkci\u00f3k \u00e9s t\u00edpusok m\u00f3dos\u00edt\u00e1s\u00e1hoz verzi\u00f3kezel\u00e9st alkalmazunk. Ha m\u00f3dos\u00edtani k\u00edv\u00e1n egy funkci\u00f3t, a Dark l\u00e9trehoz egy \u00faj verzi\u00f3t az adott funkci\u00f3b\u00f3l. Ezt a verzi\u00f3t k\u00e9s\u0151bb h\u00edvhatja a HTTP vagy esem\u00e9nykezel\u0151 \u00e1tkapcsol\u00f3j\u00e1val. (Ha ez a funkci\u00f3 m\u00e9lyen van a h\u00edv\u00e1sok gr\u00e1fj\u00e1ban, minden egyes funkci\u00f3 \u00faj verzi\u00f3t kap. Tal\u00e1n t\u00falz\u00e1snak t\u0171nik, de a funkci\u00f3k nincsenek zavarban, ha nem haszn\u00e1lja \u0151ket, \u00edgy ezt szinte \u00e9szre sem veszi.)<\/p>\n<p><\/p>\n<p>Ugyanezek miatt verzion\u00e1ljuk a t\u00edpusokat is. A t\u00edpusainkr\u00f3l r\u00e9szletesen besz\u00e9lt\u00fcnk. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/darklang\/real-problems-with-functional-languages-efe668c5264a\">az el\u0151z\u0151 bejegyz\u00e9sben<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A funkci\u00f3k \u00e9s t\u00edpusok verzi\u00f3kezel\u00e9s\u00e9nek k\u00f6sz\u00f6nhet\u0151en fokozatosan m\u00f3dos\u00edthatja az alkalmaz\u00e1st. Ellen\u0151rizheti, hogy minden egyes kezel\u0151 \u00faj verzi\u00f3val m\u0171k\u00f6dik, an\u00e9lk\u00fcl, hogy az \u00f6sszes v\u00e1ltoztat\u00e1st egyszerre kellene v\u00e9grehajtani az alkalmaz\u00e1sokban (de rendelkez\u00e9s\u00fcnkre \u00e1llnak eszk\u00f6z\u00f6k, hogy ezt gyorsan meg tudja tenni, ha \u00fagy k\u00edv\u00e1nja).<\/p>\n<p><\/p>\n<p>Ez l\u00e9nyegesen biztons\u00e1gosabb, mint az \u00f6sszes egyidej\u0171 telep\u00edt\u00e9se, ahogy az most t\u00f6rt\u00e9nik.<\/p>\n<p><\/p>\n<h3 id=\"novye-versii-paketov-i-standartnaya-biblioteka\">\u00daj verzi\u00f3j\u00fa csomagok \u00e9s a standard k\u00f6nyvt\u00e1r<\/h3>\n<p><\/p>\n<p>Amikor friss\u00edt egy csomagot a Dark-ban, nem helyettes\u00edtj\u00fck azonnal az \u00f6sszes funkci\u00f3 vagy t\u00edpus haszn\u00e1lat\u00e1t a teljes k\u00f3dalapban. Ez nem biztons\u00e1gos. A k\u00f3d tov\u00e1bbra is ugyanazt a verzi\u00f3t haszn\u00e1lja, amelyet haszn\u00e1lt, \u00e9s \u00f6n \u00faj verzi\u00f3ra friss\u00edti az egyes esetek funkci\u00f3it \u00e9s t\u00edpusait \u00e1tkapcsol\u00f3kkal.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/rh\/t3\/4w\/rht34wyibolrgracbz88tnqqhg0.png\"><img decoding=\"async\" alt=\"Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt\" src=\"\/wp-content\/uploads\/2019\/08\/54fdb566b4bcbc10e06e51c47a3820f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>A Dark automatikus folyamat\u00e1nak r\u00e9szlet\u00e9t \u00e1br\u00e1zol\u00f3 k\u00e9perny\u0151k\u00e9p, amely k\u00e9t verzi\u00f3j\u00e1t mutatja a Dict::get funkci\u00f3nak. A Dict::get_v0 az Any t\u00edpust adta vissza (amelyt\u0151l eltekint\u00fcnk), m\u00edg a Dict::get_v1 az Option t\u00edpust adja vissza.<\/em><\/p>\n<p><\/p>\n<p>Gyakran \u00faj funkci\u00f3t biztos\u00edtunk a standard k\u00f6nyvt\u00e1rban \u00e9s kiz\u00e1rjuk a r\u00e9gi verzi\u00f3kat. A r\u00e9gi verzi\u00f3kat haszn\u00e1l\u00f3 felhaszn\u00e1l\u00f3k megtartj\u00e1k hozz\u00e1f\u00e9r\u00e9s\u00fcket, de az \u00faj felhaszn\u00e1l\u00f3k nem f\u00e9rhetnek hozz\u00e1juk. Olyan eszk\u00f6z\u00f6ket fogunk biztos\u00edtani, amelyek seg\u00edts\u00e9g\u00e9vel a felhaszn\u00e1l\u00f3kat egy l\u00e9p\u00e9sben \u00e1t tudjuk vinnik az \u00faj verzi\u00f3kra, szint\u00e9n a funkci\u00f3k \u00e1tkapcsol\u00f3ival.<\/p>\n<p><\/p>\n<p>A Dark egyed\u00fcl\u00e1ll\u00f3 lehet\u0151s\u00e9get k\u00edn\u00e1l: mivel v\u00e9grehajtjuk a munkak\u00f3dj\u00e1t, saj\u00e1t magunk tesztelhetj\u00fck az \u00faj verzi\u00f3kat, \u00f6sszehasonl\u00edtva az \u00faj \u00e9s r\u00e9gi lek\u00e9rdez\u00e9sek kimenet\u00e9t, hogy \u00e9rtes\u00edts\u00fck \u00d6nt a v\u00e1ltoz\u00e1sokr\u00f3l. Ennek eredm\u00e9nyek\u00e9nt a csomagok friss\u00edt\u00e9se, amely gyakran blind m\u00f3don t\u00f6rt\u00e9nik (vagy alapos tesztel\u00e9st ig\u00e9nyel a biztons\u00e1g \u00e9rdek\u00e9ben), l\u00e9nyegesen kisebb kock\u00e1zatokkal j\u00e1r, \u00e9s automatikusan v\u00e9grehajthat\u00f3.<\/p>\n<p><\/p>\n<h3 id=\"novye-versii-dark\">\u00daj Dark verzi\u00f3k<\/h3>\n<p><\/p>\n<p>A Python 2-r\u0151l Python 3-ra val\u00f3 \u00e1t\u00e1ll\u00e1s egy \u00e9vtizedig tartott, \u00e9s m\u00e9g mindig probl\u00e9m\u00e1kat okoz. Mivel a Dark-ot a folyamatos sz\u00e1ll\u00edt\u00e1s \u00e9rdek\u00e9ben hozzuk l\u00e9tre, figyelembe kell venn\u00fcnk ezeket a nyelvi v\u00e1ltoz\u00e1sokat.<\/p>\n<p><\/p>\n<p>Amikor kis v\u00e1ltoztat\u00e1sokat v\u00e9gz\u00fcnk a nyelvben, \u00faj Dark verzi\u00f3t k\u00e9sz\u00edt\u00fcnk. A r\u00e9gi k\u00f3d a r\u00e9gi Dark verzi\u00f3ban marad, m\u00edg az \u00faj k\u00f3d az \u00faj verzi\u00f3ban haszn\u00e1latos. \u00daj Dark verzi\u00f3ra val\u00f3 \u00e1t\u00e1ll\u00e1shoz lehet switch-eket vagy funkci\u00f3verzi\u00f3kat lehet haszn\u00e1lni.<\/p>\n<p><\/p>\n<p>Ez k\u00fcl\u00f6n\u00f6sen hasznos, figyelembe v\u00e9ve, hogy a Dark m\u00e9g nagyon \u00faj. Sok nyelvi vagy k\u00f6nyvt\u00e1ri v\u00e1ltoztat\u00e1s kudarcra futhat. A nyelv fokozatos verzi\u00f3z\u00e1sa lehet\u0151v\u00e9 teszi, hogy apr\u00f3 friss\u00edt\u00e9seket v\u00e9gezz\u00fcnk, \u00edgy nem kell sietn\u00fcnk, \u00e9s sok nyelvi d\u00f6nt\u00e9st halaszthatunk, am\u00edg t\u00f6bb felhaszn\u00e1l\u00f3nk nem lesz, ami nagyobb inform\u00e1ci\u00f3t jelent.<\/p>\n<p><\/p>\n<h3 id=\"migracii-baz-dannyh\">Adatb\u00e1zis-migr\u00e1ci\u00f3k<\/h3>\n<p><\/p>\n<p>Biztons\u00e1gos adatb\u00e1zis-migr\u00e1ci\u00f3hoz van <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brunton-spall.co.uk\/post\/2014\/05\/06\/database-migrations-done-right\/\">alapvet\u0151 k\u00e9plet<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ul>\n<li>A k\u00f3d \u00e1t\u00edr\u00e1sa, hogy t\u00e1mogassa az \u00faj \u00e9s r\u00e9gi form\u00e1tumokat<\/li>\n<li>Az \u00f6sszes adat \u00e1talak\u00edt\u00e1sa \u00faj form\u00e1tumban<\/li>\n<li>A r\u00e9gi adat-hozz\u00e1f\u00e9r\u00e9s elt\u00e1vol\u00edt\u00e1sa<\/li>\n<\/ul>\n<p><\/p>\n<p>Ennek eredm\u00e9nyek\u00e9nt az adatb\u00e1zis-migr\u00e1ci\u00f3 elh\u00faz\u00f3dik \u00e9s sok er\u0151forr\u00e1st ig\u00e9nyel. Elavult s\u00e9ma halmoz\u00f3dik fel, mert m\u00e9g a legegyszer\u0171bb feladatok, mint p\u00e9ld\u00e1ul egy t\u00e1bla vagy oszlop nev\u00e9nek jav\u00edt\u00e1sa, nem \u00e9rik meg a r\u00e1ford\u00edtott id\u0151t.<\/p>\n<p><\/p>\n<p>A Dark hat\u00e9kony adatb\u00e1zis-migr\u00e1ci\u00f3s platformmal rendelkezik, amely (rem\u00e9lj\u00fck) annyira leegyszer\u0171s\u00edti a folyamatot, hogy megszabadul a f\u00e9lelm\u00e9t\u0151l. A Dark \u00f6sszes adatt\u00e1rol\u00f3ja (kulcs-\u00e9rt\u00e9k p\u00e1r t\u00e1rol\u00f3k vagy tart\u00f3s hash t\u00e1bl\u00e1k) t\u00edpussal rendelkezik. Az adatt\u00e1rol\u00f3 \u00e1tvitel\u00e9hez egyszer\u0171en \u00faj t\u00edpust \u00e9s visszag\u00f6rget\u0151 \u00e9s vissza\u00e1ll\u00edt\u00f3 funkci\u00f3t rendel hozz\u00e1 az \u00e9rt\u00e9kek k\u00e9t t\u00edpus k\u00f6z\u00f6tti \u00e1talak\u00edt\u00e1s\u00e1hoz.<\/p>\n<p><\/p>\n<p>A Dark adatfolyamokhoz val\u00f3 hozz\u00e1f\u00e9r\u00e9s verzi\u00f3kezel\u00e9si v\u00e1ltoz\u00f3neveken kereszt\u00fcl t\u00f6rt\u00e9nik. P\u00e9ld\u00e1ul a Users adatfolyam els\u0151dlegesen Users-v0 n\u00e9ven fog szerepelni. Amikor \u00faj verzi\u00f3 j\u00f6n l\u00e9tre m\u00e1s t\u00edpusban, a n\u00e9v megv\u00e1ltozik Users-v1-re. Ha az adatokat Users-v0-n kereszt\u00fcl mentett\u00e9k el, \u00e9s hozz\u00e1juk Users-v1-en kereszt\u00fcl szeretne hozz\u00e1f\u00e9rni, t\u00f6rl\u00e9si funkci\u00f3 l\u00e9p \u00e9letbe. Ha az adatokat Users-v1-en kereszt\u00fcl mentett\u00e9k el, \u00e9s hozz\u00e1juk Users-v0-n kereszt\u00fcl szeretne hozz\u00e1f\u00e9rni, vissza\u00e1ll\u00edt\u00f3 funkci\u00f3 l\u00e9p \u00e9letbe.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ui\/sl\/wd\/uislwdrfrvact0d1ts5icnk-4ka.png\"><img decoding=\"async\" alt=\"Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt\" src=\"\/wp-content\/uploads\/2019\/08\/35743ba246f327ca9e8b71f0069a3800.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>Az adatb\u00e1zis-migr\u00e1ci\u00f3s k\u00e9perny\u0151 az \u00f6reg adatb\u00e1zis mez\u0151neveivel, a t\u00f6rl\u00e9si \u00e9s vissza\u00e1ll\u00edt\u00e1si kifejez\u00e9sekkel, valamint a migr\u00e1ci\u00f3 aktiv\u00e1l\u00e1s\u00e1nak utas\u00edt\u00e1saival rendelkezik.<\/em><\/p>\n<p><\/p>\n<p>Haszn\u00e1ljon funkci\u00f3kapcsol\u00f3kat az Users-v0 h\u00edv\u00e1sok Users-v1 verzi\u00f3ra ir\u00e1ny\u00edt\u00e1s\u00e1hoz. Ezt egy HTTP-kezeln\u00e9l egyszerre v\u00e9gezheti el a kock\u00e1zatok cs\u00f6kkent\u00e9se \u00e9rdek\u00e9ben, \u00e9s a kapcsol\u00f3k egyedi felhaszn\u00e1l\u00f3kra is m\u0171k\u00f6dnek, \u00edgy ellen\u0151rizheti, hogy minden a v\u00e1rtnak megfelel\u0151en m\u0171k\u00f6dik-e. Amikor m\u00e1r nem marad felhaszn\u00e1l\u00f3 az Users-v0 sz\u00e1m\u00e1ra, a Dark a h\u00e1tt\u00e9rben \u00e1talak\u00edtja a megmaradt adatokat r\u00e9gi form\u00e1tumb\u00f3l \u00fajra. Ezt m\u00e9g csak \u00e9szre sem veszi.<\/p>\n<p><\/p>\n<h3 id=\"testirovanie\">Tesztel\u00e9s<\/h3>\n<p><\/p>\n<p>A Dark egy <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/darklang\/real-problems-with-functional-languages-efe668c5264a\">statikus t\u00edpus\u00fa \u00e9s funkcion\u00e1lis programoz\u00e1si nyelv,<\/a><\/noindex> melynek m\u00f3dos\u00edthatatlan \u00e9rt\u00e9kei vannak, \u00edgy a tesztel\u00e9si fel\u00fclet jelent\u0151sen kisebb, mint a dinamikus t\u00edpus\u00fa objektumorient\u00e1lt nyelvek eset\u00e9ben. De a tesztel\u00e9st \u00edgy is el kell v\u00e9gezni.<br \/>\nA Dark automatikusan, h\u00e1tt\u00e9rben futtatja a modul\u00e1ris teszteket a szerkesztett k\u00f3dra, \u00e9s alap\u00e9rtelmez\u00e9s szerint ezeket a teszteket futtatja a funkci\u00f3kapcsol\u00f3kra vonatkoz\u00f3an is. A j\u00f6v\u0151ben szeretn\u00e9nk statikus t\u00edpusok seg\u00edts\u00e9g\u00e9vel automatikusan \u00e9lni a fuzzing tesztel\u00e9ssel a hib\u00e1k felt\u00e1r\u00e1s\u00e1ra.<\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1, a Dark a termel\u00e9si infrastrukt\u00far\u00e1j\u00e1t futtatja, ami \u00faj lehet\u0151s\u00e9geket nyit meg. Automatikusan elt\u00e1roljuk a HTTP-k\u00e9r\u00e9seket a Dark infrastrukt\u00far\u00e1ban (m\u00edg jelenleg minden k\u00e9relmet elt\u00e1rolunk, k\u00e9s\u0151bb szeretn\u00e9nk v\u00e1logat\u00e1sra v\u00e1ltani). Ezen \u00e1llapotok alapj\u00e1n tesztelj\u00fck az \u00faj k\u00f3dot \u00e9s hajtjuk v\u00e9gre a modul\u00e1ris teszteket, \u00e9s ha akarja, k\u00f6nnyen konvert\u00e1lhatja az \u00e9rdekes k\u00e9rd\u00e9seket modul\u00e1ris tesztekk\u00e9.<\/p>\n<p><\/p>\n<h3 id=\"ot-chego-my-izbavilis\">Amikt\u0151l megszabadultunk<\/h3>\n<p><\/p>\n<p>Mivel nincs telep\u00edt\u00e9s, de vannak funkci\u00f3kapcsol\u00f3k, a telep\u00edt\u00e9si folyamat k\u00f6r\u00fclbel\u00fcl 60%-a nem sz\u00fcks\u00e9ges. Nincs sz\u00fcks\u00e9g git-\u00e1gakra vagy h\u00faz\u00e1si k\u00e9relmekre, a h\u00e1tt\u00e9rforr\u00e1sok \u00e9s -kont\u00e9nerek \u00f6ssze\u00e1ll\u00edt\u00e1s\u00e1ra, a forr\u00e1sok \u00e9s kont\u00e9nerek regisztr\u00e1l\u00e1s\u00e1ra, vagy a Kubernetes telep\u00edt\u00e9si l\u00e9p\u00e9seire.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/gc\/9e\/g-\/gc9eg-szouq0dtrxxr8jd6c6dyo.jpeg\"><img decoding=\"async\" alt=\"Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt\" src=\"\/wp-content\/uploads\/2019\/08\/d584b13a1f91e9eef1e2e40c25e90052.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<em>A hagyom\u00e1nyos folyamatos sz\u00e1ll\u00edt\u00e1si pipeline (balra) \u00e9s a Dark folyamatos sz\u00e1ll\u00edt\u00e1s (jobbra) \u00f6sszehasonl\u00edt\u00e1sa. A Dark sz\u00e1ll\u00edt\u00e1s 6 l\u00e9p\u00e9sb\u0151l \u00e9s 1 ciklusb\u00f3l \u00e1ll, m\u00edg a hagyom\u00e1nyos v\u00e1ltozat 35 l\u00e9p\u00e9st \u00e9s 3 ciklust tartalmaz.<\/em><\/p>\n<p><\/p>\n<p>A Dark deployment csak 6 l\u00e9p\u00e9sb\u0151l \u00e9s 1 ciklusb\u00f3l (az ism\u00e9tl\u0151d\u0151 l\u00e9p\u00e9sek) \u00e1ll, m\u00edg a modern folyamatos sz\u00e1ll\u00edt\u00e1si pipeline 35 l\u00e9p\u00e9st \u00e9s 3 ciklust tartalmaz. A Dark-ban a tesztek automatikusan futnak, \u00e9s ezt m\u00e9g csak nem is l\u00e1tja; a f\u00fcgg\u0151s\u00e9gek automatikusan telep\u00fclnek; a git vagy a Github haszn\u00e1lata m\u00e1r nem sz\u00fcks\u00e9ges; a Docker kont\u00e9nerek \u00f6sszeszerel\u00e9se, tesztel\u00e9se \u00e9s k\u00fcld\u00e9se nem sz\u00fcks\u00e9ges; a Kubernetes telep\u00edt\u00e9s m\u00e1r nem sz\u00fcks\u00e9ges.<\/p>\n<p><\/p>\n<p>A Dark-ban m\u00e9g a megmaradt l\u00e9p\u00e9sek is egyszer\u0171bb\u00e9 v\u00e1ltak. Mivel a funkci\u00f3kapcsol\u00f3kat egyetlen m\u0171velettel lehet kezelni, nem kell \u00fajra v\u00e9gigmenni az eg\u00e9sz telep\u00edt\u00e9si pipeline-on a r\u00e9gi k\u00f3d elt\u00e1vol\u00edt\u00e1s\u00e1hoz.<\/p>\n<p><\/p>\n<p>A lehet\u0151 legegyszer\u0171bb\u00e9 tett\u00fck a k\u00f3d sz\u00e1ll\u00edt\u00e1s\u00e1t, cs\u00f6kkentve a folyamatos sz\u00e1ll\u00edt\u00e1s id\u0151tartam\u00e1t \u00e9s kock\u00e1zatait. Emellett jelent\u0151sen egyszer\u0171s\u00edtett\u00fck a csomagok friss\u00edt\u00e9s\u00e9t, az adatb\u00e1zis-migr\u00e1ci\u00f3kat, a tesztel\u00e9st, a verzi\u00f3kezel\u00e9st, a f\u00fcgg\u0151s\u00e9gek telep\u00edt\u00e9s\u00e9t, a fejleszt\u00e9si \u00e9s \u00e9les k\u00f6rnyezet k\u00f6z\u00f6tti egyenl\u0151s\u00e9get, valamint a gyors \u00e9s biztons\u00e1gos nyelvfriss\u00edt\u00e9seket.<\/p>\n<p><\/p>\n<p>A k\u00e9rd\u00e9seidre itt v\u00e1laszolok <noindex><a rel=\"nofollow\" href=\"https:\/\/news.ycombinator.com\/item?id=20394166\">HackerNews<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>A Dark eszk\u00f6zr\u0151l t\u00f6bbet szeretn\u00e9l tudni? Olvasd el a <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/darklang\/the-design-of-dark-59f5d38e52d2\">Dark-r\u00f3l sz\u00f3l\u00f3 cikket<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/darklang?source=post_page---------------------------\">k\u00f6vess minket a Twitteren<\/a><\/noindex> (vagy <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/paulbiggar?source=post_page---------------------------\">engem<\/a><\/noindex>) vagy <noindex><a rel=\"nofollow\" href=\"https:\/\/darklang.com\/subscribe?source=post_page---------------------------\">iratkozz fel a b\u00e9taverzi\u00f3ra \u00e9s \u00e9rtes\u00edt\u00e9seket kapsz a k\u00f6vetkez\u0151 posztokr\u00f3l<\/a><\/noindex>. Ha szeptemberben a StrangeLoopra m\u00e9sz, <noindex><a rel=\"nofollow\" href=\"https:\/\/darklang.com\/launch\">gyere el a bevezet\u0151nkre<\/a><\/noindex>.<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/462027\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u043d\u0430\u0441 \u2014 \u043d\u0430\u0448\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u0438 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u0440\u043e\u0441\u0442\u043e\u044f\u043c \u0438 \u043f\u0435\u0440\u0435\u0440\u044b\u0432\u0430\u043c. \u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0434\u0430\u0436\u0435 \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u0445. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27506,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36721","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-dark-razvertyvaet-kod-za-50-ms\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a Dark \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0434 \u0437\u0430 50 \u043c\u0441 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-dark-razvertyvaet-kod-za-50-ms\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hogyan telep\u00edti a Dark a k\u00f3dot 50 ms alatt | ProHoster","description":"Min\u00e9l gyorsabb a fejleszt\u00e9si folyamat, ann\u00e1l gyorsabb.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-dark-razvertyvaet-kod-za-50-ms","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a Dark \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u0434 \u0437\u0430 50 \u043c\u0441 | ProHoster","og:description":"\u0427\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/kak-dark-razvertyvaet-kod-za-50-ms","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:20+00:00","article:modified_time":"2019-10-31T19:13:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36721","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:34:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:22","updated":"2026-01-22 04:34:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36721"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27506"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}