Art. 05 – Vol. 27 – Nr. 3 – 2017

SERVICII CLOUD DE VERSIONARE CU SUPORT BAZE DE DATE NoSQL

Dragoş NICOLAU
dragos@ici.ro
Mihaela TOMESCU
mtomescu@ici.ro
Daniel SAVU
dsavu@ici.ro
Ion Alexandru MARINESCU
ionut@ici.ro
Institutul Naţional de Cercetare – Dezvoltare în Informatică, ICI – Bucureşti

Rezumat: Lucrarea de faţă se concentrează pe studierea dezvoltării unui sistem integrat de versionare a fişierelor sursă utilizate în dezvoltarea de proiecte software. Sistemul este rezident în Cloud şi fundamentat pe un baze de date de tip NoSQL. Toate resursele funcţionale şi de date sunt rezidente pe o platformă Cloud. Alegerea acestei soluţii (Cloud şi NoSQL) conferă un ridicat spor de viteză necesar în condiţiile în care acest gen de aplicaţie este supus unei densităţi mari de cereri inclusiv din cele care incumbă încărcări, scanări, comparări şi descărcări la distanţă de fişiere.

Cuvinte cheie: Coduri Open Source, Baze de date NoSQL, Cloud Computing, acces la Internet

Introducere: Versionarea software-ului este procesul de atribuire de nume unice de versiuni sau de numere unice de versiuni pentru stări unice ale software-ului. Într-o anumită categorie de numere de versiuni (majoră, minoră), aceste numere sînt, în general, atribuite în ordine crescătoare şi corespund dezvoltărilor noi de software. La un nivel cu granulaţie fină, controlul revizuirii este adesea folosit pentru a urmări versiunile incrementale diferite ale informaţiilor electronice, indiferent dacă aceste informaţii sînt sau nu software.

Software-ul modern este deseori urmărit folosind două scheme diferite de versionare a software-ului:

  • un număr de versiune internă care poate fi incrementat de mai multe ori într-o singură zi, cum ar fi un număr de control al revizuirii;
  • versiune lansată (release), care de obicei se schimbă mult mai rar, cum ar fi versionarea semantică sau numele unui cod de proiect[1] .

Versionarea software-ului permite progra-matorilor să ştie cînd au fost făcute modificări în software şi să urmărească aceste modificări. În acelaşi timp, permite clienţilor potenţiali să afle despre apariţia de versiuni noi şi să recunoască versiunile actualizate. Cel mai obişnuit tip de versiune, care este, de asemenea, un standard de facto în lumea Linux, este Semantic Versioning[2]. Versiunea semantică prescrie în principal 3 numere întregi separate printr-un punct (MAJOR.MINOR.PATCH) care sunt incrementate astfel:

  • versiunea MAJOR atunci cînd s-au efectuat modificări incompatibile
    cu API;
  • versiunea MINOR atunci cînd a fost adăugată funcţionalitate într-un mod compatibil înapoi;
  • versiunea PATCH atunci cînd au fost efectuate remedieri ale unor erori într-un mod compatibil înapoi.

Cea mai populară schemă de versiuni utilizează identificatori bazaţi pe secvenţă în care fiecare versiune lansată este prevăzută cu un identificator unic care conţine unul sau mai multe numere de ordine sau litere[3]. Acestea înseamnă schimbări între versiuni, în care modificările se bazează pe nivelul de semnificaţie. Primele schimbări ale secvenţei desemnează nivelul cel mai semnificativ, iar modificările ulterioare arată o mai mică semnificaţie. De exemplu, v1.01 ar putea fi o remediere minoră a unor erori, în timp ce v1.2 înseamnă o versiune mai importantă. De asemenea, această schemă poate utiliza un zero în prima secvenţă pentru a reprezenta starea „alpha”, unu pentru starea „beta”, doi pentru software-ul candidat a fi lansat şi trei pentru publicare. O altă metodă este separarea secvenţelor prin intermediul unor caractere. În anumite pachete software se pot utiliza numere negative de versiune. Alte tehnici implică folosirea anilor şi a datelor (de exemplu, Windows 95) sau doar coduri aleatorii (de exemplu, Adobe Photoshop CS2).

[1] Preston-Werner, Tom (2013). Semantic Versioning 2.0.0. Creative Commons. http://semver.org/spec/v2.0.0.html.

[2] *** – Semantic Versioning. http://semver.org.

[3] *** – Software Versioning. https://technick.net/guides/software/software_versioning/.

Concluzii: Proiectele software devin din ce în ce mai complexe, lucru care impune modularizarea activităţii de dezvoltare, adică împărţirea sarcinilor de programare pe echipe. În vederea asigurării autonomiei de lucru între echipe se folosesc instrumentele de versionare: principial, ele constau într-o bază de date unde se memorează după criterii bine determinate stadiul curent (versiunea) al fiecărui modul (fişier cu linii de cod) care compune proiectul.

Vizualizează articolul complet

ACEST ARTICOL POATE FI CITAT CA:
Dragoş NICOLAU, Mihaela TOMESCU, Daniel SAVU, Ion Alexandru MARINESCU, Servicii Cloud de versionare cu suport  baze de date NoSQL, Revista Română de Informatică şi Automatică, ISSN 1220-1758, vol. 27(3), pp. 47-58, 2017.

În felul acesta se asigură atît reversibilitatea schimbărilor executate în fiecare fişier (în fiecare moment, orice echipă de programatori, în mod independent de celelalte echipe, poate recupera orice fişier într-o anumită etapă de evoluţie, în vederea restudierii şi reutilizării, păstrînd intacte versiunile anterioare), cât şi evidenţa oricăror schimbări survenite în cod (pentru fiecare fişier sursă se ştie cine, cînd şi ce modificări a făcut). Astfel, instrumentul de versionare menţine în mod structurat, sigur şi uşor accesibil “traiectoria” dezvoltării
unui proiect.

Sistemele de versionare accesabile prin reţea (adică la distanţă) pot fi centralizate (fiecare maşină de lucru se bazează doar pe sistemul de versionare la distanţă) sau distribuite (fiecare maşină de lucru are propriul sistem de versionare local, conectat însă la cel principal, aflat la distanţă).

În sprijinul acestui model de gestionare a proiectelor vin două tehnologii: Cloud Computing şi Sistemele de baze de date de tip NoSQL, fiecare avînd atît avantaje cât şi zone perfectibile.

Cloud Computingul este un model convenabil gîndit să permită accesul la cerere, prin reţea, la o grupare de resurse de calcul configurabile (de exemplu reţele, servere, echipamente de stocare, aplicaţii şi servicii), care pot fi puse la dispoziţia utilizatorului în mod rapid şi cu un efort minim de administrare sau interacţiune cu prestatorul acestor servicii. Cloud oferă viteză şi siguranţă în funcţionare, în timp ce bazele NoSQL excelează prin timpi extrem de scurţi de răspuns în condiţiile interogării unui număr foarte mare
de înregistrări.

Baza de date NoSQL ignoră principiile Sistemelor Relaţionale, adică nu stochează conexiuni folosind tabele, ci foloseşte chei de identificare în cadrul înregistrărilor însele. Datele pot fi regăsite în funcţie de cheile atribuite. Acest tip de baze de date este prin natura sa scutit de necesitatea de a normaliza datele şi de a stoca conexiunile în tabele dedicate – aducând astfel performanţe sporite aplicaţiilor care le folosesc. De asemenea, acest tip de baze de date îmbunătăţeşte inclusiv răspunsul la schimbările ce pot surveni de-a lungul timpului în schema bazei. Într-un sistem relaţional nu există flexibilitatea necesară pentru a asimila modificări în modelul de date. Faptul că bazele de date NoSQL nu au o schemă de date fixă (rigidă), le face să fie flexibile, dând astfel posibilitate dezvoltatorilor să opereze schimbări de structură “din mers”, la nevoie, fără să fie forţaţi la schimbări majore în cod.

Prin urmare, baza de date de tip NoSQL se va constitui în depozit de coduri sursă, deservind un ansamblu structurat de facilităţi de găzduire / procesare pentru cantităţi mari de cod software, pentru uz public sau privat. Aceste resurse de cod, cărora sistemul le memorează şi gestionează versiunile intermediare şi modificările făcute pe parcurs, sunt utilizate în proiecte open-source sau în alte proiecte multi-dezvoltator.

Scopul urmărit prin prezentul proiect constă în valorificarea performanţelor ridicate ale unui sistem de baze de date de tip NoSQL rezidente în Cloud, prin utilizarea acestora în cadrul unor soluţii de stocare/gestionare pentru codurile sursă ale proiectelor software.

Sistemul de versionare a cărui realizare s-a studiat comportă o componentă server-side de tip serviciu Web şi o componentă client, de tip desktop, cu interfaţă grafică. La dezvoltarea modulelor de interacţiune cu Baza de date s-a utilizat o pereche de drivere (DLL) de tip .net – importabile în proiectul principal – care oferă funcţii integrate pentru crearea, editarea şi regăsirea seturilor de informaţie.

BIBLIOGRAFIE

  1. *** – NoSQL Databases; http://nosql-database.org/
  2. *** – Semantic Versioning. http://semver.org.
  3. *** – Software Versioning. https://technick.net/guides/software/software_versioning/.
  4. NIST- The Definition of Cloud Computing (Sept. 2011); Special Publication,
    800-145.
  5. Preston-Werner, Tom: Semantic Versioning 2.0.0. Creative Commons, 2013. http://semver.org/spec/v2.0.0.html.

 

  1. Shalom, N.: The Common Principles Behind The NoSQL Alternatives, December 2009; Blog post of 2009-12-15. http://natishalom.typepad.com/nati_shaloms_blog/2009/12/the-common-principlesbehind-the-nosql-alternatives.html.
  2. Welsh, M.; Culler, D.; Brewer, E.: An architecture for well conditioned, scalable internet services; Proceedings of the eighteenth ACM Symposium on Operating System s Principles. New York, NY, USA. ACM, 2001 (SOSP ’01),
    230-243.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.