Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēma

Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēma

TL; DR: MÅ«su iekŔējā tÄ«kla konfigurācijas pārvaldÄ«bas sistēmas QControl klienta-servera arhitektÅ«ras apraksts. Tas ir balstÄ«ts uz divu slāņu transporta protokolu, kas darbojas ar gzip pakotiem ziņojumiem bez dekompresijas starp galapunktiem. IzplatÄ«tie marÅ”rutētāji un galapunkti saņem konfigurācijas atjauninājumus, un pats protokols ļauj instalēt lokalizētus starprelejus. Sistēma ir veidota pēc principa diferenciālā dublēŔana (ā€œrecent-stableā€, paskaidrots tālāk) un izmanto JMESpath vaicājumu valodu kopā ar Jinja veidņu dzinēju, lai renderētu konfigurācijas failus.

Qrator Labs pārvalda globāli izplatÄ«tu uzbrukumu mazināŔanas tÄ«klu. MÅ«su tÄ«kls darbojas pēc anycast principa, un apakÅ”tÄ«kli tiek reklamēti, izmantojot BGP. Tā kā BGP anycast tÄ«kls fiziski atrodas vairākos Zemes reÄ£ionos, mēs varam apstrādāt un filtrēt neleÄ£itÄ«mu trafiku tuvāk interneta kodolam - 1. lÄ«meņa operatoriem.

No otras puses, bÅ«t Ä£eogrāfiski sadalÄ«tam tÄ«klam nav viegli. Saziņa starp tÄ«kla klātbÅ«tnes punktiem ir ļoti svarÄ«ga, lai droŔības pakalpojumu sniedzējam bÅ«tu konsekventa visu tÄ«kla mezglu konfigurācija, tos savlaicÄ«gi atjauninot. Tāpēc, lai patērētājam nodroÅ”inātu visaugstāko iespējamo pamatpakalpojumu lÄ«meni, mums bija jāatrod veids, kā droÅ”i sinhronizēt konfigurācijas datus dažādos kontinentos.

Iesākumā bija Vārds. Tas ātri kļuva par sakaru protokolu, kam nepiecieŔams atjauninājums.


QControl pastāvēŔanas stÅ«rakmens un vienlaikus galvenais iemesls ievērojama laika un resursu tērēŔanai Ŕāda veida protokola izveidei ir nepiecieÅ”amÄ«ba iegÅ«t vienu autoritatÄ«vu konfigurācijas avotu un galu galā sinhronizēt mÅ«su klātbÅ«tnes punktus. ar to. Pati krātuve bija tikai viena no vairākām prasÄ«bām QControl izstrādes laikā. Turklāt mums bija nepiecieÅ”ama arÄ« integrācija ar esoÅ”ajiem un plānotajiem pakalpojumiem klātbÅ«tnes punktos (POP), viedās (un pielāgojamās) datu validācijas metodes, kā arÄ« piekļuves kontrole. Turklāt mēs vēlējāmies kontrolēt Ŕādu sistēmu, izmantojot komandas, nevis veicot failu modifikācijas. Pirms QControl dati uz klātbÅ«tnes punktiem tika nosÅ«tÄ«ti gandrÄ«z manuāli. Ja kāds no klātbÅ«tnes punktiem nebÅ«tu pieejams un mēs to vēlāk aizmirsām atjaunināt, konfigurācija netiks sinhronizēta un mums bÅ«s jātērē laiks, lai to atjaunotu un palaistu.

Rezultātā mēs nonācām pie Ŕādas shēmas:
Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēma
Konfigurācijas serveris ir atbildÄ«gs par datu validāciju un uzglabāŔanu; marÅ”rutētājam ir vairāki galapunkti, kas saņem un pārraida konfigurācijas atjauninājumus no klientiem un atbalsta komandām uz serveri un no servera uz klātbÅ«tnes punktiem.

Interneta savienojuma kvalitāte joprojām ir ļoti atŔķirÄ«ga visā pasaulē — lai ilustrētu Å”o punktu, apskatÄ«sim vienkārÅ”u MTR no Prāgas, Čehijas lÄ«dz SingapÅ«rai un Honkongai.

Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēma
MTR no Prāgas uz Singapūru

Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēma
Tas pats ar Honkongu

Liels latentums nozÄ«mē mazāku ātrumu. Turklāt ir pakeÅ”u zudums. Kanāla platums nekompensē Å”o problēmu, kas vienmēr ir jāņem vērā, veidojot decentralizētas sistēmas.

Pilna klātbūtnes punkta konfigurācija ir ievērojams datu apjoms, kas ir jānosūta daudziem adresātiem, izmantojot neuzticamus savienojumus. Par laimi, lai gan konfigurācija nepārtraukti mainās, tas notiek nelielos soļos.

Nesen stabils dizains

Var teikt, ka izplatÄ«ta tÄ«kla izveide, pamatojoties uz pakāpenisku atjauninājumu principu, ir diezgan acÄ«mredzams risinājums. Bet ar atŔķirÄ«bām ir daudz problēmu. Mums ir jāsaglabā visas atŔķirÄ«bas starp atskaites punktiem, kā arÄ« jāspēj tās nosÅ«tÄ«t atkārtoti, ja kāds palaida garām daļu datu. Katram galamērÄ·im tie ir jāpiemēro stingri noteiktā secÄ«bā. Parasti vairāku galamērÄ·u gadÄ«jumā Ŕāda darbÄ«ba var aizņemt ilgu laiku. Uztvērējam arÄ« jāspēj pieprasÄ«t trÅ«kstoŔās daļas un, protams, centrālajai daļai uz Ŕādu pieprasÄ«jumu ir jāatbild korekti, nosÅ«tot tikai trÅ«kstoÅ”os datus.

Rezultātā mēs nonācām pie diezgan interesanta risinājuma - mums ir tikai viens atsauces slānis, fiksēts, sauksim to par stabilu, un tam tikai viena atŔķirÄ«ba - nesen. Katrs nesenais ir balstÄ«ts uz pēdējo Ä£enerēto stabilu un ir pietiekams, lai atjaunotu konfigurācijas datus. TiklÄ«dz svaigais nesen sasniedz savu galamērÄ·i, vecais vairs nav vajadzÄ«gs.

Atliek tikai laiku pa laikam nosÅ«tÄ«t jaunu stabilu konfigurāciju, piemēram, tāpēc, ka nesen ir kļuvis pārāk liels. SvarÄ«gi ir arÄ« tas, ka mēs visus Å”os atjauninājumus izsÅ«tām apraides/multiraides režīmā, neuztraucoties par atseviŔķiem adresātiem un viņu spēju apkopot datu gabalus. Kad esam pārliecināti, ka ikvienam ir pareizais stallis, mēs nosÅ«tām tikai jaunus nesenos. Vai ir vērts precizēt, ka tas darbojas? Darbojas. Stable tiek saglabāta keÅ”atmiņā konfigurācijas serverÄ« un adresātos, jaunākie tiek izveidoti pēc vajadzÄ«bas.

Divlīmeņu transporta arhitektūra

Kāpēc mēs savu transportu veidojām divos lÄ«meņos? Atbilde ir pavisam vienkārÅ”a – mēs vēlējāmies atsaistÄ«t marÅ”rutēŔanu no augsta lÄ«meņa loÄ£ikas, iedvesmojoties no OSI modeļa ar tā transporta un lietojumprogrammu slāņiem. Mēs izmantojām Thrift transporta protokola lomai un msgpack serializācijas formātu augsta lÄ«meņa vadÄ«bas ziņojumu formātam. Å Ä« iemesla dēļ marÅ”rutētājs (veic multicast/broadcast/relay) neskatās msgpack iekÅ”pusē, neizpako un neiepako saturu atpakaļ un tikai pārsÅ«ta datus.

Thrift (no angļu valodas - ā€œthriftā€, izrunā [Īørift]) ir saskarnes apraksta valoda, ko izmanto, lai definētu un izveidotu pakalpojumus dažādām programmēŔanas valodām. Tā ir attālo procedÅ«ru izsaukumu (RPC) sistēma. Apvieno programmatÅ«ras cauruļvadu ar koda Ä£enerēŔanas dzinēju, lai izstrādātu pakalpojumus, kas vairāk vai mazāk efektÄ«vi un viegli darbojas starp valodām.

Mēs izvēlējāmies Thrift sistēmu RPC un daudzu valodu atbalsta dēļ. Kā parasti, vienkārŔās daļas bija klients un serveris. Tomēr marÅ”rutētājs izrādÄ«jās ciets rieksts, daļēji tāpēc, ka mÅ«su izstrādes laikā trÅ«ka gatava risinājuma.

Qrator filtrēŔanas tÄ«kla konfigurācijas pārvaldÄ«bas sistēmaIr arÄ« citas iespējas, piemēram, protobuf / gRPC, tomēr, kad mēs sākām savu projektu, gRPC bija diezgan jauns, un mēs neuzdroÅ”inājāmies to pieņemt.

Protams, mēs varējām (un patiesÄ«bā vajadzēja) uzbÅ«vēt savu velosipēdu. BÅ«tu vienkārŔāk izveidot protokolu tam, kas mums nepiecieÅ”ams, jo klienta-servera arhitektÅ«ru ir salÄ«dzinoÅ”i vienkārÅ”i ieviest, salÄ«dzinot ar marÅ”rutētāja izveidi vietnē Thrift. Vienā vai otrā veidā pastāv tradicionāla aizspriedumi pret paÅ”rakstÄ«tiem protokoliem un populāru bibliotēku ievieÅ”anu (laba iemesla dēļ); turklāt diskusiju laikā vienmēr rodas jautājums: "Kā mēs to pārnessim uz citām valodām?" Tāpēc mēs nekavējoties izmetām ideju par velosipēdu.

Msgpack ir līdzīgs JSON, taču ātrāks un mazāks. Tas ir binārs datu serializācijas formāts, kas ļauj apmainīties ar datiem starp vairākām valodām.

Pirmajā lÄ«menÄ« mums ir Thrift ar minimālo informāciju, kas nepiecieÅ”ama, lai marÅ”rutētājs varētu pārsÅ«tÄ«t ziņojumu. Otrajā lÄ«menÄ« ir iepakotas msgpack struktÅ«ras.

Mēs izvēlējāmies msgpack, jo tas ir ātrāks un kompaktāks salÄ«dzinājumā ar JSON. Bet vēl svarÄ«gāk ir tas, ka tas atbalsta pielāgotus datu tipus, ļaujot mums izmantot lieliskas funkcijas, piemēram, neapstrādātu bināro failu vai Ä«paÅ”u objektu nodoÅ”anu, kas norāda uz datu neesamÄ«bu, kas bija svarÄ«gi mÅ«su ā€œnesen-stabilaā€ shēmai.

JMESPath
JMESPath ir JSON vaicājumu valoda.
TieÅ”i Ŕādi izskatās apraksts, ko iegÅ«stam no oficiālās JMESPath dokumentācijas, taču patiesÄ«bā tas sniedz daudz vairāk. JMESPath ļauj meklēt un filtrēt apakÅ”kokus patvaļīgā koka struktÅ«rā un veikt izmaiņas datos. Tas arÄ« ļauj pievienot Ä«paÅ”us filtrus un datu pārveidoÅ”anas procedÅ«ras. Lai gan, lai to saprastu, protams, ir vajadzÄ«gas smadzeņu pÅ«les.

Jinja
Dažiem patērētājiem mums ir jāpārvērÅ” konfigurācija failā ā€” tāpēc mēs izmantojam veidņu dzinēju, un Jinja ir acÄ«mredzama izvēle. Ar tās palÄ«dzÄ«bu mēs Ä£enerējam konfigurācijas failu no veidnes un galamērÄ·Ä« saņemtajiem datiem.

Lai Ä£enerētu konfigurācijas failu, mums ir nepiecieÅ”ams JMESPath pieprasÄ«jums, faila atraÅ”anās vietas veidne FS un paÅ”as konfigurācijas veidne. Å ajā posmā ir arÄ« ieteicams precizēt faila atļaujas. Tas viss tika veiksmÄ«gi apvienots vienā failā - pirms konfigurācijas veidnes sākuma mēs ievietojām galveni YAML formātā, kas apraksta pārējo.

Piemēram:

---
selector: "[@][?@.fft._meta.version == `42`] | items([0].fft_config || `{}`)"
destination_filename: "fft/{{ match[0] }}.json"
file_mode: 0644
reload_daemons: [fft]
...
{{ dict(match[1]) | json(indent=2, sort_keys=True) }}

Lai izveidotu konfigurācijas failu jaunam pakalpojumam, mēs pievienojam tikai jaunu veidnes failu. Nav nepiecieÅ”amas nekādas izmaiņas avota kodā vai programmatÅ«rā klātbÅ«tnes punktos.

Kas ir mainÄ«jies kopÅ” QControl darbÄ«bas uzsākÅ”anas? Pirmā un vissvarÄ«gākā lieta ir konsekventa un uzticama konfigurācijas atjauninājumu piegāde visiem tÄ«kla mezgliem. Otrkārt, mÅ«su atbalsta komanda, kā arÄ« pakalpojuma patērētāji saņem jaudÄ«gu rÄ«ku, lai pārbaudÄ«tu konfigurāciju un veiktu tajā izmaiņas.

Mēs to visu varējām izdarÄ«t, izmantojot neseno stabilo atjaunināŔanas shēmu, lai vienkārÅ”otu saziņu starp konfigurācijas serveri un konfigurācijas adresātiem. Divslāņu protokola izmantoÅ”ana, lai atbalstÄ«tu no satura neatkarÄ«gu datu marÅ”rutēŔanas veidu. VeiksmÄ«gi integrēts Jinja konfigurācijas Ä£enerēŔanas dzinējs izplatÄ«tajā filtrēŔanas tÄ«klā. Å Ä« sistēma atbalsta plaÅ”u konfigurācijas metožu klāstu mÅ«su izplatÄ«tajām un neviendabÄ«gajām perifērijas ierÄ«cēm.

Paldies par palÄ«dzÄ«bu materiāla rakstīŔanā. VolanDamrods, serenheits, NēN.

Versija angļu valodā pastu.

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster