1.
Redis³£¼û¼¯Èº¼¼Êõ
³¤ÆÚÒÔÀ´£¬Redis±¾Éí½öÖ§³Öµ¥ÊµÀý£¬ÄÚ´æÒ»°ã×î¶à10~20GB¡£ÕâÎÞ·¨Ö§³Å´óÐÍÏßÉÏÒµÎñϵͳµÄÐèÇó¡£¶øÇÒÒ²Ôì³É×ÊÔ´µÄÀûÓÃÂʹýµÍ¡ª¡ª±Ï¾¹ÏÖÔÚ·þÎñÆ÷Äڴ涯éü100~200GB¡£
Ϊ½â¾öµ¥»ú³ÐÔØÄÜÁ¦²»×ãµÄÎÊÌ⣬¸÷´ó»¥ÁªÍøÆóÒµ·×·×³öÊÖ£¬¡°×ÔÖúʽ¡±µØÊµÏÖÁ˼¯Èº»úÖÆ¡£ÔÚÕâЩ·Ç¹Ù·½¼¯Èº½â¾ö·½°¸ÖУ¬ÎïÀíÉϰÑÊý¾Ý¡°·ÖƬ¡±£¨sharding£©´æ´¢ÔÚ¶à¸öRedisʵÀý£¬Ò»°ãÇé¿öÏ£¬Ã¿Ò»¡°Æ¬¡±ÊÇÒ»¸öRedisʵÀý¡£
°üÀ¨¹Ù·½½üÆÚÍÆ³öµÄRedis Cluster£¬Redis¼¯ÈºÓÐÈýÖÖʵÏÖ»úÖÆ£¬·Ö±ð½éÉÜÈçÏ£¬Ï£Íû¶Ô´ó¼ÒÑ¡ÐÍÓÐËù°ïÖú¡£
1.1 ¿Í»§¶Ë·ÖƬ
ÕâÖÖ·½°¸½«·ÖƬ¹¤×÷·ÅÔÚÒµÎñ³ÌÐò¶Ë£¬³ÌÐò´úÂë¸ù¾ÝÔ¤ÏÈÉèÖõÄ·ÓɹæÔò£¬Ö±½Ó¶Ô¶à¸öRedisʵÀý½øÐзֲ¼Ê½·ÃÎÊ¡£ÕâÑùµÄºÃ´¦ÊÇ£¬²»ÒÀÀµÓÚµÚÈý·½·Ö²¼Ê½Öмä¼þ£¬ÊµÏÖ·½·¨ºÍ´úÂë¶¼×Ô¼ºÕƿأ¬¿ÉËæÊ±µ÷Õû£¬²»Óõ£ÐIJȵ½¿Ó¡£
Õâʵ¼ÊÉÏÊÇÒ»ÖÖ¾²Ì¬·ÖƬ¼¼Êõ¡£RedisʵÀýµÄÔö¼õ£¬¶¼µÃÊÖ¹¤µ÷Õû·ÖƬ³ÌÐò¡£»ùÓÚ´Ë·ÖÆ¬»úÖÆµÄ¿ªÔ´²úÆ·£¬ÏÖÔÚÈÔ²»¶à¼û¡£
ÕâÖÖ·ÖÆ¬»úÖÆµÄÐÔÄܱȴúÀíʽ¸üºÃ£¨ÉÙÁËÒ»¸öÖмä·Ö·¢»·½Ú£©¡£µ«È±µãÊÇÉý¼¶Âé·³£¬¶ÔÑз¢ÈËÔ±µÄ¸öÈËÒÀÀµÐÔÇ¿¡ª¡ªÐèÒªÓнÏÇ¿µÄ³ÌÐò¿ª·¢ÄÜÁ¦×öºó¶Ü¡£Èç¹ûÖ÷Á¦³ÌÐòÔ±ÀëÖ°£¬¿ÉÄÜеĸºÔðÈË£¬»áÑ¡ÔñÖØÐ´Ò»±é¡£
ËùÒÔ£¬ÕâÖÖ·½Ê½Ï£¬¿ÉÔËάÐԽϲ³öÏÖ¹ÊÕÏ£¬¶¨Î»ºÍ½â¾ö¶¼µÃÑз¢ºÍÔËάÅäºÏ׎â¾ö£¬¹ÊÕÏʱ¼ä±ä³¤¡£
ÕâÖÖ·½°¸£¬ÄÑÒÔ½øÐбê×¼»¯ÔËά£¬²»Ì«ÊʺÏÖÐС¹«Ë¾£¨³ý·ÇÓÐ×ã¹»µÄDevOPS£©¡£
1.2 ´úÀí·ÖƬ
ÕâÖÖ·½°¸£¬½«·ÖƬ¹¤×÷½»¸ø×¨ÃŵĴúÀí³ÌÐòÀ´×ö¡£´úÀí³ÌÐò½ÓÊÕµ½À´×ÔÒµÎñ³ÌÐòµÄÊý¾ÝÇëÇ󣬸ù¾Ý·ÓɹæÔò£¬½«ÕâЩÇëÇó·Ö·¢¸øÕýÈ·µÄRedisʵÀý²¢·µ»Ø¸øÒµÎñ³ÌÐò¡£

ÕâÖÖ»úÖÆÏ£¬Ò»°ã»áÑ¡ÓõÚÈý·½´úÀí³ÌÐò£¨¶ø²»ÊÇ×Ô¼ºÑз¢£©£¬ÒòΪºó¶ËÓжà¸öRedisʵÀý£¬ËùÒÔÕâÀà³ÌÐòÓÖ³ÆÎª·Ö²¼Ê½Öмä¼þ¡£
ÕâÑùµÄºÃ´¦ÊÇ£¬ÒµÎñ³ÌÐò²»ÓùØÐĺó¶ËRedisʵÀý£¬ÔËάÆðÀ´Ò²·½±ã¡£ËäÈ»»áÒò´Ë´øÀ´Ð©ÐÔÄÜËðºÄ£¬µ«¶ÔÓÚRedisÕâÖÖÄÚ´æ¶ÁдÐÍÓ¦Óã¬Ïà¶Ô¶øÑÔÊÇÄÜÈÝÈ̵ġ£
ÕâÊÇÎÒÃÇÍÆ¼öµÄ¼¯ÈºÊµÏÖ·½°¸¡£Ïñ»ùÓڸûúÖÆµÄ¿ªÔ´²úÆ·Twemproxy£¬±ãÊÇÆäÖдú±íÖ®Ò»£¬Ó¦Ó÷dz£¹ã·º¡£
1.3 Redis Cluster
ÔÚÕâÖÖ»úÖÆÏ£¬Ã»ÓÐÖÐÐĽڵ㣨ºÍ´úÀíģʽµÄÖØÒª²»Í¬Ö®´¦£©¡£ËùÒÔ£¬Ò»ÇпªÐĺͲ»¿ªÐĵÄÊÂÇ飬¶¼½«»ùÓڴ˶øÕ¹¿ª¡£
Redis Cluster½«ËùÓÐKeyÓ³Éäµ½16384¸öSlotÖУ¬¼¯ÈºÖÐÿ¸öRedisʵÀý¸ºÔðÒ»²¿·Ö£¬ÒµÎñ³ÌÐòͨ¹ý¼¯³ÉµÄRedis
Cluster¿Í»§¶Ë½øÐвÙ×÷¡£¿Í»§¶Ë¿ÉÒÔÏòÈÎһʵÀý·¢³öÇëÇó£¬Èç¹ûËùÐèÊý¾Ý²»ÔÚ¸ÃʵÀýÖУ¬Ôò¸ÃʵÀýÒýµ¼¿Í»§¶Ë×Ô¶¯È¥¶ÔӦʵÀý¶ÁдÊý¾Ý¡£
Redis ClusterµÄ³ÉÔ±¹ÜÀí£¨½ÚµãÃû³Æ¡¢IP¡¢¶Ë¿Ú¡¢×´Ì¬¡¢½ÇÉ«£©µÈ£¬¶¼Í¨¹ý½ÚµãÖ®¼äÁ½Á½Í¨Ñ¶£¬¶¨ÆÚ½»»»²¢¸üС£
Óɴ˿ɼû£¬ÕâÊÇÒ»Öַdz£¡°ÖØ¡±µÄ·½°¸¡£ÒѾ²»ÊÇRedisµ¥ÊµÀýµÄ¡°¼òµ¥¡¢¿ÉÒÀÀµ¡±ÁË¡£¿ÉÄÜÕâÒ²ÊÇÑÓÆÚ¶àÄêÖ®ºó£¬²Å½üÆÚ·¢²¼µÄÔÒòÖ®Ò»¡£
ÕâÁîÈËÏëÆðÒ»¶ÎÀúÊ·¡£ÒòΪMemcache²»Ö§³Ö³Ö¾Ã»¯£¬ËùÒÔÓÐÈËдÁËÒ»¸öMembase£¬ºóÀ´¸ÄÃû½ÐCouchbase£¬ËµÊÇÖ§³ÖAuto
Rebalance£¬ºÃ¼¸ÄêÁË£¬ÖÁ½ñ¶¼Ã»¶àÉÙ¼Ò¹«Ë¾ÔÚʹÓá£
ÕâÊǸöÁîÈËÓÇÐÄâçâçµÄ·½°¸¡£Îª½â¾öÖٲõȼ¯Èº¹ÜÀíµÄÎÊÌ⣬Oracle RAC»¹»áʹÓô洢É豸µÄÒ»¿é¿Õ¼ä¡£¶øRedis
Cluster£¬ÊÇÒ»ÖÖÍêÈ«µÄÈ¥ÖÐÐÄ»¯¡¡
±¾·½°¸Ä¿Ç°²»ÍƼöʹÓ㬴ÓÁ˽âµÄÇé¿öÀ´¿´£¬ÏßÉÏÒµÎñµÄʵ¼ÊÓ¦ÓÃÒ²²¢²»¶à¼û¡£
2. Twemproxy¼°²»×ãÖ®´¦
TwemproxyÊÇÒ»ÖÖ´úÀí·ÖƬ»úÖÆ£¬ÓÉTwitter¿ªÔ´¡£Twemproxy×÷Ϊ´úÀí£¬¿É½ÓÊÜÀ´×Ô¶à¸ö³ÌÐòµÄ·ÃÎÊ£¬°´ÕÕ·ÓɹæÔò£¬×ª·¢¸øºǫ́µÄ¸÷¸öRedis·þÎñÆ÷£¬ÔÙÔ··µ»Ø¡£
Õâ¸ö·½°¸Ë³Àí³ÉÕµؽâ¾öÁ˵¥¸öRedisʵÀý³ÐÔØÄÜÁ¦µÄÎÊÌâ¡£µ±È»£¬Twemproxy±¾ÉíÒ²Êǵ¥µã£¬ÐèÒªÓÃKeepalived×ö¸ß¿ÉÓ÷½°¸¡£
ÎÒÏëºÜ¶àÈ˶¼Ó¦¸Ã¸ÐлTwemproxy£¬ÕâôЩÄêÀ´£¬Ó¦Ó÷¶Î§×î¹ã¡¢Îȶ¨ÐÔ×î¸ß¡¢×î¾Ã¾¿¼ÑéµÄ·Ö²¼Ê½Öмä¼þ£¬Ó¦¸Ã¾ÍÊÇËüÁË¡£Ö»ÊÇ£¬Ëû»¹ÓÐÖî¶à²»·½±ãÖ®´¦¡£
Twemproxy×î´óµÄÍ´µãÔÚÓÚ£¬ÎÞ·¨Æ½»¬µØÀ©ÈÝ/ËõÈÝ¡£
ÕâÑùµ¼ÖÂÔËάͬѧ·Ç³£Í´¿à£ºÒµÎñÁ¿Í»Ôö£¬ÐèÔö¼ÓRedis·þÎñÆ÷£»ÒµÎñÁ¿Î®Ëõ£¬ÐèÒª¼õÉÙRedis·þÎñÆ÷¡£µ«¶ÔTwemproxy¶øÑÔ£¬»ù±¾É϶¼ºÜÄѲÙ×÷£¨ÄÇÊÇÒ»ÖÖ×¶Ðĵġ¢¾À½áµÄÍ´¡¡£©¡£
»òÕß˵£¬Twemproxy¸ü¼ÓÏñ·þÎñÆ÷¶Ë¾²Ì¬sharding¡£ÓÐʱΪÁ˹æ±ÜÒµÎñÁ¿Í»Ôöµ¼ÖµÄÀ©ÈÝÐèÇó£¬ÉõÖÁ±»ÆÈпªÒ»¸ö»ùÓÚTwemproxyµÄRedis¼¯Èº¡£
TwemproxyÁíÒ»¸öÍ´µãÊÇ£¬ÔËά²»ÓѺã¬ÉõÖÁûÓпØÖÆÃæ°å¡£
Codis¸ÕºÃ»÷ÖÐTwemproxyµÄÕâÁ½´óÍ´µã£¬²¢ÇÒÌṩÖî¶àÆäËûÁîÈ˼¤É͵ÄÌØÐÔ¡£
3. Codisʵ¼ù
CodisÓÉÍã¶¹¼ÔÓÚ2014Äê11Ô¿ªÔ´£¬»ùÓÚGoºÍC¿ª·¢£¬ÊǽüÆÚÓ¿Ïֵġ¢¹úÈË¿ª·¢µÄÓÅÐ㿪ԴÈí¼þÖ®Ò»¡£ÏÖÒѹ㷺ÓÃÓÚÍã¶¹¼ÔµÄ¸÷ÖÖRedisÒµÎñ³¡¾°£¨Òѵõ½Íã¶¹¼Ô@ÁõÆæÍ¬Ñ§µÄÈ·ÈÏ£¬ºÇºÇ£©¡£
´Ó3¸öÔµĸ÷ÖÖѹÁ¦²âÊÔÀ´¿´£¬Îȶ¨ÐÔ·ûºÏ¸ßЧÔËάµÄÒªÇó¡£ÐÔÄܸüÊǸÄÉÆºÜ¶à£¬×î³õ±ÈTwemproxyÂý20%£»ÏÖÔÚ±ÈTwemproxy¿ì½ü100%£¨Ìõ¼þ£º¶àʵÀý£¬Ò»°ãValue³¤¶È£©¡£
3.1 Ìåϵ¼Ü¹¹
CodisÒýÈëÁËGroupµÄ¸ÅÄÿ¸öGroup°üÀ¨1¸öRedis Master¼°ÖÁÉÙ1¸öRedis
Slave£¬ÕâÊǺÍTwemproxyµÄÇø±ðÖ®Ò»¡£ÕâÑù×öµÄºÃ´¦ÊÇ£¬Èç¹ûµ±Ç°MasterÓÐÎÊÌ⣬ÔòÔËάÈËÔ±¿Éͨ¹ýDashboard¡°×ÔÖúʽ¡±Çл»µ½Slave£¬¶ø²»ÐèҪСÐÄÒíÒíµØÐ޸ijÌÐòÅäÖÃÎļþ¡£
Ϊ֧³ÖÊý¾ÝÈÈÇ¨ÒÆ£¨Auto Rebalance£©£¬³öÆ··½ÐÞ¸ÄÁËRedis ServerÔ´Â룬²¢³ÆÖ®ÎªCodis
Server¡£
Codis²ÉÓÃÔ¤ÏÈ·ÖÆ¬£¨Pre-Sharding£©»úÖÆ£¬ÊÂÏȹ涨ºÃÁË£¬·Ö³É1024¸öslots£¨Ò²¾ÍÊÇ˵£¬×î¶àÄÜÖ§³Öºó¶Ë1024¸öCodis
Server£©£¬ÕâЩ·ÓÉÐÅÏ¢±£´æÔÚZooKeeperÖС£

ZooKeeper»¹Î¬»¤Codis Server GroupÐÅÏ¢£¬²¢Ìṩ·Ö²¼Ê½ËøµÈ·þÎñ¡£
3.2 ÐÔÄܶԱȲâÊÔ
CodisĿǰÈÔ±»¾«ÒæÇ󾫵ظĽøÖС£ÆäÐÔÄÜ£¬´Ó×î³õµÄ±ÈTwemproxyÂý20%£¨ËäÈ»Õâ¶ÔÓÚÄÚ´æÐÍÓ¦ÓöøÑÔ£¬²¢²»Ã÷ÏÔ£©£¬µ½ÏÖÔÚÔ¶Ô¶³¬¹ýTwemproxyÐÔÄÜ£¨Ò»¶¨Ìõ¼þÏ£©¡£
ÎÒÃǽøÐÐÁ˳¤´ï3¸öÔµIJâÊÔ¡£²âÊÔ»ùÓÚredis-benchmark£¬·Ö±ðÕë¶ÔCodisºÍTwemproxy£¬²âÊÔValue³¤¶È´Ó16B~10MBʱµÄÐÔÄܺÍÎȶ¨ÐÔ£¬²¢½øÐжàÂÖ²âÊÔ¡£
Ò»¹²ÓÐ4̨ÎïÀí·þÎñÆ÷²ÎÓë²âÊÔ£¬ÆäÖÐһ̨·Ö±ð²¿ÊðcodisºÍtwemproxy£¬ÁíÍâÈý̨·Ö±ð²¿Êðcodis
serverºÍredis server£¬ÒÔÐγÉÁ½¸ö¼¯Èº¡£
´Ó²âÊÔ½á¹ûÀ´¿´£¬¾ÍSet²Ù×÷¶øÑÔ£¬ÔÚValue³¤¶È<888Bʱ£¬CodisÐÔÄÜÓÅÔ½ÓÅÓÚTwemproxy£¨ÕâÔÚÒ»°ãÒµÎñµÄValue³¤¶È·¶Î§Ö®ÄÚ£©¡£

¾ÍGet²Ù×÷¶øÑÔ£¬CodisÐÔÄÜÒ»Ö±ÓÅÓÚTwemproxy¡£

3.3 ʹÓü¼ÇÉ¡¢×¢ÒâÊÂÏî
Codis»¹ÓкܶàºÃÍæµÄ¶«¶«£¬´Óʵ¼ÊʹÓÃÀ´¿´£¬ÓÐЩµØ·½Ò²ÖµµÃ×¢Òâ¡£
1£©ÎÞ·ìÇ¨ÒÆTwemproxy
³öÆ··½ÌùÐĵØ×¼±¸ÁËCodis-port¹¤¾ß¡£Í¨¹ýËü£¬¿ÉÒÔʵʱµØÍ¬²½ Twemproxy
µ×Ï嵀 Redis Êý¾Ýµ½ÄãµÄ Codis ¼¯Èº¡£Í¬²½Íê³Éºó£¬Ö»ÐèÐÞ¸ÄһϳÌÐòÅäÖÃÎļþ£¬½« Twemproxy
µÄµØÖ·¸Ä³É Codis µÄµØÖ·¼´¿É¡£Êǵģ¬Ö»ÐèÒª×öÕâô¶à¡£
2£©Ö§³ÖJava³ÌÐòµÄHA
CodisÌṩһ¸öJava¿Í»§¶Ë£¬²¢³ÆÖ®ÎªJodis£¨Ãû×ֺܿᣬÊǰɣ¿£©¡£ÕâÑù£¬Èç¹ûµ¥¸öCodis
Proxyå´µô£¬Jodis×Ô¶¯·¢ÏÖ£¬²¢×Ô¶¯¹æ±ÜÖ®£¬Ê¹µÃÒµÎñ²»ÊÜÓ°Ïì£¨ÕæµÄºÜ¿á£¡£©¡£
3£©Ö§³ÖPipeline
PipelineʹµÃ¿Í»§¶Ë¿ÉÒÔ·¢³öÒ»ÅúÇëÇ󣬲¢Ò»´ÎÐÔ»ñµÃÕâÅúÇëÇóµÄ·µ»Ø½á¹û¡£ÕâÌáÉýÁËCodisµÄÏëÏó¿Õ¼ä¡£
´Óʵ¼Ê²âÊÔÀ´¿´£¬ÔÚValue³¤¶ÈСÓÚ888B×Ö½Úʱ£¬SetÐÔÄÜѸÃÍÌáÉý£»

GetÐÔÄÜÒิÈçÊÇ¡£

4£©Codis²»¸ºÔðÖ÷´Óͬ²½
Ò²¾ÍÊÇ˵£¬ Codis½ö¸ºÔðά»¤µ±Ç°Redis ServerÁÐ±í£¬ÓÉÔËάÈËÔ±×Ô¼ºÈ¥±£Ö¤Ö÷´ÓÊý¾ÝµÄÒ»ÖÂÐÔ¡£
ÕâÊÇÎÒ×îÔÞÉ͵ĵط½Ö®Ò»¡£ÕâÑùµÄºÃ´¦ÊÇ£¬Ã»°ÑCodis¸ãµÃÄÇÃ´ÖØ¡£Ò²ÊÇÎÒÃǸÒÓÚ·ÅÊÖÔÚÏßÉÏ»·¾³ÖÐÉÏÏßµÄÔÒòÖ®Ò»¡£
5£©¶ÔCodisµÄºóÐøÆÚ´ý£¿
ºÃ°É£¬´ÖdzµØËµÁ½¸ö¡£Ï£ÍûCodis²»Òª±äµÃÌ«ÖØ¡£ÁíÍ⣬¼Ópipeline²ÎÊýºó£¬Value³¤¶ÈÈç¹û½Ï´ó£¬ÐÔÄÜ·´¶ø±ÈTwemproxyÒªµÍһЩ£¬Ï£ÍûÄÜÓиÄÉÆ£¨ÎÒÃǶàÂÖѹ²â½á¹û¶¼Èç´Ë£©¡£
Òòƪ·ùÓÐÏÞ£¬Ô´Âë·ÖÎö²»ÔÚ´ËÕ¹¿ª¡£ÁíÍâCodisÔ´Âë¡¢Ìåϵ½á¹¹¼°FAQ£¬²Î¼ûÈçÏÂÁ´½Ó£ºhttps://github.com/wandoulabs/codis
PS£ºÏßÉÏÎĵµµÄ¿É¶ÁÐÔ£¬Ò²ÊÇÏ൱ֵµÃ³ÆÔ޵ĵط½¡£Ò»¾ä»°£ººÜ×ßÐÄ£¬ÔÞ£¡
×îºó£¬Redis³õѧÕßÇë²Î¿¼Õâ¸öÁ´½Ó£ºhttp://www.gamecbg.com/bc/db/redis/13852.html£¬ÎÄ×ÖdzÏÔÒ×¶®£¬¶øÇұȽÏÈ«Ãæ¡£
±¾Îĵõ½Codis¿ª·¢ÍŶÓÁõÆæºÍ»Æ¶«ÐñͬѧµÄ´óÁ¦ÐÖú£¬²¢µÃµ½Tim YangÀÏʦµÈÅóÓÑÃÇÔÚÄÚÈݰѿط½ÃæµÄÖ¸µ¼¡£±¾ÎĹ²Í¬×÷ÕßΪÕÔÎÄ»ªÍ¬Ñ§£¬ËûÖ÷Òª¸ºÔðCodis¼°TwemproxyµÄ¶Ô±È²âÊÔ¡£ÔÚ´ËÒ»²¢Ð»¹ý¡£ |