TL; DR: áá»áœááºá¯ááºááá¯á·áá¡ááœááºážááá¯ááºážááœááºáááºááœá²á·á
ááºážáá¯á¶ááŒááºáááºááŸá¯á
á®áá¶ááá·áºááœá²ááŸá¯á
áá
ẠQControl á client-áá¬áá¬áááá¯áá¬ááá±á¬áºááŒáá»ááºá áááºážááẠendpoints áá»á¬ážááŒá¬ážááœáẠáá»á¯á¶á·ááŒááºážáááŸááá² gzip áá¯ááºááá¯ážáá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºáá±á¬ á¡ááœáŸá¬ááŸá
áºááœáŸá¬ áááºáá°ááá¯á·áá±á¬ááºáá±ážáááá¯ááá¯áá±á¬ááᯠá¡ááŒá±áá¶áá¬ážáááºá ááŒáá·áºáá±áá¬ážáá±á¬ routers áá»á¬ážááŸáá·áº endpoints áá»á¬ážááẠconfiguration updates áá»á¬ážááᯠáááºáá¶áááŸáááŒááŒá®áž protocol ááá¯ááºááá¯ááºá localized intermediate relays áá»á¬áž áááºáááºááŒááºážááᯠááœáá·áºááŒá¯áá«áááºá á
áá
áºááẠáááá¬ááá±á«áºááœáẠáááºáááºá
Qrator Labs ááẠááá¹áá¬áá¯á¶ážááá¯ááºáᬠááŒáá·áºáá±ááá¯ááºááá¯ááºááŸá¯ áá»áŸá±á¬á·áá»áá±ážááœááºáááºááᯠáá¯ááºáá±á¬ááºáá«áááºá áá»áœááºá¯ááºááá¯á·áááœááºáááºááẠanycast áá°á¡á áá¯ááºáá±á¬ááºáá±ááŒá®áž subnet áá»á¬ážááᯠBGP ááŸáá áºááá·áº ááŒá±á¬áºááŒá¬áá¬ážáááºá ááá¹áá¬ááŒá±á áá±áá¡áá»á¬ážá¡ááŒá¬ážááœáẠáááºááŸááá±ááá·áº BGP ááœááºáááºáá áºáá¯ááŒá áºááá·áºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááºáá¬áááºá á¡á°ááá¯ááºááŒá áºáá±á¬ Tier-1 á¡á±á¬áºááá±áá¬áá»á¬ážááŸáá·áº ááá¬ážááááºá¡ááœá¬ážá¡áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºááŒá®áž á á áºáá¯ááºááá¯ááºáá«áááºá
á¡ááŒá¬ážáá áºáááºááœááºá áááá®áááºá¡áá±á¡áá¬ážá¡á ááŒáá·áºáá±ááá·áºááœááºáááºááŒá áºááẠáááœááºáá°áá«á ááœááºáááºáá±á¬ááºááŸááá±ááá·áºáá±áá¬áá»á¬ážááŒá¬áž áááºááœááºáá±ážááẠáá¯á¶ááŒá¯á¶áá±ážáááºáá±á¬ááºááŸá¯áá±ážáá°á¡ááœáẠááœááºááẠnode áá»á¬ážá¡á¬ážáá¯á¶ážááᯠá¡áá»áááºááŸáá·áºáá áºááŒá±ážáá® á¡ááºááááºáá¯ááºááẠá¡áá±ážááŒá®ážáá«áááºá ááá¯á·ááŒá±á¬áá·áºá á á¬ážáá¯á¶ážáá°á¡ááœáẠááŒá áºááá¯ááºáá»á±á¡ááŒáá·áºáá¯á¶ážá¡ááá·áºááᯠáá¶á·ááá¯ážáá±ážáááºá¡ááœáẠááá¯ááºááŒá®ážáá áºááœááºááŸá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá±áá¬ááᯠáá¯á¶ááŒááºá áááºáá»á áœá¬ áá»áááºááá¯ááºááá¯ááºáá±á¬ áááºážáááºážááᯠááŸá¬ááœá±ááẠááá¯á¡ááºáá«áááºá
á¡á á¡áŠážá ááŸá¯ááºááááºáá±á¬áºááŸááá á¡ááºááááºáá áºáá¯ááá¯á¡ááºááá·áºá¡ááœáẠáááºááœááºáá±ážáááá¯ááá¯áá±á¬ááẠáá»ááºááŒááºá áœá¬ááŒá áºáá¬áááºá
QControl ááááºááŸáááŸá¯áá¡ááŒá±áá¶á¡á¯ááºááŒá
áºááŸáá·áº á€áááá¯ááá¯áá±á¬áá»áá¯ážááá¯áááºáá±á¬ááºáá¬ááœáẠá¡áá»áááºááŸáá·áºáááºážááŒá
áºáá»á¬ážá
áœá¬á¡áá¯á¶ážááŒá¯áááŒááºážáá¡áááá¡ááŒá±á¬ááºážáááºážááŸá¬ áá
áºáá¯áááºážáá±á¬ááœáá·áºááŒá¯áá»ááºááŸááá±á¬ááœá²á·á
ááºážáá¯á¶ááœá²á·á
ááºážáá¯á¶ááá¯ááá°áááºááá¯á¡ááºááŒá®áž áá±á¬ááºáá¯á¶ážááœáẠáá»áœááºá¯ááºááá¯á·ááá±á¬ááºááŸááá±ááá·áºáá±áá¬áá»á¬ážááᯠáá
áºááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá á¡á²áá«ááá¯á ááá¯ááŸá±á¬ááºááŸá¯ááá¯ááºááá¯ááºá QControl ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááœááºáž ááá¯á¡ááºáá»ááºáá»á¬ážá
áœá¬áá²ááŸáá
áºáá¯áá¬ááŒá
áºáááºá ááá¯á·á¡ááŒááºá áááºááŸááá±á¬ááºááŸááá±ááá·áºáá±áá¬áá»á¬áž (POP)á áá±áá¬á¡áááºááŒá¯ááŒááºážá¡ááœáẠá
áááºáá»áá±á¬ (ááŸáá·áºá
áááºááŒáá¯ááºááŒááºáááºááá¯ááºáá±á¬) áááºážáááºážáá»á¬ážá¡ááŒáẠáááºáá±á¬ááºááááºážáá»á¯ááºááŸá¯ááá¯ááºáᬠáááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºááŸáá
á®á
ááºáá¬ážáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áá±á«ááºážá
ááºááŸá¯áá»á¬ážáááºáž ááá¯á¡ááºáá«áááºá áááºážá¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá»á¬ážááᯠááŒá¯ááŒááºááœááºážáá¶ááŒááºážááẠááœááºáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯áá²á·ááá¯á·áá±á¬ á
áá
áºáá
áºáá¯ááá¯áááºáž ááááºážáá»á¯ááºááá¯áá«áááºá QControl áááá¯ááºáá®á áá±áá¬ááᯠááá¯ááºááá¯ááºáá®ážáá«áž áá±á¬ááºááŸááá±ááá·áºáá±áá¬áá»á¬ážááá¯á· áá±ážááá¯á·áá²á·áááºá áááºááŸááá±ááá·áºáá±áá¬áá»á¬ážáá²á០áá
áºáá¯ááẠááááá¯ááºáá²á áááºážááᯠáá±á¬ááºááá¯ááºážááœáẠá¡ááºááááºáá¯ááºááẠáá±á·ááœá¬ážáá«áá ááœá²á·á
ááºážááŸá¯áá¯á¶á
á¶ááẠáááºáá°áá»ááœá¬ážáááºááŒá
áºááŒá®áž áááºážááᯠá¡áááºáá°ážáá°ááẠá¡áá»áááºááŒá¯ááºážáá±ááááºááŒá
áºáááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«á¡á
á®á¡á
á¥áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áá«áááºá
configuration server ááẠdata validation ááŸáá·áº storage á¡ááœáẠáá¬áááºááŸááááºá router ááœáẠclients ááŸáá·áº support teams áá»á¬ážá០configuration updates áá»á¬ážááᯠserver ááá¯á· áááºáá¶áᬠáá¯ááºááœáŸáá·áºááá·áº endpoints á¡áá»á¬ážá¡ááŒá¬ážááŸáááŒá®áž server á០server á០áááºááŸááá±áá±á¬ point áá»á¬ážá¡áá ááŸááá«áááºá
ááá¹áá¬áá áºááŸááºážááŸá á¡ááºáá¬áááºáá»áááºáááºááŸá¯á¡áááºá¡ááœá±ážááẠáá»ááºááŒáá·áºá áœá¬ááœá²ááŒá¬ážáá²ááŒá áºááẠ- á€á¡áá»ááºááá¯áá±á¬áºááŒáááºá ááá¬á·ááºá áá»ááºááá¹ááááá¯ááºáá¶á០á ááºáá¬áá°ááŸáá·áº áá±á¬ááºáá±á¬ááºá¡áá ááá¯ážááŸááºážáá±á¬ MTR ááᯠááŒáá·áºááŒáá«á áá¯á·á
Prague á០Singapore ááá¯á· MTR
áá±á¬ááºáá±á¬ááºááŸá¬áááºáž á¡áá¬ážáá°áá«áá²á
High latency ááá¯áááºááŸá¬ á¡ááŸáááºáááá·áºáááºá ááá¯á·á¡ááŒáẠpacket áá¯á¶ážááŸá¯á¶ážááŸá¯áááºáž ááŸááá«áááºá áááá¯áá»á¯ááºááá¯ááºááŸá¯áá»áŸá±á¬á·áá»áá¬ážáá±á¬ á áá áºáá»á¬ážááᯠáááºáá±á¬ááºááá·áºá¡áá« á¡ááŒá²áááºážááá·áºááœááºážá ááºážá á¬ážáááá·áº á€ááŒá¿áá¬á¡ááœáẠáá»ááºáááºá¡áá»ááºááẠáá»á±á¬áºááŒá±ážááá±ážáá±á
áááºááŸááá±áá±á¬áá±áá¬áá áºáá¯á á¡ááŒáá·áºá¡áááœá²á·á ááºážáá¯á¶ááẠáá¯á¶ááŒááºá áááºáá»ááá±á¬áá»áááºáááºááŸá¯áá»á¬ážááŒá±á¬áá·áº áááºáá¶áá°á¡áá»á¬ážá¡ááŒá¬ážáᶠáá±ážááá¯á·áááá·áº áááá¬áááºááŸá¬ážáá±á¬áá±áá¬ááá¬áááŒá áºáááºá áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááẠá¡áááºáááŒááºááŒá±á¬ááºážáá²áá±áá±á¬áºáááºážá áááºážááẠáá±ážáááºáá±á¬ ááŒááºážááŒááºážáá»ááºážááŒá áºáá¬áááºá
áááŒá¬áá±ážáá®á áááºááŒáááºáá±á¬ áá®ááá¯ááºáž
ááá¯ážááŒáŸáá·áºááœááºážáá¶ááŸá¯áá»á¬ážááááá¬áááá¯á¡ááŒá±áá¶á ááŒáá·áºáá±áá¬ážáá±á¬ááœááºáááºáá áºáá¯áááºáá±á¬ááºááŒááºážááẠáá»áŸáá»áŸáááááá¬áááºááŸá¬ážáá±á¬ááŒá±ááŸááºážáá»ááºáá áºáá¯ááŒá áºáááºáᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá¯ááºáááºá áá«áá±ááá·áº ááœá²ááœá²ááŸá¯ ááŒá¿áá¬ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááºá áááºááœáŸááºážááŸááºáá»á¬ážááŒá¬ážááŸá ááœá²ááŒá¬ážááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠááááºážáááºážááẠááá¯á¡ááºááŒá®áž áá áºá á¯á¶áá áºáŠážá០ááœá²áá»á±á¬áºááœá¬ážáá«á áá±áá¬áá áºá áááºáá áºááá¯ááºážááᯠááŒááºáááºáá±ážááá¯á·ááá¯ááºáááºááŒá áºáááºá áŠážáááºáá¬áá áºáá¯á á®ááẠáááºážááá¯á·á¡á¬áž áááºážááŒááºá áœá¬áááºááŸááºáá¬ážáá±á¬ á¡á á®á¡á ááºá¡ááá¯ááºáž áá»áá·áºáá¯á¶ážááááºááŒá áºáááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áá±áá¬á¡áá»á¬ážá¡ááŒá¬ážááœááºá ááá¯ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºáá»ááºááẠá¡áá»áááºááŒá¬ááŒáá·áºááá¯ááºáááºá áááºáá¶áá°ááẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááá¯áááºáž áá±á¬ááºážááá¯ááá¯ááºááááºááŒá áºááŒá®ážá áááá¯á¡ááá¯ááºážááẠááá¯áá±á¬ááºážááá¯áá»ááºááᯠááŸááºáááºá áœá¬ áá¯á¶á·ááŒááºááááºááŒá áºáᬠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááá¯áᬠáá±ážááá¯á·ááááºááŒá áºáááºá
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºá áááºáááºá á¬ážááœááºáá±á¬ááºážáá±á¬ ááŒá±ááŸááºážáá»ááºáá áºáá¯ááá¯á· áá±á¬ááºáá¬ááẠ- áá»áœááºá¯ááºááá¯á·ááœáẠáááºááœáŸááºážá¡ááœáŸá¬áá áºáá¯áᬠááŸááááºá ááŒá¯ááŒááºááŒá®ážá áááºážááᯠáááºááŒáááºáááºáᯠáá±á«áºááŒáá«á áá¯á·á áááºážá¡ááœáẠááœá¬ááŒá¬ážáá»ááºáá áºáá¯áᬠáááŒá¬áá±ážáá®á ááŒá áºáááºá áááŒá¬áá±ážáá®áá áºáá¯á á®ááẠáá±á¬ááºáá¯á¶ážáá¯ááºáá¯ááºáá¬ážáá±á¬ áááºááŒáááºááŸá¯á¡áá±á«áºá¡ááŒá±áá¶ááŒá®áž ááœá²á·á ááºážááŸá¯áá±áá¬ááᯠááŒááºáááºáááºáá±á¬ááºááẠáá¯á¶áá±á¬ááºáá«áááºá áááºáááºáááºáááºá¡áá áºááẠáááºážááŠážáááºáá¬ááá¯á·áá±á¬ááºááŸááááºááŸáá·áºáááŒáá¯ááºáááºá á¡áá±á¬ááºážááᯠáááá¯á¡ááºáá±á¬á·áá«á
áá»ááºááŸááá±áá±ážáááºááŸá¬ áááŒá¬áá±ážáá®á ááŒá®ážáá¬ážááœááºážáá±á¬ááŒá±á¬áá·áºá á¥ááá¬á¡á¬ážááŒáá·áº áááºáááºáá±á¬ áááºááŒáááºáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ áá±ážááá¯á·ááẠáá»ááºááŸááá±áá±ážáááºá á€áá±áá¬ááááºáž á¡áá±ážááŒá®ážáááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááẠáááºáá¶áá° áá áºáŠážáá»ááºážá á®á¡ááœáẠá áááºáá°á áá¬áááá¯áá² á€á¡ááºááááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá¯ááºááœáŸáá·áºááŒááºáž/á¡ááŒá±á¬ááºá¡áá»á¬ážáá±ážááá·áºáá¯ááºááœáẠáá±ážááá¯á·ááŒááºážááŸáá·áº áááºážááá¯á·á áá±áá¬á¡ááá¯ááºážá¡á áá»á¬ážááᯠá á¯á ááºážááá¯ááºááá·áºá áœááºážáááºááᯠá áááºáá°á áá¬áááá¯áá² áá±ážááá¯á·ááŒááºážááŒá áºáá«áááºá áá°ááá¯ááºážááœáẠááŸááºáááºáá±á¬áááºááŒáááºááŸá¯ááŸáááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áá±áá»á¬áááºááŸáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºááá±á¬á¡áá áºáá»á¬ážááá¯áᬠáá±ážááá¯á·áá«áááºá á€á¡áá¬ááẠá¡áá¯ááºáá¯ááºááŒá±á¬ááºáž ááŸááºážááŸááºážáááºážáááºáž ááááá¯ááºáá«ááá¬ážá á¡áá¯ááºáá»á¬ážá Stable ááᯠconfiguration server ááŸáá·áº áááºáá¶áá°áá»á¬ážááœáẠáááºááŸáºáá¯ááºáá¬ážááŒá®áž áááŒá¬áá±ážáá®á ááá¯á¡ááºáááᯠáááºáá®ážáá¬ážáááºá
ááŸá áºááá·áº áááºáá°ááá¯á·áá±á¬ááºáá±áž áááá¯áá¬
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·ááááºáá°ááá¯á·áá±á¬ááºáá±ážááᯠá¡áááºááŒá±á¬áá·áº á¡ááá·áºááŸá áºááá·áºááŒáá·áº áááºáá±á¬ááºáá²á·ááááºážá á¡ááŒá±á áá±á¬áºáá±á¬áºááá¯ážááŸááºážáá«ááẠ- áá»áœááºá¯ááºááá¯á·ááẠOSI áá±á¬áºáááºá០ááŸá¯á¶á·áá±á¬áºááŸá¯ááá°ááŒá®áž áááºážááááºáá°ááá¯á·áá±á¬ááºáá±ážááŸáá·áº á¡ááá®áá±ážááŸááºážá¡ááœáŸá¬áá»á¬ážááŒáá·áº á¡ááá·áºááŒáá·áºáá¬ážáá±á¬ áá¯áá¹áááá±áá០áááºážááŒá±á¬ááºážááᯠááœá²áá¯ááºááá¯áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá°ááá¯á·áá±á¬ááºáá±ážáááá¯ááá¯áá±á¬áá¡áááºážááá¹áá¡ááœáẠThrift ááŸáá·áº ááááºážáá»á¯ááºááŸá¯áááºáá±á·ááºá»áá¡ááá·áºááŒáá·áºáá±á¬áºáááºá¡ááœáẠmsgpack áá¶áá«ááºá ááºáá±á¬áºáááºááᯠá¡áá¯á¶ážááŒá¯áá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº router (Multicast/broadcast/relay) ááẠmsgpack á¡ááœááºážááᯠáááŒáá·áºáá²á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠááŒááºááœáá·áºááŒááºáž ááá¯á·ááá¯áẠáá¯ááºááá¯ážááŒááºážáááŒá¯áá² áá±áá¬áá»á¬ážááá¯áᬠáá±ážááá¯á·ááŒááºážááŒá áºáááºá
Thrift (á¡ááºá¹áááááºá០- âthriftâ áᯠá¡áá¶ááœááºáá±á¬ [Ξrift]) ááẠááá°áá®áá±á¬ áááá¯ááááºážáááºážáá¬áá¬á áá¬ážáá»á¬ážá¡ááœáẠáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºááŸááºáááºááŸáá·áº áááºáá®ážááẠá¡áá¯á¶ážááŒá¯ááá·áº ááŒá¬ážáá¶áá±á¬áºááŒáá»ááºáá¬áá¬á áá¬ážáá áºáá¯ááŒá áºáááºá áááºážááẠá¡áá±ážááááºážá áá áºáá±á«áºááá¯ááŸá¯ (RPC) á¡ááœáẠáá°áá±á¬ááºáá áºáá¯ááŒá áºáááºá áá¬áá¬á áá¬ážáá»á¬ážá¡ááŒá¬áž ááá¯ááá¯áááá±á¬ááºááŒá®áž ááœááºáá°á áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááœá¶á·ááŒáá¯ážááá¯ážáááºá á±ááẠáá±á¬á·ááºáá²ááá¯ááºááá¯ááºážáá áºáá¯á¡á¬áž áá¯ááºáá¯ááºáá¯ááºááá·áºá¡ááºáá»ááºááŸáá·áº áá±á«ááºážá ááºáá¬ážáááºá
RPC ááŸáá·áº áá¬áá¬á áá¬ážáá»á¬ážá áœá¬á¡ááœáẠáá¶á·ááá¯ážááŸá¯áá»á¬ážááŒá±á¬áá·áº Thrift áá°áá±á¬ááºááᯠááœá±ážáá»ááºáá²á·áááºá áá¯á¶ážá á¶á¡ááá¯ááºážá ááœááºáá°áá±á¬ á¡á áááºá¡ááá¯ááºážáá»á¬ážááẠclient ááŸáá·áº server ááá¯á·ááŒá áºáááºá ááá¯á·áá±á¬áºáááºážá router ááẠáá»áœááºá¯ááºááá¯á·áááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¡ááœááºáž á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ááŒá±ááŸááºážáá»ááºáááŸáááŒááºážááŒá±á¬áá·áº áá áºá áááºáá áºááá¯ááºážá¡á¬ážááŒáá·áº á¡ááºááœá²áááºáááºáá²áá±á¬á¡ááœá¶áá áºáá¯ááŒá áºáá¬áá²á·áááºá
protobuf / gRPC áá²á·ááá¯á·áá±á¬ á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá»á¬áž ááŸááááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºááᯠá áááºáá±á¬á¡áá«á gRPC ááẠá¡ááœááºáá áºááœááºááŒá®áž áááºážááᯠáá»áœááºá¯ááºááá¯á· ááá°áá¶á·áá«á
áá¯ááºáá«áááºá áá«ááá¯á· (ááááºáá±á¬á· ááŸáááá·áºáááº) áá«ááá¯á·ááá¯ááºááá¯ááºá ááºáá®ážááᯠáá±á¬ááºááá¯ááºáá²á·áááºá Client-Server Architecture ááẠThrift ááœáẠRouter áá áºáá¯áááºáá±á¬ááºááŒááºážááŸáá·áº ááŸáá¯ááºážááŸááºáá«á áá»áœááºá¯ááºááá¯á·ááá¯á¡ááºáá±á¬á¡áá¬á¡ááœáẠáááá¯ááá¯áá±á¬áá áºáá¯áááºáá®ážááẠááá¯ááá¯ááœááºáá°áááºááŒá áºáááºá áá áºáááºážááá¯ááºáá áºáááºážá ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬ áááá¯ááá¯áá±á¬áá»á¬ážááŸáá·áº áá°ááŒáá¯ááºáá»á¬ážáá±á¬ á á¬ááŒáá·áºááá¯ááºáá»á¬ážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážá¡áá±á«áº á¡á ááºá¡áᬠáááºááá¯ááºááŸá¯áá»á¬áž ááŸááá±ááẠ(á¡ááŒá±á¬ááºážááŒáá»ááºáá±á¬ááºážááŒá±á¬áá·áº)á ááá¯á·á¡ááŒáẠááœá±ážááœá±ážááŸá¯áá»á¬ážá¡ááœááºáž áá±ážááœááºážáá áºáᯠá¡ááŒá²áá±á«áºáá¬áááº- "á€á¡áá¬ááᯠá¡ááŒá¬ážáá¬áá¬á áá¬ážááá¯á· áááºáá²á·ááá¯á· ááá¯á·ááááºáááºážá" áá«áá²á· áá»áœááºáá±á¬áºááá¯á· áá»ááºáá»ááºáž á ááºáá®ážá á®ážááá¯á· á áááºáá°ážááᯠáá¯ááºááá¯ááºáááºá
Msgpack ááẠJSON ááŸáá·áº áááºáá°áá±á¬áºáááºáž ááá¯ááŒááºááŒá®áž ááá¯áá±ážáááºáááºá áááºážááẠáá±áá¬áá»á¬ážááᯠáá¬áá¬á áá¬ážáá»á¬ážá áœá¬á¡ááŒá¬áž áááŸááºááá¯ááºá á±ááá·áº ááœááá±áᬠá¡ááŸááºá ááºáá±á¬áºáááºáá áºáá¯ááŒá áºáááºá
áááá¡ááá·áºááœáẠáááºáá±á·áá»áºáá±ážááá¯á·ááẠrouter á¡ááœáẠááá¯á¡ááºáá±á¬ á¡áááá·áºáá¯á¶ážá¡áá»ááºá¡áááºáá»á¬ážááŸáá·áºá¡áá° Thrift ááŸááááºá áá¯áááá¡ááá·áºááœáẠáá¯ááºááá¯ážáá¬ážáá±á¬ msgpack ááœá²á·á ááºážáá¯á¶áá»á¬ážááŸááááºá
JSON áááºá á¬ááẠááá¯ááŒááºááŒá®áž ááá¯áá»á áºáá áºáá²á·á¡ááœáẠmsgpack ááᯠááœá±ážáá»ááºáá²á·áá«áááºá ááá¯á·áá±á¬áº ááá¯áá¡áá±ážááŒá®ážáááºááŸá¬á áááºážááẠáá»áœááºá¯ááºááá¯á·á "áááºááá±á¬áááºááŒáááºáá±á¬" á¡á á®á¡á ááºá¡ááœáẠá¡áá±ážááŒá®ážáá±á¬ áá±áá¬áááŸáááŒááºážááᯠááœáŸááºááŒááá·áº á¡ááŒááºáž binaries ááá¯á·ááá¯áẠá¡áá°ážá¡áá¬ááá¹áá¯áá»á¬ážááᯠááŒááºáááºážááŒááºážáá²á·ááá¯á·áá±á¬ á¡á±ážááŒáá±á¬á¡ááºá¹áá«áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááẠá áááºááŒáá¯ááºáá±áá¬á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
JMESPath
JMESPath ááẠJSON á
á¯á¶á
ááºážááŸá¯áá¬áá¬á
áá¬ážáá
áºáá¯ááŒá
áºáááºá
á€áááºááŸá¬ ááá¬ážááẠJMESPath á
á¬ááœááºá
á¬áááºážá០áá»áœááºá¯ááºááá¯á·áááŸáááá·áº áá±á¬áºááŒáá»ááºááẠá¡ááá¡áá»áá°áá±á¬áºáááºáž á¡ááŸááºááááºááœáẠáááºážááẠáá»á¬ážá
áœá¬ááá¯á áá¯ááºáá±á¬ááºáá«áááºá JMESPath ááẠááá·áºá¡á¬áž áááá¬ážáá±á¬áá
áºáááºááœá²á·á
ááºážáá¯á¶ááœáẠáá
áºáááºááœá²áá»á¬ážááᯠááŸá¬ááœá±ááŒá®áž á
á
áºáá¯ááºááá¯ááºááŒá®áž áá±áá¬ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá® á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áááºážááẠááá·áºá¡á¬áž á¡áá°ážá
á
áºáá¯ááºááŸá¯áá»á¬ážááŸáá·áº áá±áá¬á¡ááœááºááŒá±á¬ááºážááŒááºážááá¯ááºáᬠáá¯ááºáá¯á¶ážáá¯ááºáááºážáá»á¬ážááá¯áááºáž ááá·áºááœááºážááá¯ááºá
á±áá«áááºá áá«áá±á¬áẠáá¬ážáááºááá¯á· áŠážááŸá±á¬ááºá¡á¬ážá
áá¯ááºáá¯ááºááá¯á· ááá¯áá«áááºá
Jinja
á¡áá»áá¯á·áá±á¬ á
á¬ážáá¯á¶ážáá°áá»á¬ážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠconfiguration ááᯠááá¯ááºá¡ááŒá
áºááŒá±á¬ááºážááẠááá¯á¡ááºááẠ- ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠtemplate engine ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž Jinja ááẠáááá¬áááºááŸá¬ážáá±á¬ááœá±ážáá»ááºááŸá¯ááŒá
áºáááºá áááºážáá¡áá°á¡áá®ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáŠážáááºáá¬ááá¯á·áááºáá¶áááŸáááá·áº áá¯á¶á
á¶áááááºááŸáá·áº áá±áá¬á០á
á®á
ááºááœá²á·á
ááºážááŸá¯ááá¯ááºáá
áºáá¯ááᯠáá¯ááºáá±ážáá«áááºá
ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáá áºáá¯áá¯ááºáá¯ááºááẠáá»áœááºá¯ááºááá¯á·ááẠJMESPath áá±á¬ááºážááá¯áá»ááºá FS ááŸáááá¯ááºáááºáá±áá¬á¡ááœáẠááá°áá¬áá áºáá¯ááŸáá·áº config ááá¯ááºááá¯ááºá¡ááœáẠááá°áá¬áá áºáᯠááá¯á¡ááºáá«áááºá á€á¡ááá·áºááœáẠááá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážááᯠááŸááºážáááºážááẠá¡ááŒá¶áá±á¬ááºážáá áºáá¯ááŒá áºáááºá á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ááºáá áºáá¯ááœáẠá¡á±á¬ááºááŒááºá áœá¬ áá±á«ááºážá ááºáá¬ážááẠ- ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá¯á¶á á¶áá áááºáá®á áá»ááºá¡áá¬áá»á¬ážááᯠáá±á¬áºááŒááá·áº YAML áá±á¬áºáááºááœáẠáá±á«ááºážá á®ážáá áºáá¯ááᯠááá·áºáá¬ážáááºá
á¥ááá¬:
---
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) }}
áááºáá±á¬ááºááŸá¯á¡áá áºáá áºáá¯á¡ááœáẠááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáá áºáá¯ááŒá¯áá¯ááºáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá°áá¬ááá¯ááºá¡áá áºáá áºáá¯ááá¯áᬠáá±á«ááºážááá·áºáá«áááºá áááºááŸááá±ááá·áºáá±áá¬áá»á¬ážááŸá á¡áááºážá¡ááŒá áºáá¯áẠááá¯á·ááá¯áẠáá±á¬á·ááºáá²ááºá¡á¬áž ááŒá±á¬ááºážáá²ááŸá¯áááá¯á¡ááºáá«á
QControl ááá¯ááºááá¯ááºááœáŸáá·áºááŒá®ážááááºážá áá¬ááœá±ááŒá±á¬ááºážáá²ááœá¬ážáá²á ááááá¯á¶ážááŸáá·áº á¡áá±ážááŒá®ážáá¯á¶ážá¡áá»ááºááŸá¬ ááœááºáááºá¡ááœááºážááŸá node áá»á¬ážá¡á¬ážáá¯á¶ážááá¯á· ááœá²á·á ááºážááŸá¯ááá¯ááºáᬠá¡ááºááááºáá»á¬ážááᯠáááááºáááºážááŸáá·áº áá¯á¶ááŒááºá áááºáá»ááá±á¬ áá±ážááá¯á·ááŒááºážááŒá áºáááºá áá¯áááá¡áá»ááºááŸá¬ áá»áœááºá¯ááºááá¯á·ááá¶á·ááá¯ážáá°áá®ááŸá¯á¡ááœá²á·ááŸá¡ááŒáẠáááºáá±á¬ááºááŸá¯á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá០áááºážá¡á¬áž ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠá á áºáá±ážááŒááºážááŸáá·áº áááºážá¡á¬áž ááŒá±á¬ááºážáá²ááŒááºážáá»á¬ážááŒá¯áá¯ááºááẠá¡á áœááºážáááºááá·áºáááááá¬ááᯠáááºáá¶áááŸááááºááŒá áºáááºá
configuration server ááŸáá·áº configuration áááºáá¶áá°áá»á¬ážá¡ááŒá¬áž áááºááœááºááŸá¯ááᯠááá¯ážááŸááºážá á±ááẠáááŒá¬áá±ážáá®á áááºááŒáááºáá±á¬ á¡ááºááááºá¡á á®á¡á ááºááᯠá¡áá¯á¶ážááŒá¯á á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºááá¯ááºáá²á·áá«áááºá á¡ááŒá±á¬ááºážá¡áá¬-á¡ááŸá®á¡ááá¯áááºážáá±á¬ áá±áá¬áááºážááŒá±á¬ááºážááᯠáá¶á·ááá¯ážááẠá¡ááœáŸá¬ááŸá áºááœáŸá¬ áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá Jinja-based configuration generation engine ááᯠááŒáá·áºáá±áá¬ážáá±á¬ filtering network ááœáẠá¡á±á¬ááºááŒááºá áœá¬ áá±á«ááºážá ááºáá¬ážáááºá á€á áá áºááẠáá»áœááºá¯ááºááá¯á·á ááŒáá·áºáá±ááŸá¯ááŸáá·áº ááœá²ááŒá¬ážáá±áá±á¬ á¡áá¶áá á¹á ááºážáá»á¬ážá¡ááœáẠáá»ááºááŒáá·áºáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠáá¶á·ááá¯ážáá±ážáá«áááºá
á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá±ážáá¬ážáá¬ááœáẠáááºáá¡áá°á¡áá®á¡ááœáẠáá»á±ážáá°ážáááºáá«áááºá
source: www.habr.com