RocketMQÊÇÒ»¿î·Ö²¼Ê½¡¢¶ÓÁÐÄ£Ð͵ÄÏûÏ¢Öмä¼þ£¬¾ßÓÐÒÔÏÂÌØµã£º
1.Äܹ»±£Ö¤ÑϸñµÄÏûϢ˳Ðò
2.Ìṩ·á¸»µÄÏûÏ¢Àȡģʽ
3.¸ßЧµÄ¶©ÔÄÕßˮƽÀ©Õ¹ÄÜÁ¦
4.ʵʱµÄÏûÏ¢¶©ÔÄ»úÖÆ
5.ÒÚ¼¶ÏûÏ¢¶Ñ»ýÄÜÁ¦
Ò».RocketMQÍøÂ粿ÊðÌØµã

£¨1£©NameServerÊÇÒ»¸ö¼¸ºõÎÞ״̬µÄ½Úµã£¬¿É¼¯Èº²¿Ê𣬽ڵãÖ®¼äÎÞÈκÎÐÅϢͬ²½
£¨2£©Broker²¿ÊðÏà¶Ô¸´ÔÓ£¬Broker·ÕΧMasterÓëSlave£¬Ò»¸öMaster¿ÉÒÔ¶ÔÓ¦¶à¸öSlaver£¬µ«ÊÇÒ»¸öSlaverÖ»ÄܶÔÓ¦Ò»¸öMaster£¬MasterÓëSlaverµÄ¶ÔÓ¦¹ØÏµÍ¨¹ýÖ¸¶¨ÏàͬµÄBrokerName£¬²»Í¬µÄBrokerIdÀ´¶¨Ò壬BrokerIdΪ0±íʾMaster£¬·Ç0±íʾSlaver¡£Master¿ÉÒÔ²¿Êð¶à¸ö¡£Ã¿¸öBrokerÓëNameServer¼¯ÈºÖеÄËùÓнڵ㽨Á¢³¤Á¬½Ó£¬¶¨Ê±×¢²áTopicÐÅÏ¢µ½ËùÓеÄNameServer
£¨3£©ProducerÓëNameServer¼¯ÈºÖÐµÄÆäÖÐÒ»¸ö½Úµã£¨Ëæ»úÑ¡Ôñ£©½¨Á¢³¤Á¬½Ó£¬¶¨ÆÚ´ÓNameServerÈ¡Topic·ÓÉÐÅÏ¢£¬²¢ÏòÌṩTopic·þÎñµÄMaster½¨Á¢³¤Á¬½Ó£¬ÇÒ¶¨Ê±ÏòMaster·¢ËÍÐÄÌø¡£ProduceÍêÈ«ÎÞ״̬£¬¿É¼¯Èº²¿Êð
£¨4£©ConsumerÓëNameServer¼¯ÈºÖÐµÄÆäÖÐÒ»¸ö½Úµã£¨Ëæ»úÑ¡Ôñ£©½¨Á¢³¤Á¬½Ó£¬¶¨ÆÚ´ÓNameServerÈ¡Topic·ÓÉÐÅÏ¢£¬²¢ÏòÌṩTopic·þÎñµÄMaster¡¢Slaver½¨Á¢³¤Á¬½Ó£¬ÇÒ¶¨Ê±ÏòMaster¡¢Slaver·¢ËÍÐÄÌø¡£Consumer¼´¿É´ÓMaster¶©ÔÄÏûÏ¢£¬Ò²¿ÉÒÔ´ÓSlave¶©ÔÄÏûÏ¢£¬¶©ÔĹæÔòÓÉBrokerÅäÖþö¶¨
¶þ.RocketMQ´¢´æÌصã
£¨1£©Á㿽±´ÔÀí£ºConsumerÏû·ÑÏûÏ¢¹ý³Ì£¬Ê¹ÓÃÁËÁ㿽±´£¬Á㿽±´°üÀ¨Ò»ÏÂ2Öз½Ê½£¬RocketMQʹÓõÚÒ»ÖÖ·½Ê½£¬ÒòС¿éÊý¾Ý´«ÊäµÄÒªÇóЧ¹û±Èsendfile·½Ê½ºÃ
a )ʹÓÃmmap+write·½Ê½
Óŵ㣺¼´Ê¹Æµ·±µ÷Óã¬Ê¹ÓÃСÎļþ¿é´«Ê䣬ЧÂÊÒ²ºÜ¸ß
ȱµã£º²»ÄܺܺõÄÀûÓÃDMA·½Ê½£¬»á±Èsendfile¶àÏûºÄCPU×ÊÔ´£¬Äڴ氲ȫÐÔ¿ØÖƸ´ÔÓ£¬ÐèÒª±ÜÃâJVM
CrashÎÊÌâ
b£©Ê¹ÓÃsendfile·½Ê½
Óŵ㣺¿ÉÒÔÀûÓÃDMA·½Ê½£¬ÏûºÄCPU×ÊÔ´ÉÙ£¬´ó¿éÎļþ´«ÊäЧÂʸߣ¬ÎÞÄڴ氲ȫÐÂÎÊÌâ
ȱµã£ºÐ¡¿éÎļþЧÂʵÍÓÚmmap·½Ê½£¬Ö»ÄÜÊÇBIO·½Ê½´«Ê䣬²»ÄÜʹÓÃNIO
£¨2£©Êý¾Ý´æ´¢½á¹¹

Èý.RocketMQ¹Ø¼üÌØÐÔ
1.µ¥»úÖ§³Ö1WÒÔÉϵij־û¯¶ÓÁÐ

£¨1£©ËùÓÐÊý¾Ýµ¥¶À´¢´æµ½commit Log £¬Íêȫ˳Ðòд£¬Ëæ»ú¶Á
£¨2£©¶Ô×îÖÕÓû§Õ¹ÏֵĶÓÁÐʵ¼ÊÖ»´¢´æÏûÏ¢ÔÚCommit Log µÄλÖÃÐÅÏ¢£¬²¢ÇÒ´®Ðз½Ê½Ë¢ÅÌ
ÕâÑù×öµÄºÃ´¦£º
£¨1£©¶ÓÁÐÇáÁ¿»¯£¬µ¥¸ö¶ÓÁÐÊý¾ÝÁ¿·Ç³£ÉÙ
£¨2£©¶Ô´ÅÅ̵ķÃÎÊ´®Ðл°£¬±ÜÃâ´ÅÅ̾ºÕù£¬²»»áÒòΪ¶ÓÁÐÔö¼Óµ¼ÖÂIOWaitÔö¸ß
ÿ¸ö·½°¸¶¼ÓÐÓÅȱµã£¬ËûµÄȱµãÊÇ£º
£¨1£©Ð´ËäÈ»ÊÇ˳Ðòд£¬µ«ÊǶÁÈ´±ä³ÉÁËËæ»ú¶Á
£¨2£©¶ÁÒ»ÌõÏûÏ¢£¬»áÏȶÁConsume Queue£¬ÔÙ¶ÁCommit Log£¬Ôö¼ÓÁË¿ªÏú
£¨3£©Òª±£Ö¤Commit Log Óë Consume QueueÍêÈ«µÄÒ»Ö£¬Ôö¼ÓÁ˱à³ÌµÄ¸´ÔÓ¶È
ÒÔÉÏȱµãÈçºÎ¿Í·þ£º
£¨1£©Ëæ»ú¶Á£¬¾¡¿ÉÄÜÈöÁÃüÖÐpagecache£¬¼õÉÙIO²Ù×÷£¬ËùÒÔÄÚ´æÔ½´óÔ½ºÃ¡£Èç¹ûϵͳÖжѻýµÄÏûÏ¢¹ý¶à£¬¶ÁÊý¾ÝÒª·ÃÎÊÓ²Å̻᲻»áÓÉÓÚËæ»ú¶Áµ¼ÖÂϵͳÐÔÄܼ±¾çϽµ£¬´ð°¸ÊÇ·ñ¶¨µÄ¡£
a£©·ÃÎÊpagecacheʱ£¬¼´Ê¹Ö»·ÃÎÊ1KµÄÏûÏ¢£¬ÏµÍ³Ò²»áÌáǰԤ¶Á³ö¸ü¶àµÄÊý¾Ý£¬ÔÚÏ´ζÁʱ¾Í¿ÉÄÜÃüÖÐpagecache
b£©Ëæ»ú·ÃÎÊCommit Log ´ÅÅÌÊý¾Ý£¬ÏµÍ³IOµ÷¶ÈËã·¨ÉèÖÃΪNOOP·½Ê½£¬»áÔÚÒ»¶¨³Ì¶ÈÉϽ«ÍêÈ«µÄËæ»ú¶Á±ä³É˳ÐòÌøÔ¾·½Ê½£¬¶øË³ÐòÌøÔ¾·½Ê½¶Á½ÏÍêÈ«µÄËæ»ú¶ÁÐÔÄܸß5±¶
£¨2£©ÓÉÓÚConsume Queue´æ´¢ÊýÁ¿¼«ÉÙ£¬¶øÇÒ˳Ðò¶Á£¬ÔÚpagecacheµÄÓë¶ÁÈ¡Çé¿öÏ£¬Consume
QueueµÄ¶ÁÐÔÄÜÓëÄڴ漸ºõÒ»Ö±£¬¼´Ê¹¶Ñ»ýÇé¿öÏ¡£ËùÒÔ¿ÉÒÔÈÏΪConsume QueueÍêÈ«²»»á×è°¶ÁÐÔÄÜ
£¨3£©Commit LogÖд洢ÁËËùÓеÄÔªÐÅÏ¢£¬°üº¬ÏûÏ¢Ì壬ÀàËÆÓÚMySQl¡¢OracleµÄredolog£¬ËùÒÔÖ»ÒªÓÐCommit
Log´æÔÚ£¬ Consume Queue¼´Ê¹¶ªÊ§Êý¾Ý£¬ÈÔ¿ÉÒÔ»Ö¸´³öÀ´
2.Ë¢Å̲ßÂÔ
rocketmqÖеÄËùÓÐÏûÏ¢¶¼Êdz־û¯µÄ£¬ÏÈдÈëϵͳpagecache£¬È»ºóË¢ÅÌ£¬¿ÉÒÔ±£Ö¤ÄÚ´æÓë´ÅÅ̶¼ÓÐÒ»·ÝÊý¾Ý£¬·ÃÎÊʱ£¬¿ÉÒÔÖ±½Ó´ÓÄÚ´æ¶ÁÈ¡
2.1Ò첽ˢÅÌ
ÔÚÓÐ RAID ¿¨£¬ SAS 15000 ת´ÅÅ̲âÊÔ˳ÐòдÎļþ£¬ËÙ¶È¿ÉÒÔ´ïµ½
300M ÿÃë×óÓÒ£¬¶øÏßÉϵÄÍø¿¨Ò»°ã¶¼ÎªÇ§Õ×Íø¿¨£¬Ð´´ÅÅÌËÙ¶ÈÃ÷ÏÔ¿ìÓÚÊý¾ÝÍøÂçÈë¿ÚËÙ¶È£¬ÄÇôÊÇ·ñ¿ÉÒÔ×öµ½Ð´Íê
ÄÚ´æ¾ÍÏòÓû§·µ»Ø£¬Óɺǫ́Ïß³ÌË¢ÅÌÄØ£¿
(1). ÓÉÓÚ´ÅÅÌËÙ¶È´óÓÚÍø¿¨ËÙ¶È£¬ÄÇôˢÅ̵Ľø¶È¿Ï¶¨¿ÉÒÔ¸úÉÏÏûÏ¢µÄдÈëËÙ¶È¡£
(2). ÍòÒ»ÓÉÓÚ´ËʱϵͳѹÁ¦¹ý´ó£¬¿ÉÄܶѻýÏûÏ¢£¬³ýÁËдÈë IO£¬»¹ÓжÁÈ¡
IO£¬ÍòÒ»³öÏÖ´ÅÅ̶ÁÈ¡ÂäºóÇé¿ö£¬»á²»»áµ¼ÖÂϵͳÄÚ´æÒç³ö£¬´ð°¸ÊÇ·ñ¶¨µÄ£¬ÔÒòÈçÏ£º
a) дÈëÏûÏ¢µ½ PAGECACHE ʱ£¬Èç¹ûÄÚ´æ²»×㣬Ôò³¢ÊÔ¶ªÆú¸É¾»µÄ
PAGE£¬ÌÚ³öÄڴ湩ÐÂÏûϢʹÓ㬲ßÂÔÊÇ LRU ·½Ê½¡£
b) Èç¹û¸É¾»Ò³²»×㣬´ËʱдÈë PAGECACHE »á±»×èÈû£¬ÏµÍ³³¢ÊÔË¢Å̲¿·ÖÊý¾Ý£¬´óԼÿ´Î³¢ÊÔ
32 ¸ö PAGE£¬À´ÕÒ³ö¸ü¶à¸É¾» PAGE¡£
×ÛÉÏ£¬ÄÚ´æÒç³öµÄÇé¿ö²»»á³öÏÖ
2.2ͬ²½Ë¢ÅÌ£º
ͬ²½Ë¢ÅÌÓëÒ첽ˢÅ̵ÄÎ¨Ò»Çø±ðÊÇÒ첽ˢÅÌдÍê PAGECACHE Ö±½Ó·µ»Ø£¬¶øÍ¬²½Ë¢ÅÌÐèÒªµÈ´ýË¢ÅÌÍê³É²Å·µ»Ø£¬Í¬²½Ë¢ÅÌÁ÷³ÌÈçÏ£º
£¨1£©Ð´Èë PAGECACHE ºó£¬Ï̵߳ȴý£¬Í¨ÖªË¢ÅÌÏß³ÌË¢ÅÌ¡£
£¨2£©Ë¢ÅÌÏß³ÌË¢Å̺󣬻½ÐÑǰ¶ËµÈ´ýỊ̈߳¬¿ÉÄÜÊÇÒ»ÅúÏ̡߳£
£¨3£©Ç°¶ËµÈ´ýÏß³ÌÏòÓû§·µ»Ø³É¹¦¡£

3.ÏûÏ¢²éѯ
3.1°´ÕÕMessageId²éѯÏûÏ¢

MsgId×ܹ²16¸ö×Ö½Ú£¬°üº¬ÏûÏ¢´¢´æÖ÷»úµØÖ·£¬ÏûÏ¢Commit Log
Offset¡£´ÓMsgIdÖнâÎö³öBrokerµÄµØÖ·ºÍCommit Log Æ«ÒÆµØÖ·£¬È»ºó°´ÕÕ´æ´¢¸ñʽËùÔÚλÖÃÏûÏ¢buffer½âÎö³ÉÒ»¸öÍêÕûÏûÏ¢
3.2°´ÕÕMessage Key²éѯÏûÏ¢

1.¸ù¾Ý²éѯµÄkeyµÄhashcode%slotNumµÃµ½¾ßÌåµÄ²ÛλÖÃ
£¨slotNumÊÇÒ»¸öË÷ÒýÎļþÀïÃæ°üº¬µÄ×î´ó²ÛÄ¿ÊýÄ¿£¬ÀýÈçͼÖÐËùʾslotNum=500W£©
2.¸ù¾ÝslotValue£¨slot¶ÔӦλÖõÄÖµ£©²éÕÒµ½Ë÷ÒýÏîÁбíµÄ×îºóÒ»Ïµ¹ÐòÅÅÁУ¬slotValue×ÜÊÇÖ¸Ïò×îеÄÒ»¸öË÷ÒýÏ
3.±éÀúË÷ÒýÏîÁÐ±í·µ»Ø²éѯʱ¼ä·¶Î§ÄڵĽá¹û¼¯£¨Ä¬ÈÏÒ»´Î×î´ó·µ»ØµÄ32Ìõ¼Ç¼£©
4.Hash³åÍ»£¬Ñ°ÕÒkeyµÄslotλÖÃʱÏ൱ÓÚÖ´ÐÐÁËÁ½´ÎÉ¢Áк¯Êý£¬Ò»´ÎkeyµÄhash£¬Ò»´ÎkeyµÄhashȡֵ죬Òò´ËÕâÀï´æÔÚÁ½´Î³åÍ»µÄÇé¿ö£»µÚÒ»ÖÖ£¬keyµÄhashÖµ²»Í¬µ«Ä£ÊýÏàͬ£¬´Ëʱ²éѯµÄʱºò»áÔڱȽϵÚÒ»´ÎkeyµÄhashÖµ£¨Ã¿¸öË÷ÒýÏî±£´æÁËkeyµÄhashÖµ£©£¬¹ýÂ˵ôhashÖµ²»ÏëµÈµÄÇé¿ö¡£µÚ¶þÖÖ£¬hashÖµÏàµÈkey²»ÏëµÈ£¬³öÓÚÐÔÄܵĿ¼ÂdzåÍ»µÄ¼ì²â·Åµ½¿Í»§¶Ë´¦Àí£¨keyµÄÔʼֵÊÇ´æ´¢ÔÚÏûÏ¢ÎļþÖе쬱ÜÃâ¶ÔÊý¾ÝÎļþµÄ½âÎö£©£¬¿Í»§¶Ë±È½ÏÒ»´ÎÏûÏ¢ÌåµÄkeyÊÇ·ñÏàͬ
5.´æ´¢£¬ÎªÁ˽ÚÊ¡¿Õ¼äË÷ÒýÏîÖд洢µÄʱ¼äÊÇʱ¼ä²îÖµ£¨´æ´¢Ê±¼ä¡ª¡ª¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼ä´æ´¢ÔÚË÷ÒýÎļþÍ·ÖУ©£¬Õû¸öË÷ÒýÎļþÊǶ¨³¤µÄ£¬½á¹¹Ò²Êǹ̶¨µÄ
4.·þÎñÆ÷ÏûÏ¢¹ýÂË
RocketMQµÄÏûÏ¢¹ýÂË·½Ê½ÓбðÓÚÆäËûµÄÏûÏ¢Öмä¼þ£¬ÊÇÔÚ¶©ÔÄʱ£¬ÔÙ×ö¹ýÂË£¬ÏÈÀ´¿´ÏÂConsume
Queue´æ´¢½á¹¹

1.ÔÚBroker¶Ë½øÐÐMessage Tag±È½Ï£¬ÏȱéÀúConsume
Queue£¬Èç¹û´æ´¢µÄMessage TagÓë¶©ÔĵÄMessage Tag²»·ûºÏ£¬ÔòÌø¹ý£¬¼ÌÐø±È¶ÔÏÂÒ»¸ö£¬·ûºÏÔò´«Ê䏸Consumer¡£×¢ÒâMessage
TagÊÇ×Ö·û´®ÐÎʽ£¬Consume QueueÖд洢µÄÊÇÆä¶ÔÓ¦µÄhashcode£¬±È¶ÔʱҲÊDZȶÔhashcode
2.ConsumerÊÕµ½¹ýÂËÏûÏ¢ºó£¬Í¬ÑùÒ²ÒªÖ´ÐÐÔÚbroker¶ËµÄ²Ù×÷£¬µ«ÊDZȶԵÄÊÇÕæÊµµÄMessage
Tag×Ö·û´®£¬¶ø²»ÊÇhashcode
Ϊʲô¹ýÂËÒªÕâô×ö£¿
1.Message Tag´æ´¢hashcode£¬ÊÇΪÁËÔÚConsume
Queue¶¨³¤·½Ê½´æ´¢£¬½ÚÔ¼¿Õ¼ä
2.¹ýÂ˹ý³ÌÖв»»á·ÃÎÊCommit Log Êý¾Ý£¬¿ÉÒÔ±£Ö¤¶Ñ»ýÇé¿öÏÂÒ²ÄܸßЧ¹ýÂË
3.¼´Ê¹´æÔÚhash³åÍ»£¬Ò²¿ÉÒÔÔÚConsumer¶Ë½øÐÐÐÞÕý£¬±£Ö¤ÍòÎÞһʧ
5.µ¥¸öJVM½ø³ÌÒ²ÄÜÀûÓûúÆ÷³¬´óÄÚ´æ

1.Producer·¢ËÍÏûÏ¢£¬ÏûÏ¢´Ósocket½øÈëjava ¶Ñ
2.Producer·¢ËÍÏûÏ¢£¬ÏûÏ¢´Ójava¶Ñ½øÈëpagecache£¬ÎïÀíÄÚ´æ
3.Producer·¢ËÍÏûÏ¢£¬ÓÉÒì²½Ïß³ÌË¢ÅÌ£¬ÏûÏ¢´ÓpagecacheË¢Èë´ÅÅÌ
4.ConsumerÀÏûÏ¢£¨Õý³£Ïû·Ñ£©£¬ÏûÏ¢Ö±½Ó´Ópagecache£¨Êý¾ÝÔÚÎïÀíÄڴ棩תÈësocket£¬µ½´ïConsumer£¬²»¾¹ýjava¶Ñ¡£ÕâÖÖÏû·Ñ³¡¾°×î¶à£¬ÏßÉÏ96GÎïÀíÄڴ棬°´ÕÕ1KÏûÏ¢Ë㣬¿ÉÒÔÎïÀí»º´æ1ÒÚÌõÏûÏ¢
5.ConsumerÀÏûÏ¢£¨Òì³£Ïû·Ñ£©£¬ÏûÏ¢Ö±½Ó´ÓpagecacheתÈësocket
6.ConsumerÀÏûÏ¢£¨Òì³£Ïû·Ñ£©£¬ÓÉÓÚsocket·ÃÎÊÁËÐéÄâÄڴ棬²úÉúȱҳÖжϣ¬´Ëʱ»á²úÉú´ÅÅÌIO£¬´Ó´ÅÅÌLoadÏûÏ¢µ½pagecache£¬È»ºóÖ±½Ó´Ósocket·¢³öÈ¥
7.ͬ5
8.ͬ6
6.ÏûÏ¢¶Ñ»ýÎÊÌâ½â¾ö°ì·¨
1 ÏûÏ¢µÄ¶Ñ»ýÈÝÁ¿¡¢ÒÀÀµ´ÅÅÌ´óС
2 ·¢ÏûÏ¢µÄÍÌÍÂÁ¿´óСÊÜÓ°Ïì³Ì¶È¡¢ÎÞSlaveÇé¿ö£¬»áÊÜÒ»¶¨Ó°Ïì¡¢ÓÐSlaveÇé¿ö£¬²»ÊÜÓ°Ïì
3 Õý³£Ïû·ÑµÄConsumerÊÇ·ñ»áÊÜÓ°Ïì¡¢ÎÞSlaveÇé¿ö£¬»áÊÜÒ»¶¨Ó°Ïì¡¢ÓÐSlaveÇé¿ö£¬²»ÊÜÓ°Ïì
4 ·ÃÎʶѻýÔÚ´ÅÅ̵ÄÏûϢʱ£¬ÍÌÍÂÁ¿Óжà´ó¡¢Óë·ÃÎʵIJ¢·¢Óйأ¬×îÖջήµ½5000×óÓÒ
ÔÚÓÐSlaveÇé¿öÏ£¬MasterÒ»µ©·¢ÏÖConsumer·ÃÎʶѻýÔÚ´ÅÅ̵ÄÊý¾Ýʱ£¬»ØÏëConsumerÏ´ïÒ»¸öÖØ¶¨ÏòÖ¸ÁÁîConsumer´ÓSlaveÀÈ¡Êý¾Ý£¬ÕâÑùÕý³£µÄ·¢ÏûÏ¢ÓëÕý³£µÄÏû·Ñ²»»áÒòΪ¶Ñ»ýÊÜÓ°Ï죬ÒòΪϵͳ½«¶Ñ»ý³¡¾°Óë·Ç¶Ñ»ý³¡¾°·Ö¸îÔÚÁËÁ½¸ö²»Í¬µÄ½Úµã´¦Àí¡£ÕâÀï»á²úÉúÒ»¸öÎÊÌ⣬Slave»á²»»áдÐÔÄÜϽµ£¬´ð°¸ÊÇ·ñ¶¨µÄ¡£ÒòΪSlaveµÄÏûϢдÈëÖ»×·ÇóÍÌÍÂÁ¿£¬²»×·ÇóʵʱÐÔ£¬Ö»ÒªÕûÌåµÄÍÌÍÂÁ¿¸ß¾ÍÐÐÁË£¬¶øSlaveÿ´Î¶¼ÊÇ´ÓMasterÀȡһÅúÊý¾Ý£¬Èç1M£¬ÕâÖÖÅúÁ¿Ë³ÐòдÈ뷽ʽʹ¶Ñ»ýÇé¿ö£¬ÕûÌåÍÌÍÂÁ¿Ó°ÏìÏà¶Ô½ÏС£¬Ö»ÊÇдÈëRT»á±ä³¤¡£
|