Amikor Dmitriy Zaporozhets, társalapítónk és műszaki munkatársunk úgy döntött, hogy felépíti a GitLabot, a Ruby on Rails-t választotta, annak ellenére, hogy akkoriban elsősorban PHP-ben dolgozott. A GitHub, amely a GitLab inspirációjának forrása volt, szintén Rails alapú volt, így logikus választás volt, figyelembe véve a keretrendszer iránti érdeklődését. Sid Sijbrandij, a GitLab vezérigazgatója szerint társalapítója jól döntött:
“Nagyon jól működött, mert a Ruby on Rails ökoszisztéma lehetővé teszi, hogy sok funkcionalitást magas minőségben alakítsunk ki” – magyarázta. “Ha megnézzük a GitLabot, hatalmas mennyiségű funkcionalitással rendelkezik. A szoftverfejlesztés nagyon összetett, és ehhez sok funkcionalitásra van szükségünk, és a Ruby on Rails egy módja ennek. Mivel ott vannak ezek a bevált gyakorlatok, amelyek a boldogság útját járják, ez egy módja annak is, hogy a kódot konzisztensen tartsuk, amikor olyasmit szállítunk, mint a GitLab. Egyfajta útmutatást kapsz, hogy a helyes dolgot csináld.”
A hasznos gemektől függ
A Ruby gemek szerves szerepet játszanak a GitLab építésében, Sid szerint több mint ezer nem egyedi gemet tölt be. A Ruby on Rails keretrendszert “nagyon véleményesnek” nevezi, és úgy gondolja, hogy ez egy erős környezet, amelyben egy olyan összetett alkalmazást lehet építeni, mint a GitLab.
“Egy nagyszerű ökoszisztéma van körülötte gemekkel, amelyek feltételezéseket tudnak tenni arról, hogyan csinálsz dolgokat, és ebben a tekintetben azt hiszem, hogy a Ruby on Rails ökoszisztéma még mindig páratlan” – mondja. “Ha megnézed a Gemfile-unkat, akkor láthatod, hogy mekkora a függőségek tornya, amire építhetünk. A Ruby on Rails elképesztő vállakon áll, és sokkal lassabb lett volna a GitLab fejlesztése bármely más keretrendszerben.”
Kihívások leküzdése
Mindez nem jelenti azt, hogy nem voltak kihívások a GitLab Ruby on Rails-szel való felépítése során. A teljesítmény olyan probléma volt, amelynek javítására fejlesztőink számos módon tettek lépéseket, többek között a kód Go nyelven történő átírásával és a Vue keretrendszer használatával. Ez utóbbit a gyakran látogatott oldalak, például a problémák és az egyesítési kérelmek átírására használják, hogy azok gyorsabban töltődjenek be, javítva a felhasználói élményt.
A Go-t a betöltési időt befolyásoló egyéb problémák megoldására és a memóriahasználat csökkentésére használják.
“A Ruby-t a fejlesztők számára optimalizálták, nem pedig a termelésben való futtatásra” – mondja Sid. “Azokat a dolgokat, amikre sokan támadnak, és amiknek nagyon performánsnak kell lenniük, vagy amiknek például nagyon sokáig kell várniuk egy rendszer IO-ra, azokat Go-ban írjuk át … Még mindig próbáljuk elérni, hogy a GitLab kevesebb memóriát használjon. Tehát engedélyeznünk kell a többszálúságot. Amikor a GitLabot fejlesztettük, ez nem volt általános a Ruby on Rails ökoszisztémában. Most már gyakoribb, de mivel most már annyi kódunk és annyi függőségünk van, hosszabb út lesz számunkra, hogy eljussunk odáig. Ez segíteni fog; nem lesz villámgyors, de legalább kevesebb memóriát fog használni.”
A Go hozzáadása a GitLab eszköztárához egy különálló szolgáltatás, a Gitaly létrehozásához vezetett, amely az összes Git-kérést kezeli.
A GitLab küldetésére építve
A Ruby on Rails keretrendszerének szervezett, strukturált stílusa összhangban van az alapvető küldetésünkkel. Mivel a Rails áramvonalas, bárki beugorhat a GitLabba és részt vehet benne, ami a kezdetektől fogva különösen vonzóvá tette Sid számára.
“A mi küldetésünk az, hogy mindenki hozzájárulhasson” – magyarázza. “Mivel a Ruby on Rails nagyon is véleményes arról, hogy melyik darab hova kerül, az új fejlesztőknek sokkal könnyebb bejutni a kódbázisba, mert tudod, hogy az emberek hova tették a dolgokat. Például minden konyhában, ahová belépsz, sosem tudod, hol vannak a kések és a tányérok. De a Ruby on Rails esetében, ha belépsz a konyhába, az mindig ugyanott van, és ehhez szeretnénk ragaszkodni.
Minden konyhában, ahová belépsz, soha nem tudod, hol vannak a kések és a tányérok. De a Ruby on Rails esetében belépsz a konyhába, és mindig ugyanazon a helyen van, és ehhez szeretnénk ragaszkodni.”
“Nagyon felbátorodtam, amikor megnyitottam a projektet, és először láttam egy évvel azután, hogy Dmitrij elkezdte. Megnyitottam, és ez egy idiomatikus Rails. Minden alapelvet követett. Nem próbált kísérletezni valamilyen hóborttal, ami érdekelte. Természetes alkalmazást csinált belőle. Dmitriy gondosan átnézte az összes hozzájárulást, hogy biztos legyen benne, hogy betartják ezeket a konvenciókat, és ez még mindig így van. Szerintem nagyon szép kódbázisunk van, ami lehetővé teszi, hogy mások is építkezzenek rá. Az egyik alértékünk az unalmas megoldások: ne csináljunk semmi különlegeset. Ez azért van, hogy mások is építhessenek rá. Azt hiszem, ezt nagyon jól csináltuk … és nagyon hálásak vagyunk, hogy a Ruby egy ilyen stabil ökoszisztéma, amire építhetünk.”
Cover image by Elvir K on Unsplash
Vélemény, hozzászólás?