±à¼ÍƼö: |
±¾ÎĽ²Êö´«Í³ÏµÍ³µÄÎÊÌ⣬Lambda¼Ü¹¹µÄ±³¾°£¬´óÊý¾ÝϵͳµÄ¹Ø¼üÌØÐÔ£¬Êý¾ÝϵͳµÄ±¾ÖʵÈ
Ï£Íû¶ÔÄúÓÐËù°ïÖú
±¾ÎÄÀ´×ÔÓÚ΢ÐźŰ¢ÀïÔÆÔÆÆÜºÅ£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼¡¢ÍƼö¡£ |
|
´«Í³ÏµÍ³µÄÎÊÌâ
¡°ÎÒÃÇÕýÔÚ´ÓITʱ´ú×ßÏòDTʱ´ú(Êý¾Ýʱ´ú)¡£ITºÍDTÖ®¼ä£¬²»½ö½öÊǼ¼ÊõµÄ±ä¸ï£¬¸üÊÇ˼ÏëÒâʶµÄ±ä¸ï£¬ITÖ÷ÒªÊÇΪ×ÔÎÒ·þÎñ£¬ÓÃÀ´¸üºÃµØ×ÔÎÒ¿ØÖƺ͹ÜÀí£¬DTÔòÊǼ¤»îÉú²úÁ¦£¬ÈñðÈË»îµÃ±ÈÄãºÃ¡±¡ª¡ª°¢Àï°Í°Í¶Ê¾ÖÖ÷ϯÂíÔÆ¡£
Êý¾ÝÁ¿´ÓMµÄ¼¶±ðµ½GµÄ¼¶±ðµ½ÏÖÔÚTµÄ¼¶¡¢PµÄ¼¶±ð¡£Êý¾ÝÁ¿µÄ±ä»¯£¬Êý¾Ý¹ÜÀíϵͳ£¨DBMS£©ºÍÊý²Öϵͳ£¨DW£©Ò²ÔÚÇÄÈ»µÄ±ä»¯×Å¡£
´«Í³Ó¦ÓõÄÊý¾Ýϵͳ¼Ü¹¹Éè¼ÆÊ±£¬Ó¦ÓÃÖ±½Ó·ÃÎÊÊý¾Ý¿âϵͳ¡£µ±Óû§·ÃÎÊÁ¿Ôö¼Óʱ£¬Êý¾Ý¿âÎÞ·¨Ö§³ÅÈÕÒæÔö³¤µÄÓû§ÇëÇóµÄ¸ºÔØÊ±£¬´Ó¶øµ¼ÖÂÊý¾Ý¿â·þÎñÆ÷ÎÞ·¨¼°Ê±ÏìÓ¦Óû§ÇëÇ󣬳öÏÖ³¬Ê±µÄ´íÎó¡£³öÏÖÕâÖÖÇé¿öÒÔºó£¬ÔÚϵͳ¼Ü¹¹ÉϾͲÉÓÃͼ£¨A£©µÄ¼Ü¹¹£¬ÔÚÊý¾Ý¿âºÍÓ¦ÓÃÖмä¹ýÒ»²ã»º³å¸ôÀ룬»º½âÊý¾Ý¿âµÄ¶ÁдѹÁ¦¡£È»¶ø£¬µ±Óû§·ÃÎÊÁ¿³ÖÐøÔö¼Óʱ£¬¾ÍÐèÒª¿¼ÂǶÁд·ÖÀë¼¼Êõ£¨Master£Slave£©¼Ü¹¹Èçͼ£¨B£©£¬·Ö¿â·Ö±í¼¼Êõ¡£ÏÖÔÚ£¬¼Ü¹¹±äµÃÔ½À´Ô½¸´ÔÓÁË£¬Ôö¼Ó¶ÓÁС¢·ÖÇø¡¢¸´ÖƵȴ¦ÀíÂß¼¡£Ó¦ÓóÌÐòÐèÒªÁ˽âÊý¾Ý¿âµÄschema£¬²ÅÄÜ·ÃÎʵ½ÕýÈ·µÄÊý¾Ý¡£

Lambda¼Ü¹¹µÄ±³¾°
´óÊý¾Ý´¦Àí¼¼ÊõÐèÒª½â¾öÕâÖÖ¿ÉÉìËõÐÔÓ븴ÔÓÐÔ¡£
Ê×ÏÈÒªÈÏʶµ½ÕâÖÖ·Ö²¼Ê½µÄ±¾ÖÊ£¬ÒªºÜºÃµØ´¦Àí·ÖÇøÓë¸´ÖÆ£¬²»»áµ¼Ö´íÎó·ÖÇøÒýÆð²éѯʧ°Ü£¬¶øÊÇÒª½«ÕâЩÂß¼ÄÚ»¯µ½Êý¾Ý¿âÖС£µ±ÐèÒªÀ©Õ¹ÏµÍ³Ê±£¬¿ÉÒԷdz£·½±ãµØÔö¼Ó½Úµã£¬ÏµÍ³Ò²Äܹ»Õë¶ÔÐÂ½Úµã½øÐÐrebalance¡£
Æä´ÎÊÇÒªÈÃÊý¾Ý³ÉΪ²»¿É±äµÄ¡£ÔʼÊý¾ÝÓÀÔ¶¶¼²»Äܱ»Ð޸ģ¬ÕâÑù¼´Ê¹·¸ÁË´íÎó£¬Ð´ÁË´íÎóÊý¾Ý£¬ÔÀ´ºÃµÄÊý¾Ý²¢²»»áÊܵ½ÆÆ»µ¡£
StormµÄ×÷ÕßNathan MarzÌá³öµÄÒ»¸öʵʱ´óÊý¾Ý´¦Àí¿ò¼Ü£¨Lambda¼Ü¹¹£©¾ÍÂú×ãÒÔÉÏÁ½µã¡£MarzÔÚTwitter¹¤×÷ÆÚ¼ä¿ª·¢ÁËÖøÃûµÄʵʱ´óÊý¾Ý´¦Àí¿ò¼ÜStorm£¬Lambda¼Ü¹¹ÊÇÆä¸ù¾Ý¶àÄê½øÐзֲ¼Ê½´óÊý¾ÝϵͳµÄ¾Ñé×ܽáÌáÁ¶¶ø³É¡£
Lambda¼Ü¹¹µÄÄ¿±êÊÇÉè¼Æ³öÒ»¸öÄÜÂú×ãʵʱ´óÊý¾Ýϵͳ¹Ø¼üÌØÐԵļܹ¹£¬°üÀ¨ÓУº¸ßÈÝ´í¡¢µÍÑÓʱºÍ¿ÉÀ©Õ¹µÈ¡£Lambda¼Ü¹¹ÕûºÏÀëÏß¼ÆËãºÍʵʱ¼ÆË㣬Èںϲ»¿É±äÐÔ£¨Immunability£©£¬¶Áд·ÖÀëºÍ¸´ÔÓÐÔ¸ôÀëµÈһϵÁмܹ¹ÔÔò£¬¿É¼¯³ÉHadoop£¬Kafka£¬Storm£¬Spark£¬HbaseµÈ¸÷Àà´óÊý¾Ý×é¼þ¡£
´óÊý¾ÝϵͳµÄ¹Ø¼üÌØÐÔ
Marz½éÉÜBig Data SystemÐí¾ß±¸µÄÊôÐÔ£º
a¡¢Robust and fault-tolerant£¨ÈÝ´íÐԺͳ°ôÐÔ£©£º¶Ô´ó¹æÄ£·Ö²¼Ê½ÏµÍ³À´Ëµ£¬»úÆ÷ÊDz»¿É¿¿µÄ£¬¿ÉÄܻᵱ»ú£¬µ«ÊÇϵͳÐèÒªÊǽ¡×³¡¢ÐÐΪÕýÈ·µÄ£¬¼´Ê¹ÊÇÓöµ½»úÆ÷´íÎó¡£³ýÁË»úÆ÷´íÎó£¬È˸ü¿ÉÄܻ᷸´íÎó¡£ÔÚÈí¼þ¿ª·¢ÖÐÄÑÃâ»áÓÐһЩBug£¬ÏµÍ³±ØÐë¶ÔÓÐBugµÄ³ÌÐòдÈëµÄ´íÎóÊý¾ÝÓÐ×ã¹»µÄÊÊÓ¦ÄÜÁ¦£¬ËùÒԱȻúÆ÷ÈÝ´íÐÔ¸ü¼ÓÖØÒªµÄÈÝ´íÐÔÊÇÈËΪ²Ù×÷ÈÝ´íÐÔ¡£¶ÔÓÚ´ó¹æÄ£µÄ·Ö²¼Ê½ÏµÍ³À´Ëµ£¬È˺ͻúÆ÷µÄ´íÎóÿÌì¶¼¿ÉÄܻᷢÉú£¬ÈçºÎÓ¦¶ÔÈ˺ͻúÆ÷µÄ´íÎó£¬ÈÃϵͳÄܹ»´Ó´íÎóÖпìËÙ»Ö¸´ÓÈÆäÖØÒª¡£
b¡¢Low latency reads and updates£¨µÍÑÓʱ£©£ººÜ¶àÓ¦ÓöÔÓÚ¶ÁºÍд²Ù×÷µÄÑÓʱҪÇó·Ç³£¸ß£¬ÒªÇó¶Ô¸üкͲéѯµÄÏìÓ¦ÊǵÍÑÓʱµÄ¡£
c¡¢Scalable£¨ºáÏòÀ©ÈÝ£©£ºµ±Êý¾ÝÁ¿/¸ºÔØÔö´óʱ£¬¿ÉÀ©Õ¹ÐÔµÄϵͳͨ¹ýÔö¼Ó¸ü¶àµÄ»úÆ÷×ÊÔ´À´Î¬³ÖÐÔÄÜ¡£Ò²¾ÍÊdz£ËµµÄϵͳÐèÒªÏßÐÔ¿ÉÀ©Õ¹£¬Í¨³£²ÉÓÃscale out£¨Í¨¹ýÔö¼Ó»úÆ÷µÄ¸öÊý£©¶ø²»ÊÇscale up£¨Í¨¹ýÔöÇ¿»úÆ÷µÄÐÔÄÜ£©¡£
d¡¢General£¨Í¨ÓÃÐÔ£©£ºÏµÍ³ÐèÒªÄܹ»ÊÊÓ¦¹ã·ºµÄÓ¦Ó㬰üÀ¨½ðÈÚÁìÓò¡¢Éç½»ÍøÂç¡¢µç×ÓÉÌÎñÊý¾Ý·ÖÎöµÈ¡£
e¡¢Extensible£¨¿ÉÀ©Õ¹£©£ºÐèÒªÔö¼Óй¦ÄÜ¡¢ÐÂÌØÐÔʱ£¬¿ÉÀ©Õ¹µÄϵͳÄÜÒÔ×îСµÄ¿ª·¢´ú¼ÛÀ´Ôö¼Óй¦ÄÜ¡£
f¡¢Allows ad hoc queries£¨·½±ã²éѯ£©£ºÊý¾ÝÖÐÔ̺¬ÓмÛÖµ£¬ÐèÒªÄܹ»·½±ã¡¢¿ìËٵIJéѯ³öËùÐèÒªµÄÊý¾Ý¡£
d¡¢Minimal maintenance£¨Ò×ÓÚά»¤£©£ºÏµÍ³ÒªÏë×öµ½Ò×ÓÚά»¤£¬Æä¹Ø¼üÊÇ¿ØÖÆÆä¸´ÔÓÐÔ£¬Ô½ÊǸ´ÔÓµÄϵͳԽÈÝÒ׳ö´í¡¢Ô½ÄÑά»¤¡£
h¡¢Debuggable£¨Ò×µ÷ÊÔ£©£ºµ±³öÎÊÌâʱ£¬ÏµÍ³ÐèÒªÓÐ×ã¹»µÄÐÅÏ¢À´µ÷ÊÔ´íÎó£¬ÕÒµ½ÎÊÌâµÄ¸ùÔ´¡£Æä¹Ø¼üÊÇÄܹ»×·¸ùËÝÔ´µ½Ã¿¸öÊý¾ÝÉú³Éµã¡£
Êý¾ÝϵͳµÄ±¾ÖÊ
MarzÈÏΪ£ºÊý¾Ýϵͳͨ¹ý²éѯ¹ýÈ¥µÄ£¨²¿·Ö¡¢È«²¿£©Êý¾ÝÈ¥»Ø´ðÎÊÌâ¡£È磺ËûÊÇÒ»¸öʲôÑùµÄÈË£¿ËûÓжàÉÙÅóÓÑ£¿Õâ¸öÕ˺ÅÊÇ·ñÊÕ֧ƽºâ£¿¡£Òò´Ë£¬Data SystemµÄͨÓö¨ÒåΪ£º
Query £½ Function£¨all data£©¡£
¶ÔͨÓõıí´ïʽ½øÐзֽâµÃµ½£º
Êý¾Ýϵͳ £½ Êý¾Ý £« ²éѯ
´Ó¶ø¿ÉÒÔ´ÓÊý¾ÝºÍ²éѯÁ½¸ö·½ÃæÈÏʶ´óÊý¾ÝϵͳµÄ±¾ÖÊ¡£
Êý¾Ý±¾±¾ÖÊ£ºWhenºÍWhat
Êý¾ÝÊÇÒ»¸ö²»¿É·Ö¸îµÄµ¥Ôª£¬Êý¾ÝÓÐÁ½¸ö¹Ø¼üµÄÌØÐÔ£ºWhen ºÍ What¡£
WhenÊÇÖ»Êý¾ÝÊÇÓëʱ¼äÏà¹ØµÄ£¬Ò²¾ÍÊÇÊý¾ÝÊÇÔÚij¸öʱ¼ä²úÉúµÄ¡£Õâ¸ö·Ç³£ÖØÒª£¬ÔÚ¾ßÓÐÊÂÎñÌØÐÔµÄÊý¾Ý¿âÖУ¬²Ù×÷µÄÏȺó˳Ðò¶Ô½á¹ûÖÁ¹ØÖØÒª¡£ÀýÈçÊý¾Ý¿âµÄBinlogÈÕÖ¾¡£Òò´Ë£¬Êý¾ÝµÄʱ¼äÐÔÖʾö¶¨ÁËÊý¾ÝµÄÈ«¾Ö·¢ÉúÏȺó£¬Ò²¾Í¾ö¶¨ÁËÊý¾ÝµÄ½á¹û¡£
WhatÊÇÖ»Êý¾ÝµÄ±¾Éí¡£ÓÉÓÚÊý¾Ý¸úij¸öʱ¼äµãÏà¹Ø£¬ËùÒÔÊý¾ÝµÄ±¾ÉíÊDz»¿É±äµÄ(immutable)£¬¹ýÍùµÄÊý¾ÝÒѾ³ÉΪÊÂʵ£¨Fact£©£¬Äã²»¿ÉÄܻص½¹ýÈ¥µÄij¸öʱ¼äµãÈ¥¸Ä±äÊý¾ÝÊÂʵ¡£ÕâÒ²¾ÍÒâζ×ŶÔÊý¾ÝµÄ²Ù×÷ÆäʵֻÓÐÁ½ÖÖ£º¶ÁÈ¡ÒÑ´æÔÚµÄÊý¾ÝºÍÌí¼Ó¸ü¶àµÄÐÂÊý¾Ý¡£²ÉÓÃÊý¾Ý¿âµÄ¼Ç·¨£¬CRUD¾Í±ä³ÉÁËCR£¬UpdateºÍDelete±¾ÖÊÉÏÆäʵÊÇвúÉúµÄÊý¾ÝÐÅÏ¢£¬ÓÃCÀ´¼Ç¼¡£
Êý¾ÝµÄ´æ´¢
Store Everything Rawly and Immutably
¸ù¾ÝÉÏÊö¶ÔÊý¾ÝÌØÐԵķÖÎö£¬lambda¼Ü¹¹ÖжÔÊý¾ÝµÄ´æ´¢²ÉÓõķ½Ê½ÊÇ£ºÊý¾Ý²»¿É±ä£¬´æ´¢ËùÓÐÊý¾Ý¡£
²ÉÓÃÕâÁ½ÖÖ·½Ê½´æ´¢µÄºÃ´¦£º
a¡¢¼òµ¥¡£²ÉÓò»¿É±äµÄÊý¾ÝÄ£ÐÍ£¬´æ´¢Êý¾ÝʱֻÐèÒª¼òµ¥µÄÍùÖ÷Êý¾Ý¼¯ºó×·¼ÓÊý¾Ý¼´¿É¡£Ïà±ÈÓÚ²ÉÓÿɱäµÄÊý¾ÝÄ£ÐÍ£¬ÎªÁËUpdate²Ù×÷£¬Êý¾Ýͨ³£ÐèÒª±»Ë÷Òý£¬´Ó¶øÄÜ¿ìËÙÕÒµ½Òª¸üеÄÊý¾ÝÈ¥×ö¸üвÙ×÷¡£
b¡¢Ó¦¶ÔÈËΪºÍ»úÆ÷µÄ´íÎó¡£È˺ͻúÆ÷ÿÌì¶¼¿ÉÄÜ»á³ö´í£¬ÈçºÎÓ¦¶ÔÈ˺ͻúÆ÷µÄ´íÎó£¬ÈÃÊý¾Ýϵͳ¿ìËÙ»Ö¸´¼«ÆäÖØÒª¡£²»¿É±äºÍ¿ÉÖØ¸´¼ÆËãÊÇÓ¦¶ÔÈÏΪºÍ»úÆ÷´íÎóµÄ³£Ó÷½·¨¡£²ÉÓÿɱäÊý¾ÝÄ£ÐÍ£¬Òý·¢´íÎóµÄÊý¾ÝÓпÉÄܱ»¸²¸Ç¶ø¶ªÊ§¡£
Ïà±ÈÓÚ²ÉÓò»¿É±äµÄÊý¾ÝÄ£ÐÍ£¬ÒòΪËùÓеÄÊý¾Ý¶¼ÔÚ£¬Òý·¢´íÎóµÄÊý¾ÝÒ²ÔÚ¡£
ÐÞ¸´µÄ·½·¨¾Í¿ÉÒÔ¼òµ¥µÄÊDZéÀúÊý¾Ý¼¯ÉÏ´æ´¢µÄËùÓеÄÊý¾Ý£¬¶ªÆú´íÎóµÄÊý¾Ý£¬ÖØÐ¼ÆËãµÃµ½Views¡£ÖØÐ¼ÆËãµÄ¹Ø¼üµãÔÚÓÚÀûÓÃÊý¾ÝµÄʱ¼äÌØÐÔ¾ö¶¨µÄÈ«¾Ö´ÎÐò£¬ÒÀ´Î˳ÐòÖØÐÂÖ´ÐУ¬±ØÈ»Äܵõ½ÕýÈ·µÄ½á¹û¡£
µ±Ç°Òµ½çÓкܶà²ÉÓò»¿É±äÊý¾ÝÄ£ÐÍÀ´´æ´¢ËùÓÐÊý¾ÝµÄÀý×Ó¡£±ÈÈç·Ö²¼Ê½Êý¾Ý¿âDatomic£¬»ùÓÚ²»¿É±äÊý¾ÝÄ£ÐÍÀ´´æ´¢Êý¾Ý£¬´Ó¶ø¼ò»¯ÁËÉè¼Æ¡£·Ö²¼Ê½ÏûÏ¢Öмä¼þKafka£¬»ùÓÚLogÈÕÖ¾£¬ÒÔ×·¼Óappend-onlyµÄ·½Ê½À´´æ´¢ÏûÏ¢¡£
Lambda¼Ü¹¹
Lambda¼Ü¹¹µÄÖ÷Ҫ˼ÏëÊǽ«´óÊý¾Ýϵͳ¼Ü¹¹Îª¶à²ã¸ö²ã´Î£¬·Ö±ðΪÅú´¦Àí²ã£¨batch layer£©¡¢ÊµÊ±´¦Àí²ã£¨speed layer£©¡¢·þÎñ²ã£¨serving layer£©Èçͼ£¨C£©¡£
ÀíÏë״̬Ï£¬ÈκÎÊý¾Ý·ÃÎʶ¼¿ÉÒÔ´Ó±í´ïʽQuery = function(all data)¿ªÊ¼£¬µ«ÊÇ£¬ÈôÊý¾Ý´ïµ½Ï൱´óµÄÒ»¸ö¼¶±ð£¨ÀýÈçPB£©£¬ÇÒ»¹ÐèÒªÖ§³Öʵʱ²éѯʱ£¬¾ÍÐèÒªºÄ·Ñ·Ç³£ÅÓ´óµÄ×ÊÔ´¡£Ò»¸ö½â¾ö·½Ê½ÊÇÔ¤ÔËËã²éѯº¯Êý£¨precomputed query funciton£©¡£ÊéÖн«ÕâÖÖÔ¤ÔËËã²éѯº¯Êý³ÆÖ®ÎªBatch View£¨A£©£¬ÕâÑùµ±ÐèÒªÖ´Ðвéѯʱ£¬¿ÉÒÔ´ÓBatch ViewÖжÁÈ¡½á¹û¡£ÕâÑùÒ»¸öÔ¤ÏÈÔËËãºÃµÄViewÊÇ¿ÉÒÔ½¨Á¢Ë÷ÒýµÄ£¬Òò¶ø¿ÉÒÔÖ§³ÖËæ»ú¶ÁÈ¡£¨B£©¡£ÓÚÊÇϵͳ¾Í±ä³É£º
£¨A£©batch view = function(all data)£»
£¨B£©query = function(batch view)¡£

Batch Layer
ÔÚLambda¼Ü¹¹ÖУ¬ÊµÏÖ£¨A£©batch view = function(all data)µÄ²¿·Ö³ÆÖ®ÎªBatch Layer¡£Ëû³Ðµ£Á½¸öÖ°Ôð£º
a¡¢´æ´¢Master Dataset£¬ÕâÊÇÒ»¸ö²»±äµÄ³ÖÐøÔö³¤µÄÊý¾Ý¼¯
b¡¢Õë¶ÔÕâ¸öMaster Dataset½øÐÐÔ¤ÔËËã
ÔÚÈ«ÌåÊý¾Ý¼¯ÉÏÔÚÏßÔËÐвéѯº¯ÊýµÃµ½½á¹ûµÄ´ú¼ÛÌ«´ó£¬Í¬Ê±´¦Àí²éѯʱ¼ä¹ý³¤£¬µ¼ÖÂÓû§ÌåÑé²»ºÃ¡£Èç¹ûÎÒÃÇÔ¤ÏÈÔÚÊý¾Ý¼¯ÉϼÆËã²¢±£´æÔ¤¼ÆËãµÄ½á¹û£¬²éѯµÄʱºòÖ±½Ó·µ»ØÔ¤¼ÆËãµÄ½á¹û£¬¶øÎÞÐèÖØÐ½øÐи´ÖƺÄʱµÄ¼ÆËã¡£ÏÔÈ»£¬batch view ÊÇÒ»¸öÅú´¦Àí¹ý³Ì£¬Èç²ÉÓÃHadoop»òsparkÖ§³ÖµÄmap£reduce·½Ê½¡£²ÉÓÃÕâÖÖ·½Ê½¼ÆËãµÃµ½µÄÿ¸öview¶¼Ö§³ÖÔٴμÆË㣬ÇÒÿ´Î¼ÆËãµÄ½á¹û¶¼Ïàͬ¡£

¶ÔViewµÄÀí½â£º
ViewÊÇÒ»¸öºÍÒµÎñ¹ØÁªÐԱȽϴóµÄ¸ÅÄViewµÄ´´½¨ÐèÒª´ÓÒµÎñ×ÔÉíµÄÐèÇó³ö·¢¡£Ò»¸öͨÓõÄÊý¾Ý¿â²éѯϵͳ£¬²éѯ¶ÔÓ¦µÄº¯Êýǧ±äÍò»¯£¬²»¿ÉÄÜÇî¾Ù¡£µ«ÊÇÈç¹û´ÓÒµÎñ×ÔÉíµÄÐèÇó³ö·¢£¬¿ÉÒÔ·¢ÏÖÒµÎñËùÐèÒªµÄ²éѯ³£³£ÊÇÓÐÏ޵ġ£
Batch LayerÐèÒª×öµÄÒ»¼þÖØÒªµÄ¹¤×÷¾ÍÊǸù¾ÝÒµÎñµÄÐèÇ󣬿¼²ì¿ÉÄÜÐèÒªµÄ¸÷ÖÖ²éѯ£¬¸ù¾Ý²éѯ¶¨ÒåÆäÔÚÊý¾Ý¼¯É϶ÔÓ¦µÄViews¡£
Batch LayerµÄImmutable dataÄ£ÐͺÍViews
Èçͼ£¨E£©×øÏ¯£¨agentid£½50023£©µÄÈË£¬ÔÚ10:00:06·ÖµÄʱºò£¬×´Ì¬ÊÇcalling£¬ÔÚ10:00:10µÄʱºò״̬Ϊwaiting¡£ÔÚ´«Í³µÄÊý¾Ý¿âÉè¼ÆÖУ¬Ö±½ÓºóÃæµÄ¼Í¼¸²¸ÇÇ°ÃæµÄ¼Í¼£¬¶øÔÚImmutable Êý¾ÝÄ£ÐÍÖУ¬²»»á¶ÔÔÓÐÊý¾Ý½øÐиü¸Ä£¬¶øÊDzÉÓòåÈëÐ޸ļͼµÄÐÎʽ¸ü¸ÄÀúÊ·¼Í¼¡£

ͼ£¨E£©
ÉÏÎÄËùÌá¼°µÄViewÊÇͼ£¨E£©ÖÐÔ¤ÏȼÆËãµÃµ½µÄÏà¹ØÊÓͼ£¬ÀýÈ磺2016-06-21µ±ÌìËùÓÐÉÏÏßµÄagentÊý£¬Ã¿ÌõÈÈÏß¡¢¹«Ë¾ÏÂÉÏÏßµÄAgentÊý¡£¸ù¾ÝÒµÎñÐèÒª£¬Ô¤ÏȼÆËã³ö½á¹û¡£´Ë¹ý³ÌÏ൱ÓÚ´«Í³Êý²Ö½¨Ä£µÄÓ¦Óò㣬ӦÓòãÒ²ÊǸù¾ÝÒµÎñ³¡¾°£¬Ô¤Ïȼӹ¤³öµÄview¡£
Speed Layer
Batch LayerÄܹ»ºÜºÃµÄ´¦ÀíÀëÏßÊý¾Ý£¬µ«ÊÇÔںܶೡ¾°Êý¾Ý²»¶Ï²úÉú£¬²¢ÇÒÒµÎñ³¡¾°ÐèҪʵʱ²éѯ¡£Speed Layer¾ÍÊÇÉè¼ÆÓÃÀ´´¦ÀíÔöÁ¿ÊµÊ±Êý¾Ý¡£
Speed LayerºÍBatch Layer±È½ÏÀàËÆ£¬¶ÔÊý¾Ý½øÐмÆËã²¢Éú³ÉRealtime View£¬ÆäÖ÷ÒªµÄÇø±ðÔÚÓÚ£º
a¡¢Speed Layer´¦ÀíµÄÊý¾ÝÊÇ×î½üµÄÔöÁ¿Êý¾ÝÁ÷£¬Batch Layer´¦ÀíµÄÊÇÈ«ÌåÊý¾Ý¼¯¡£
b¡¢Speed LayerΪÁËЧÂÊ£¬½ÓÊÕµ½ÐÂÊý¾Ý¼°Ê±¸üÐÂRealtime View£¬¶øBatch Layer¸ù¾ÝÈ«ÌåÀëÏßÊý¾ÝÖ±½ÓµÃµ½Batch View¡£Speed LayerÊÇÒ»ÖÖÔöÁ¿¼ÆË㣬¶ø·ÇÖØÐ¼ÆË㣨recomputation£©¡£
c¡¢Speed LayerÒòΪ²ÉÓÃÔöÁ¿¼ÆË㣬ËùÒÔÑÓ³ÙС£¬¶øBatch LayerÊÇÈ«Êý¾Ý¼¯µÄ¼ÆË㣬ºÄʱ±È½Ï³¤¡£
×ÛÉÏËùËߣ¬Speed LayerÊÇBatch LayerÔÚʵʱÐÔÉϵÄÒ»¸ö²¹³ä¡£Èçͼ£¨F£©

ͼ£¨F£©
Speed Layer¿É×ܽáΪÒÔ£¨C£©
Realtime View £½ function£¨Realtime View£¬ new data£©£»
Lambda Architecture½«Êý¾Ý´¦Àí·Ö½âΪBatch Layer ºÍSpeed LayerÓÐÈçÏÂÓŵ㣺
a¡¢ÈÝ´íÐÔ£ºSpeed LayerÖд¦ÀíµÄÊý¾Ý²»¶ÏдÈëBatch Layer£¬µ±Batch LayerÖÐÖØÐ¼ÆËãÊý¾Ý¼¯°üº¬Speed Layer´¦ÀíµÄÊý¾Ý¼¯ºó£¬µ±Ç°µÄRealtime View¾Í¿ÉÒÔ¶ªÆú£¬Õâ¾ÍÒâζ×ÅSpeed Layer´¦ÀíÖÐÒýÈëµÄ´íÎó£¬ÔÚBatch LayerÖØÐ¼ÆËãʱ¶¼¿ÉÒԵõ½ÐÞÖ¤¡£ÕâµãÒ²¿ÉÒÔ¿´³ÉʱCAPÀíÂÛÖеÄ×îÖÕÒ»ÖÂÐÔ£¨Eventual Consistency£©µÄÌåÏÖ¡£
b¡¢¸´ÔÓÐÔ¸ôÀë¡£Batch Layer´¦ÀíµÄÊÇÀëÏßÊý¾Ý£¬¿ÉÒԺܺõÄÕÆ¿Ø¡£Speed Layer²ÉÓÃÔöÁ¿Ëã·¨´¦ÀíʵʱÊý¾Ý£¬¸´ÔÓÐÔ±ÈBatch LayerÒª¸ßºÜ¶à¡£Í¨¹ý·Ö¿ªBatch LayerºÍSpeed Layer£¬°Ñ¸´ÔÓÐÔ¸ôÀëµ½Speed Layer£¬¿ÉÒԺܺõÄÌá¸ßÕû¸öϵͳµÄ³°ôÐԺͿɿ¿ÐÔ¡£
Serving Layer
Batch Layerͨ¹ý¶ÔMaster DatasetÖ´Ðвéѯ»ñµÃBatch View£¬Speed Layerͨ¹ýÔöÁ¿¼ÆËãÌṩRealtime View¡£Lambda¼Ü¹¹µÄServingLayerÓÃÓÚÏìÓ¦Óû§µÄ²éѯÇëÇ󣬺ϲ¢Batch ViewºÍRealtime ViewÖеĽá¹ûÊý¾Ý¼¯µ½×îÖÕµÄÊý¾Ý¼¯£¬Èçͼ£¨G£©¡£Òò´Ë£¬Serving LayerµÄÖ°Ôð°üº¬£º
a¡¢¶Ôbatch ViewºÍRealTime ViewµÄËæ»ú·ÃÎÊ
b¡¢¸üÐÂBatch VeiwºÍRealTime View£¬²¢¸ºÔð½áºÏÁ½ÕßµÄÊý¾Ý£¬¶ÔÓû§ÌṩͳһµÄ½Ó¿Ú

ͼ£¨G£©
×ÛÉÏËùËߣ¬Serving Layer²ÉÓÃÈçϵÈʽ£¨D£©±íʾ£º
Query £½ function£¨Batch Views£¬ Realtime View£©¡£
Lambda ¼Ü¹¹×é¼þÑ¡ÐÍ
ÏÂͼ¸ø³öÁËLambda¼Ü¹¹Öи÷×é¼þÔÚ´óÊý¾ÝÉú̬ϵͳÖкͰ¢ÀOÍŵij£ÓÃ×é¼þ¡£
Êý¾ÝÁ÷´æ´¢Ñ¡Óò»¿É±äÈÕÖ¾µÄ·Ö²¼Ê½ÏµÍ³Kafa¡¢TT¡¢Metaq£»Batch LayerÊý¾Ý¼¯µÄ´æ´¢Ñ¡ÓÃHadoopµÄHDFS»òÕß°¢ÀïÔÆµÄODPS£»Batch ViewµÄ¼Ó¹¤²ÉÓÃMapReduce£»Batch ViewÊý¾ÝµÄ´æ´¢²ÉÓÃMysql£¨²éѯÉÙÁ¿µÄ×î½ü½á¹ûÊý¾Ý£©¡¢Hbase£¨²éѯ´óÁ¿µÄÀúÊ·½á¹ûÊý¾Ý£©¡£Speed Layer²ÉÓÃÔöÁ¿Êý¾Ý´¦ÀíStorm¡¢Flink£»Realtime ViewÔöÁ¿½á¹ûÊý¾Ý¼¯²ÉÓÃÄÚ´æÊý¾Ý¿âRedis¡£

ͼ£¨H£©
LambdaÊÇÒ»¸öͨÓÿò¼Ü£¬¸÷Ä£¿éÑ¡ÐͲ»Òª¾ÖÏÞÓÚÉÏÃæ¸ø³öµÄ×é¼þ£¬ÌرðÊÇviewµÄÑ¡ÐÍ¡£ÒòΪViewÊǺ͸÷ÒµÎñ¹ØÁª·Ç³£´óµÄ¸ÅÄViewÑ¡Ôñ×é¼þʱҪ¸ù¾ÝÒµÎñµÄÐèÇó£¬Ñ¡Ôñ×îºÏÊʵÄ×é¼þ¡£
Lambda¼Ü¹¹µÄÆÀ¹À
Óŵ㣺
a¡¢Êý¾ÝµÄ²»¿É±äÐÔ¡£ÀïÃæ¸ø³öµÄÊý¾Ý´«ÊäÄ£ÐÍÊÇÔÚ³õʼ»¯½×¶Î¶ÔÊý¾Ý½øÐÐʵÀý»¯£¬ÕâÑùµÄ×ö·¨ÊÇÄÜ»ñÒæÁ¼¶àµÄ¡£Äܹ»Ê¹µÃ´óÁ¿µÄMapReduce¹¤×÷±äµÃÓм£¿ÉÑ£¬´Ó¶ø±ãÓÚÔÚ²»Í¬½×¶Î½øÐжÀÁ¢µ÷ÊÔ¡£
b¡¢Ç¿µ÷ÁËÊý¾ÝµÄÖØÐ¼ÆËãÎÊÌâ¡£ÔÚÁ÷´¦ÀíÖÐÖØÐ¼ÆËãÊǸöÖ÷ÒªÌôÕ½£¬µ«ÊǾ³£±»ºöÊÓ¡£±È·½Ëµ£¬Ä³¹¤×÷Á÷µÄÊý¾ÝÊä³öÊÇÓÉÊäÈë¾ö¶¨µÄ£¬ÄÇôһµ©´úÂë·¢Éú¸Ä¶¯£¬ÎÒÃǽ«²»µÃ²»ÖØÐ¼ÆËãÀ´¼ìÊÓ±ä¸üµÄЧ¶È¡£Ê²Ã´Çé¿öÏ´úÂë»á¸Ä¶¯ÄØ£¿ÀýÈçÐèÇó·¢Éú±ä¸ü£¬¼ÆËã×Ö¶ÎÐèÒªµ÷Õû»òÕß³ÌÐò·¢³ö´íÎó£¬ÐèÒª½øÐе÷ÊÔ¡£
ȱµã£º
a¡¢Jay KrepsÈÏΪLambda°üº¬¹ÌÓеĿª·¢ºÍÔËάµÄ¸´ÔÓÐÔ¡£LambdaÐèÒª½«ËùÓеÄË㷨ʵÏÖÁ½´Î£¬Ò»´ÎÊÇΪÅú´¦Àíϵͳ£¬ÁíÒ»´ÎÊÇΪʵʱϵͳ£¬»¹ÒªÇó²éѯµÃµ½µÄÊÇÁ½¸öϵͳ½á¹ûµÄºÏ²¢¡£
ÓÉÓÚ´æÔÚÒÔÉÏȱµã£¬LinkedinµÄJay krepsÌá³öÁËKappa¼Ü¹¹Èçͼ£¨I£©£º

ͼ£¨I£©
1¡¢Ê¹ÓÃKafka»òÆäËüϵͳÀ´¶ÔÐèÒªÖØÐ¼ÆËãµÄÊý¾Ý½øÐÐÈÕÖ¾¼Ç¼£¬ÒÔ¼°Ìṩ¸ø¶à¸ö¶©ÔÄÕßʹÓá£ÀýÈçÐèÒªÖØÐ¼ÆËã30ÌìÄÚµÄÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔÔÚKafkaÖÐÉèÖÃ30ÌìµÄÊý¾Ý±£ÁôÖµ¡£
2¡¢µ±ÐèÒª½øÐÐÖØÐ¼ÆËãʱ£¬Æô¶¯Á÷´¦Àí×÷ÒµµÄµÚ¶þ¸öʵÀý¶Ô֮ǰ»ñµÃµÄÊý¾Ý½øÐд¦Àí£¬Ö®ºóÖ±½Ó°Ñ½á¹ûÊý¾Ý·ÅÈëеÄÊý¾ÝÊä³ö±íÖС£
3¡¢µ±×÷ÒµÍê³Éʱ£¬ÈÃÓ¦ÓóÌÐòÖ±½Ó¶ÁȡеÄÊý¾Ý¼Ç¼±í¡£
4¡¢Í£Ö¹ÀúÊ·×÷Òµ£¬É¾³ý¾ÉµÄÊý¾ÝÊä³ö±í¡£
Kappa¼Ü¹¹ÔÝʱδ×öÉîÈëÁ˽⣬Ôڴ˲»×öÆÀ¼Û¡£ÎÒ¸öÈ˾õµÃ£¬²»Í¬µÄÊý¾Ý¼Ü¹¹Óи÷×ÔµÄÓÅȱµã£¬ÎÒÃÇʹÓõÄʱºòÖ»Äܸù¾ÝÓ¦Óó¡¾°£¬Ñ¡Ôñ¸üºÏÊʵļܹ¹£¬²ÅÄÜÑﳤ±Ü¶Ì¡£
|