Sistema sa pagdumala sa pag-configure sa network sa Qrator

Sistema sa pagdumala sa pag-configure sa network sa Qrator

TL; DR: Deskripsyon sa arkitektura sa kliyente-server sa among internal nga sistema sa pagdumala sa configuration sa network, QControl. Gibase kini sa usa ka two-layer transport protocol nga naglihok sa mga mensahe nga puno sa gzip nga walay decompression tali sa mga endpoint. Ang mga gipang-apod-apod nga mga router ug mga endpoint nakadawat mga update sa pag-configure, ug ang protocol mismo nagtugot sa pag-install sa mga lokal nga intermediate relay. Ang sistema gitukod sa prinsipyo differential backup (β€œbag-o nga lig-on”, gipatin-aw sa ubos) ug naggamit sa JMESpath query nga pinulongan uban sa Jinja templating engine sa pag-render sa mga configuration file.

Ang Qrator Labs naglihok sa usa ka globally distributed attack mitigation network. Ang among network naglihok sa prinsipyo sa anycast, ug ang mga subnet gi-advertise pinaagi sa BGP. Ingon usa ka BGP anycast network nga pisikal nga nahimutang sa daghang mga rehiyon sa Yuta, mahimo namon nga maproseso ug masala ang dili lehitimong trapiko nga mas duol sa kinauyokan sa mga operator sa Internet - Tier-1.

Sa laing bahin, ang pagkahimong usa ka geographically distributed network dili sayon. Ang komunikasyon tali sa mga punto sa presensya sa network hinungdanon alang sa taghatag sa serbisyo sa seguridad nga adunay makanunayon nga pag-configure sa tanan nga mga node sa network, nga gi-update kini sa tukma sa panahon nga paagi. Busa, aron mahatagan ang labing taas nga posible nga lebel sa kinauyokan nga serbisyo sa konsumedor, kinahanglan namon nga mangita usa ka paagi aron masaligan ang pag-sync sa datos sa pag-configure sa mga kontinente.

Sa sinugdan mao na ang Pulong. Kini dali nga nahimong usa ka protocol sa komunikasyon nga nanginahanglan usa ka update.


Ang sukaranan sa paglungtad sa QControl, ug sa samang higayon ang panguna nga hinungdan sa paggasto sa daghang oras ug mga kahinguhaan sa pagtukod niini nga matang sa protocol, mao ang panginahanglan nga makakuha usa ka awtoritatibo nga gigikanan sa pag-configure ug, sa katapusan, i-synchronize ang among mga punto sa presensya. uban niini. Ang pagtipig mismo usa lang sa daghang mga kinahanglanon sa panahon sa pagpalambo sa QControl. Dugang pa, gikinahanglan usab namo ang mga integrasyon sa anaa ug giplanohan nga mga serbisyo sa mga punto sa presensya (POP), maalamon (ug napasadya) nga mga pamaagi sa pag-validate sa datos, ingon man ang pagkontrol sa pag-access. Gawas pa niini, gusto usab namon nga kontrolon ang ingon nga sistema gamit ang mga mando kaysa maghimo mga pagbag-o sa mga file. Sa wala pa ang QControl, ang datos gipadala sa mga punto sa presensya nga halos mano-mano. Kung ang usa sa mga punto sa presensya dili magamit ug nakalimot kami nga i-update kini sa ulahi, ang pag-configure dili ma-sync ug kinahanglan namon nga mag-usik sa oras sa pagpabalik niini ug pagdagan.

Ingon usa ka sangputanan, nahimo namon ang mosunud nga laraw:
Sistema sa pagdumala sa pag-configure sa network sa Qrator
Ang configuration server maoy responsable sa data validation ug storage; ang router adunay ubay-ubay nga endpoints nga makadawat ug broadcast configuration updates gikan sa mga kliyente ug support teams ngadto sa server, ug gikan sa server ngadto sa mga punto sa presensya.

Nagkalainlain gihapon ang kalidad sa koneksyon sa internet sa tibuok kalibutan - aron ihulagway kini nga punto, atong tan-awon ang usa ka yano nga MTR gikan sa Prague, Czech Republic ngadto sa Singapore ug Hong Kong.

Sistema sa pagdumala sa pag-configure sa network sa Qrator
MTR gikan sa Prague hangtod sa Singapore

Sistema sa pagdumala sa pag-configure sa network sa Qrator
Parehas sa Hong Kong

Ang taas nga latency nagpasabut nga ubos nga tulin. Dugang pa, adunay pagkawala sa packet. Ang gilapdon sa channel dili makabayad sa kini nga problema, nga kinahanglan kanunay nga tagdon kung magtukod mga desentralisadong sistema.

Ang bug-os nga pag-configure sa usa ka punto sa presensya usa ka hinungdanon nga kantidad sa datos nga kinahanglan ipadala sa daghang mga nakadawat sa dili kasaligan nga mga koneksyon. Maayo na lang, bisan kung ang pag-configure kanunay nga nagbag-o, kini mahitabo sa gagmay nga mga pag-uswag.

Bag-o nga lig-on nga disenyo

Mahimo natong isulti nga ang pagtukod sa usa ka gipang-apod-apod nga network base sa prinsipyo sa incremental nga mga update usa ka klaro nga solusyon. Apan adunay daghang mga problema sa mga diff. Kinahanglan namon nga i-save ang tanan nga mga kalainan tali sa mga reference point, ug mahimo usab nga ipadala kini pag-usab kung adunay usa nga wala’y bahin sa datos. Ang matag destinasyon kinahanglang ipadapat kini sa estrikto nga espesipikong han-ay. Kasagaran, sa kaso sa daghang mga destinasyon, ang ingon nga operasyon mahimong magdugay. Ang tigdawat kinahanglan usab nga makahangyo sa nawala nga mga bahin ug, siyempre, ang sentro nga bahin kinahanglan nga motubag sa ingon nga hangyo sa husto, nagpadala lamang sa nawala nga datos.

Ingon usa ka sangputanan, nakaabut kami sa usa ka makapaikag nga solusyon - adunay usa ra kami nga layer sa pakisayran, naayos, tawgon naton kini nga stable, ug usa ra ang kalainan alang niini - bag-o lang. Ang matag bag-o gibase sa katapusang nahimo nga kuwadra ug igo na aron matukod pag-usab ang datos sa pagsumpo. Sa diha nga ang bag-o nga bag-o moabut sa iyang destinasyon, ang daan dili na kinahanglan.

Ang nahabilin mao ang pagpadala sa usa ka bag-ong stable nga pag-configure matag karon ug unya, pananglitan tungod kay ang bag-o nga nahimo nga dako kaayo. Ang importante usab dinhi mao nga ipadala namo ang tanan niini nga mga update sa usa ka broadcast/multicast mode, nga walay pagkabalaka mahitungod sa indibidwal nga mga nakadawat ug sa ilang abilidad sa paghiusa sa mga piraso sa datos. Kung nakasiguro na kami nga ang tanan adunay husto nga kuwadra, nagpadala ra kami mga bag-o. Angayan ba nga ipatin-aw nga kini molihok? Mga buhat. Ang stable gi-cache sa configuration server ug mga nakadawat, bag-o lang gihimo kung gikinahanglan.

Arkitektura sa duha ka lebel nga transportasyon

Ngano nga gihimo namon ang among transportasyon sa duha ka lebel? Ang tubag yano ra - gusto namon nga i-decouple ang ruta gikan sa taas nga lebel nga lohika, pagkuha inspirasyon gikan sa modelo sa OSI nga adunay mga layer sa transportasyon ug aplikasyon. Gigamit namo ang Thrift para sa papel sa transport protocol, ug ang msgpack serialization format para sa taas nga lebel nga format sa mga control messages. Mao kini ang hinungdan ngano nga ang router (nagbuhat og multicast/broadcast/relay) dili motan-aw sa sulod sa msgpack, dili mo-unpack o mo-pack sa sulod balik, ug mo-forward lang sa data.

Ang pagdaginot (gikan sa English - "pagdaginot", gilitok nga [ΞΈrift]) kay usa ka lengguwahe sa paghulagway sa interface nga gigamit sa pagpasabot ug paghimo og mga serbisyo alang sa lain-laing mga programming language. Kini usa ka balangkas alang sa remote procedure calls (RPC). Naghiusa sa usa ka software pipeline uban sa usa ka code generation engine aron sa pagpalambo sa mga serbisyo nga mas epektibo ug sayon ​​sa pagtrabaho tali sa mga pinulongan.

Gipili namo ang Thrift framework tungod sa RPC ug suporta sa daghang pinulongan. Sama sa naandan, ang dali nga mga bahin mao ang kliyente ug server. Bisan pa, ang router nahimo nga usa ka lisud nga nut sa pag-crack, bahin tungod sa kakulang sa usa ka andam nga solusyon sa panahon sa among pag-uswag.

Sistema sa pagdumala sa pag-configure sa network sa QratorAdunay uban pang mga kapilian, sama sa protobuf / gRPC, bisan pa, sa pagsugod namon sa among proyekto, bag-o pa ang gRPC ug wala kami mangahas sa pagdala niini.

Siyempre, mahimo namong (ug sa tinuud kinahanglan nga) makahimo sa among kaugalingon nga bisikleta. Mas sayon ​​ang paghimo og protocol alang sa atong gikinahanglan tungod kay ang arkitektura sa kliyente-server medyo prangka nga ipatuman kumpara sa pagtukod og router sa Thrift. Usa ka paagi o lain, adunay tradisyonal nga pagpihig sa mga protocol nga gisulat sa kaugalingon ug pagpatuman sa mga sikat nga librarya (alang sa maayong katarungan); dugang pa, sa panahon sa mga diskusyon ang pangutana kanunay nga moabut: "Unsaon naton kini ipadala sa ubang mga pinulongan?" Mao nga gisalikway dayon namon ang ideya sa usa ka bisikleta.

Ang Msgpack susama sa JSON, apan mas paspas ug mas gamay. Kini usa ka binary data serialization format nga nagtugot sa data nga ibaylo tali sa daghang mga pinulongan.

Sa una nga lebel kita adunay Pagdaginot nga adunay labing gamay nga kasayuran nga gikinahanglan alang sa router nga ipadala ang mensahe. Sa ikaduha nga lebel adunay mga giputos nga mga istruktura sa msgpack.

Gipili namo ang msgpack tungod kay kini mas paspas ug mas compact itandi sa JSON. Apan labaw sa tanan, gisuportahan niini ang mga custom nga tipo sa datos, nga nagtugot kanamo sa paggamit sa mga cool nga bahin sama sa pagpasa sa mga hilaw nga binary o espesyal nga mga butang nga nagpaila sa pagkawala sa datos, nga hinungdanon alang sa among "bag-o nga lig-on" nga laraw.

JMESPath
Ang JMESPath kay JSON query language.
Mao gyud kini ang hitsura sa paghulagway nga makuha namon gikan sa opisyal nga dokumentasyon sa JMESPath, apan sa tinuud, labi pa ang nahimo niini. Gitugotan ka sa JMESPath sa pagpangita ug pagsala sa mga subtree sa usa ka arbitraryong istruktura sa kahoy, ug i-apply ang mga pagbag-o sa datos sa langaw. Gitugotan ka usab nga makadugang mga espesyal nga pagsala ug mga pamaagi sa pagbag-o sa datos. Bisan tuod kini, siyempre, nagkinahanglan og paningkamot sa utok aron masabtan.

Jinja
Alang sa pipila ka mga konsumedor, kinahanglan namon nga himuon ang pag-configure nga usa ka file - busa gigamit namon ang usa ka template nga makina ug ang Jinja mao ang klaro nga kapilian. Uban sa tabang niini, makamugna kami og configuration file gikan sa template ug data nga nadawat sa destinasyon.

Para makamugna ug configuration file, nagkinahanglan mi ug JMESPath request, template para sa file location sa FS, ug template para sa config mismo. Maayo usab nga ideya niining yugtoa nga ipatin-aw ang mga permiso sa file. Ang tanan nga kini malampuson nga gihiusa sa usa ka file - sa wala pa magsugod ang template sa pag-configure, gibutang namon ang usa ka header sa format nga YAML nga naghulagway sa uban.

Pananglitan:

---
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) }}

Aron makahimo og configuration file para sa bag-ong serbisyo, magdugang lang mi og bag-ong template file. Walay mga pagbag-o sa source code o software sa mga punto sa presensya ang gikinahanglan.

Unsa ang nausab sukad ang QControl nahimong live? Ang una ug labing hinungdanon nga butang mao ang makanunayon ug kasaligan nga paghatud sa mga update sa pag-configure sa tanan nga mga node sa network. Ang ikaduha mao ang pagdawat sa usa ka gamhanan nga himan alang sa pagsusi sa configuration ug paghimo sa mga pagbag-o niini sa among support team, ingon man sa mga konsumedor sa serbisyo.

Nahimo namo kining tanan gamit ang bag-o nga stable nga update scheme aron pasimplehon ang komunikasyon tali sa configuration server ug configuration recipients. Paggamit sa usa ka duha ka layer nga protocol aron suportahan ang usa ka paagi nga independente sa sulud sa pag-ruta sa datos. Malampuson nga na-integrate ang Jinja-based configuration generation engine ngadto sa usa ka distributed filtering network. Kini nga sistema nagsuporta sa usa ka halapad nga mga pamaagi sa pag-configure alang sa among gipang-apod-apod ug heterogeneous nga mga peripheral.

Salamat sa imong tabang sa pagsulat sa materyal. VolanDamrod, serenheit, DiliN.

Bersyon sa Iningles post.

Source: www.habr.com

Idugang sa usa ka comment