ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 115
Abonament PDF

Migrarea cloud to cloud “în zbor” a trei sisteme aeroportuare

Alexandra Moca
DevOps Lead @ AirportLabs



PROGRAMARE


Urmând modelul european, tot mai multe țări cer stocarea datelor personale, guvernamentale și esențiale în spațiul geografic al țării, chiar și în cazul soluțiilor cloud.

În cazul de față, soluțiile aeroportuare au fost implementate inițial în AWS în spațiul european, dar la solicitarea din partea guvernului, a fost nevoie de migrarea în data centere din Orientul Mijlociu. Problema era chiar mai complexă pentru că singurul furnizor de servicii cloud disponibil la momentul respectiv era Azure.

Care este rolul soluțiilor aeroportuare

Este foarte important ca toate rolurile din companie (inclusiv DevOps) să înțeleagă valoarea de business a soluțiilor aeroportuare și impactul lor asupra utilizatorilor și a pasagerilor.

În cazul de față avem:

VisionAir

Este un sistem de afișare a informațiilor de zbor pentru pasageri dar și pentru stafful din aeroporturi. O întrerupere a sistemului ar duce la oprirea majorității operațiunilor din aeroport pentru că pasagerii nu ar găsi birourile de check-in, porțile de îmbarcare sau benzile de bagaje corecte. VisionAir găzduiește mai bine de 5000 de clienți (ecrane) în aeroportul pentru care facem migrarea.

RealTime

Este un sistem pentru vizualizarea și controlul operațiunilor aeroportuare, un digital twin al aeroportului. Totul, de la mișcarea avioanelor până la cozile formate de pasageri, este vizibil în timp real. O întrerupere a acestui sistem ar lăsa centrele de comandă și control cu zero vizibilitate asupra a ceea ce se întâmplă în aeroport. Soluția este folosită în cel puțin 12 centre de comandă și control (în aeroport și pentru liniile aeriene) cât și de utilizatori individuali la stațiile personale de lucru.

Community App

Este o aplicație mobilă destinată personalului din aeroporturi, folosită pentru comunicarea de informații importante și coordonarea operațiunilor din aeroporturi. O întrerupere a sistemului ar reduce drastic eficiența de operare în aeroport. Aplicația are aproximativ 60.000 utilizatori care pot fi afectați de migrare.

Toate sistemele sunt bazate pe tehnologii web și construite după o arhitectură de nivel înalt comună, redundantă:

Dacă VisionAir și RealTime au o infrastructură specializată (per client = single tenant), Community App are în schimb o infrastructură unică (multi tenant), partajată între mai mult de 30 de aeroporturi internaționale. Având o infrastructură multi tenant, migrarea datelor a implicat modificări și la nivel de cod în backendul aplicației pentru a îndeplini cerințele legale.

Tool stackul folosit

Terraform

Este un software open-source pe care l-am folosit pentru a crea Infrastructure as Code. Terraform codifică API-urile Cloud providerilor în fișiere de configurare declarative într-un limbaj simplu numit HCL (HashiCorp Configuration Language).

De ce am ales Terraform?

Alternative IaC în funcție de cloudul destinație: Azure Resource Manager, AWS CloudFormation și Google Cloud Deployment Manager, iar printre cele cloud agnostic: Ansible, Chef etc.

Ansible

Este un software open-source care funcționează prin SSH și pe care l-am folosit pentru a instala software-ul și a modifica setările sistemului, având un rol extrem de important în automatizare.

De ce am ales Ansible?

Din experiența noastră, există cel puțin două avantaje care fac din Ansible instrumentul nostru preferat de automatizare:

Alternative: Puppet, Chef sau configurarea manuală.

GitLabCI

Face parte din GitLab și este un tool folosit pentru toate metodele continue (integrare continuă, livrare și implementare). GitLabCI rulează scripturi automate (secvențial sau în paralel) pentru a construi și testa aplicația.

De ce am ales GitLabCI?

Principalul motiv a fost "totul într-un singur loc", GitlabCI fiind deja încorporat în locul în care ne ținem codul sursă (GitLab), iar cel de-al doilea motiv este legat de compatibilitățile cloud native pe care le oferă (Kubernetes, Terraform etc.).

Alternative: Jenkins, TravisCI, CircleCI, Azure Pipelines etc.

Planul de migrare și planul de revenire

Planul de migrare a constat în câțiva pași:

  1. Construirea unei infrastructuri în Azure;

  2. Pregătirea infrastructurii;

  3. Deploymentul serviciilor;

  4. Testarea serviciilor;

  5. Redirecționarea URL-urilor spre noul stack de servicii.

1. Construirea unei infrastructuri în Azure

Construirea infrastructurii este etapa în care am pregătit fișierele de configurare folosind Terraform. Fișierele de configurare sunt stocate într-un repository, în cazul nostru Gitlab. Structura proiectului a constat în două directoare, unul în care am păstrat modulele și altul în care am păstrat configurațiile cu datele de intrare pentru fiecare sistem.

Configurarea fișierelor a constat în primul rând în definirea modulelor pentru fiecare resursă pe care ne-am dorit să o construim. Modulele sunt configurații Terraform, care permit abstractizarea unei părți comune a infrastructurii și reutilizarea ulterioară cu diferite intrări.

Modulele se definesc în funcție de providerul în care dorim să creăm infrastructura, în cazul nostru Azure și sunt folosite ulterior de către fiecare aplicație/sistem. În directorul destinat aplicațiilor definim datele de intrare specifice fiecărui sistem.

După definirea datelor de intrare am folosit Terraform CLI (Command Line Interface) pentru aplicarea configurațiilor și crearea infrastructurii. Aceleași fișiere de configurare pot fi folosite și în situații de disaster recovery, permițând refacerea întregii infrastructuri în câteva minute.

2. Pregătirea infrastructurii

Folosindu-ne de Ansible playbooks am instalat și configurat procesele de care avem nevoie pe fiecare sistem și am modificat setările actuale a sistemelor după politica de standardizare internă. Standardizarea constă într-o colecție de roluri (playbook) care ajută la aplicarea unui setup inițial pentru fiecare mașină nouă achiziționată. Câteva exemple de roluri: set_language, set_ntp, set_timezone, set_color_prompt, set_logrotate, set_iptables_rules, set_authorized_keys, set_server_name care presupun modificarea setărilor actuale a mașinilor.

După setupul inițial folosim playbooks pentru instalarea de software precum Docker - cu rolul de container runtime, Netdata - colectarea metricilor de pe host în timp real etc.

În acest moment avem o infrastructură configurată cu toate dependințele instalate și configurate, necesare sistemelor pentru a funcționa în parametri.

3. Deploymentul serviciilor

Întreaga parte de CI/CD este configurată în GitLabCI, soluția folosită pentru Continuous Integration/Continuous Deployment.

Definim foarte pe scurt ce înseamnă conceptele CI/CD:

Merită menționat faptul că toate aplicațiile în discuție sunt containerizate folosind Docker în calitate de Container Runtime și sunt orchestrate utilizate Docker Swarm.

Structura pipeline-ului va fi una generică deoarece singura diferență o face codul sursă și testele aferente. Pipeline-ul se configurează pe fiecare proiect în parte, fiind responsabil de întregul proces CI/CD care presupune: build, test, staging, production.

Pipeline stages

Rolul fiecărui stage din pipeline:

Cum am făcut posibilă migrarea aproape în timp real?

Am adăugat încă un pas în stage-ul de Production configurat să redirecționeze către nouă infrastructură (Azure) care să facă deployment cu aplicația echivalentă pentru producție. Practic, am avut același setup în doi cloud provider diferiți, însă mai lipseau datele.

Migrarea datelor în cazul sistemelor single tenant (VisionAir și RealTime) a fost relativ simplă, printr-un dump și un restore la baza de date am reușit să migrăm toate datele de care aveau nevoie cele două sisteme.

Community App a fost un caz particular doar prin simplu motiv că are o infrastructură multi tenant, partajată cu alte peste 30 de aeroporturi. Migrarea în cazul acestui sistem a fost făcută cu ajutorul unui serviciu configurat să replice doar colecțiile din baza de date specifice aeroportului pentru care s-a făcut migrarea.

Serviciul a fost implementat ca serviciu de Docker pe infrastructura din Azure, iar scopul particular al acestui serviciu a fost replicarea anumitor colecții (folosim baze de date non-relaționale) din baza de date actuală de producție în cea migrată. Precum am ilustrat în figura de mai sus, de fiecare dată când colecțiile specifice se populează cu date, acest serviciu va replica instant datele și în baza de date din Azure.

4. Testarea serviciilor

Aplicațiile fiind extrem de complexe, testarea lor este un pas esențial pentru a asigura succesul migrării. Toate aplicațiile se bazează pe date care sunt integrate de la alte sisteme aeroportuare (cum ar fi RADAR). Pentru a putea testa aplicațiile am abordat două strategii:

Din fericire ambele metode sunt suportate de ADR ("AirportLabs Data Router"), soluția de integrarea de date a firmei.

5. Redirecționarea URL-urilor spre noul stack de servicii

Redirecționarea URL-urilor spre noul stack s-a realizat din DNS, prima dată reducând TTL(Time To Live) la valoarea minimă, iar apoi modificând astfel încât să indice către stackul nou. Această abordare are avantajul că nu necesită nicio modificare pentru clienți, iar în caz de probleme, schimbarea poate fi făcută către vechiul stack de servicii, cu un timp de refacere maxim egal cu TTL-ul configurat. Pe intervalul de migrare avem opțiunea de a sincroniza între stackul nou și stackul vechi orice informații specifice conexiunii unui client anume ("state") pentru a asigura o trecere fără întreruperi.

Concluzii

A cumpăra vs. a construi

În general se recomandă start-upurilor să accelereze dezvoltarea de produse folosind componente preconstruite oferite de furnizorii de servicii cloud.

Când am început dezvoltarea soluțiilor noastre am luat în considerare efortul de dezvoltare versus lipsa de portabilitate între furnizori. Prin urmare, am decis să construim totul intern, alegând să folosim exclusiv puterea de procesare, stocare și conexiune la rețea de la furnizorii de cloud. În cazul acestei migrări alegerea s-a dovedit corectă, având în vedere că nu a existat nicio dependință de un anumit furnizor.

În procesul de migrare au fost implicate mai multe echipe din cadrul companiei: DevOps, Development, Project Management și Quality Assurance. Colaborarea între aceste echipe e ceea ce a dus la succesul migrării.

Resurse

  1. https://www.terraform.io/

  2. https://www.ansible.com/

  3. https://docs.gitlab.com/ee/ci/introduction/index.html#gitlab-cicd

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects