ã·ãªã¢ã©ã€ãºã®ä»çµã¿ â ãªããžã§ã¯ãã¯ã©ããã£ãŠãã€ãåã«ãªãã®ã
ã·ãªã¢ã©ã€ãºã£ãŠããèããã©ãäœãããŠãã®ïŒ
ããã°ã©ã ãåããŠããšããã¡ã¢ãªäžã«ã¯ãªããžã§ã¯ãã£ãŠããããŒã¿ã®å¡ããããã ãã©ãããã¯ãã®ãŸãŸã ãšãã¡ã€ã«ã«ä¿åããããããã¯ãŒã¯ã§éã£ããã§ããªããã ããã·ãªã¢ã©ã€ãºã¯ããã®ãªããžã§ã¯ããäžåã®ãã€ãåã«å€æããåŠçã®ããšã ããéã«ãã€ãåãããªããžã§ã¯ãã«æ»ãã®ããã·ãªã¢ã©ã€ãºã ãã
ããã ããJSONãXMLãYAMLã¯ããã¹ãããŒã¹ã®ã·ãªã¢ã©ã€ãºåœ¢åŒã ããJSONã¯äººéãèªã¿ããããŠãWeb APIã§ã¯ã»ãŒæšæºãXMLã¯ã¡ãã£ãšåé·ã ãã©ã¹ããŒãã§å³å¯ã«ããŒã¿æ§é ãå®çŸ©ã§ãã匷ã¿ããããYAMLã¯èšå®ãã¡ã€ã«ã§ãã䜿ãããããããã¹ã圢åŒã¯äººãç®ã§èŠãŠç¢ºèªã§ããã®ãæå€§ã®ã¡ãªããã ãã
ãã€ããªåœ¢åŒã£ãŠããã®ãããããïŒJSONãšã©ãéãã®ïŒ
ãã€ããªåœ¢åŒã¯äººéã«ã¯èªããªããã©ããµã€ãºãå°ãããŠåŠçãéãã®ãç¹åŸŽã ãã代衚çãªã®ã¯Googleã®Protocol BuffersïŒProtobufïŒãMessagePackãApache AvroãApache Thriftãããã ããäŸãã°åãããŒã¿ãJSONãšProtobufã§æ¯ã¹ããšãProtobufã®æ¹ããµã€ãºã30ã80%ãããå°ãããªãããšããããã
Protobufã£ãŠã©ãããä»çµã¿ãªã®ïŒ
ãŸã .proto ã£ãŠããã¹ããŒããã¡ã€ã«ã«ããŒã¿æ§é ãå®çŸ©ãããã ããäŸãã°ãUserãšããã¡ãã»ãŒãžã«ã¯stringåã®nameããã£ãŒã«ãçªå·1ãint32åã®ageããã£ãŒã«ãçªå·2ãã¿ããã«ãããããprotocã£ãŠããã³ã³ãã€ã©ã«éããšãåèšèªçšã®ã³ãŒããèªåçæãããããã£ãŒã«ãçªå·ããã€ã³ãã§ãããŒã¿ã«ã¯ãã£ãŒã«ãåãããªãçªå·ã§æ ŒçŽãããããããšãŠãã³ã³ãã¯ãã«ãªããã ã
ãã£ãŒã«ãçªå·ã£ãŠãåŸããããŒã¿æ§é ãå€ããããšãã«å°ããªãã®ïŒ
å®ã¯ãããProtobufã®è³¢ããšããã§ãããã£ãŒã«ãçªå·ããå€ããªããã°ãæ°ãããã£ãŒã«ãã远å ããŠãå€ãã³ãŒãã¯ãã®ãã£ãŒã«ããç¡èŠããã ãã ãããã£ãŒã«ããåé€ããŠãæ°ããã³ãŒãã¯ãå€ããªãããšããŠæ±ãã ãããããã¹ããŒããšããªã¥ãŒã·ã§ã³ãã€ãŸãåæ¹äºææ§ã»åŸæ¹äºææ§ãšåŒã¶ãã ãããã€ã¯ããµãŒãã¹ã§åããŒã ãç¬ç«ããŠãããã€ã§ããã®ã¯ãã®ä»çµã¿ã®ãããã ãã
JSONãšProtobufãšMessagePackãæ§èœã¯ã©ã®ãããéãã®ïŒ
ãã£ããèšããšãããŒã¿ãµã€ãºã¯ProtobufãJSONã®1/3ã1/5ããããMessagePackã¯JSONã®ååãããã ããã·ãªã¢ã©ã€ãºã»ãã·ãªã¢ã©ã€ãºã®é床ãProtobufãæéã§ãJSONã®2ã10åéãã±ãŒã¹ãå€ãããMessagePackã¯ã¹ããŒãäžèŠã§JSONã«è¿ã䜿ãåæãªã®ã«ãã€ããªã§éãããšãããã©ã³ã¹åã ãã
ãããå šéšProtobufã«ããã°ãããããâŠïŒ
䜿ãåãã倧äºãªãã ããJSONã¯Web APIãèšå®ãã¡ã€ã«ã«æé©ã人ãèªãããããã©ãŠã¶ããã€ãã£ãã«å¯Ÿå¿ããŠãããããProtobufã¯ç€Ÿå ã®ãã€ã¯ããµãŒãã¹ééä¿¡ã«åããŠããgRPCãšããé«éãªRPCãã¬ãŒã ã¯ãŒã¯ãProtobufãæ¡çšããŠãããAvroã¯ã¹ããŒããããŒã¿ãšäžç·ã«ä¿åã§ãããããHadoopãKafkaãªã©ããŒã¿ãã€ãã©ã€ã³ã§éå®ããããã ã
ãã·ãªã¢ã©ã€ãºã£ãŠå±éºã ã£ãŠèããããšãããã ãã©âŠïŒ
ãã質åã ãããã·ãªã¢ã©ã€ãºã®è匱æ§ã¯å®ã¯ã»ãã¥ãªãã£ã®äžçã§ã¯è¶ æåãªåé¡ãªãã ãJavaã® ObjectInputStream ã¯ä¿¡é Œã§ããªãããŒã¿ããã·ãªã¢ã©ã€ãºãããšãä»»æã®ã³ãŒããå®è¡ãããŠãµãŒããŒãä¹ã£åãããå±éºããããå®éã«2015幎ã®Apache Commons Collectionsã®è匱æ§ã§å€§åé¡ã«ãªã£ããã
Pythonã®pickleãå±ãªãã£ãŠèããããšããïŒ
ãã®éããPythonã®pickleã¯ãä»»æã®Pythonãªããžã§ã¯ããã·ãªã¢ã©ã€ãºã§ããããšãã䟿å©ãã®è£è¿ãã§ãæªæããpickleããŒã¿ãèªã¿èŸŒããšos.systemã§ä»»æã®ã³ãã³ããå®è¡ã§ããŠããŸããã ããã ããå ¬åŒããã¥ã¡ã³ãã«ããä¿¡é Œã§ããªãããŒã¿ã«pickleã䜿ããªããšæžããŠãããæ©æ¢°åŠç¿ã®ã¢ãã«ãã¡ã€ã«ã§pickleã䜿ãããããšãå€ããããåºæäžæã®ã¢ãã«ãèªã¿èŸŒãã®ã¯ãªã¹ã¯ããããã
gRPCãProtobufãéžãã ã®ã¯éãã ãã®çç±ïŒ
éãã«å ããŠãã¹ããŒãé§åéçºãã§ããç¹ã倧ãããã ãã.protoãã¡ã€ã«ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®å¥çŽæžã«ãªããããAPIã®ä»æ§ãææ§ã«ãªããªããããã«HTTP/2ã®äžã§ã¹ããªãŒãã³ã°éä¿¡ãã§ããŠããã£ãŒã«ãçªå·ã®ãããã§åŸæ¹äºææ§ãæ ä¿ã§ãããLog4Shellã®æ ¹æ¬åå ã®äžã€ãJNDIã«ãã¯ã¢ããçµç±ã®ãã·ãªã¢ã©ã€ãºã ã£ããã©ãProtobufã®ããã«æ§é ãå³å¯ã«å®çŸ©ããã圢åŒãªããããããäºæããªããªããžã§ã¯ãçæã¯èµ·ãã«ãããã ããåå®å šãªã·ãªã¢ã©ã€ãºåœ¢åŒãéžã¶ããšããã»ãã¥ãªãã£ã«ãçŽçµããã£ãŠããšã ãã