Ëæ×ÅÒµÎñ¶Ô´óÊý¾Ý¼¼ÊõÐèÇóµÄ²»¶ÏÑݱ䣬·Ö²¼Ê½Êý¾Ý¿âÔÚÕû¸öÉú̬ȦÖеĵØÎ»Óú¼ÓÖØÒª£¬ÒÑ¿ÉÔ¤¼û±Ø½«³ÉΪδÀ´´óÊý¾Ý¼¼Êõ·¢Õ¹µÄÓÖÒ»¸öºËÐÄ£¬¶øÆäÖÐOLAP£¨Áª»ú·ÖÎö´¦Àí£©ÏÔµÃÓÈÆäÖØÒª¡£
»ù±¾ÀíÂÛ
Êý¾Ý¿âµÄ»ù±¾ÀíÂÛACID
Ô×ÓÐÔ£¨Atomic£©¡£Õû¸öÊÂÎñÖеÄËùÓвÙ×÷Ҫôȫ²¿Íê³É£¬ÒªÃ´È«²¿²»Íê³É£¬²»¿ÉÄÜÍ£ÖÍÔÚÖмäij¸ö»·½Ú¡£ÊÂÎñÔÚÖ´Ðйý³ÌÖз¢Éú´íÎ󣬻ᱻ»Ø¹ö£¨Rollback£©µ½ÊÂÎñ¿ªÊ¼Ç°µÄ״̬£¬¾ÍÏñÕâ¸öÊÂÎñ´ÓÀ´Ã»ÓÐÖ´ÐйýÒ»Ñù¡£
Ò»ÖÂÐÔ£¨Consistent£©¡£ÔÚÊÂÎñ¿ªÊ¼Ö®Ç°ºÍÊÂÎñ½áÊøÒÔºó£¬Êý¾Ý¿âµÄÍêÕûÐÔÔ¼ÊøÃ»Óб»ÆÆ»µ¡£
¸ôÀëÐÔ£¨Isolated£©¡£¸ôÀë״ִ̬ÐÐÊÂÎñ£¬Ê¹ËüÃǺÃÏñÊÇÔÚ¸ø¶¨Ê±¼äÄÚϵͳִÐеÄΨһ²Ù×÷¡£Èç¹ûÓÐÁ½¸öÊÂÎñ£¬ÔËÐÐÔÚÏàͬµÄʱ¼äÄÚ£¬Ö´ÐÐÏàͬµÄ¹¦ÄÜ£¬ÊÂÎñµÄ¸ôÀëÐÔ½«È·±£Ã¿Ò»ÊÂÎñÔÚϵͳÖÐÈÏΪֻÓиÃÊÂÎñÔÚʹÓÃϵͳ¡£ÕâÖÖÊôÐÔÓÐʱ³ÆÎª´®Ðл¯£¬ÎªÁË·ÀÖ¹ÊÂÎñ²Ù×÷¼äµÄ»ìÏý£¬±ØÐë´®Ðл¯»òÐòÁл¯ÇëÇó£¬Ê¹µÃÔÚͬһʱ¼ä½öÓÐÒ»¸öÇëÇóÓÃÓÚͬһÊý¾Ý¡£
³Ö¾ÃÐÔ£¨Durable£©¡£ÔÚÊÂÎñÍê³ÉÒԺ󣬸ÃÊÂÎñ¶ÔÊý¾Ý¿âËù×÷µÄ¸ü¸Ä±ã³Ö¾ÃµØ±£´æÔÚÊý¾Ý¿âÖ®ÖУ¬²¢²»»á±»»Ø¹ö¡£
¶ÔÓÚACIDµÄʵÏÖ·½Ê½Ö÷ÒªÓÐÁ½¸ö£¬Ò»¸öÊÇÈÕ־ʽµÄ·½Ê½£¨Write ahead logging£©£¬¼¸ºõËùÓеÄÊý¾Ý¿âϵͳ£¨MySQL¡¢OracleµÈ£©¶¼»ùÓÚÈÕÖ¾µÄ·½Ê½¡£ÁíÍâÒ»ÖÖÊÇShadow paging£¬´ú±íµÄÊý¾Ý¿âÖ÷ÒªÊÇSQLite£¬Android»òÕßiOS APP¿ª·¢µÄ»°Ó¦¸Ã»á±È½ÏÁ˽⣬µ«´óÐ͵ÄÊý¾Ý¿â¶¼²»»áÓõ½¡£

ͼ1 ÊÂÎñ¸ôÀëÐÔÒ»ÀÀ
·Ö²¼Ê½Êý¾Ý¿âµÄCAPÀíÂÛ
Ò»ÖÂÐÔ£¨C£©¡£·Ö²¼Ê½ÏµÍ³ÖÐËùÓÐÊý¾Ý±¸·ÝÔÚͬһʱ¿ÌµÄÖµÊÇ·ñÏàͬ¡£
¿ÉÓÃÐÔ£¨A£©¡£µ±¼¯ÈºÖÐÒ»²¿·Ö½Úµã¹ÊÕϺ󣬼¯ÈºÕûÌåÊÇ·ñ»¹ÄÜÏìÓ¦¿Í»§¶ËµÄ¶ÁдÇëÇ󣨿ÉÓÃÐÔ²»½ö°üÀ¨¶Á£¬»¹ÓÐд£©¡£
·ÖÇøÈÝÈÌÐÔ£¨P£©¡£¼¯ÈºÖеÄijЩ½ÚµãÎÞ·¨ÁªÏµºó£¬¼¯ÈºÕûÌåÊÇ·ñ»¹ÄܼÌÐø½øÐзþÎñ¡£

ͼ2 CAPÈý´ó¶¨ÂÉ
NoSQL·ÖÀà
Èç¹ûͬʱÂú×ãÕâÈýµã£¬³É±¾½«»á·Ç³£¸ß£¬ËùÒÔ½¨Òé¸ù¾ÝÒµÎñµÄ¾ßÌåÐèÇó×öºÃƽºâÑ¡Ôñ¡£°ÑNoSQL×öÒ»¸ö¼òµ¥·ÖÀཫ°üÀ¨Èçϼ¸ÖÖ£º
Key/Value »ò ¡®the big hash table¡¯¡£µäÐ͵ÄÓÐAmazon S3 (Dynamo)¡¢Voldemort¡¢Scalaris¡¢Memcached (in-memory key/value store)¡¢RedisµÈ¡£
Schema-less¡£µäÐ͵ÄÓÐCassandra (column-based)¡¢CouchDB (document-based)¡¢MongoDB(document-based)¡¢Neo4J (graph-based)¡¢HBase (column-based)¡¢ElasticSearch(document-based)µÈ¡£
OLTPºÍOLAPµÄ¶Ô±È·ÖÎö
Ŀǰ·Ö²¼Ê½Êý¾Ý¿âÖ÷Òª·ÖΪÁ½ÖÖ³¡¾°¡ª¡ªOLTP£¨Áª»úÊÂÎñ´¦Àí£©ºÍOLAP£¨Áª»ú·ÖÎö´¦Àí£©¡£Ëæ×Å´óÊý¾Ý¼¼Êõ·¢Õ¹£¬Êý¾Ý¿âÑ¡ÔñÔ½À´Ô½¶à£¬ÆäÖ÷Òª²î±ð°üÀ¨£ºÃæÏòÊÂÎñ»¹ÊÇÃæÏò·ÖÎö£»Êý¾ÝÄÚÈÝÊǵ±Ç°µÄ¡¢ÏêϸµÄÊý¾Ý»¹ÊÇÀúÊ·µÄ¡¢»ã×ܵÄÊý¾Ý£»Êý¾Ý¿âÉè¼ÆÊÇʵÌåÁªÏµÄ£ÐÍERºÍÃæÏòÓ¦ÓõÄÊý¾Ý¿âÉè¼Æ£¬»¹ÊÇÐÇÐÍ¡¢Ñ©»¨Ä£ÐͺÍÃæÏòÖ÷ÌâµÄÊý¾Ý¿âÉè¼ÆµÈ¡£Ç°ÕßÖ¸µÄÊÇOLTP³¡¾°£¬ºóÕßÖ¸µÄÊÇOLAP³¡¾°¡£
±í1 OLTPºÍOLAP¶Ô±È

»ùÓÚ·Ö²¼Ê½Êý¾Ý¿âµÄÀíÂÛ£¬²»¹ÜÊÇÊý¾Ý¿âµÄÓÅ»¯»¹ÊÇÉè¼Æ¡¢Ê¹Óã¬Óöµ½µÄÎÊÌâ·Ç³£¶à¡£¾ÙÀý˵£¬ÏÖÔÚÓ²¼þ·¢Õ¹ºÜºÃ£¬ÌرðSSD£¬Èç¹ûÆäÉ豸ÐÔÄÜԶԶûÓдﵽ£¬ÄÇôʹÓÃSSDµÄÊý¾Ý¿âÐÔÄܸÃÈçºÎÌá¸ß¡£Èç¹ûÖ»ÊÇΪÁËÂú×ãÒµÎñµ±Ç°µÄ¼òµ¥ÐèÇ󣬿ÉÒÔ°ÑÏÖÔںܶàÊý¾Ý¿âµÄ´«ÊäÒýÇæ´æ´¢Ö±½Ó»»³ÉSSD£¬¿ÉÒÔ¿ìËٵؽâ¾öºÜ´óµÄÎÊÌâ¡£ÁíÍ⻹ÓÐÒ»¸öºÜ¾µäµÄÎÊÌ⣬Ôõô±£Ö¤Ôڸ߿ɿ¿µÄǰÌáÏÂÌá¸ßÊý¾Ý¿â²åÈëºÍ²éѯÐÔÄÜ¡£¸Õ²Å˵µÄÊǵ¥»úģʽ£¬¶à»úµÄ·Ö²¼Ê½Ä£Ê½ÏÂÓÖ¸ÃÔõôÌá¸ßÊý¾Ýµ÷ÓÃÐÔÄÜ£¬Ò²ÓÐÐí¶àÌôÕ½¡£×ÜÖ®£¬Ò»¶¨Òª¸ù¾ÝÒµÎñµÄÐèÇóÀ´Ñ¡Ôñ×îºÏÊÊ×Ô¼ºµÄÊý¾Ý¿âϵͳ¡£
·Ö²¼Ê½Êý¾Ý¿âʵ¼Ê°¸Àý
HBase
ÔÚHBaseµÄÉè¼ÆÔÔòÖУ¬Ã¿¸öÁÐ×å¿ÉÒÔ°üº¬ÈÎÒâ¶àµÄÁУ¬Ã¿¸öÁпÉÒÔÓÐÈÎÒâ¶àµÄ°æ±¾£¬ÁÐÖ»ÓÐÔÚÓÐֵʱ²Å´æÔÚ£¬Áб¾ÉíÊÇÅÅÐòµÄ¡£
ÖØµã¿´Ò»ÏÂZookeeperµÄÄ£ÐÍ£¬ËüÓÃÁËÒ»¸ö·Ç³£¾µäµÄÄ£ÐͽÐLeader/Follower¡£¾Ù¸öÀý×Ó˵£¬ÔÚÈ¥²ÍÌü³Ô·¹Ê±£¬½ø²ÍÌü¿Ï¶¨ÓÐÁì°à°ÑÄãÁì¹ýÈ¥£¬°²Åŵ½Ä³¸ö×ù룬µã²ËÔò²»ÊÇËûµÄ¹¤×÷£¬¶øÓÉÆäͬÊÂÍê³É£¬ÕâÊǷdz£´«Í³µÄ°ëͬ²½Ä£ÐÍ¡£¶øLeader/FollowerÄ£ÐÍÊÇÁì°à°ÑÄãÁì¹ýÈ¥°ïÄãµã²Ë£¬ËûÔÚ֮ǰ»áÔÙѡһ¸öFollower×öLeader£¬Í¨¹ýÑ¡¾ÙÖÆÀ´ÊµÏÖ£¬ÕâÑù»á¼õÉÙÏ̵߳ĵ÷¶È£¬Õâ¶ÔÊý¾Ý¿âµÄÐÔÄÜ»áÓкܴóµÄÌáÉý¡£

ͼ3 HBaseÖеŦÄÜʵÏÖ
ElasticSearch£¨ES£©
¶ÔÓÚ·Ö²¼Ê½Êý¾Ý¿âÀï°ÑElasticSearchÒ²×÷ΪһÖÖ·Ö²¼Ê½Êý¾Ý¿âÊÇÓÐÔÒòµÄ£¬Èç¹ûÐèÒª¿ìËÙ²éѯ£¬µ«Áкܶ࣬HBaseµÄSQLÖ§³Ö²»Ì«ºÃ£¬Ê¹Óò»·½±ã¡£¶øES¶ÔÓÚǰ¶Ë¹¤³Ìʦ¿ª·¢·Ç³£¼òµ¥£¬²»ÐèÒª¶Ô·Ö²¼Ê½Êý¾Ý¿âÄÚºËÁ˽âºÜÉî¾Í¿ÉÒԺܿìʹÓÃÆðÀ´£¬¶øÖ»ÐèÒªÁ˽âRestfulAPI¾Í¿ÉÒÔÁË£¬²¢ÇÒÒ²ºÜ·½±ã¡£ESµ×²ã¶¼ÊÇ·Ö²¼Ê½µÄLucene£¬ÈçGithubʹÓÃElasticsearchËÑË÷20TBµÄÊý¾Ý£¬°üÀ¨13ÒÚµÄÎļþ¡£ESµÄÄ£ÐͱȽÏÇåÎú±È½Ï¼òµ¥£¬¾ÍÁ½¸ö²½Ö裬һ¸ö²½ÖèÊÇÔõô°ÑÊý¾Ý½¨Ë÷Òý£¬½¨ÍêË÷ÒýÖ÷ÒªÊÇ×ö²éѯ£¬Ôõô°ÑSQLµÄÓï¾ä×ö²éѯ¡£

ͼ4 ElasticSearchÁÁµã
ES×îÖØÒªµÄÊǽ¨Ë÷Òý£¬Ã¿¸öµÄ¼Ç¼¶¼»á¸ù¾ÝÐèÇó½¨Ë÷Òý£¬Õâô×öÓкÃÓлµ¡ª¡ªÈç¹ûͻȻÀ´ÁË100ÒÚÌõ¼Ç¼£¬½¨Ë÷ÒýµÄʱ¼ä»áºÜ³¤£¬¶ÔÓÚÒµÎñË÷ÒýÊDz»ÄÜÈÌÊܵġ£ËùÒÔÈç¹ûÖ§³ÖÀëÏß½¨Á¢Ë÷Òý£¬ºóÃæÊµÊ±ÔöÁ¿½¨Ë÷ÒýÕâÑù»á¸üºÃ£¬Ä¿Ç°ESÕâ¸öÄ£ÐÍ»¹²»ÄÜÖ§³Ö¡£ µ«ÊÇESʱÏÂÒÑ·¢Õ¹µÄ±È½Ï³ÉÊ죬ÏÖÔÚÄܶԽӵĽӿڶ¼ÄÜÖ§³Ö£¬ËùÒÔÊǷdz£·½±ãµÄ¡£
·Ö²¼Ê½Êý¾Ý¿âϵͳ¶Ô±È

ͼ5 ElasticSearch¹¦ÄÜÄ£¿é
ÕâÀïÖ÷Òª¶Ô±ÈPinotºÍDruid£¬Ö§³Ö¶àά¶Èʵʱ²éѯµÄ·Ö²¼Ê½ÏµÍ³¡£
±í2 DruidºÍPinot¹¦ÄÜʵÏÖ¶Ô±È

ÓÉÓÚPinot¸úESϵͳ¼Ü¹¹ºÜÀàËÆ£¬¶øPinot±ÈDruidÖ§³Ö´æ´¢¸ñʽ¸ü¶àһЩ£¬ËùÒÔÎÒÃÇÓÃPinotºÍES×öÁËÒ»¸öÐÔÄܲâÊԶԱȣ¬²âÊÔÌõ¼þÈçÏ£º
- ¼Ç¼ÌõÊý·ÖΪ100ÒÚÒÔÄÚºÍ1000ÒÚÌõ
- ·þÎñÆ÷ÊýÁ¿Îª70̨£¬ÅäÖÃΪ£ºCPU 12ºË£¬ÄÚ´æ96G£¬Ó²ÅÌ48T
- ²âÊÔÓï¾ä£ºselect count(*) from test where age > 25 and gender > 0 and os > ¡°500¡± and sc in (¡°0001009¡±,¡±0002036¡±,¡±0016030¡±,¡±¡¡±) or bs>585 and group by age,gender,os,bs
- ×ܹ²12ÁУº¶¯Ì¬ÁÐΪ3ÁУ¨¶àÖµÁУ©£¬ÆÕͨÁÐΪ9ÁÐ
±í3 ElasticSearchºÍPinot°ÙÒÚÌõ¼ìË÷¶Ô±È

±í4 ElasticSearchºÍPinotǧÒÚÌõ¼ìË÷¶Ô±È

¶ÔÓÚPinotºÍESÓÐÒ»¸ö¹²ÐÔ£¬ËûÃǶ¼ÓжàÖµÁеÄÊôÐÔ£¬¼´ÀàËÆµÄÊôÐÔ¿ÉÒÔ·ÅÈëͬһÁУ¬ÕâÑù²éµÄ»°´ó²¿·ÖÐèÒª°ÑÒ»¸öÁеÄÊý¾Ý²é³öÀ´£¬´Ó¶ø¸üÓÐÒæÓÚÐÔÄÜ¡£
ÕæÊµ°¸Àý·ÖÎö
ÒµÎñÐèÇó£º
- ÿÌìÇëÇóÊý³¬¹ý 100 ÒÚ
- ÿÌìÔö³¤³¬¹ý 5TB ¼¶Êý¾Ý
- ÿÌì¶Ô¼¸Ç§ÒÚÌõ¼Ç¼½øÐÐÉÏ 1000 ÖÖά¶ÈµÄ¼ÆËã
- ¿Í»§ÓÐÁ÷ʽ¡¢ÊµÊ±¡¢ÀëÏßÐèÇó
ͼ6ÊÇϵͳÊý¾ÝÁ÷³Ì¡£

ͼ6 ϵͳÊý¾ÝÁ÷³Ì
Êý¾Ý²É¼¯ÓÃWebService£¬ÈçNginx£»Êý¾ÝÊÕ¼¯·þÎñÓÃKafkaºÍFlume£»Êý¾ÝÇåÏ´·þÎñStorm£¬²ÉÓÃStormÖ÷ÒªÓÐÏÂÃæÁ½¸öÔÒò£¬ÒµÎñÐèÇóÔÚºÁÃë¼¶ÐèÒª£»ÓÐÑϸñÒªÇóµÄʱ¼äÐòÁУ¬ÈçÔÀ´ÊäÈëÊÇ1¡¢2¡¢3¡¢4¡¢5£¬Êä³ö»¹±ØÐëÊÇ1¡¢2¡¢3¡¢4¡¢5¡£ÆäËûÓÃSpark Streaming½«»á±È½ÏºÃ¡£
½ÓÏÂÀ´°ÑKafka·ÖÁ÷³öÀ´µÄÊý¾Ý¶ÔӦÿһÌõ²»Í¬µÄÒµÎñ£¬È»ºóµ¼Èë¶ÔÓ¦µÄ´æ´¢£¬ÈçHBase¡¢HDFSµÈ£¬Í¨¹ý²»Í¬µÄÁ÷À´½â¾ö²»Í¬µÄÒµÎñÎÊÌ⣬Ȼºó»ùÓÚ²»Í¬´æ´¢×ö¸÷ÖÖËã·¨·ÖÎö£»×îºó½«¸÷ÖÖ½á¹ûÊý¾Ýµ¼ÈëElasticSearch»òÕßMySQL¸øÇ°¶Ë×öÊý¾Ý¿ÉÊÓ»¯¡£
ͨ¹ýÔĶÁÉÏÊö֪ʶÏàП÷λ¶Ô·Ö²¼Ê½Êý¾Ý¿âµÄ·¢Õ¹ºÍ²»Í¬ÏµÍ³µÄ¼¼ÊõÌØµãÒѾÓÐÁËÒ»¶¨µÄÁ˽⣬ÏÞÓÚÆª·ùµÄÔÒò£¬±ÊÕßÒÔ·ÖÏí¼¸¸öESµÄʹÓÃÐĵýáÊø£º
- Óà ES µÄ Alias ÌØÐÔʵÏÖÊý¾ÝµÄˮƽÀ©Õ¹¡£
- Óà Kibana ·ÖÎöºÍÕ¹ÏÖÊý¾Ý£¨ELKÈý½£¿Í£©¿ÉÒÔÂú×ãºÜ¶à¹«Ë¾ÒµÎñ80%ÒÔÉϵÄÐèÇó£¬ELKÊÇÖ¸ElasticSearch¡¢Logstash¡¢Kibana£¬ËüÃÇ·Ö±ð¹¦ÄÜΪ£ºElasticSearchÊǸºÔðÈÕÖ¾¼ìË÷ºÍ·ÖÎö£»Logstash¸ºÔðÈÕÖ¾µÄÊÕ¼¯£¬´¦ÀíºÍ´¢´æ;Kibana¸ºÔðÈÕÖ¾µÄ¿ÉÊÓ»¯£¬½¨ÒéÓÃKibana4°æ±¾¡£
- ¶àÌõ¼þ¾ÛºÏ²éѯ£¬²¼¶û²éѯ¡£
- ¶¨ÖƷִʲå¼þ£¨IK£©£¬ÊµÏÖ¶ÔÌØÊâ×Ö·ûµÄ¾«È·Æ¥Å䣬ĿǰÏÖÔÚÖ÷Á÷µÄËÑË÷ÒýÇæÔÚËÑË÷¹Ø¼ü´ÊµÄʱºò¶Ô±êµã·ûºÅÊǺöÂԵ쬵«ÊÇÔÚʵÏÖһЩ¶Ô¼à¿ØÎ¢²©µÈÉç½»Êý¾Ýʱ£¬Èç¹û΢²©ÀïÓкܶà·ûºÅ£¬¾ÙÀýÀ´Ëµ¡°£º£©¡±Æäʵ´ú±íµÄÊÇЦÁ³£¬¶øÐ¦Á³¶ÔÓÚÎÒÃÇÀ´ÅжÏÕý¸ºÃæÊǷdz£ÓÐÓõģ¬ËùÒÔÅжÏÕý¸ºÃæ²»Ö»ÊÇÓïÒå·ÖÎöµÄ£¬»¹ÓжԱêµã·ûºÅ·ÖÎöÒ²·Ç³£ÖØÒª¡£
|