/ Aké sú praktické nevýhody používaniasilne zadaný formát výmeny dát (napr. thrift / capn proto) v kontexte mikroprocesov? - json, serializácia, šetrenie, mikroprocesy, výmena dát

Aké sú praktické nevýhody použitia formátov na výmenu silne napísaných údajov (napr. Thrift / capn proto) v kontexte mikroprocesov? - json, serializácia, šetrenie, mikroprocesy, výmena dát

Mám na mysli zavedenie silne napísanéhoformát na výmenu údajov (s preddefinovanou schémou) na komunikáciu medzi našimi internými službami. Napríklad myslím, že niečo ako Thrift alebo Cap "n Proto.

Prinajmenšom dve zrejmé výhody (pre mňa) použitia v porovnaní s niečím, ako je JSON, sú tieto

  1. Poznali by ste presný formát údajov, ktoré služba môže očakávať (takže pri komunikácii zostáva menej miesta na nejasnosti a chyby) a
  2. implementácia vo všeobecnosti deserializuje prvotnú správu a poskytuje metódy pre prístup k objektom.

Aké sú praktické nevýhody pre cestu touto cestou v porovnaní s obdobím ako JSON?

Pre náš kontext - náš systém pozostáva zo služiebnapísané v jazyku python a java - a možno aj v ďalších jazykoch v budúcnosti a komunikuje prostredníctvom koncových bodov HTTP medzi službami a sprostredkovateľmi správ, ako je rabbitmq.

odpovede:

0 pre odpoveď č. 1

Rovnako ako u každého silne napísaného systému je jednou z hlavných výhod bezpochyby to, že ak urobíte chyby, urobí to zlyhá skoro v procese, zvyčajne vo fáze kompilácie, čo je dobrá vec.

Druhou najväčšou výhodou IMHO je to, čo už mátepovedal: pretože polia a typy sú dobre známe, kompilátor, knižnice a súvisiaci kód vedia, aké údaje možno očakávať, a preto ich možno písať / organizovať efektívnejšie - alebo skrátka: výkon.

Na rozdiel od toho systém so stratou typom (ako Avro), pričom umožňuje oveľa viac flexibilita bez potreby prekompilovania prichádza s druhou stranou tej istej mince: nevýhodou je, že sú náchylné na chyby týkajúce sa obsahu správy za behu.

Je to preto, že sa definuje zle definovaný systémiba syntax platného dokumentu (napríklad XML) a ponecháva sémantiku na úrovni správy toho, čo je v dokumente, na horných vrstvách. Silne napísaný systém má vedomosti o tých sémantikách na úrovni správy, ktoré sú už zabudované. v čase kompilácie, Preto je ľahké zistiť / rozhodnúť, čikonkrétny dokument alebo správa nie je iba dobre vypracovaná, ale platí aj vo vzťahu k obsahu správy. Ak potrebujete urobiť to isté s ťažko definovaným systémom, musíte poskytnúť ďalšie informácie pri behu (napríklad schéma XML) a overte svoj dokument proti nemu.

Spodná čiara

Aký systém uprednostňujete, je viac či menej záležitosťouchuti vo väčšine prípadov. Rozhodol by som sa na základe otázky, aké variabilné sú údaje, s ktorými sa musím vyrovnať. Ak má zmysel používať systém so silným typom, išiel by som týmto spôsobom, pretože sa mi veľmi páči, aby som bol informovaný. o chybách a chybách skoro.

Ak je však potrebné veľmi flexibilnédátových štruktúr, môže mať zmysel ísť druhou cestou. Aj keď je určite možné navrhnúť schému napísanú na vrchole silne napísaného systému, je to trochu protirečivé a nakoniec skončíš s príliš komplikovanou, ale príliš všeobecnou vecou.


0 pre odpoveď č. 2

napísaný

Prichádzajúce správy, ktoré sú označené typom, sú veľmi dôležitéoslobodenie, pokiaľ je možné povedať, čo je prichádzajúca správa, bez toho, aby ste si ju všetky prečítali. Ak áno, už sa o poradie správ nestaráte. Dôvodom je to, že pre príjemcu správy je ľahké zvládnuť to. čokoľvek je odoslané. Takže môžete mať aplikáciu, ktorá tam len sedí, pričom vezme všetko, čo dostane, a urobí všetko, čo je pre každú z nich vhodné.

formát

Jazyk schémy, ktorý vám umožňuje definovať hodnotua obmedzenia veľkosti sú veľmi užitočné. To znamená, že odosielateľ správy nemôže omylom poslať neplatnú správu. Okrem toho môže prijímač automaticky zistiť, či prichádzajúca správa spĺňa schému. Toto je skutočný bonus pri implementácii sieťovej služby; veľká časť overenia správy sa vykoná za vás!

Podľa obmedzenia veľkosti mám na mysli, že môžete špecifikovaťako dlho je pole v schéme a vygenerovaný kód odmietne spracovávať polia dlhšie alebo kratšie. Podľa obmedzení hodnoty si predstavte pole správy nazvané „ložisko“; možno budete chcieť obmedziť toto medzi 0 a 359.

Obidva vám umožňujú urobiť jasný, jednoznačnývyhlásenie o tom, čo je rozhranie a či sa má vynútiť automaticky. Koľko bezpečnostných chýb sa vyskytlo nedávno, keď sa niektoré údaje zo sieťového rozhrania nesprávne implementovali ...

možnosti

Jeden sériový štandard, ktorý to všetko robíASN.1. Nástroje, ktoré som použil, berú schému ASN.1 a vytvárajú kód na sériovú a deserializačnú kontrolu, automaticky kontrolujú, či boli splnené obmedzenia týkajúce sa hodnoty a veľkosti a tiež vám povedia, aký je typ prichádzajúcej správy. Nástroje pre ASN.1 môžu byť sú dosť starí a potrebujú aktualizáciu. Ak by sa aktualizovali, bolo by to ideálne na všetky účely, k dispozícii sú binárne aj textové formáty.

Teraz existujú aj schémy JSON a zdá sa, že majú obmedzenia týkajúce sa typu, hodnoty a veľkosti. Možno to je to, čo hľadáte.

Som si celkom istý, že Google Protocol Buffers nevypíšu značkovanie veľmi dobre a nerobia obmedzenia týkajúce sa hodnoty a veľkosti. V schéme GPB som videl komentáre v poradí:

musia byť väčšie ako 10%.

Ak je to to, čo sa zapisuje do schémy, jazyk schémy je pravdepodobne neadekvátny ...

Nie som si istý Thriftom, nie som si istý, či má obmedzenia hodnoty (niekto ma opraví, ak sa mýlim, prosím!).

nevýhody

Nemôže myslieť na nič! Môže to dráždiť vývojárov; kód, o ktorom si mysleli, že je dobrý, možno ľahko odhaliť, že vytvára nevyžiadané správy, ktoré ich intenzívne obťažujú ...