å¹ççã§å ç¢ãªããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³çšã«ã¹ã¿ã ãã€ããªãããã³ã«ã®èšèšã«é¢ããå æ¬çãªã¬ã€ããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®å©ç¹ãæ¬ ç¹ããã¹ããã©ã¯ãã£ã¹ãã»ãã¥ãªãã£äžã®èæ ®äºé ãç¶²çŸ ã
ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®ã«ã¹ã¿ã ãã€ããªãããã³ã«ã®èšèš
ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã¯ãããŒã¿æ§é ãŸãã¯ãªããžã§ã¯ãããä¿åãŸãã¯éä¿¡ã§ããåŸã§ïŒããããç°ãªãã³ã³ãã¥ãŒãã£ã³ã°ç°å¢ã§ïŒåæ§ç¯ã§ãã圢åŒã«å€æããããã»ã¹ã§ããJSONãXMLãProtocol BuffersãAvroãªã©ã®å€ãã®æ¢è£œã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãããã«å©çšã§ããŸãããã«ã¹ã¿ã ãã€ããªãããã³ã«ãèšèšãããšãç¹ã«ã°ããŒãã«ã³ã³ããã¹ãã§é«ãã¹ã«ãŒããããšäœãã¬ã€ãã³ã·ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã®å Žåãããã©ãŒãã³ã¹ãå¹çãããã³å¶åŸ¡ã®ç¹ã§å€§ããªå©ç¹ãåŸãããŸãã
ã«ã¹ã¿ã ãã€ããªãããã³ã«ãæ€èšããçç±
é©åãªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãéžæããããšã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã®æåã«ãšã£ãŠéåžžã«éèŠã§ããæ±çšåœ¢åŒã¯æè»æ§ãšçžäºéçšæ§ãæäŸããŸãããã«ã¹ã¿ã ãã€ããªãããã³ã«ã¯ç¹å®ã®ããŒãºã«åãããŠèª¿æŽã§ããæ¬¡ã®ããšãå¯èœã«ãªããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒãã€ããªãããã³ã«ã¯ãäžè¬ã«ãJSONãXMLãªã©ã®ããã¹ãããŒã¹ã®åœ¢åŒãããè§£æãšçæãé«éã§ããããŒã¿ã人éãèªããããã¹ãã«å€æãããªãŒããŒããããæé€ããŸããããã¯ãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãšãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãé »ç¹ãªæäœã§ãã髿§èœã·ã¹ãã ã§ã¯ç¹ã«éèŠã§ããããšãã°ãã°ããŒãã«åžå Žã§1ç§ãããæ°çŸäžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçãããªã¢ã«ã¿ã€ã éèååŒãã©ãããã©ãŒã ã§ã¯ãã«ã¹ã¿ã ãã€ããªãããã³ã«ã«ããé床åäžãéåžžã«éèŠã«ãªãå¯èœæ§ããããŸãã
- ããŒã¿ãµã€ãºã®åæžïŒãã€ããªåœ¢åŒã¯ãéåžžãããã¹ã圢åŒãããã³ã³ãã¯ãã§ããåºå®ãµã€ãºã®ãã£ãŒã«ãã䜿çšããäžèŠãªæåãæé€ããããšã§ãããŒã¿ãããå¹ççã«è¡šçŸã§ããŸããããã«ãããã¹ãã¬ãŒãžã¹ããŒã¹ãšãããã¯ãŒã¯åž¯åå¹ ãå€§å¹ ã«ç¯çŽã§ããŸããããã¯ã垯åå¹ å®¹éãç°ãªãã°ããŒãã«ãããã¯ãŒã¯ãä»ããŠããŒã¿ãéä¿¡ããå Žåã«ç¹ã«éèŠã§ãããªã¢ãŒããšãªã¢ã®IoTããã€ã¹ããã»ã³ãµãŒããŒã¿ãéä¿¡ããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŠãã ããããã€ããŒããå°ããã»ã©ãããŒã¿ã³ã¹ããäœããªããããããªãŒå¯¿åœãåäžããŸãã
- ãã现ããå¶åŸ¡ïŒã«ã¹ã¿ã ãããã³ã«ã䜿çšãããšãéçºè ã¯ããŒã¿ã®æ§é ãšãšã³ã³ãŒããæ£ç¢ºã«å¶åŸ¡ã§ããŸããããã¯ãããŒã¿ã®æŽåæ§ãã¬ã¬ã·ãŒã·ã¹ãã ãšã®äºææ§ã®ç¢ºä¿ããŸãã¯ç¹å®ã®ã»ãã¥ãªãã£èŠä»¶ã®å®è£ ã«åœ¹ç«ã¡ãŸããæ©å¯æ§ã®é«ãåžæ°ããŒã¿ãå ±æããæ¿åºæ©é¢ã¯ãçµã¿èŸŒã¿ã®æå·åããã³ããŒã¿æ€èšŒã¡ã«ããºã ãåããã«ã¹ã¿ã ãããã³ã«ãå¿ èŠãšããå ŽåããããŸãã
- ã»ãã¥ãªãã£ïŒæ¬è³ªçã«å®å šæ§ãé«ãããã§ã¯ãããŸããããã«ã¹ã¿ã ãããã³ã«ã¯ãããçšåºŠã®ææ§ããæäŸããæ»æè ãçè§£ããŠæªçšããããšããããã«å°é£ã«ããå¯èœæ§ããããŸããããã¯äž»èŠãªã»ãã¥ãªãã£å¯ŸçãšèŠãªãããã¹ãã§ã¯ãããŸããããå€å±€é²åŸ¡ã远å ã§ããŸãããã ããææ§ãã«ããã»ãã¥ãªãã£ã¯ãé©åãªæå·åãšèªèšŒã®ä»£ããã«ãªããªãããšãèŠããŠããããšãéèŠã§ãã
ã«ã¹ã¿ã ãã€ããªãããã³ã«ã®ãã¡ãªãã
æœåšçãªå©ç¹ã«ãããããããã«ã¹ã¿ã ãã€ããªãããã³ã«ã®èšèšã«ã¯æ¬ ç¹ããããŸãã
- éçºäœæ¥ã®å¢å ïŒã«ã¹ã¿ã ãããã³ã«ãéçºããã«ã¯ããããã³ã«ä»æ§ã®èšèšãã·ãªã¢ã©ã€ã¶ãŒãšãã·ãªã¢ã©ã€ã¶ãŒã®å®è£ ãããã³æ£ç¢ºæ§ãšããã©ãŒãã³ã¹ã®ãã¹ããªã©ãå€å€§ãªåŽåãå¿ èŠã§ããããã¯ãJSONãProtocol Buffersãªã©ã®äžè¬çãªåœ¢åŒã®æ¢åã®ã©ã€ãã©ãªã䜿çšããã®ãšã¯å¯Ÿç §çã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€ãã¯ãã§ã«å©çšå¯èœã§ãã
- ã¡ã³ããã³ã¹ã®è€éãïŒã«ã¹ã¿ã ãããã³ã«ã®ã¡ã³ããã³ã¹ã¯ãç¹ã«ã¢ããªã±ãŒã·ã§ã³ãé²åããã«ã€ããŠãå°é£ã«ãªãå¯èœæ§ããããŸãããããã³ã«ãžã®å€æŽã«ã¯ãäžäœäºææ§ã確ä¿ããæ¢åã®ã¯ã©ã€ã¢ã³ããšãµãŒããŒãç Žå£ããªãããã«æ éãªæ€èšãå¿ èŠã§ããé©åãªããŒãžã§ãã³ã°ãšããã¥ã¡ã³ããäžå¯æ¬ ã§ãã
- çžäºéçšæ§ã®èª²é¡ïŒã«ã¹ã¿ã ãããã³ã«ã¯ãç¹ã«æšæºããŒã¿åœ¢åŒã«äŸåããä»ã®ã·ã¹ãã ãšã®çµ±åãé£ããå ŽåããããŸããããã«ãããããŒã¿ã®åå©çšæ§ãå¶éãããå€éšããŒãããŒãšã®æ å ±äº€æãå°é£ã«ãªãå¯èœæ§ããããŸããå°èŠæš¡ãªã¹ã¿ãŒãã¢ãããå éšéä¿¡çšã«ç¬èªã®ãããã³ã«ãéçºããããåŸã§JSONãXMLãªã©ã®æšæºåœ¢åŒã䜿çšããå€§äŒæ¥ãšçµ±åããå¿ èŠãããã·ããªãªãèããŠãã ããã
- ãããã°ã®é£ããïŒãã€ããªãããã³ã«ã®ãããã°ã¯ãããã¹ãããŒã¹ã®åœ¢åŒã®ãããã°ãããé£ããå ŽåããããŸãããã€ããªããŒã¿ã¯äººéãèªãã圢åŒã§ã¯ãªããããã¡ãã»ãŒãžã®å 容ã調ã¹ãŠãšã©ãŒãç¹å®ããããšãå°é£ã«ãªãå¯èœæ§ããããŸããå€ãã®å Žåãç¹æ®ãªããŒã«ãšãã¯ããã¯ãå¿ èŠã§ãã
ã«ã¹ã¿ã ãã€ããªãããã³ã«ã®èšèšïŒéèŠãªèæ ®äºé
ã«ã¹ã¿ã ãã€ããªãããã³ã«ãå®è£ ããå Žåã¯ãæ éãªèšç»ãšèšèšãäžå¯æ¬ ã§ããéèŠãªèæ ®äºé ã以äžã«ç€ºããŸãã
1. ã¡ãã»ãŒãžæ§é ãå®çŸ©ãã
æåã®æé ã¯ã亀æãããã¡ãã»ãŒãžã®æ§é ãå®çŸ©ããããšã§ããããã«ã¯ããã£ãŒã«ãããã®ããŒã¿åãããã³ã¡ãã»ãŒãžå ã®é åºã®æå®ãå«ãŸããŸãããŠãŒã¶ãŒæ å ±ãå«ãåçŽãªã¡ãã»ãŒãžã®æ¬¡ã®äŸãèããŠãã ããã
// ãŠãŒã¶ãŒã¡ãã»ãŒãžæ§é ã®äŸ
struct UserMessage {
uint32_t userId; // ãŠãŒã¶ãŒIDïŒç¬Šå·ãªã32ãããæŽæ°ïŒ
uint8_t nameLength; // ååæååã®é·ãïŒç¬Šå·ãªã8ãããæŽæ°ïŒ
char* name; // ãŠãŒã¶ãŒã®ååïŒUTF-8ãšã³ã³ãŒãæååïŒ
uint8_t age; // ãŠãŒã¶ãŒã®å¹Žéœ¢ïŒç¬Šå·ãªã8ãããæŽæ°ïŒ
bool isActive; // ãŠãŒã¶ãŒã®ã¢ã¯ãã£ãã¹ããŒã¿ã¹ïŒããŒã«å€ïŒ
}
ã¡ãã»ãŒãžæ§é ãå®çŸ©ããéã«èæ ®ãã¹ãéèŠãªåŽé¢ïŒ
- ããŒã¿åïŒåãã£ãŒã«ãã«é©åãªããŒã¿åãéžæããå€ã®ç¯å²ãšå¿ èŠãªã¹ãã¬ãŒãžã¹ããŒã¹ãèæ ®ããŸããäžè¬çãªããŒã¿åã«ã¯ãæŽæ°ïŒç¬Šå·ä»ãããã³ç¬Šå·ãªããããŸããŸãªãµã€ãºïŒãæµ®åå°æ°ç¹æ°ãããŒã«å€ãããã³æååãå«ãŸããŸãã
- ãšã³ãã£ã¢ã³ïŒãã«ããã€ããã£ãŒã«ãïŒæŽæ°ãæµ®åå°æ°ç¹æ°ãªã©ïŒã®ãã€ããªãŒããŒïŒãšã³ãã£ã¢ã³ïŒãæå®ããŸããããã°ãšã³ãã£ã¢ã³ïŒãããã¯ãŒã¯ãã€ããªãŒããŒïŒãšãªãã«ãšã³ãã£ã¢ã³ã¯ã2ã€ã®äžè¬çãªãªãã·ã§ã³ã§ãããããã³ã«ã䜿çšãããã¹ãŠã®ã·ã¹ãã éã§äžè²«æ§ã確ä¿ããŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®å Žåããããã¯ãŒã¯ãã€ããªãŒããŒã«æºæ ããããšããå§ãããŸãã
- å¯å€é·ãã£ãŒã«ãïŒå¯å€é·ã®ãã£ãŒã«ãïŒæååãªã©ïŒã®å Žåã¯ãèªã¿åããã€ãæ°ã瀺ãé·ããã¬ãã£ãã¯ã¹ãå«ããŸããããã«ããããããŸããããªããªããåä¿¡åŽãé©åãªéã®ã¡ã¢ãªãå²ãåœãŠãããšãã§ããŸãã
- ã¢ã©ã€ã¡ã³ããšããã£ã³ã°ïŒããŸããŸãªã¢ãŒããã¯ãã£ã®ããŒã¿ã¢ã©ã€ã¡ã³ãèŠä»¶ãèæ ®ããŸããã¡ã¢ãªå ã§ãã£ãŒã«ããé©åã«ã¢ã©ã€ã¡ã³ããããããã«ããããã«ãããã£ã³ã°ãã€ãã远å ããå¿ èŠãããå ŽåããããŸããããã¯ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããã¢ã©ã€ã¡ã³ãèŠä»¶ãšããŒã¿ãµã€ãºãæ éã«ãã©ã³ã¹ãããå¿ èŠããããŸãã
- ã¡ãã»ãŒãžå¢çïŒã¡ãã»ãŒãžéã®å¢çãèå¥ããã¡ã«ããºã ãå®çŸ©ããŸããäžè¬çãªã¢ãããŒãã«ã¯ãåºå®é·ããããŒãé·ããã¬ãã£ãã¯ã¹ããŸãã¯ç¹å¥ãªåºåãæåã·ãŒã±ã³ã¹ã®äœ¿çšãå«ãŸããŸãã
2. ããŒã¿ãšã³ã³ãŒãæ¹åŒãéžæãã
æ¬¡ã®æé ã¯ããã€ããªåœ¢åŒã§ããŒã¿ã衚çŸããããã®ããŒã¿ãšã³ã³ãŒãæ¹åŒãéžæããããšã§ããããã€ãã®ãªãã·ã§ã³ããããããããã«ç¬èªã®å©ç¹ã𿬠ç¹ããããŸãã
- åºå®é·ãšã³ã³ãŒãïŒåãã£ãŒã«ãã¯ãå®éã®å€ã«é¢ä¿ãªããåºå®æ°ã®ãã€ãã§è¡šãããŸããããã¯ãå€ã®ç¯å²ãéãããŠãããã£ãŒã«ãã«ã¯ã·ã³ãã«ã§å¹ççã§ãããã ããå€ãã®å Žåãå°ããå€ãå«ãŸãããã£ãŒã«ãã§ã¯ç¡é§ã«ãªãå¯èœæ§ããããŸããäŸïŒå€ãå°ããå Žåã§ããåžžã«4ãã€ãã䜿çšããŠæŽæ°ã衚ããŸãã
- å¯å€é·ãšã³ã³ãŒãïŒãã£ãŒã«ãã®è¡šçŸã«äœ¿çšããããã€ãæ°ã¯ããã®å€ã«ãã£ãŠç°ãªããŸããããã¯ãå€ã®ç¯å²ãåºããã£ãŒã«ãã§ã¯ããå¹ççã§ããäžè¬çãªå¯å€é·ãšã³ã³ãŒãæ¹åŒã«ã¯ã次ã®ãã®ããããŸãã
- VarintïŒå°ããæŽæ°ã衚çŸããããã«äœ¿çšãããã€ãæ°ãå°ãªãå¯å€é·æŽæ°ãšã³ã³ãŒããProtocol Buffersã§äžè¬çã«äœ¿çšãããŸãã
- LEB128ïŒãªãã«ãšã³ãã£ã¢ã³ããŒã¹128ïŒïŒVarintã«äŒŒãŠããŸãããããŒã¹128衚çŸã䜿çšããŸãã
- æååãšã³ã³ãŒãïŒæååã®å Žåã¯ãå¿ èŠãªæåã»ããããµããŒãããæåãšã³ã³ãŒããéžæããŸããäžè¬çãªãªãã·ã§ã³ã«ã¯ãUTF-8ãUTF-16ãããã³ASCIIãå«ãŸããŸããUTF-8ã¯ãå¹ åºãæåããµããŒãããæ¯èŒçã³ã³ãã¯ãã§ãããããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
- å§çž®ïŒå§çž®ã¢ã«ãŽãªãºã ã䜿çšããŠãã¡ãã»ãŒãžã®ãµã€ãºãçž®å°ããããšãæ€èšããŠãã ãããäžè¬çãªå§çž®ã¢ã«ãŽãªãºã ã«ã¯ãgzipãzlibãããã³LZ4ãå«ãŸããŸããå§çž®ã¯ãåã ã®ãã£ãŒã«ããŸãã¯ã¡ãã»ãŒãžå šäœã«é©çšã§ããŸãã
3. ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãšãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®ããžãã¯ãå®è£ ãã
ã¡ãã»ãŒãžæ§é ãšããŒã¿ãšã³ã³ãŒãæ¹åŒãå®çŸ©ããããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãšãã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®ããžãã¯ãå®è£ ããå¿ èŠããããŸããããã«ã¯ãããŒã¿æ§é ããã€ããªåœ¢åŒã«å€æããã³ãŒããšããã®éã®ã³ãŒããèšè¿°ããããšãå«ãŸããŸãã`UserMessage`æ§é ã®ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããžãã¯ã®ç°¡åãªäŸã次ã«ç€ºããŸãã
// ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããžãã¯ã®äŸïŒC ++ïŒ
void serializeUserMessage(const UserMessage& message, std::vector& buffer) {
// userIdãã·ãªã¢ã©ã€ãº
uint32_t userId = htonl(message.userId); // ãããã¯ãŒã¯ãã€ããªãŒããŒã«å€æ
buffer.insert(buffer.end(), (char*)&userId, (char*)&userId + sizeof(userId));
// nameLengthãã·ãªã¢ã©ã€ãº
buffer.push_back(message.nameLength);
// ååãã·ãªã¢ã©ã€ãº
buffer.insert(buffer.end(), message.name, message.name + message.nameLength);
// 幎霢ãã·ãªã¢ã©ã€ãº
buffer.push_back(message.age);
// isActiveãã·ãªã¢ã©ã€ãº
buffer.push_back(message.isActive ? 1 : 0);
}
åæ§ã«ããã€ããªããŒã¿ãããŒã¿æ§é ã«å€æãããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããžãã¯ãå®è£ ããå¿ èŠããããŸããç¡å¹ãªããŒã¿ãäºæããªãã¡ãã»ãŒãžåœ¢åŒãªã©ããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³äžã®æœåšçãªãšã©ãŒãåŠçããããšãå¿ããªãã§ãã ããã
4. ããŒãžã§ãã³ã°ãšäžäœäºææ§
ã¢ããªã±ãŒã·ã§ã³ã®é²åã«äŒŽãããããã³ã«ã倿Žããå¿ èŠãããå ŽåããããŸããæ¢åã®ã¯ã©ã€ã¢ã³ããšãµãŒããŒãç Žå£ããªãããã«ãããŒãžã§ãã³ã°ã¹ããŒã ãå®è£ ããããšãéèŠã§ããäžè¬çãªã¢ãããŒãã«ã¯ã次ã®ãã®ããããŸãã
- ã¡ãã»ãŒãžããŒãžã§ã³ãã£ãŒã«ãïŒãããã³ã«ããŒãžã§ã³ã瀺ãããŒãžã§ã³ãã£ãŒã«ããã¡ãã»ãŒãžããããŒã«å«ããŸããåä¿¡åŽã¯ãã®ãã£ãŒã«ãã䜿çšããŠãã¡ãã»ãŒãžãè§£éããæ¹æ³ã決å®ã§ããŸãã
- ãã£ãŒãã£ãŒãã©ã°ïŒç¹å®ã®ãã£ãŒã«ããŸãã¯ãã£ãŒãã£ãŒã®ååšãŸãã¯äžåšã瀺ããã£ãŒãã£ãŒãã©ã°ãå°å ¥ããŸããããã«ãããã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯ãµããŒããããŠãããã£ãŒãã£ãŒãããŽã·ãšãŒãã§ããŸãã
- äžäœäºææ§ïŒå€ãããŒãžã§ã³ãšã®äžäœäºææ§ããããããã³ã«ã®æ°ããããŒãžã§ã³ãèšèšããŸããããã¯ãå€ãã¯ã©ã€ã¢ã³ããæ°ãããã£ãŒãã£ãŒããã¹ãŠãµããŒãããŠããªããŠããæ°ãããµãŒããŒãšéä¿¡ã§ããå¿ èŠãããããšãæå³ããŸãïŒããã³ãã®éïŒãããã«ã¯ãæ¢åã®ãã£ãŒã«ãã®æå³ãåé€ãŸãã¯å€æŽããã«ãæ°ãããã£ãŒã«ãã远å ããããšãããå«ãŸããŸãã
ã°ããŒãã«ã«åæ£ãããã·ã¹ãã ã«æŽæ°ããããã€ããå Žåãäžäœäºææ§ã¯å€ãã®å ŽåãéèŠãªèæ ®äºé ã§ããäžæãæå°éã«æããã«ã¯ãããŒãªã³ã°ãããã€ã¡ã³ããšæ éãªãã¹ããäžå¯æ¬ ã§ãã
5. ãšã©ãŒåŠçãšæ€èšŒ
å ç¢ãªãšã©ãŒåŠçã¯ããããããããã³ã«ã«äžå¯æ¬ ã§ãããã§ãã¯ãµã ãã·ãŒã±ã³ã¹çªå·ããšã©ãŒã³ãŒããªã©ããšã©ãŒãæ€åºããŠå ±åããã¡ã«ããºã ãå«ããŸããéä¿¡åŽãšåä¿¡åŽã®äž¡æ¹ã§ããŒã¿ãæ€èšŒããŠãããŒã¿ãäºæãããç¯å²å ã§ããããããã³ã«ä»æ§ã«æºæ ããŠããããšã確èªããŸããããšãã°ãåä¿¡ãããŠãŒã¶ãŒIDãæå¹ãªç¯å²å ã«ãããã©ããã確èªãããããããã¡ãŒãªãŒããŒãããŒãé²ãããã«æååã®é·ããæ€èšŒãããããŸãã
6. ã»ãã¥ãªãã£äžã®èæ ®äºé
ã»ãã¥ãªãã£ã¯ãã«ã¹ã¿ã ãã€ããªãããã³ã«ãèšèšããéã®äž»èŠãªé¢å¿äºã§ããå¿ èŠããããŸããæ¬¡ã®ã»ãã¥ãªãã£å¯Ÿçãæ€èšããŠãã ããã
- æå·åïŒçèŽããæ©å¯ããŒã¿ãä¿è·ããããã«æå·åã䜿çšããŸããäžè¬çãªæå·åã¢ã«ãŽãªãºã ã«ã¯ãAESãRSAãããã³ChaCha20ãå«ãŸããŸãããããã¯ãŒã¯çµç±ã®å®å šãªéä¿¡ã«ã¯ãTLS/SSLã®äœ¿çšãæ€èšããŠãã ããã
- èªèšŒïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒãèªèšŒããŠããããã䞻匵ã©ããã®äººç©ã§ããããšã確èªããŸããäžè¬çãªèªèšŒã¡ã«ããºã ã«ã¯ããã¹ã¯ãŒããèšŒææžãããã³ããŒã¯ã³ãå«ãŸããŸããã¯ã©ã€ã¢ã³ããšãµãŒããŒã®äž¡æ¹ãçžäºã«èªèšŒããçžäºèªèšŒã®äœ¿çšãæ€èšããŠãã ããã
- æ¿èªïŒãŠãŒã¶ãŒã®åœ¹å²ãšæš©éã«åºã¥ããŠãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããŸããæ¿èªã¡ã«ããºã ãå®è£ ããŠãæ©å¯ããŒã¿ãŸãã¯æ©èœãžã®äžæ£ã¢ã¯ã»ã¹ãé²ããŸãã
- å ¥åæ€èšŒïŒãã¹ãŠã®å ¥åããŒã¿ãæ€èšŒããŠãã€ã³ãžã§ã¯ã·ã§ã³æ»æããã®ä»ã®è匱æ§ãé²ããŸããèšç®ã§äœ¿çšãããããŠãŒã¶ãŒã«è¡šç€ºãããããåã«ãããŒã¿ããµãã¿ã€ãºããŸãã
- ãµãŒãã¹æåŠïŒDoSïŒä¿è·ïŒDoSæ»æããä¿è·ããããã®å¯Ÿçãå®è£ ããŸããããã«ã¯ãçä¿¡ãªã¯ãšã¹ãã®ã¬ãŒãã®å¶éãã¡ãã»ãŒãžãµã€ãºã®æ€èšŒãããã³æªæã®ãããã©ãã£ãã¯ã®æ€åºãšè»œæžãå«ãŸããŸãã
ã»ãã¥ãªãã£ã¯ç¶ç¶çãªããã»ã¹ã§ããããšãå¿ããªãã§ãã ãããæ°ããè åšãšè匱æ§ã«å¯ŸåŠããããã«ãã»ãã¥ãªãã£å¯Ÿçã宿çã«èŠçŽããæŽæ°ããŠãã ãããã»ãã¥ãªãã£ã®å°éå®¶ãéã£ãŠããããã³ã«èšèšãšå®è£ ãèŠçŽããŠãããããšãæ€èšããŠãã ããã
7. ãã¹ããšããã©ãŒãã³ã¹è©äŸ¡
ãããã³ã«ãæ£ç¢ºã§å¹ççã§å ç¢ã§ããããšã確èªããã«ã¯ã培åºçãªãã¹ããäžå¯æ¬ ã§ããã·ãªã¢ã©ã€ã¶ãŒããã·ãªã¢ã©ã€ã¶ãŒãªã©ãåã ã®ã³ã³ããŒãã³ãã®æ£ç¢ºæ§ãæ€èšŒããããã«åäœãã¹ããå®è£ ããŸããããŸããŸãªã³ã³ããŒãã³ãéã®çžäºäœçšãæ€èšŒããããã«çµ±åãã¹ããå®è¡ããŸãããããã³ã«ã®ã¹ã«ãŒããããã¬ã€ãã³ã·ãããã³ãªãœãŒã¹æ¶è²»ã枬å®ããããã«ããã©ãŒãã³ã¹ãã¹ãã宿œããŸããçŸå®çãªã¯ãŒã¯ããŒããã·ãã¥ã¬ãŒãããæœåšçãªããã«ããã¯ãç¹å®ããããã«è² è·ãã¹ãã䜿çšããŸããWiresharkãªã©ã®ããŒã«ã¯ããããã¯ãŒã¯ãã©ãã£ãã¯ã®åæããããã³ã«ã®åé¡ã®ãããã°ã«éåžžã«åœ¹ç«ã¡ãŸãã
ã·ããªãªäŸïŒé«é »åºŠååŒã·ã¹ãã
ã°ããŒãã«èšŒåžååŒæã§1ç§ãããæ°çŸäžä»¶ã®æ³šæãåŠçããå¿ èŠãããé«é »åºŠååŒã·ã¹ãã ãæ³åããŠã¿ãŠãã ããããã®ã·ããªãªã§ã¯ãã«ã¹ã¿ã ãã€ããªãããã³ã«ã¯ãJSONãXMLãªã©ã®æ±çšåœ¢åŒããã倧ããªå©ç¹ãæäŸã§ããŸãã
ãããã³ã«ã¯ã泚æIDãäŸ¡æ Œãããã³æ°éã®åºå®é·ãã£ãŒã«ãã§èšèšãããè§£æãªãŒããŒããããæå°éã«æããããšãã§ããŸããå¯å€é·ãšã³ã³ãŒãã¯ãå¹ åºãéèååã«å¯Ÿå¿ããããã«ã·ã³ãã«ã«äœ¿çšã§ããŸããå§çž®ã䜿çšããŠã¡ãã»ãŒãžã®ãµã€ãºãçž®å°ãããããã¯ãŒã¯ã¹ã«ãŒããããåäžãããããšãã§ããŸããæå·åã䜿çšããŠãæ©å¯æ§ã®é«ãæ³šææ å ±ãä¿è·ã§ããŸãããããã³ã«ã«ã¯ãã·ã¹ãã ã®ä¿¡é Œæ§ã確ä¿ããããã®ãšã©ãŒæ€åºããã³å埩ã®ã¡ã«ããºã ãå«ãŸããŸãããµãŒããŒãšååŒæã®ç¹å®ã®å°ççãªå Žæãããããã¯ãŒã¯èšèšã«èæ ®ããå¿ èŠããããŸãã
代æ¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒïŒé©åãªããŒã«ãéžæãã
ã«ã¹ã¿ã ãã€ããªãããã³ã«ã¯æçã§ãããã«ã¹ã¿ã å®è£ ã«çæããåã«ã代æ¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãæ€èšããããšãéèŠã§ããäžè¬çãªãªãã·ã§ã³ã®æŠèŠã以äžã«ç€ºããŸãã
- JSONïŒJavaScript Object NotationïŒïŒWebã¢ããªã±ãŒã·ã§ã³ãšAPIã§åºã䜿çšãããŠãã人éãèªããããã¹ãããŒã¹ã®åœ¢åŒãJSONã¯è§£æãšçæãç°¡åã§ããããã€ããªåœ¢åŒã»ã©å¹ççã§ã¯ãããŸããã
- XMLïŒExtensible Markup LanguageïŒïŒå¥ã®äººéãèªããããã¹ãããŒã¹ã®åœ¢åŒãXMLã¯JSONãããæè»æ§ããããŸãããããåé·ã§è§£æãè€éã§ãã
- Protocol BuffersïŒGoogleã«ãã£ãŠéçºããããã€ããªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãProtocol Buffersã¯ãå¹ççã§ã³ã³ãã¯ãã§ãããè€æ°ã®èšèªã§ååã«ãµããŒããããŠããŸããããŒã¿ã®æ§é ãå®çŸ©ããã«ã¯ãã¹ããŒãå®çŸ©ãå¿ èŠã§ãã
- AvroïŒApacheã«ãã£ãŠéçºãããå¥ã®ãã€ããªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãAvroã¯Protocol Buffersã«äŒŒãŠããŸãããã¹ããŒãã®é²åããµããŒãããŠãããããæ¢åã®ã¯ã©ã€ã¢ã³ããšãµãŒããŒãç Žå£ããã«ã¹ããŒãã倿Žã§ããŸãã
- MessagePackïŒå¯èœãªéãã³ã³ãã¯ãã§å¹ççã§ããããšãç®æããã€ããªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãMessagePackã¯ãé«ãã¹ã«ãŒããããšäœãã¬ã€ãã³ã·ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
- FlatBuffersïŒãŒãã³ããŒã¢ã¯ã»ã¹çšã«èšèšããããã€ããªã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒãFlatBuffersã䜿çšãããšãè§£æããã«ã·ãªã¢ã©ã€ãºããããããã¡ãŒããçŽæ¥ããŒã¿ã«ã¢ã¯ã»ã¹ã§ãããããèªã¿èŸŒã¿ã®å€ãã¢ããªã±ãŒã·ã§ã³ã«éåžžã«å¹ççã§ãã
ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³åœ¢åŒã®éžæã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸããããã©ãŒãã³ã¹ãããŒã¿ãµã€ãºãçžäºéçšæ§ãã¹ããŒãã®é²åã䜿ãããããªã©ã®èŠçŽ ãèæ ®ããŠãã ãããæ±ºå®ãäžãåã«ãããŸããŸãªåœ¢åŒéã®ãã¬ãŒããªããæ éã«è©äŸ¡ããŠãã ãããå€ãã®å Žåãç¹å®ã®ãæç¢ºã«å®çŸ©ãããããã©ãŒãã³ã¹ãŸãã¯ã»ãã¥ãªãã£äžã®æžå¿µããã«ã¹ã¿ã ã¢ãããŒããå¿ èŠã§ãªãéããæ¢åã®ãªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ãæé©ãªæ¹æ³ã§ãã
çµè«
ã«ã¹ã¿ã ãã€ããªãããã³ã«ã®èšèšã¯ãæ éãªèšç»ãšå®è¡ãå¿ èŠãªè€éãªäœæ¥ã§ãããã ããããã©ãŒãã³ã¹ãå¹çãããã³å¶åŸ¡ãæãéèŠãªå Žåã¯ãæè³ãã䟡å€ããããŸãããã®ã¬ã€ãã§æŠèª¬ãããŠããéèŠãªèŠçŽ ãæ éã«æ€èšããããšã§ãã°ããŒãã«åãããäžçã§ã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ããŒãºãæºããå ç¢ã§å¹ççãªãããã³ã«ãèšèšã§ããŸãããããžã§ã¯ãã®é·æçãªæåã確ä¿ããããã«ãã»ãã¥ãªãã£ãããŒãžã§ãã³ã°ãããã³äžäœäºææ§ãåªå ããããšãå¿ããªãã§ãã ãããã«ã¹ã¿ã ãœãªã¥ãŒã·ã§ã³ãããŒãºã«é©ããã¢ãããŒãã§ãããã©ãããæ±ºå®ããåã«ãåžžã«ã¡ãªãããè€éããšæœåšçãªã¡ã³ããã³ã¹ãªãŒããŒããããšæ¯èŒæ€èšããŠãã ããã