Ukuba usebenza kwihlabathi lophuhliso, ngokuqinisekileyo ukhe wadibana nengxaki endala yokuba ungayihambisa njani idatha ukusuka kwenye indawo ukuya kwenye ngaphandle kokuphazamisa inethiwekhi. Kangangeminyaka, iJSON ibingukumkani ongenakuphikiswa ngenxa yobulula bayo, kodwa njengoko usetyenziso lukhula kwaye izithuthi zisanda, siqala ukuqaphela ukuba Ukuthumela umbhalo ocacileyo kuyingxaki inzima kakhulu ngenxa yendlela esebenze ngayo.
Kulapho iProtobuf ingena khona, isixhobo esenziwe ngu Uphando nto leyo eqinisekisa ukuba ulwazi luhamba ngendlela encinci nekhawulezayo. Ayisiyondlela nje enye, kodwa ukutsiba okusemgangathweni ekusebenzeni kakuhle Kwabo bafuna ukutsala yonke i-byte kwiziseko zabo, ingakumbi kwiindawo ze-microservices okanye kwii-apps zeselfowuni apho i-millisecond nganye ibalwa khona.
Zithini kanye kanye iiProtocol Buffers kwaye zisebenza njani?
Ngokwenyani, iProtocol Buffers yindlela yokwakha idatha edibeneyo engakhethi cala ngokupheleleyo kulwimi nakwiqonga. Ngokungafaniyo neefomathi ezisekelwe kumbhalo, iProtobuf isebenzisa i ikhowudi yokubiniOku kuthetha ukuba idatha ayigcinwanga njengamagama afundekayo, kodwa njengolandelelwano olulungiselelweyo lwee-byte.
Ukuze oku kusebenze, kufuneka siqale sichaze isakhiwo sedatha yethu kwifayile enolwandiso lwe-.proto. Kolu xwebhu, sisebenzisa uLwimi lweNcazelo yoMdibaniso (IDL) apho sichaza khona imiyalezo kunye namasimi ayo. Intsimi nganye inegama, uhlobo lwedatha, kwaye, okubaluleke kakhulu, i inombolo yethegi eyahlukileyoLe nombolo ivumela inkqubo ukuba yazi ukuba yeyiphi idatha eyifundayo ngaphandle kokuphinda igama lentsimi kumyalezo ngamnye, into eyenzekayo kwiJSON kwaye itya indawo eninzi.
Uthelekiso lokusebenza: Protobuf vs. JSON kunye neFlatBuffers
Xa sibeka izinto kwisikali, umahluko uyamangalisa. Ukuba sithelekisa iProtobuf neJSON yakudala, eyangaphambili iphumelela kwisantya sokulandelelanisa kunye nokunciphisa isantya sokulandelelanisa. Enyanisweni, kunokwenzeka. ukunciphisa ixesha lokucubungula ukuya kuthi ga kwi-80% kunye nobukhulu besiphumo sokugqibela kwisaveyi efanayo, rhoqo kuxhomekeke kuhlobo lwedatha.
- JSON: Yeyona ndlela ilula nefundekayo ebantwini, ilungele ukulungisa iimpazamo ngokukhawuleza, kodwa icotha kwaye inzima ngenxa yendalo yayo esekelwe kumbhalo.
- Ii-Protocol Buffers: Ilungelelanisa ukusebenziseka lula nokusebenza kakubi. Lukhetho oluqhelekileyo kwabo basebenzisa i-gRPC abafuna unxibelelwano olungenamthungo phakathi kweseva neseva.
- IiFlatBuffers: Ngumkhuluwa wakhe xa kufikwa ekuphuculeni imemori. Eyona nzuzo yakhe inkulu kukuba... "ikopi engekhoyo"Oku kuthetha ukuba ungafikelela kwidatha ngaphandle kwesidingo sokuyisusa ngokupheleleyo kwimemori, nto leyo eyenza ukuba ibe lolona khetho lukhethwayo kwimidlalo yevidiyo kunye neeapps ezifuna ukwenziwa.
Ngokuphathelele indawo yokugcina, iProtobuf idla ngokuba ncinci ngakumbi kuneFlatBuffers kuba isebenzisa indlela yokumela inani elipheleleyo ethi Ithatha indawo efunekayo kuphela. ngokwexabiso lenani.
Ukusetyenziswa kunye nokusetyenziswa okusebenzayo
Ukuze iProtobuf isebenze, indlela eqhelekileyo kukusebenzisa i-compiler kaGoogle ukuvelisa iiklasi zokufikelela kwidatha ngolwimi oluthandayo, nokuba yiJava, C++, Python, okanye iNode.js. Ezi klasi sele ziza neendlela ezifunekayo zoku. yandisa, yenza ulandelelwano kwaye unciphise i-serial Ulwazi olungenazo iingxaki.
Nangona kunjalo, kukho ukuphunyezwa okufana ne-protobuf-net kwi-.NET ecosystem evumela indlela emfutshane. Endaweni yokusokola ngeefayile ze-.proto, ungasebenzisa iimpawu zomhlobisi ezifana neProtoContract kunye neProtoMember ngqo kwiiklasi ze-C#. Oku kwenza kube lula ukuhamba komsebenzi ngokunika iithegi ngqo kwikhowudi, ngelixa kugcinwa ukusebenza kakuhle kwefomathi ye-binary.
Iintlobo zeentsimi kunye neenguqulelo
Kuyo yonke inguqu yayo, kuye kwavela iinguqulelo ezahlukeneyo. Eyona yangoku, iproto3 yinguqulelo elula kwaye yenziwe ngcono ukusuka kwiproto2 yokuqala, eyilelwe ukuphelisa ukungasebenzi kakuhle kunye nokuphucula ukuhambelana. Ngaphakathi kwezi zicwangciso, singaphatha iimodifiers ezahlukeneyo:
- Kufuneka: Ibonisa ukuba intsimi iyafuneka; ukuba ayikho, umyalezo uthathwa njengongaqaliswanga.
- Ukhetho: Ivumela intsimi ukuba ibekhona okanye ingabikho, inika ixabiso elimiselweyo ukuba alibonelelwanga.
- Iphindaphindiwe: Ilungele uluhlu okanye iingqokelela, ivumela intsimi ukuba ivele nangaliphi na ixesha.
Ukongeza kwiintlobo ezisisiseko ezifana nomtya, int32, float, okanye i-bool, iProtobuf ikuvumela ukuba wenze ulawulo oluntsonkothileyo ngokusebenzisa imiyalezo kunye nokusetyenziswa kwezibalo (ii-enums), nto leyo eyenza kube lula kakhulu ukumodela iidomeyini zeshishini ezintsonkothileyo.
Sebenzisa iimeko kunye noyilo lwenethiwekhi
Eyona ndlela ixhaphakileyo yokusebenzisa obu buchwephesha ifumaneka kwisakhelo se-gRPC. Le nkqubo ye-Remote Procedure Call (RPC) isebenzisa i-Protobuf njengolwimi lwayo lokutshintshiselana, ivumela usetyenziso ukuba lubize imisebenzi kwenye imashini ngokungathi ikwinkqubo efanayo. Oku kubalulekile kwi unxibelelwano phakathi kweenkonzo ezincinci phantse kube ngoko nangoko.
Kumacandelo afana norhwebo lwezemali, kusetyenziswa izakhiwo zemiyalezo ethile. Umzekelo, isicelo (Req), impendulo (Res), isiganeko (Event), kunye nemiyalezo yomzekelo zinokuchazwa. Ukulawula ukuqhekeka kwenethiwekhi, umthwalo womvuzo udla ngokusongelwa kwi umyalezo wesikhongozeli (iProtoMessage) equka uhlobo lomthwalo kunye ne-ID yomyalezo, eqinisekisa ukuba umamkeli uyazi kakuhle indlela yokutolika ii-byte ezifunyenweyo.
Ukukwazi ukwenza ngcono i-serialization ngokusebenzisa i-pointer reuse okanye i-string normalization kunokukhokelela ekongeni indawo kakhulu. Kwiimeko zokwenyani, ukutshintsha ukusuka kwifomathi eqhelekileyo ukuya kwi-optimised nge-FlatBuffers okanye i-Protobuf kubonakalisiwe kunciphisa umthwalo kwinkonzo. Imizuzwana engama-60 ukuya kwimizuzwana emi-3 okanye emi-4 kuphela, ukuphelisa iingxaki ezibalulekileyo.