Sistem manajemen konfigurasi jaringan nyaring Qrator

Sistem manajemen konfigurasi jaringan nyaring Qrator

TL; DR: Pedaran arsitektur klien-server sistem manajemen konfigurasi jaringan internal urang, QControl. Éta dumasar kana protokol angkutan dua lapis anu tiasa dianggo sareng pesen anu dibungkus gzip tanpa dekompresi antara titik tungtung. Disebarkeun routers na titik tungtung narima apdet konfigurasi, sarta protokol sorangan ngamungkinkeun pamasangan relays panengah localized. Sistim nu diwangun dina prinsip cadangan diferensial ("anyar-stabil", dipedar di handap) sarta ngagunakeun basa query JMESpath babarengan jeung mesin templating Jinja pikeun ngarobah file konfigurasi.

Qrator Labs ngoperasikeun jaringan mitigasi serangan anu disebarkeun sacara global. Jaringan kami beroperasi dina prinsip anycast, sareng subnet diémbarkeun via BGP. Salaku jaringan BGP anycast sacara fisik aya di sababaraha daérah Bumi, urang tiasa ngolah sareng nyaring lalu lintas anu henteu sah langkung caket kana inti Internét - operator Tier-1.

Di sisi anu sanés, janten jaringan anu disebarkeun sacara geografis henteu gampang. Komunikasi antara titik ayana jaringan penting pikeun panyadia ladenan kaamanan boga konfigurasi konsisten sadaya titik jaringan, ngamutahirkeun aranjeunna dina ragam timely. Ku alatan éta, dina raraga nyadiakeun tingkat pangluhurna mungkin tina layanan inti ka konsumén, urang diperlukeun pikeun manggihan cara pikeun reliably nyingkronkeun data konfigurasi sakuliah buana.

Dina awal éta Firman. Éta gancang janten protokol komunikasi anu peryogi pembaruan.


The cornerstone tina ayana QControl urang, sarta dina waktos anu sareng alesan utama pikeun méakkeun jumlah signifikan waktu jeung sumber dina ngawangun jenis ieu protokol, nyaéta kabutuhan pikeun ménta hiji sumber otoritas tunggal konfigurasi sarta, pamustunganana, nyingkronkeun titik kami ayana. jeung éta. Panyimpenan sorangan ngan salah sahiji sababaraha sarat salila ngembangkeun QControl. Salaku tambahan, kami ogé peryogi integrasi sareng jasa anu aya sareng rencanana dina titik ayana (POP), metode pinter (sareng disaluyukeun) pikeun validasi data, ogé kontrol aksés. Sagedengeun ti eta, urang ogé hayang ngadalikeun sistem misalna ngagunakeun paréntah tinimbang nyieun modifikasi kana file. Sateuacan QControl, data ieu dikirim ka titik ayana ampir sacara manual. Upami salah sahiji titik ayana henteu sayogi sareng urang hilap ngapdetna engké, konfigurasina bakal teu sinkron sareng urang kedah miceunan waktos pikeun nyadangkeun sareng ngajalankeun.

Hasilna, urang datang nepi ka skéma handap:
Sistem manajemen konfigurasi jaringan nyaring Qrator
Server konfigurasi tanggung jawab pikeun validasi sareng neundeun data; router ngagaduhan sababaraha titik tungtung anu nampi sareng nyebarkeun apdet konfigurasi ti klien sareng tim dukungan ka server, sareng ti server ka titik ayana.

Kualitas sambungan Internet masih rupa-rupa lega di sakuliah dunya - pikeun ngagambarkeun titik ieu, hayu urang nempo hiji MTR basajan ti Praha, Céko ka Singapura jeung Hong Kong.

Sistem manajemen konfigurasi jaringan nyaring Qrator
MTR ti Praha ka Singapura

Sistem manajemen konfigurasi jaringan nyaring Qrator
Hal anu sarua pikeun Hongkong

Latensi tinggi hartina laju handap. Sajaba ti éta, aya pakét leungitna. Lebar saluran henteu ngimbangan masalah ieu, anu kedah dipertimbangkeun nalika ngawangun sistem desentralisasi.

Konfigurasi pinuh ku titik ayana mangrupakeun jumlah signifikan data nu kudu dikirim ka loba panarima ngaliwatan sambungan dipercaya. Untungna, sanajan konfigurasi robah terus, éta lumangsung dina increments leutik.

Desain panganyarna-stabil

Urang bisa disebutkeun yen ngawangun jaringan disebarkeun dumasar kana prinsip apdet Incremental mangrupakeun solusi anu cukup atra. Tapi aya seueur masalah sareng diffs. Urang kudu nyimpen sagala diffs antara titik rujukan, sarta ogé bisa resend aranjeunna bisi batur lasut bagian tina data. Unggal tujuan kedah nerapkeun aranjeunna dina sekuen anu ditangtukeun sacara ketat. Biasana, dina kasus sababaraha tujuan, operasi sapertos kitu tiasa lami. Panarima ogé kedah tiasa nyuhunkeun bagian anu leungit sareng, tangtosna, bagian sentral kedah ngabales pamundut sapertos kitu, ngan ukur ngirim data anu leungit.

Hasilna, urang sumping ka solusi rada metot - urang boga ngan hiji lapisan rujukan, dibereskeun, hayu urang sebut wae stabil, sarta ngan hiji diff pikeun eta - panganyarna. Unggal panganyarna dumasar kana stabil panungtungan dihasilkeun sarta cukup pikeun ngawangun deui data konfigurasi. Pas anu anyar anu seger dugi ka tujuanana, anu lami henteu diperyogikeun deui.

Sadaya anu tetep nyaéta ngirim konfigurasi stabil seger ti jaman ka jaman, contona sabab panganyarna parantos ageung teuing. Anu penting ogé di dieu nyaéta yén kami ngirimkeun sadaya apdet ieu dina mode siaran / multicast, tanpa hariwang ngeunaan panampi individu sareng kamampuan pikeun ngahijikeun potongan data. Sakali kami yakin yén dulur boga stabil bener, urang ngan ngirimkeun anyar anyar. Éta patut clarifying yén ieu jalan? Gawéna. Stabil ieu sindangan dina server konfigurasi jeung panarima, panganyarna dijieun sakumaha diperlukeun.

Arsitéktur angkutan dua tingkat

Naha urang ngawangun angkutan urang dina dua tingkat? Jawabanna cukup saderhana - kami hoyong ngaleungitkeun rute tina logika tingkat luhur, nyandak inspirasi tina modél OSI kalayan lapisan angkutan sareng aplikasi na. Kami nganggo Thrift pikeun peran protokol transportasi, sareng format serialisasi msgpack pikeun format pesen kontrol tingkat luhur. Ieu naha router (ngajalankeun multicast / broadcast / relay) teu kasampak di jero msgpack, teu ngabongkar atawa pak eusi deui, sarta ngan neruskeun data.

Thrift (tina basa Inggris - "thrift", diucapkeun [θrift]) nyaéta basa déskripsi antarbeungeut anu dipaké pikeun nangtukeun jeung nyieun ladenan pikeun basa program béda. Éta mangrupikeun kerangka pikeun nelepon prosedur jauh (RPC). Ngagabungkeun pipa software sareng mesin generasi kode pikeun ngembangkeun jasa anu dianggo langkung atanapi kirang éfisién sareng gampang antara basa.

Kami milih kerangka Thrift kusabab RPC sareng dukungan pikeun seueur basa. Sakumaha biasa, bagian anu gampang nyaéta klien sareng server. Tapi, router tétéla janten kacang tangguh pikeun rengat, sabagean alatan kurangna solusi siap-dijieun salila ngembangkeun urang.

Sistem manajemen konfigurasi jaringan nyaring QratorAya pilihan sanés, sapertos protobuf / gRPC, kumaha ogé, nalika kami ngamimitian proyék kami, gRPC rada énggal sareng kami henteu wani nyandak éta.

Tangtosna, urang tiasa (sareng kanyataanna kedah) ngawangun sapédah urang sorangan. Eta bakal leuwih gampang nyieun protokol pikeun naon urang kudu sabab arsitektur klien-server relatif lugas pikeun nerapkeun dibandingkeun ngawangun router dina Thrift. Hiji cara atanapi anu sanés, aya bias tradisional kana protokol anu ditulis ku sorangan sareng palaksanaan perpustakaan populér (kanggo alesan anu saé); salian ti éta, nalika diskusi, patarosan sering muncul: "Kumaha urang badé ngalihkeun ieu ka basa sanés?" Janten urang langsung ngaluarkeun ide sapedah.

Msgpack sami sareng JSON, tapi langkung gancang sareng langkung alit. Éta mangrupikeun format sérialisasi data binér anu ngamungkinkeun data ditukeurkeun antara sababaraha basa.

Dina tingkat kahiji urang boga Thrift jeung informasi minimum diperlukeun pikeun router pikeun neraskeun pesen. Dina tingkat kadua aya rangkep struktur msgpack.

Kami milih msgpack sabab langkung gancang sareng langkung kompak dibandingkeun sareng JSON. Tapi anu langkung penting, éta ngadukung jinis data khusus, ngamungkinkeun urang ngagunakeun fitur anu saé sapertos ngalangkungan binari atah atanapi objék khusus anu nunjukkeun henteuna data, anu penting pikeun skéma "anyar-stabil" urang.

JMESPath
JMESPath mangrupikeun basa pamundut JSON.
Ieu persis kumaha katerangan anu urang kéngingkeun tina dokuméntasi JMESPath resmi, tapi kanyataanna, éta langkung seueur tibatan éta. JMESPath ngamungkinkeun anjeun milarian sareng nyaring subtrees dina struktur tangkal sawenang, sareng nerapkeun parobihan kana data dina laleur. Éta ogé ngamungkinkeun anjeun pikeun nambihan saringan khusus sareng prosedur transformasi data. Sanajan eta, tangtosna, merlukeun usaha otak ngartos.

Jinja
Kanggo sababaraha konsumen, urang kedah ngarobih konfigurasi kana file - janten kami nganggo mesin template sareng Jinja mangrupikeun pilihan anu jelas. Kalayan pitulungna, urang ngahasilkeun file konfigurasi tina citakan sareng data anu ditampi di tujuan.

Pikeun ngahasilkeun file konfigurasi, urang peryogi pamundut JMESPath, template pikeun lokasi file di FS, sarta template pikeun config sorangan. Ieu ogé mangrupakeun ide nu sae dina tahap ieu netelakeun idin file. Sadaya ieu suksés digabungkeun dina hiji file - sateuacan ngamimitian template konfigurasi, kami nempatkeun header dina format YAML anu ngajelaskeun sésana.

Contona:

---
selector: "[@][[email protected]._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) }}

Dina raraga nyieun file konfigurasi pikeun layanan anyar, urang ngan nambahkeun file template anyar. Taya parobahan kode sumber atawa software dina titik ayana diperlukeun.

Naon geus robah saprak QControl indit hirup? Hal kahiji jeung pangpentingna nyaéta pangiriman konsisten tur dipercaya tina apdet konfigurasi ka sadaya titik dina jaringan. Anu kadua nyaéta nampi alat anu kuat pikeun mariksa konfigurasi sareng parobihan kana éta ku tim dukungan kami, ogé ku konsumén jasa.

Urang tiasa ngalakukeun sadayana ieu nganggo skéma pembaruan anu stabil-anyar pikeun nyederhanakeun komunikasi antara server konfigurasi sareng panarima konfigurasi. Ngagunakeun protokol dua-lapisan pikeun ngarojong cara eusi-bebas tina routing data. Hasilna ngahijikeun mesin generasi konfigurasi basis Jinja kana jaringan panyaring anu disebarkeun. Sistem ieu ngadukung rupa-rupa metode konfigurasi pikeun périferal anu disebarkeun sareng hétérogén.

Hatur nuhun pikeun pitulung anjeun dina nulis materi. VolanDamrod, serenheit, henteuN.

Vérsi Inggris pos.

sumber: www.habr.com

Tambahkeun komentar