Ò»¡¢Ð¯³ÌʵʱÓû§Êý¾Ý²É¼¯ÏµÍ³Éè¼ÆÊµ¼ù
Ëæ×ÅÒÆ¶¯»¥ÁªÍøµÄÐËÆð£¬ÌرðÊǽüÄêÀ´£¬ÖÇÄÜÊÖ»ú¡¢padµÈÒÆ¶¯É豸ƾ½è±ã½Ý¡¢¸ßЧµÄÌØµã·çÃÒÈ«Çò£¬Í¬Ê±¸÷ÀàAPPµÄ¿ìËÙ·¢Õ¹½øÒ»²½½µµÍÁËÒÆ¶¯»¥ÁªÍøµÄ½ÓÈëÃż÷£¬Ô½À´Ô½¶àµÄÍøÃñ¿ªÊ¼´Ó´«Í³PC×ªÒÆÖÁÒÆ¶¯ÖÕ¶ËÉÏ¡£µ«´«Í³µÄ»ùÓÚPCÍøÕ¾ºÍ·ÃÎÊÈÕÖ¾µÄÓû§Êý¾Ý²É¼¯ÏµÍ³ÒѾÎÞ·¨Âú×ãʵʱ·ÖÎöÓû§ÐÐΪ¡¢ÊµÊ±Í³¼ÆÁ÷Á¿ÊôÐԺͻùÓÚλÖ÷þÎñ£¨LBS£©µÈ·½ÃæµÄÐèÇó¡£
ÎÒÃÇÕë¶Ô´«Í³Óû§Êý¾Ý²É¼¯ÏµÍ³ÔÚʵʱÐÔ¡¢ÍÌÍÂÁ¿¡¢Öն˸²¸ÇÂʵȷ½ÃæµÄ²»×㣬·ÖÎöÁËÔÚÒÆ¶¯»¥ÁªÍøÁ÷Á¿¾çÔöµÄ±³¾°Ï£¬Óû§Êý¾Ý²É¼¯ÏµÍ³µÄÐèÇó£¬Ñо¿ÔÚ¶àÖÖ·ÃÎÊÖն˺ͶàÖÖÍøÂçÀàÐ͵ij¡¾°Ï£¬Óû§Êý¾Ýʵʱ¡¢¸ßЧ²É¼¯µÄ·½·¨£¬²¢ÔÚ´Ë»ù´¡ÉÏÉè¼ÆºÍʵÏÖʵʱ¡¢ÓÐÐòºÍ½¡×³µÄÓû§Êý¾Ý²É¼¯ÏµÍ³¡£´Ëϵͳ»ùÓÚJava NIOÍøÂçͨÐÅ¿ò¼Ü£¨Netty£©ºÍ·Ö²¼Ê½ÏûÏ¢¶ÓÁУ¨Kafka£©´æ´¢¿ò¼ÜʵÏÖ£¬Æä¾ßÓÐʵʱÐÔ¡¢¸ßÍÌÍ¡¢Í¨ÓÃÐԺõÈÓŵ㡣
1¡¢¼¼ÊõÑ¡ÐͺÍÉè¼Æ·½°¸
Ò»¸öµäÐ͵ÄÊý¾Ý²É¼¯·ÖÎöͳ¼ÆÆ½Ì¨£¬¶ÔÊý¾ÝµÄ´¦Àí£¬Ö÷ÒªÓÉÈçÏÂÎå¸ö²½Öè×é³É£º

ͼ1 Êý¾Ýƽ̨´¦ÀíÁ÷³Ì
ÆäÖУ¬Êý¾Ý²É¼¯²½ÖèÊÇ×îºËÐĵÄÎÊÌ⣬Êý¾Ý²É¼¯ÊÇ·ñ·á¸»¡¢×¼È·ºÍʵʱ£¬¶¼Ö±½ÓÓ°ÏìÕû¸öÊý¾Ý·ÖÎöƽ̨µÄÓ¦ÓõÄЧ¹û¡£±¾ÂÛÎĹØ×¢µÄ²½ÖèÖ÷ÒªÔÚÊý¾Ý²É¼¯¡¢Êý¾Ý´«ÊäºÍÊý¾Ý½¨Ä£´æ´¢ÕâÈý²¿·Ö¡£
ΪÂú×ãÊý¾Ý²É¼¯·þÎñʵʱ¡¢¸ßЧÐÔ¡¢¸ßÍÌÍÂÁ¿ºÍ°²È«ÐԵȷ½ÃæµÄÒªÇó£¬Í¬Ê±ÄÜ½è¼ø»¥ÁªÍø´óÊý¾ÝÐÐҵһЩÓÅÐ㿪ԴµÄ½â¾ö·½°¸£¬ËùÒÔÕû¸öϵͳ¶¼½«»ùÓÚJava¼¼ÊõÕ»½øÐÐÉè¼ÆºÍʵÏÖ¡£Õû¸öÊý¾Ý²É¼¯·ÖÎöƽ̨ϵͳ¼Ü¹¹ÈçÏÂͼËùʾ£º

ͼ2 Êý¾Ý²É¼¯·ÖÎöƽ̨ϵͳ¼Ü¹¹
ÆäÖÐÕû¸öƽ̨ϵͳÖ÷Òª°üÀ¨ÒÔÉÏÎ岿·Ö£º¿Í»§¶ËÊý¾Ý²É¼¯SDKÒÔHttp(s)/Tcp/UdpÐÒé¸ù¾Ý²»Í¬µÄÍøÂç»·¾³°´Ò»¶¨²ßÂÔ½«Êý¾Ý·¢Ë͵½Mechanic(UBT-Collector)·þÎñÆ÷¡£·þÎñÆ÷¶Ô²É¼¯µÄÊý¾Ý½øÐÐһϵÁд¦ÀíÖ®ºó½«Êý¾ÝÒ첽дÈëHermes(Kafka)·Ö²¼Ê½ÏûÏ¢¶ÓÁÐϵͳ¡£ÎªÁ˹ØÁªÒµÎñ·þÎñ¶ËÓû§ÒµÎñ²Ù×÷Âñµã¡¢ÈÕÖ¾£¬ÒµÎñ·þÎñÆ÷ÐèÒª»ñÈ¡Óɿͻ§¶ËSDKͳһÉú³ÉµÄÓû§±êʶ£¨C-GUID£©£¬È»ºóÒµÎñ·þÎñÆ÷½«Óû§ÒµÎñ²Ù×÷Âñµã¡¢ÈÕÖ¾ÐÅÏ¢ÒÔÒì²½·½Ê½Ð´ÈëHermes(Kafka)¶ÓÁС£×îºóÊý¾ÝÏû·Ñ·ÖÎöƽ̨£¬¶¼´ÓHermes(Kafka)ÖÐÏû·Ñ²É¼¯Êý¾Ý£¬½øÐÐÊý¾Ýʵʱ»òÕßÀëÏß·ÖÎö¡£ÆäÖÐMechanic(UBT-Collector)ϵͳ»¹°üÀ¨¶Ô²É¼¯Êý¾ÝºÍ×ÔÉíϵͳµÄ¼à¿Ø£¬ÕâЩ¼à¿ØÐÅÏ¢ÏÈдÈëHbase¼¯Èº£¬È»ºóͨ¹ýDashboard½çÃæ½øÐÐʵʱ¼à¿Ø¡£
£¨1£©»ùÓÚNIOµÄNettyÍøÂç¿ò¼Ü·½°¸
ÒªÂú×ãÇ°ÃæÌáµ½µÄ¸ßÍÌÍ¡¢¸ß²¢·¢ºÍ¶àÐÒéÖ§³ÖµÈ·½ÃæµÄÒªÇó¡£ÎÒÃǵ÷ÑÐÁ˼¸ÖÖ¿ªÔ´Òì²½IOÍøÂç·þÎñ×é¼þ£¨ÈçNetty¡¢MINI¡¢xSocket£©£¬ÓÃËüÃǺÍNginx Web·þÎñÆ÷½øÐÐÁËÐÔÄܶԱȣ¬¾ö¶¨²ÉÓÃNetty×÷Ϊ²É¼¯·þÎñÍøÂç×é¼þ¡£ÏÂÃæ¶ÔËü½øÐÐһЩ¸ÅÒª½éÉÜ£ºNettyÊÇÒ»¸ö¸ßÐÔÄÜ¡¢Ò첽ʼþÇý¶¯µÄNIO¿ò¼Ü£¬ËüÌṩÁ˶ÔTCP¡¢UDPºÍÎļþ´«ÊäµÄÖ§³Ö£¬NettyµÄËùÓÐIO²Ù×÷¶¼ÊÇÒì²½·Ç×èÈûµÄ£¬Í¨¹ýFuture-Listener»úÖÆ£¬Óû§¿ÉÒÔ·½±ãµÄÖ÷¶¯»ñÈ¡»òÕßͨ¹ý֪ͨ»úÖÆ»ñµÃIO²Ù×÷½á¹û¡£

ͼ3 Netty¿ò¼ÜÄÚ²¿×é¼þÂß¼½á¹¹
NettyµÄÓŵãÓУº
- ¹¦Äܷḻ£¬ÄÚÖÃÁ˶àÖÖÊý¾Ý±à½âÂ빦ÄÜ¡¢Ö§³Ö¶àÖÖÍøÂçÐÒé¡£
- ¸ßÐÔÄÜ£¬Í¨¹ýÓëÆäËüÖ÷Á÷NIOÍøÂç¿ò¼Ü¶Ô±È£¬ËüµÄ×ÛºÏÐÔÄÜ×î¼Ñ¡£
- À©Õ¹ÐԺ㬿Éͨ¹ýËüÌṩµÄChannelHandler×é¼þ¶ÔÍøÂçͨÐÅ·½Ãæ½øÐÐÁé»îÀ©Õ¹¡£
- Ò×ÓÃÐÔ£¬APIʹÓüòµ¥¡£
- ¾¹ýÁËÐí¶àÉÌÒµÓ¦ÓõĿ¼Ñ飬ÔÚ»¥ÁªÍø¡¢ÍøÂçÓÎÏ·¡¢´óÊý¾Ý¡¢µçÐÅÈí¼þµÈÖÚ¶àÐÐÒµµÃµ½³É¹¦ÉÌÓá£
Netty²ÉÓÃÁ˵äÐ͵ÄÈý²ãÍøÂç¼Ü¹¹½øÐÐÉè¼Æ£¬Âß¼¼Ü¹¹Í¼ÈçÏ£º

ͼ4 NettyÈý²ãÍøÂçÂß¼¼Ü¹¹
µÚÒ»²ã£ºReactorͨÐŵ÷¶È²ã¡£¸Ã²ãµÄÖ÷ÒªÖ°Ôð¾ÍÊǼàÌýÍøÂçµÄÁ¬½ÓºÍ¶Áд²Ù×÷£¬¸ºÔð½«ÍøÂç²ãµÄÊý¾Ý¶ÁÈ¡µ½Äڴ滺³åÇøÖУ¬È»ºó´¥·¢¸÷ÖÖÍøÂçʼþ£¬ÀýÈçÁ¬½Ó´´½¨¡¢Á¬½Ó¼¤»î¡¢¶Áʼþ¡¢Ð´Ê¼þµÈ£¬½«ÕâЩʼþ´¥·¢µ½PipelineÖУ¬ÔÙÓÉPipeline³äµ±µÄÖ°ÔðÁ´À´½øÐкóÐøµÄ´¦Àí
µÚ¶þ²ã£ºÖ°ÔðÁ´Pipeline²ã¡£¸ºÔðʼþÔÚÖ°ÔðÁ´ÖÐÓÐÐòµÄÏòǰ£¨ºó£©´«²¥£¬Í¬Ê±¸ºÔð¶¯Ì¬µÄ±àÅÅÖ°ÔðÁ´¡£Pipeline¿ÉÒÔÑ¡Ôñ¼àÌýºÍ´¦Àí×Ô¼º¹ØÐĵÄʼþ¡£
µÚÈý²ã£ºÒµÎñÂß¼´¦Àí²ã£¬Ò»°ã¿É·ÖΪÁ½Àࣺa. ´¿´âµÄÒµÎñÂß¼´¦Àí£¬ÀýÈçÈÕÖ¾¡¢¶©µ¥´¦Àí¡£b. Ó¦ÓòãÐÒé¹ÜÀí£¬ÀýÈçHTTP(S)ÐÒé¡¢FTPÐÒéµÈ¡£
ÎÒÃǶ¼ÖªµÀÓ°ÏìÍøÂç·þÎñͨÐÅÐÔÄܵÄÖ÷ÒªÒòËØÓУºÍøÂçI/OÄ£ÐÍ¡¢Ị̈߳¨½ø³Ì£©µ÷¶ÈÄ£ÐͺÍÊý¾ÝÐòÁл¯·½Ê½¡£
ÔÚÍøÂçI/OÄ£ÐÍ·½Ã棬Netty²ÉÓûùÓÚ·Ç×èÈûI/OµÄʵÏÖ£¬µ×²ãÒÀÀµµÄÊÇJDK NIO¿ò¼ÜµÄSelector¡£
ÔÚÏ̵߳÷¶ÈÄ£ÐÍ·½Ã棬Netty²ÉÓÃReactorÏß³ÌÄ£ÐÍ¡£³£ÓõÄReactorÏß³ÌÄ£ÐÍÓÐÈýÖÖ£¬·Ö±ðÊÇ£º
- Reactorµ¥Ïß³ÌÄ£ÐÍ£ºReactorµ¥Ïß³ÌÄ£ÐÍ£¬Ö¸µÄÊÇËùÓеÄI/O²Ù×÷¶¼ÔÚͬһ¸öNIOÏß³ÌÉÏÃæÍê³É¡£¶ÔÓÚһЩСÈÝÁ¿Ó¦Óó¡¾°£¬¿ÉÒÔʹÓõ¥Ïß³ÌÄ£ÐÍ¡£
- Reactor¶àÏß³ÌÄ£ÐÍ£ºRector¶àÏß³ÌÄ£ÐÍÓëµ¥Ïß³ÌÄ£ÐÍ×î´óµÄÇø±ð¾ÍÊÇÓÐÒ»×éNIOÏ̴߳¦ÀíI/O²Ù×÷¡£Ö÷ÒªÓÃÓڸ߲¢·¢¡¢´óÒµÎñÁ¿³¡¾°¡£
- Ö÷´ÓReactor¶àÏß³ÌÄ£ÐÍ£ºÖ÷´ÓReactorÏß³ÌÄ£Ð͵ÄÌØµãÊÇ·þÎñ¶ËÓÃÓÚ½ÓÊÕ¿Í»§¶ËÁ¬½ÓµÄ²»ÔÙÊÇÒ»¸öµ¥¶ÀµÄNIOỊ̈߳¬¶øÊÇÒ»¸ö¶ÀÁ¢µÄNIOÏ̳߳ء£ÀûÓÃÖ÷´ÓNIOÏß³ÌÄ£ÐÍ£¬¿ÉÒÔ½â¾öÒ»¸ö·þÎñ¶Ë¼àÌýÏß³ÌÎÞ·¨ÓÐЧ´¦ÀíËùÓпͻ§¶ËÁ¬½ÓµÄÐÔÄܲ»×ãÎÊÌâ¡£NettyÏß³ÌÄ£ÐͲ¢·Ç¹Ì¶¨²»±äµÄ£¬Ëü¿ÉÒÔÖ§³ÖÈýÖÖReactorÏß³ÌÄ£ÐÍ¡£
ÔÚÊý¾ÝÐòÁл¯·½Ã棬ӰÏìÐòÁл¯ÐÔÄܵÄÖ÷ÒªÒòËØÓУº
- ÐòÁл¯ºóµÄÂëÁ÷´óС£¨ÍøÂç´ø¿íÕ¼Óã©¡£
- ÐòÁл¯ºÍ·´ÐòÁл¯²Ù×÷µÄÐÔÄÜ£¨CPU×ÊÔ´Õ¼Óã©¡£
- ²¢·¢µ÷ÓÃʱµÄÐÔÄܱíÏÖ£ºÎȶ¨ÐÔ¡¢ÏßÐÔÔö³¤µÈ¡£
NettyĬÈÏÌṩÁ˶ÔGoogle Protobuf¶þ½øÖÆÐòÁл¯¿ò¼ÜµÄÖ§³Ö£¬µ«Í¨¹ýÀ©Õ¹NettyµÄ±à½âÂë½Ó¿Ú£¬¿ÉÒÔʵÏÖÆäËüµÄ¸ßÐÔÄÜÐòÁл¯¿ò¼Ü£¬ÀýÈçAvro¡¢ThriftµÄѹËõ¶þ½øÖƱà½âÂë¿ò¼Ü¡£
ͨ¹ý¶ÔNettyÍøÂç¿ò¼ÜµÄ·ÖÎöÑо¿ÒÔ¼°¶Ô±È²âÊÔ£¨¼ûºóÃæµÄ¿ÉÐÐÐÔ·ÖÎö²âÊÔ±¨¸æ£©¿ÉÅжϣ¬»ùÓÚNettyµÄÊý¾Ý²É¼¯·½°¸Äܽâ¾ö¸ßÊý¾ÝÍÌÍÂÁ¿ºÍÊý¾ÝʵʱÊÕ¼¯µÄÄѵ㡣
£¨2£©¿Í»§¶ËÊý¾Ý¼Ó½âÃܺÍѹËõ·½°¸
¶ÔһЩÃ÷¸ÐµÄ²É¼¯Êý¾Ý£¬ÐèÒªÔÚÊý¾Ý´«Êä¹ý³ÌÖнøÐмÓÃÜ´¦Àí¡£Ä¿Ç°´æÔÚµÄÎÊÌâÊÇ£¬¿Í»§¶Ë²É¼¯´úÂë±È½ÏÈÝÒ×±»ÄäÃûÓû§»ñÈ¡²¢·´±àÒ루ÀýÈçAndroid¡¢JavaScript£©£¬µ¼ÖÂÊý¾Ý¼ÓÃܵÄËã·¨ºÍÃÜÔ¿±»Óû§ÇÔÈ¡£¬½ÏÄѱ£Ö¤Êý¾ÝµÄ°²È«ÐÔ¡£¸ù¾Ý¼ÓÃܽá¹ûÊÇ·ñ¿ÉÒÔ±»½âÃÜ£¬Ëã·¨¿ÉÒÔ·ÖΪ¿ÉÄæ¼ÓÃܺͲ»¿ÉÄæ¼ÓÃÜ£¨µ¥Ïò¼ÓÃÜ£©¡£¾ßÌåµÄ·ÖÀà½á¹¹ÈçÏ£º

ͼ5 ¼ÓÃÜËã·¨·ÖÀà
ÃÜÔ¿£º¶ÔÓÚ¿ÉÄæ¼ÓÃÜ£¬ÃÜÔ¿ÊǼÓÃܽâËã·¨ÖеÄÒ»¸ö²ÎÊý£¬¶Ô³Æ¼ÓÃܶÔÓ¦µÄ¼Ó½âÃÜÃÜÔ¿ÊÇÏàͬµÄ£»·Ç¶Ô³Æ¼ÓÃܶÔÓ¦µÄÃÜÔ¿·ÖΪ¹«Ô¿ºÍ˽Կ£¬¹«Ô¿ÓÃÓÚ¼ÓÃÜ£¬Ë½Ô¿ÓÃÓÚ½âÃÜ¡£Ë½Ô¿ÊDz»¹«¿ª²»´«Ë͵쬽ö½öÓÉͨÐÅË«·½³ÖÓб£Áô£»¶ø¹«Ô¿ÊÇ¿ÉÒÔ¹«¿ª´«Ë͵ġ£·Ç¶Ô³ÆÃÜÔ¿»¹ÌṩһÖÖ¹¦ÄÜ£¬¼´Êý×ÖÇ©Ãû¡£Í¨¹ý˽Կ½øÐÐÇ©Ãû£¬¹«Ô¿½øÐÐÈÏÖ¤£¬´ïµ½Éí·ÝÈÏÖ¤µÄÄ¿µÄ¡£
¸ù¾ÝÊý¾Ý²É¼¯¿Í»§¶ËµÄÌØµã£¬¶ÔÓڲɼ¯Êý¾ÝʹÓöԳƼÓÃÜËã·¨ÊǺÜÃ÷ÖǵÄÑ¡Ôñ£¬¹Ø¼üÊÇÒª±£Ö¤¶Ô³ÆÃÜÔ¿µÄ°²È«ÐÔ¡£Ä¿Ç°¿¼Âǵķ½°¸Ö÷ÒªÓУº
- ½«¼Ó½âÃÜÃÜÔ¿·ÅÈëAPPÖÐijЩ±àÒëºÃµÄsoÎļþÖУ¬Èç¹ûÊÇJavaScript²É¼¯µÄ»°£¬¹¹ÔìÒ»¸öÓÃC±àдµÄËã·¨ÓÃÓÚÉú³ÉÃÜÔ¿£¬È»ºó½èÖúEmscripten°ÑC´úÂëת»¯ÎªJavaScript´úÂ룬ÕâÖÖ·½°¸ÓнϺõĻìÏý×÷Óã¬ÈÃÇÔÌýÕß²»Ì«ÈÝÒ×»ñÈ¡µ½¶Ô³ÆÃÜÔ¿¡£
- ½«ÃÜÔ¿±£´æµ½·þÎñÆ÷¶Ë£¬Ã¿´Î·¢ËÍÊý¾Ýǰ£¬Í¨¹ýHTTPSµÄ·½Ê½»ñÈ¡¼ÓÃÜÃÜÔ¿£¬È»ºó¶Ô²É¼¯Êý¾Ý½øÐмÓÃܺͷ¢ËÍ¡£
- ¿Í»§¶ËºÍ·þÎñÆ÷¶Ë±£´æÒ»·Ý¹«Ô¿£¬¿Í»§¶ËÉú³ÉÒ»¸ö¶Ô³ÆÃÜÔ¿K£¨¾ßÓÐËæ»úÐÔºÍʱЧÐÔ£©£¬Ê¹Óù«Ô¿¼ÓÃܿͻ§¶ËͨÐÅÈÏÖ¤ÄÚÈÝ£¨UID+K£©£¬²¢·¢Ë͵½·þÎñÆ÷¶Ë£¬·þÎñ¶ËÊÕµ½Í¨ÐÅÈÏÖ¤ÇëÇó£¬Ê¹ÓÃ˽Կ½øÐнâÃÜ£¬»ñÈ¡µ½UIDºÍ¶Ô³ÆÃÜÔ¿K£¬ºóÃæÃ¿´Î²É¼¯µÄÊý¾Ý¶¼Óÿͻ§¶ËÄÚ´æÖеÄK½øÐмÓÃÜ£¬·þÎñÆ÷¶Ë¸ù¾ÝUIDÕÒµ½¶ÔÓ¦µÄ¶Ô³ÆÃÜÔ¿K£¬½øÐÐÊý¾Ý½âÃÜ¡£
ÕâÈýÖÖ¿Í»§¶ËÊý¾Ý¼ÓÃÜ·½Ê½»ù±¾Äܽâ¾ö¿Í»§¶Ë²É¼¯Êý¾Ý´«ÊäµÄ°²È«ÐÔÄÑÌâ¡£
²É¼¯Êý¾ÝѹËõ¡£ÎªÁ˽ÚÊ¡Á÷Á¿ºÍ´ø¿í£¬¸ßЧ·¢ËͿͻ§¶Ë²É¼¯µÄÊý¾Ý£¬ÐèҪʹÓÿìËÙÇÒ¸ßѹËõ±ÈµÄѹËõËã·¨£¬Ä¿Ç°¿¼ÂÇʹÓñê×¼µÄGZIPºÍ¶¨ÖƵÄLZ77Ëã·¨¡£
£¨3£©»ùÓÚЯ³Ì·Ö²¼Ê½ÏûÏ¢Öмä¼þHermesµÄÊý¾Ý´æ´¢·½°¸
HermesÊÇ»ùÓÚ¿ªÔ´µÄÏûÏ¢Öмä¼þKafkaÇÒÓÉЯ³Ì×ÔÖ÷Éè¼ÆÑз¢¡£ÕûÌå¼Ü¹¹Èçͼ£º

ͼ6 HermesÏûÏ¢¶ÓÁÐÕûÌå¼Ü¹¹
HermesÏûÏ¢¶ÓÁд洢ÓÐÈýÖÖÀàÐÍ£º
- MySQLÊÊÓÃÓÚÏûÏ¢Á¿Öеȼ°ÒÔÏ£¬¶ÔÏûÏ¢ÖÎÀíÓнϸßÒªÇóµÄ³¡¾°¡£
- KafkaÊÊÓÃÓÚÏûÏ¢Á¿´óµÄ³¡¾°¡£
- Broker·Ö²¼Ê½Îļþ´æ´¢£¨À©Õ¹Kafka¡¢¶¨ÖÆ´æ´¢¹¦ÄÜ£©¡£
ÓÉÓÚÊý¾Ý²É¼¯·þÎñµÄÏûÏ¢Á¿·Ç³£´ó£¬ËùÒԲɼ¯Êý¾ÝÐèÒª´æ´¢µ½KafkaÖС£KafkaÊÇÒ»ÖÖ·Ö²¼Ê½µÄ£¬»ùÓÚ·¢²¼/¶©ÔĵÄÏûϢϵͳ¡£ËüÄÜÂú×ã²É¼¯·þÎñ¸ßÍÌÍÂÁ¿¡¢¸ß²¢·¢ºÍʵʱÊý¾Ý·ÖÎöµÄÒªÇó¡£ËüÓÐÈçÏÂÓÅÐãµÄÌØÐÔ£º
- ÒÔʱ¼ä¸´ÔÓ¶ÈΪO(1)µÄ·½Ê½ÌṩÏûÏ¢³Ö¾Ã»¯ÄÜÁ¦£¬¼´Ê¹¶ÔTB¼¶ÒÔÉÏÊý¾ÝÒ²Äܱ£Ö¤³£Êýʱ¼ä¸´ÔӶȵķÃÎÊÐÔÄÜ¡£
- ¸ßÍÌÍÂÂÊ¡£¼´Ê¹Ôڷdz£Á®¼ÛµÄÉÌÓûúÆ÷ÉÏÒ²ÄÜ×öµ½µ¥»úÖ§³ÖÿÃë100KÌõÒÔÉÏÏûÏ¢µÄ´«Êä¡£
- Ö§³ÖKafka Server¼äµÄÏûÏ¢·ÖÇø£¬¼°·Ö²¼Ê½Ïû·Ñ£¬Í¬Ê±±£Ö¤Ã¿¸öPartitionÄÚµÄÏûϢ˳Ðò´«Êä¡£
- ͬʱ֧³ÖÀëÏßÊý¾Ý´¦ÀíºÍʵʱÊý¾Ý´¦Àí¡£
- Scale out£¬¼´Ö§³ÖÔÚÏßˮƽÀ©Õ¹¡£
Ò»¸öµäÐ͵ÄKafka¼¯ÈºÖаüº¬Èô¸ÉProducer£¨¿ÉÒÔÊÇWebǰ¶Ë²úÉúµÄ²É¼¯Êý¾Ý£¬»òÕßÊÇ·þÎñÆ÷ÈÕÖ¾£¬ÏµÍ³CPU¡¢MemoryµÈ£©£¬Èô¸Ébroker£¨KafkaÖ§³ÖˮƽÀ©Õ¹£¬Ò»°ãbrokerÊýÁ¿Ô½¶à£¬¼¯ÈºÍÌÍÂÂÊÔ½¸ß£©£¬Èô¸ÉConsumer Group£¬ÒÔ¼°Ò»Zookeeper¼¯Èº¡£Kafkaͨ¹ýZookeeper¹ÜÀí¼¯ÈºÅäÖã¬Ñ¡¾Ùleader£¬ÒÔ¼°ÔÚConsumer Group·¢Éú±ä»¯Ê±½øÐÐrebalance¡£ProducerʹÓÃpushģʽ½«ÏûÏ¢·¢²¼µ½broker£¬ConsumerʹÓÃpullģʽ´Óbroker¶©ÔIJ¢Ïû·ÑÏûÏ¢¡£KafkaÍØÆË½á¹¹Í¼ÈçÏ£º

ͼ7 KafkaÍØÆË½á¹¹
ÎÒÃÇÖªµÀ£¬¿Í»§¶ËÓû§Êý¾ÝµÄÓÐÐòÐԲɼ¯ºÍ´æ´¢¶ÔºóÃæµÄÊý¾ÝÏû·ÑºÍ·ÖÎö·Ç³£µÄÖØÒª£¬µ«ÊÇÔÚÒ»¸ö·Ö²¼Ê½»·¾³Ï£¬Òª±£Ö¤ÏûÏ¢µÄÓÐÐòÐÔÊǷdz£À§Äѵ쬶øKafkaÏûÏ¢¶ÓÁÐËäÈ»²»Äܱ£Ö¤ÏûÏ¢µÄÈ«¾ÖÓÐÐòÐÔ£¬µ«Äܱ£Ö¤Ã¿Ò»¸öPartitionÄÚµÄÏûÏ¢ÊÇÓÐÐòµÄ¡£ÔÚÓû§Êý¾Ý²É¼¯ºÍ·ÖÎöµÄϵͳÖУ¬ÎÒÃÇÖ÷Òª¹Ø×¢µÄÊÇͬһ¸öÓû§µÄÊý¾ÝÊÇ·ñÄܱ£Ö¤ÓÐÐò£¬Èç¹ûÎÒÃÇÔÚÊý¾Ý²É¼¯·þÎñ¶ËÄܽ«Í¬Ò»¸öÓû§µÄÊý¾Ý´æ´¢µ½KafkaµÄͬһ¸öPartitionÖУ¬ÄÇô¾ÍÄܱ£Ö¤Í¬Ò»¸öÓû§µÄÊý¾ÝÊÇÓÐÐòµÄ£¬Òò´Ë»ù±¾ÉÏÄܽâ¾ö²É¼¯Êý¾ÝµÄÓÐÐòÐÔ¡£
£¨4£©»ùÓÚAvro¸ñʽµÄÊý¾ÝÔÖ±¸´æ´¢·½°¸
µ±³öÏÖÍøÂçÑÏÖØÖжϻòÕßHermes(Kafka)ÏûÏ¢¶ÓÁйÊÕÏÇé¿öÏ£¬Óû§Êý¾ÝÐèÒª½øÐÐÔÖ±¸´æ´¢£¬Ä¿Ç°¿¼Âǵķ½°¸ÊÇ»ùÓÚAvro¸ñʽµÄ±¾µØÎļþ´æ´¢¡£ÆäÖÐAvroÊÇÒ»¸öÊý¾ÝÐòÁл¯·´ÐòÁл¯¿ò¼Ü£¬Ëü¿ÉÒÔ½«Êý¾Ý½á¹¹»ò¶ÔÏóת»¯³É±ãÓÚ´æ´¢»ò´«ÊäµÄ¸ñʽ£¬AvroÉè¼ÆÖ®³õ¾ÍÓÃÀ´Ö§³ÖÊý¾ÝÃܼ¯ÐÍÓ¦Óã¬ÊʺÏÓÚÔ¶³Ì»ò±¾µØ´ó¹æÄ£Êý¾ÝµÄ´æ´¢ºÍ½»»»¡£
Avro¶¨ÒåÁËÒ»¸ö¼òµ¥µÄ¶ÔÏóÈÝÆ÷Îļþ¸ñʽ¡£Ò»¸öÎļþ¶ÔÓ¦Ò»¸öģʽ£¬ËùÓд洢ÔÚÎļþÖеĶÔÏó¶¼ÊǸù¾ÝģʽдÈëµÄ¡£¶ÔÏó°´ÕÕ¿é½øÐд洢£¬ÔÚ¿éÖ®¼ä²ÉÓÃÁËͬ²½¼ÇºÅ£¬¿é¿ÉÒÔ²ÉÓÃѹËõµÄ·½Ê½´æ´¢¡£Ò»¸öÎļþÓÉÁ½²¿·Ö×é³É£ºÎļþÍ·ºÍÒ»¸ö»òÕß¶à¸öÎļþÊý¾Ý¿é¡£Æä´æ´¢½á¹¹ÈçÏÂͼËùʾ£º

ͼ8 Avro¶ÔÏóÈÝÆ÷Îļþ¸ñʽ
ÔÖ±¸´æ´¢´¦Àí¹ý³ÌÊÇ£ºµ±ÍøÂçÒì³£»òÕßHermes(Kafka)ÏûÏ¢¶ÓÁгöÏÖ¹ÊÕÏʱ£¬½«²É¼¯µÄÓû§Êý¾Ý½âÎö²¢×ª»¯³ÉAvro¸ñʽºó£¬Ö±½ÓÐòÁл¯´æ´¢µ½±¾µØ´ÅÅÌÎļþÖУ¬Êý¾Ý°´Kafka-Topic·Ö³É¶à¸öÎļþ´æ´¢£¬ÇÒÿСʱ×Ô¶¯Éú³ÉÒ»¸öеÄÎļþ¡£µ±ÍøÂç»òÕßHermes(Kafka)¹ÊÕϻָ´ºó£¬ºó¶ËÏß³Ì×Ô¶¯¶ÁÈ¡´ÅÅÌAvroÎļþ£¬½«Êý¾ÝдÈëHermes(Kafka)ÏûÏ¢¶ÓÁеĶÔÓ¦TopicºÍ·ÖÇøÖС£Ã¿¸öÎļþдÈë³É¹¦ºó£¬×Ô¶¯É¾³ýÔÖ±¸´æ´¢Îļþ¡£ÕâÑùÄÜÔö¼ÓÓû§Êý¾Ý²É¼¯·þÎñµÄ½¡×³ÐÔºÍÔöÇ¿·þÎñÈÝ´íÐÔ¡£
2¡¢¼Ü¹¹Éè¼Æ·½°¸¿ÉÐÐÐÔ·ÖÎö
ÔÚÏàͬÅäÖõIJâÊÔ·þÎñÆ÷ÉÏ£¨°üÀ¨Êý¾Ý²É¼¯·þÎñÆ÷¡¢Hermes(Kafka)¼¯Èº£©×öÈç϶ԱÈʵÑé²âÊÔ£º£¨Ê¹ÓÃApacheBenchmark½øÐÐWebÐÔÄÜѹÁ¦²âÊÔ¹¤¾ß£©
£¨1£©Netty VS Nginx´¦ÀíÍøÂçÇëÇó¶Ô±È
ÔÚ²»¶Ô²É¼¯Êý¾Ý½øÐÐÒµÎñ´¦ÀíµÄÇé¿öÏ£¨¼´Ö»½ÓÇëÇó²¢×öÏìÓ¦£¬²»×öÒµÎñ´¦Àí£¬Ò²²»´æ´¢²É¼¯Êý¾Ý£©£¬ÔÚ5000²¢·¢£¬KeepaliveģʽϾùÄܴﵽÿÃë´¦Àí4Íò¶àÇëÇ󣬯äÖÐNginxµÄCPU¡¢ÄÚ´æÏûºÄ»áСһЩ¡£²âÊÔ¶Ô±ÈÊý¾ÝÈçÏ£º£¨ ab²ÎÊý£º -k ¨Cn 10000000 ¨Cc 5000£©

£¨2£©Netty¶Ô²É¼¯Êý¾Ý½øÐÐÒµÎñ´¦Àí
Netty·þÎñ¼ÓÉϲɼ¯Êý¾Ý½âÎöÏà¹ØÒµÎñ´¦Àí£¬ÒÔ¼°´¦ÀíºóµÄÊý¾ÝдÈëHermes(Kafka)ÏûÏ¢¶ÓÁС£¿ÉÒÔ½øÐмòµ¥µÄ¼ä½Ó¹ÀËã¡£Èç¹û²É¼¯·þÎñÒªÇó´ïµ½£ºÃ¿Ãë´¦Àí3Íò×óÓÒÇëÇó£¬99%µÄÇëÇóÍê³Éʱ¼äСÓÚ800msµÄÄ¿±ê£¬Ôò²É¼¯Êý¾Ý½âÎöºÍ´æ´¢Á÷³ÌµÄ´¦Àíʱ¼ä±ØÐëÔÚ600msÒÔÄÚ¡£¶øÕâÁ½²½ÓÖ·ÖΪÊý¾Ý½âÎöºÍÊý¾Ý´æ´¢£¬¿ÉÒÔ·Ö±ð½øÐÐѹÁ¦²âÊÔ¼ÓÒÔÑéÖ¤¡£ ¸ù¾ÝÎÒÃǵÄѹÁ¦²âÊÔ£¬²É¼¯Êý¾Ý½âÎöºÍ´æ´¢Ò²ÄÜÍêÈ«Âú×ãÐÔÄÜÒªÇó¡£
¾ÒÔÉ϶ԱÈʵÑé²âÊÔ±íÃ÷£¬Ê¹ÓÃNetty·þÎñ×é¼þÊÕ¼¯¡¢½âÎöÊý¾Ý²¢Ö±½ÓдÈëHermes(Kafka)·Ö²¼Ê½ÏûÏ¢¶ÓÁеķ½°¸³õ²½¾ß±¸¿ÉÐÐÐÔ¡£
¶þ¡¢Ïà¹ØÊý¾Ý·ÖÎö²úÆ·½éÉÜ
»ùÓÚʵʱ²É¼¯µ½µÄÓû§Êý¾ÝºÍϵͳ¼à¿ØÊý¾Ý£¬ÎÒÃÇ¿ª·¢ÁËÒ»Ì×Ïà¹ØµÄÊý¾Ý·ÖÎö²úÆ·¡£²úÆ·µÄÄÚÈÝÖ÷Òª·ÖÒÔϼ¸²¿·Ö£º£¨1£©¡¢APIºÍÒ³ÃæÐÔÄܱ¨±í£»£¨2£©¡¢Ò³Ãæ·ÃÎʺÍÁ÷Á¿£»£¨3£©¡¢Óû§ÐÐΪ·ÖÎö£»£¨4£©¡¢ÏµÍ³Òì³£±ÀÀ£·ÖÎö£»£¨5£©¡¢Êý¾Ýʵʱ²éѯ¹¤¾ß£»£¨6£©¡¢²É¼¯Êý¾ÝÅÅÕϹ¤¾ß£»£¨7£©¡¢ÆäËü¡£ÆäÖÐÏêϸ·ÖÀàÈçÏÂͼËùʾ£º

ͼ9 Êý¾Ý·ÖÎö²úÆ··ÖÀà
ÏÖѡȡÆäÖм¸¸ö±È½Ï³£¼ûµÄ²úÆ·×öϼòµ¥½éÉÜ£º
1¡¢µ¥Óû§ä¯ÀÀ¸ú×Ù
×÷ÓãºÊµÊ±¸ú×ÙÓû§ä¯ÀÀ¼Ç¼£¬°ïÖú²úÆ·ÓÅ»¯Ò³Ãæ·ÃÎÊÁ÷³Ì¡¢°ïÖúÓû§ÅÅÕ϶¨Î»ÎÊÌâ¡£
ʹÓð¸Àý£º¸ù¾ÝÓû§ÔÚ¿Í»§¶ËÉϵÄΨһ±êʶID£¬È磺ÊÖ»úºÅ¡¢Email¡¢×¢²áÓû§Ãû¡¢ClientId¡¢VisitorIdµÈ²éѯ´ËÓû§ÔÚijһʱ¼ä¶Î˳Ðòä¯ÀÀ¹ýµÄÒ³ÃæºÍÿ¸öÒ³ÃæµÄ·ÃÎÊʱ¼ä¼°Ò³ÃæÍ£Áôʱ³¤µÈÐÅÏ¢¡£Èç¹ûÓû§ÔÚä¯ÀÀÒ³Ãæ¹ý³ÌÖз¢ÉúÁËÒì³£±ÀÀ£Í˳öÇé¿ö£¬¿ÉÒÔ½áºÏÓ¦ÓñÀÀ£ÐÅÏ¢¹ØÁª²éѯµ½Ïà¹ØÐÅÏ¢¡£
2¡¢Ò³Ãæ×ª»¯ÂÊ
×÷ÓãºÊµÊ±²é¿´¸÷¸öÒ³ÃæµÄ·ÃÎÊÁ¿ºÍת»¯Çé¿ö£¬°ïÖú·ÖÎöÒ³ÃæÓû§ÌåÑéÒÔ¼°Ò³Ãæ²¼¾ÖÎÊÌâ¡£
ʹÓð¸Àý£ºÓû§Ê×ÏÈÅäÖÃÒ³Ãæä¯ÀÀ·¾¶£¬Èçp1023 -> p1201 -> p1137 -> p1300£¬È»ºó¸ù¾ÝÓû§ÅäÖÃÒ³Ãæä¯ÀÀ·¾¶²éѯij¸öʱ¼ä¶Î¸÷¸öÒ³ÃæµÄת»¯ÂÊÇé¿ö¡£ÈçÓÐ1.4ÍòÓû§½øÈëp1023Ò³Ãæ,ÏÂÒ»²½ÓÐ1400Óû§½øÈëÏÂÒ»Ò³Ãæp1201¡£ÕâÑù¿ÉÍÆËã³öÒ³Ãæp1201µÄת»¯ÂÊΪ10%×óÓÒ¡£ÕâÊÇ×î¼òµ¥µÄÒ»ÖÖÒ³Ãæ×ª»¯ÂÊ£¬»¹Óмä½ÓµÄÒ³Ãæ×ª»¯ÂÊ£¬¼´Ö»Æ¥ÅäµÚÒ»¸öºÍ×îºóÒ»¸öÒ³ÃæµÄ·ÃÎÊÁ¿¡£Í¬Ê±¿ÉÒÔ°´¸÷ÖÖά¶È½øÐÐÌõ¼þɸѡ£¬±ÈÈç£ºÍøÂç¡¢ÔËÓªÉÌ¡¢¹ú¼Ò¡¢µØÇø¡¢³ÇÊС¢É豸¡¢²Ù×÷ϵͳµÈµÈ¡£
3¡¢Óû§·ÃÎÊÁ÷
×÷ÓãºÁ˽âÿ¸öÒ³ÃæµÄÏà¶ÔÓû§Á¿¡¢¸÷¸öÒ³Ãæ¼äµÄÏà¶ÔÁ÷Á¿ºÍÍ˳öÂÊ¡¢Á˽â¸÷ά¶ÈÏÂÒ³ÃæµÄÏà¶ÔÁ÷Á¿¡£
ʹÓð¸Àý£ºÓû§Ñ¡Ôñ²éѯά¶ÈºÍʱ¼ä¶Î½øÐвéѯ£¬¾ÍÄÜ»ñÈ¡µ½Ó¦ÓôӵÚÒ»¸öÒ³Ãæµ½µÚN¸öÒ³ÃæµÄ·ÃÎÊ·¾¶ÖУ¬Ã¿¸öÒ³ÃæµÄ·ÃÎÊÁ¿ºÍ¶ÀÁ¢Óû§»á»°Êý¡¢Ã¿¸öÒ³ÃæµÄÓû§Á÷Ïò¡¢Ã¿¸öÒ³ÃæµÄÓû§Á÷ʧÁ¿µÈÐÅÏ¢¡£
4¡¢µã»÷ÈÈÁ¦Í¼
×÷Ó㺷¢ÏÖÓû§¾³£µã»÷µÄÄ£¿é»òÕßÇøÓò£¬ÅжÏÓû§Ï²ºÃ¡¢·ÖÎöÒ³ÃæÖÐÄÄÐ©ÇøÓò»òÕßÄ£¿éÓнϸߵÄÓÐЧµã»÷Êý¡¢Ó¦ÓÃÓÚA/B²âÊÔ£¬±È½Ï²»Í¬Ò³ÃæµÄµã»÷·Ö²¼Çé¿ö¡¢°ïÖú¸Ä½øÒ³Ãæ½»»¥ºÍÓû§ÌåÑé¡£
ʹÓð¸Àý£ºµã»÷ÈÈÁ¦Í¼²é¿´¹¤¾ß°üÀ¨WebºÍAPP¶Ë£¬Í³¼ÆµÄÖ¸±ê°üÀ¨£ºÔʼµã»÷Êý£¨µ±Ç°Ñ¡ÖÐÔªËØµÄÔʼµã»÷×ÜÊý£©¡¢Ò³Ãæä¯ÀÀµã»÷Êý£¨µ±Ç°Ñ¡ÖÐÔªËØµÄÓÐЧµã»÷Êý£¬Í¬Ò»´ÎÒ³Ãæä¯ÀÀ£¬¶à´Îµã»÷ÀÛ¼ÆËã1´Îµã»÷£©¡¢¶ÀÁ¢·Ã¿Íµã»÷Êý£¨µ±Ç°Ñ¡ÖÐÔªËØµÄÓÐЧµã»÷Êý£¬ ͬһÓû§£¬¶à´Îµã»÷ÀÛ¼ÆËã1´Îµã»÷£©¡£
5¡¢²É¼¯Êý¾ÝÑéÖ¤²âÊÔ
×÷Ó㺿ìËÙ²âÊÔÊÇ·ñÄÜÕý³£²É¼¯Êý¾Ý¡¢Êý¾ÝÁ¿ÊÇ·ñÕý³£¡¢²É¼¯µÄÊý¾ÝÊÇ·ñÂú×ãÐèÇóµÈ¡£
ʹÓð¸Àý£ºÓû§Ê¹ÓÃЯ³ÌAPPɨÃ蹤¾ßÒ³ÃæµÄ¶þάÂ룬»ñÈ¡Óû§±êʶÐÅÏ¢£¬Ö®ºóÕý³£Ê¹ÓÃЯ³ÌAPP¹ý³ÌÖУ¬ÄÜʵʱµØ½«²É¼¯µ½µÄÊý¾Ý·ÖÀàչʾÔÚ¹¤¾ßÒ³ÃæÖУ¬¶ÔÊý¾Ý½øÐжԱȲâÊÔÑéÖ¤¡£
6¡¢ÏµÍ³ÐÔÄܱ¨±í
×÷Óãº¼à¿ØÏµÍ³¸÷ÒµÎñ·þÎñµ÷ÓÃÐÔÄÜ£¨ÈçSOA·þÎñ¡¢RPCµ÷Óõȣ©¡¢Ò³Ãæ¼ÓÔØÐÔÄÜ¡¢APPÆô¶¯Ê±¼ä¡¢LBS¶¨Î»·þÎñ¡¢Native-CrashÕ¼±È¡¢JavaScript´íÎóÕ¼±ÈµÈ¡£°´Ð¡Ê±Í³¼Æ¸÷·þÎñµ÷ÓúÄʱ¡¢³É¹¦ÂÊ¡¢µ÷ÓôÎÊýµÈ±¨±íÐÅÏ¢¡£
»ùÓÚǰ¶Ë¶àƽ̨£¨°üÀ¨iOS¡¢Android¡¢Web¡¢Hybrid¡¢RN¡¢Ð¡³ÌÐò£©Êý¾Ý²É¼¯SDKµÄ·á¸»µÄ×Ô¶¯»¯ÂñµãÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔ¶ÔÊý¾Ý¡¢Óû§¡¢ÏµÍ³Èý·½Ãæ½øÐжàά¶ÈÁ¢ÌåµÄ·ÖÎö¡£·þÎñÓÚϵͳ²úÆ·ºÍÓû§ÌåÑé¡¢Óû§Áô´æ¡¢×ª»»Âʼ°ÎüÒýÐÂÓû§¡£ |