NetAcademia

A legjobbakat tanítjuk!

Hogy kerülhetjük el a "szoftverpusztulást"? 12Factor app: 1. A kódbázis

2016. április 16. 08:00 - Fóti Marcell NetAcademia

Következő fejezet: 2. Függőségek kezelése

Korábban már volt szó róla, de annyira érdekes tárháza az információknak a 12 tényezős alkalmazás fejlesztése, hogy érdemes végigmenni a tényezőkön. A módszertant olyan közreműködők hozzák össze, akiknek nagy tapasztalatuk van összesen többszáz alkalmazás fejlesztésében és telepítésében, és mivel a Herokunál dolgoznak, több százezer alkalmazás üzemeltetésében.

A módszertant szerintük bármilyen programozási nyelven (C, Ruby, Java, C#, stb.) és bármilyen futtató-környezetben (Windows, Linux, stb.) lehet használni.

Segítségével hármas egyensúlyt lehet kialakítani egy alkalmazás fejlesztésének és üzemeltetésének teljes életciklusa alatt. Különös figyelmet tudunk fordítani az alkalmazás időben történő természetes növekedésére és fejlődésére, a kódbázison dolgozó fejlesztők együttműködésének a dinamikájára, és el tudjuk kerülni a költséges szoftverpusztulást.

Az első pont a listán a kódbázis.

Tanácsuk röviden: egy alkalmazáshoz egy kódbázis tartozik, amit mindig verziókövető adatbázisban (kódtárban) kell tárolni (például subversion, git, mercurial vagy tfs, stb.), és minden változat telepítése (teszt, fejlesztő, éles, stb.) innen történik. Tehát:

A kódbázishoz (kódtárhoz) egyértelműen megfeleltethető pontosan egy alkalmazás, és ugyanez igaz visszafelé is.

  • Ha több kódbázis van, akkor az nem lehet egy alkalmazás. Ebben az esetben elosztott rendszerről beszélünk több összetevővel. Ilyenkor tekintsünk minden összetevőt egy-egy alkalmazásnak, és ezek az alkalmazások külön-külön már alkalmasak arra, hogy a 12 tényezős alkalmazásfejlesztés követelményeinek megfeleljenek.
  • Ha több alkalmazás ugyanazt a kódot megosztja (például ugyanazt a függvényt használják, ugyanazt a konstans/modell kódot tartalmazzák stb.), akkor ezek az alkalmazások megsértik a 12 tényezős alkalmazásfejlesztés előírásait. Ebben az esetben a megoldás az, hogy a megosztott kódot például egy könyvtárba ki kell szervezni, és az egyes alkalmazások közötti függőségek feloldásának mechanizmusával (ld. később, egy következő blog bejegyzésben) felhasználni ahol szükség van rá.

Minden kódbázishoz tehát pontosan egy alkalmazás tartozik, azonban ezt az alkalmazást több környezetben és változatban is lehet telepíteni. A telepítés az alkalmazásnak egy futó példánya. Ilyen például az éles (produkciós) környezet, különböző tesztelési környezetek, illetve, minden fejlesztő gépére kerül egy-egy fejlesztői másolat is az alkalmazásból.

A kódbázis azonos minden példánynál akkor is, ha nem minden telepítés azonos kód verzióból készült. A fejlesztőknél lehetnek olyan módosítások, amiket a tesztkörnyezet(ek)re még nem telepítettünk, és a tesztkörnyezeteken is olyan változatot tesztelünk, aminek nem minden változása van az éles telepítésben. De minden telepítés ugyanazt a kódbázist (kódtárat) használja, innen ismerjük fel, hogy ezek ugyanannak az alkalmazásnak a különböző telepítései.

The Twelve-Factor App: I. Codebase

2 komment

A bejegyzés trackback címe:

https://netacademia.blog.hu/api/trackback/id/tr468631248

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Hóhér az utolsó barátod · http://internetszemete.blog.hu 2016.04.16. 09:16:21

Ha nem oszthatnak meg kódot az alkalmazások, akkor mi a helyzet pl. a php framework-ökkel, python modulokkal (na jó, a pythonos példa nem annyira nyerő), javascript (nodejs) cuccokkal és úgy általában a forráskódként terjesztett alkatrészekkel?

Plesz Gábor · https://www.netacademia.hu/Oktato/PleszGabor 2016.04.17. 10:49:17

@Hóhér az utolsó barátod: A következő ilyen témájú blogbejegyzésből részletesen kiderül majd, de röviden azt tanácsolják, hogy a függőségek kezelésére szolgáló eszközökkel, vagyis csomagkezelőkkel. A Phyton-nál a Pip (www.pip-installer.org/en/latest/) és a Virtualenv (www.virtualenv.org/en/latest/), a nodejs-nél a Node Package Manager (npm: www.npmjs.com/), a .NET-hez a NuGet (www.nuget.org/), a PHP-t nem ismerem jól de a Composer (getcomposer.org/) és a Packagist (packagist.org/) ilyesminek tűnik. A JavaSxcriptnél pedig ezeket találtam: npm, bower (bower.io/), Ender (ender.jit.su/), volo (volojs.org/), component (github.com/component/component) és jam (jamjs.org/).