Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃÓÚʵʱ´óÊý¾Ý´¦ÀíµÄLambda¼Ü¹¹
 
 
 
  2406  次浏览      27
2020-11-18
 
±à¼­ÍƼö:
±¾ÎĽéÉÜÁË Lambda ¼Ü¹¹µÄ»ù±¾¸ÅÄî,Lambda ¼Ü¹¹Í¨¹ý¶ÔÊý¾ÝºÍ²éѯµÄ±¾ÖÊÈÏʶ£¬ÈÚºÏÁ˲»¿É±äÐÔ£¨Immunability£©£¬¶Áд·ÖÀëºÍ¸´ÔÓÐÔ¸ôÀëµÈһϵÁмܹ¹Ô­Ôò¡£
±¾ÎÄÀ´×ÔÆ·¸ßÔÆ£¬ÓÉ»ðÁú¹ûÈí¼þLinda±à¼­¡¢ÍƼö¡£

ÕâÀïÒª½²µÄ Lambda ÊÇÒ»¸öʵʱ´óÊý¾Ý´¦Àí¿ò¼Ü£¬¶ø²»ÊÇ AWS µÄͬÃû·þÎñ£¬µ«ÊÇÆäÖÐËùÇ¿µ÷µÄÈÝ´íÐÔ¡¢ºáÏòÀ©ÈÝ¡¢Ò×ÓÚά»¤µÈͨÓÃÐÔÖʵĸÅÄîÈ´ÊǶþÕß¶¼¾ß±¸µÄ£¬¶ÔÓÚ AWS Lambda ¸ÐÐËȤµÄ¿ÉÒÔ¿´²©¿ÍµÄÁíÍâһƪÎÄÕ¡¶Serverless(ÎÞ·þÎñÆ÷) ¼Ü¹¹ÈëÃÅ by Lambda¡·»ò·ÃÎÊ AWS ¹Ù·½Á˽⡣

1.Lambda ¼Ü¹¹±³¾°½éÉÜ

Lambda ¼Ü¹¹ÊÇÓÉ Storm µÄ×÷Õß Nathan Marz Ìá³öµÄÒ»¸öʵʱ´óÊý¾Ý´¦Àí¿ò¼Ü¡£Marz ÔÚ Twitter ¹¤×÷ÆÚ¼ä¿ª·¢ÁËÖøÃûµÄʵʱ´óÊý¾Ý´¦Àí¿ò¼Ü Storm£¬Lambda ¼Ü¹¹ÊÇÆä¸ù¾Ý¶àÄê½øÐзֲ¼Ê½´óÊý¾ÝϵͳµÄ¾­Ñé×ܽáÌáÁ¶¶ø³É¡£

Lambda ¼Ü¹¹µÄÄ¿±êÊÇÉè¼Æ³öÒ»¸öÄÜÂú×ãʵʱ´óÊý¾Ýϵͳ¹Ø¼üÌØÐԵļܹ¹£¬°üÀ¨ÓУº¸ßÈÝ´í¡¢µÍÑÓʱºÍ¿ÉÀ©Õ¹µÈ¡£Lambda ¼Ü¹¹ÕûºÏÀëÏß¼ÆËãºÍʵʱ¼ÆË㣬Èںϲ»¿É±äÐÔ£¨Immunability£©£¬¶Áд·ÖÀëºÍ¸´ÔÓÐÔ¸ôÀëµÈһϵÁмܹ¹Ô­Ôò£¬¿É¼¯³É Hadoop£¬Kafka£¬Storm£¬Spark£¬Hbase µÈ¸÷Àà´óÊý¾Ý×é¼þ¡£

2. ´óÊý¾ÝϵͳµÄ¹Ø¼üÌØÐÔ

Marz ÈÏΪ´óÊý¾ÝϵͳӦ¾ßÓÐÒÔϵĹؼüÌØÐÔ£º

Robust and fault-tolerant£¨ÈÝ´íÐԺͳ°ôÐÔ£©£º¶Ô´ó¹æÄ£·Ö²¼Ê½ÏµÍ³À´Ëµ£¬»úÆ÷ÊDz»¿É¿¿µÄ£¬¿ÉÄܻᵱ»ú£¬µ«ÊÇϵͳÐèÒªÊǽ¡×³¡¢ÐÐΪÕýÈ·µÄ£¬¼´Ê¹ÊÇÓöµ½»úÆ÷´íÎó¡£³ýÁË»úÆ÷´íÎó£¬È˸ü¿ÉÄܻ᷸´íÎó¡£ÔÚÈí¼þ¿ª·¢ÖÐÄÑÃâ»áÓÐһЩ Bug£¬ÏµÍ³±ØÐë¶ÔÓÐ Bug µÄ³ÌÐòдÈëµÄ´íÎóÊý¾ÝÓÐ×ã¹»µÄÊÊÓ¦ÄÜÁ¦£¬ËùÒԱȻúÆ÷ÈÝ´íÐÔ¸ü¼ÓÖØÒªµÄÈÝ´íÐÔÊÇÈËΪ²Ù×÷ÈÝ´íÐÔ¡£¶ÔÓÚ´ó¹æÄ£µÄ·Ö²¼Ê½ÏµÍ³À´Ëµ£¬È˺ͻúÆ÷µÄ´íÎóÿÌì¶¼¿ÉÄܻᷢÉú£¬ÈçºÎÓ¦¶ÔÈ˺ͻúÆ÷µÄ´íÎó£¬ÈÃϵͳÄܹ»´Ó´íÎóÖпìËÙ»Ö¸´ÓÈÆäÖØÒª¡£

Low latency reads and updates£¨µÍÑÓʱ£©£ººÜ¶àÓ¦ÓöÔÓÚ¶ÁºÍд²Ù×÷µÄÑÓʱҪÇó·Ç³£¸ß£¬ÒªÇó¶Ô¸üкͲéѯµÄÏìÓ¦ÊǵÍÑÓʱµÄ¡£

Scalable£¨ºáÏòÀ©ÈÝ£©£ºµ±Êý¾ÝÁ¿/¸ºÔØÔö´óʱ£¬¿ÉÀ©Õ¹ÐÔµÄϵͳͨ¹ýÔö¼Ó¸ü¶àµÄ»úÆ÷×ÊÔ´À´Î¬³ÖÐÔÄÜ¡£Ò²¾ÍÊdz£ËµµÄϵͳÐèÒªÏßÐÔ¿ÉÀ©Õ¹£¬Í¨³£²ÉÓà scale out£¨Í¨¹ýÔö¼Ó»úÆ÷µÄ¸öÊý£©¶ø²»ÊÇ scale up£¨Í¨¹ýÔöÇ¿»úÆ÷µÄÐÔÄÜ£©¡£

General£¨Í¨ÓÃÐÔ£©£ºÏµÍ³ÐèÒªÄܹ»ÊÊÓ¦¹ã·ºµÄÓ¦Ó㬰üÀ¨½ðÈÚÁìÓò¡¢Éç½»ÍøÂç¡¢µç×ÓÉÌÎñÊý¾Ý·ÖÎöµÈ¡£

Extensible£¨¿ÉÀ©Õ¹£©£ºÐèÒªÔö¼Óй¦ÄÜ¡¢ÐÂÌØÐÔʱ£¬¿ÉÀ©Õ¹µÄϵͳÄÜÒÔ×îСµÄ¿ª·¢´ú¼ÛÀ´Ôö¼Óй¦ÄÜ¡£

Allows ad hoc queries£¨·½±ã²éѯ£©£ºÊý¾ÝÖÐÔ̺¬ÓмÛÖµ£¬ÐèÒªÄܹ»·½±ã¡¢¿ìËٵIJéѯ³öËùÐèÒªµÄÊý¾Ý¡£

Minimal maintenance£¨Ò×ÓÚά»¤£©£ºÏµÍ³ÒªÏë×öµ½Ò×ÓÚά»¤£¬Æä¹Ø¼üÊÇ¿ØÖÆÆä¸´ÔÓÐÔ£¬Ô½ÊǸ´ÔÓµÄϵͳԽÈÝÒ׳ö´í¡¢Ô½ÄÑά»¤¡£

Debuggable£¨Ò×µ÷ÊÔ£©£ºµ±³öÎÊÌâʱ£¬ÏµÍ³ÐèÒªÓÐ×ã¹»µÄÐÅÏ¢À´µ÷ÊÔ´íÎó£¬ÕÒµ½ÎÊÌâµÄ¸ùÔ´¡£Æä¹Ø¼üÊÇÄܹ»×·¸ùËÝÔ´µ½Ã¿¸öÊý¾ÝÉú³Éµã¡£

3. Êý¾ÝϵͳµÄ±¾ÖÊ

ΪÁËÉè¼Æ³öÄÜÂú×ãǰÊöµÄ´óÊý¾Ý¹Ø¼üÌØÐÔµÄϵͳ£¬ÎÒÃÇÐèÒª¶ÔÊý¾ÝϵͳÓб¾ÖÊÐÔµÄÀí½â¡£ÎÒÃǿɽ«Êý¾Ýϵͳ¼ò»¯Îª£º

Êý¾Ýϵͳ = Êý¾Ý + ²éѯ

´Ó¶ø´ÓÊý¾ÝºÍ²éѯÁ½·½ÃæÀ´ÈÏʶ´óÊý¾ÝϵͳµÄ±¾ÖÊ¡£

3.1. Êý¾ÝµÄ±¾ÖÊ

3.1.1. Êý¾ÝµÄÌØÐÔ£ºWhen & What

ÎÒÃÇÏÈ´Ó ¡°Êý¾Ý¡± µÄÌØÐÔ̸Æð¡£Êý¾ÝÊÇÒ»¸ö²»¿É·Ö¸îµÄµ¥Î»£¬Êý¾ÝÓÐÁ½¸ö¹Ø¼üµÄÐÔÖÊ£ºWhen ºÍ What¡£

When ÊÇÖ¸Êý¾ÝÊÇÓëʱ¼äÏà¹ØµÄ£¬Êý¾ÝÒ»¶¨ÊÇÔÚij¸öʱ¼äµã²úÉúµÄ¡£±ÈÈç Log ÈÕÖ¾¾ÍÒþº¬×Ű´ÕÕʱ¼äÏȺó˳Ðò²úÉúµÄÊý¾Ý£¬Log Ç°ÃæµÄÈÕÖ¾Êý¾ÝÒ»¶¨ÏÈÓÚ Log ºóÃæµÄÈÕÖ¾Êý¾Ý²úÉú£»ÏûϢϵͳÖÐÏûÏ¢µÄ½ÓÊÜÕßÒ»¶¨ÊÇÔÚÏûÏ¢µÄ·¢ËÍÕß·¢ËÍÏûÏ¢ºó½ÓÊÕµ½µÄÏûÏ¢¡£Ïà±ÈÓÚÊý¾Ý¿â£¬Êý¾Ý¿âÖбíµÄ¼Ç¼¾Í¶ªÊ§ÁËʱ¼äÏȺó˳ÐòµÄÐÅÏ¢£¬ÖмäijÌõ¼Ç¼¿ÉÄÜÊÇÔÚ×îºóÒ»Ìõ¼Ç¼²úÉúºó·¢Éú¸üеġ£¶ÔÓÚ·Ö²¼Ê½ÏµÍ³£¬Êý¾ÝµÄʱ¼äÌØÐÔÓÈÆäÖØÒª¡£·Ö²¼Ê½ÏµÍ³ÖÐÊý¾Ý¿ÉÄܲúÉúÓÚ²»Í¬µÄϵͳÖУ¬Ê±¼ä¾ö¶¨ÁËÊý¾Ý·¢ÉúµÄÈ«¾ÖÏȺó˳Ðò¡£±ÈÈç¶ÔÒ»¸öÖµ×öËãÊõÔËË㣬ÏÈ+2£¬ºó*3£¬ÓëÏÈ*3£¬ºó+2£¬µÃµ½µÄ½á¹ûÍêÈ«²»Í¬¡£Êý¾ÝµÄʱ¼äÐÔÖʾö¶¨ÁËÊý¾ÝµÄÈ«¾Ö·¢ÉúÏȺó£¬Ò²¾Í¾ö¶¨ÁËÊý¾ÝµÄ½á¹û¡£

What ÊÇÖ¸Êý¾ÝµÄ±¾Éí¡£ÓÉÓÚÊý¾Ý¸úij¸öʱ¼äµãÏà¹Ø£¬ËùÒÔÊý¾ÝµÄ±¾ÉíÊDz»¿É±äµÄ (immutable)£¬¹ýÍùµÄÊý¾ÝÒѾ­³ÉΪÊÂʵ£¨Fact£©£¬Äã²»¿ÉÄܻص½¹ýÈ¥µÄij¸öʱ¼äµãÈ¥¸Ä±äÊý¾ÝÊÂʵ¡£ÕâÒ²¾ÍÒâζ×ŶÔÊý¾ÝµÄ²Ù×÷ÆäʵֻÓÐÁ½ÖÖ£º¶ÁÈ¡ÒÑ´æÔÚµÄÊý¾ÝºÍÌí¼Ó¸ü¶àµÄÐÂÊý¾Ý¡£²ÉÓÃÊý¾Ý¿âµÄ¼Ç·¨£¬CRUD ¾Í±ä³ÉÁË CR£¬Update ºÍ Delete ±¾ÖÊÉÏÆäʵÊÇвúÉúµÄÊý¾ÝÐÅÏ¢£¬Óà C À´¼Ç¼¡£

3.1.2. Êý¾ÝµÄ´æ´¢£ºStore Everything Rawly and Immutably

¸ù¾ÝÉÏÊö¶ÔÊý¾Ý±¾ÖÊÌØÐԵķÖÎö£¬Lamba ¼Ü¹¹ÖжÔÊý¾ÝµÄ´æ´¢²ÉÓõķ½Ê½ÊÇ£ºÊý¾Ý²»¿É±ä£¬´æ´¢ËùÓÐÊý¾Ý¡£

ͨ¹ý²ÉÓò»¿É±ä·½Ê½´æ´¢ËùÓеÄÊý¾Ý£¬¿ÉÒÔÓÐÈçϺô¦£º

¼òµ¥¡£²ÉÓò»¿É±äµÄÊý¾ÝÄ£ÐÍ£¬´æ´¢Êý¾ÝʱֻÐèÒª¼òµ¥µÄÍùÖ÷Êý¾Ý¼¯ºó×·¼ÓÊý¾Ý¼´¿É¡£Ïà±ÈÓÚ²ÉÓÿɱäµÄÊý¾ÝÄ£ÐÍ£¬ÎªÁË Update ²Ù×÷£¬Êý¾Ýͨ³£ÐèÒª±»Ë÷Òý£¬´Ó¶øÄÜ¿ìËÙÕÒµ½Òª¸üеÄÊý¾ÝÈ¥×ö¸üвÙ×÷¡£

´ÓÈÝÓ¦¶ÔÈËΪºÍ»úÆ÷µÄ´íÎó¡£Ç°ÊöÖÐÌáµ½È˺ͻúÆ÷ÿÌì¶¼¿ÉÄÜ»á³ö´í£¬ÈçºÎÓ¦¶ÔÈ˺ͻúÆ÷µÄ´íÎó£¬ÈÃϵͳÄܹ»´Ó´íÎóÖпìËÙ»Ö¸´¼«ÆäÖØÒª¡£²»¿É±äÐÔ£¨Immutability£©ºÍÖØÐ¼ÆË㣨Recomputation£©ÔòÊÇÓ¦¶ÔÈËΪºÍ»úÆ÷´íÎóµÄ³£Ó÷½·¨¡£²ÉÓÿɱäÊý¾ÝÄ£ÐÍ£¬Òý·¢´íÎóµÄÊý¾ÝÓпÉÄܱ»¸²¸Ç¶ø¶ªÊ§¡£Ïà±ÈÓÚ²ÉÓò»¿É±äµÄÊý¾ÝÄ£ÐÍ£¬ÒòΪËùÓеÄÊý¾Ý¶¼ÔÚ£¬Òý·¢´íÎóµÄÊý¾ÝÒ²ÔÚ¡£ÐÞ¸´µÄ·½·¨¾Í¿ÉÒÔ¼òµ¥µÄÊDZéÀúÊý¾Ý¼¯ÉÏ´æ´¢µÄËùÓеÄÊý¾Ý£¬¶ªÆú´íÎóµÄÊý¾Ý£¬ÖØÐ¼ÆËãµÃµ½ Views£¨View µÄ¸ÅÄî²Î¿¼ 4.1.2£©¡£ÖØÐ¼ÆËãµÄ¹Ø¼üµãÔÚÓÚÀûÓÃÊý¾ÝµÄʱ¼äÌØÐÔ¾ö¶¨µÄÈ«¾Ö´ÎÐò£¬ÒÀ´Î˳ÐòÖØÐÂÖ´ÐУ¬±ØÈ»Äܵõ½ÕýÈ·µÄ½á¹û¡£

µ±Ç°Òµ½çÓкܶà²ÉÓò»¿É±äÊý¾ÝÄ£ÐÍÀ´´æ´¢ËùÓÐÊý¾ÝµÄÀý×Ó¡£±ÈÈç·Ö²¼Ê½Êý¾Ý¿â Datomic£¬»ùÓÚ²»¿É±äÊý¾ÝÄ£ÐÍÀ´´æ´¢Êý¾Ý£¬´Ó¶ø¼ò»¯ÁËÉè¼Æ¡£·Ö²¼Ê½ÏûÏ¢Öмä¼þ Kafka£¬»ùÓÚ Log ÈÕÖ¾£¬ÒÔ×·¼Ó append-only µÄ·½Ê½À´´æ´¢ÏûÏ¢¡£

3.2. ²éѯ

²éѯÊǸöʲô¸ÅÄMarz ¸ø²éѯÈçÏÂÒ»¸ö¼òµ¥µÄ¶¨Ò壺

Query = Function(All Data)

¸ÃµÈʽµÄº¬ÒåÊÇ£º²éѯÊÇÓ¦ÓÃÓÚÊý¾Ý¼¯Éϵĺ¯Êý¡£¸Ã¶¨Òå¿´ËÆ¼òµ¥£¬È´¼¸ºõÄÒÀ¨ÁËÊý¾Ý¿âºÍÊý¾ÝϵͳµÄËùÓÐÁìÓò£ºRDBMS¡¢Ë÷Òý¡¢OLAP¡¢OLTP¡¢MapReduce¡¢EFL¡¢·Ö²¼Ê½Îļþϵͳ¡¢NoSQL µÈ¶¼¿ÉÒÔÓÃÕâ¸öµÈʽÀ´±íʾ¡£

ÈÃÎÒÃǽøÒ»²½ÉîÈ뿴һϺ¯ÊýµÄÌØÐÔ£¬´Ó¶øÍÚ¾òº¯Êý×ÔÉíµÄÌØµãÀ´Ö´Ðвéѯ¡£

ÓÐÒ»Àà³ÆÎª Monoid ÌØÐԵĺ¯ÊýÓ¦Ó÷dz£¹ã·º¡£Monoid µÄ¸ÅÄîÀ´Ô´ÓÚ·¶³ëѧ£¨Category Theory£©£¬ÆäÒ»¸öÖØÒªÌØÐÔÊÇÂú×ã½áºÏÂÉ¡£ÈçÕûÊýµÄ¼Ó·¨¾ÍÂú×ã Monoid ÌØÐÔ£º

(a+b)+c=a+(b+c)

²»Âú×ã Monoid ÌØÐԵĺ¯ÊýºÜ¶àʱºò¿ÉÒÔת»¯³É¶à¸öÂú×ã Monoid ÌØÐԵĺ¯ÊýµÄÔËËã¡£Èç¶à¸öÊýµÄƽ¾ùÖµ Avg º¯Êý£¬¶à¸öƽ¾ùֵû·¨Ö±½Óͨ¹ý½áºÏÀ´µÃµ½×îÖյį½¾ùÖµ£¬µ«ÊÇ¿ÉÒÔ²ð³É·Öĸ³ýÒÔ·Ö×Ó£¬·ÖĸºÍ·Ö×Ó¶¼ÊÇÕûÊýµÄ¼Ó·¨£¬´Ó¶øÂú×ã Monoid ÌØÐÔ¡£

Monoid µÄ½áºÏÂÉÌØÐÔÔÚ·Ö²¼Ê½¼ÆËãÖм«ÆäÖØÒª£¬Âú×ã Monoid ÌØÐÔÒâζ×ÅÎÒÃÇ¿ÉÒÔ½«¼ÆËã·Ö½âµ½¶ą̀»úÆ÷²¢ÐÐÔËË㣬ȻºóÔÙ½áºÏ¸÷×ԵIJ¿·ÖÔËËã½á¹ûµÃµ½×îÖÕ½á¹û¡£Í¬Ê±Ò²Òâζ×Ų¿·ÖÔËËã½á¹û¿ÉÒÔ´¢´æÏÂÀ´±»±ðµÄÔËËã¹²ÏíÀûÓã¨Èç¹û¸ÃÔËËãÒ²°üº¬ÏàͬµÄ²¿·Ö×ÓÔËË㣩£¬´Ó¶ø¼õÉÙÖØ¸´ÔËËãµÄ¹¤×÷Á¿¡£

4.Lambda ¼Ü¹¹

ÓÐÁËÉÏÃæ¶ÔÊý¾Ýϵͳ±¾ÖʵÄ̽ÌÖ£¬ÏÂÃæÎÒÃÇÀ´ÌÖÂÛ´óÊý¾ÝϵͳµÄ¹Ø¼üÎÊÌ⣺ÈçºÎʵʱµØÔÚÈÎÒâ´óÊý¾Ý¼¯ÉϽøÐвéѯ£¿´óÊý¾ÝÔÙ¼ÓÉÏʵʱ¼ÆË㣬ÎÊÌâµÄÄѶȱȽϴó¡£

×î¼òµ¥µÄ·½·¨ÊÇ£¬¸ù¾ÝǰÊöµÄ²éѯµÈʽ Query = Function(All Data)£¬ÔÚÈ«ÌåÊý¾Ý¼¯ÉÏÔÚÏßÔËÐвéѯº¯ÊýµÃµ½½á¹û¡£µ«Èç¹ûÊý¾ÝÁ¿±È½Ï´ó£¬¸Ã·½·¨µÄ¼ÆËã´ú¼ÛÌ«´óÁË£¬ËùÒÔ²»ÏÖʵ¡£

Lambda ¼Ü¹¹Í¨¹ý·Ö½âµÄÈý²ã¼Ü¹¹À´½â¾ö¸ÃÎÊÌ⣺Batch Layer£¬Speed Layer ºÍ Serving Layer¡£

4.1.Batch Layer

Batch Layer µÄ¹¦ÄÜÖ÷ÒªÓÐÁ½µã£º

´æ´¢Êý¾Ý¼¯

ÔÚÊý¾Ý¼¯ÉÏÔ¤ÏȼÆËã²éѯº¯Êý£¬¹¹½¨²éѯËù¶ÔÓ¦µÄ View

4.1.1. ´¢´æÊý¾Ý¼¯

¸ù¾ÝǰÊö¶ÔÊý¾Ý When&What ÌØÐÔµÄÌÖÂÛ£¬Batch Layer ²ÉÓò»¿É±äÄ£ÐÍ´æ´¢ËùÓеÄÊý¾Ý¡£ÒòΪÊý¾ÝÁ¿±È½Ï´ó£¬¿ÉÒÔ²ÉÓà HDFS Ö®ÀàµÄ´óÊý¾Ý´¢´æ·½°¸¡£Èç¹ûÐèÒª°´ÕÕÊý¾Ý²úÉúµÄʱ¼äÏȺó˳Ðò´æ·ÅÊý¾Ý£¬¿ÉÒÔ¿¼ÂÇÈç InfluxDB Ö®ÀàµÄʱ¼äÐòÁÐÊý¾Ý¿â£¨TSDB£©´æ´¢·½°¸¡£

4.1.2. ¹¹½¨²éѯ View

ÉÏÃæËµµ½¸ù¾ÝµÈʽ Query = Function(All Data)£¬ÔÚÈ«ÌåÊý¾Ý¼¯ÉÏÔÚÏßÔËÐвéѯº¯ÊýµÃµ½½á¹ûµÄ´ú¼ÛÌ«´ó¡£µ«Èç¹ûÎÒÃÇÔ¤ÏÈÔÚÊý¾Ý¼¯ÉϼÆËã²¢±£´æ²éѯº¯ÊýµÄ½á¹û£¬²éѯµÄʱºò¾Í¿ÉÒÔÖ±½Ó·µ»Ø½á¹û£¨»òͨ¹ý¼òµ¥µÄ¼Ó¹¤ÔËËã¾Í¿ÉµÃµ½½á¹û£©¶øÎÞÐèÖØÐ½øÐÐÍêÕû·ÑʱµÄ¼ÆËãÁË¡£Õâ¶ù¿ÉÒÔ°Ñ Batch Layer ¿´³ÉÊÇÒ»¸öÊý¾ÝÔ¤´¦ÀíµÄ¹ý³Ì¡£ÎÒÃǰÑÕë¶Ô²éѯԤÏȼÆËã²¢±£´æµÄ½á¹û³ÆÎª View£¬View ÊÇ Lamba ¼Ü¹¹µÄÒ»¸öºËÐĸÅÄËüÊÇÕë¶Ô²éѯµÄÓÅ»¯£¬Í¨¹ý View ¼´¿ÉÒÔ¿ìËٵõ½²éѯ½á¹û¡£

Èç¹û²ÉÓà HDFS À´´¢´æÊý¾Ý£¬ÎÒÃǾͿÉÒÔʹÓà MapReduce À´ÔÚÊý¾Ý¼¯ÉϹ¹½¨²éѯµÄ View¡£Batch Layer µÄ¹¤×÷¿ÉÒÔ¼òµ¥µÄÓÃÈçÏÂαÂë±íʾ£º

¸Ã¹¤×÷¿´ËƼòµ¥£¬ÊµÖʷdz£Ç¿´ó¡£ÈκÎÈËΪ»ò»úÆ÷·¢ÉúµÄ´íÎ󣬶¼¿ÉÒÔͨ¹ýÐÞÕý´íÎóºóÖØÐ¼ÆËãÀ´»Ö¸´µÃµ½ÕýÈ·½á¹û¡£

PS£º¶Ô View µÄÀí½â

View ÊÇÒ»¸öºÍÒµÎñ¹ØÁªÐԱȽϴóµÄ¸ÅÄView µÄ´´½¨ÐèÒª´ÓÒµÎñ×ÔÉíµÄÐèÇó³ö·¢¡£Ò»¸öͨÓõÄÊý¾Ý¿â²éѯϵͳ£¬²éѯ¶ÔÓ¦µÄº¯Êýǧ±äÍò»¯£¬²»¿ÉÄÜÇî¾Ù¡£µ«ÊÇÈç¹û´ÓÒµÎñ×ÔÉíµÄÐèÇó³ö·¢£¬¿ÉÒÔ·¢ÏÖÒµÎñËùÐèÒªµÄ²éѯ³£³£ÊÇÓÐÏ޵ġ£Batch Layer ÐèÒª×öµÄÒ»¼þÖØÒªµÄ¹¤×÷¾ÍÊǸù¾ÝÒµÎñµÄÐèÇ󣬿¼²ì¿ÉÄÜÐèÒªµÄ¸÷ÖÖ²éѯ£¬¸ù¾Ý²éѯ¶¨ÒåÆäÔÚÊý¾Ý¼¯É϶ÔÓ¦µÄ Views¡£

4.2.Speed Layer

Batch Layer ¿ÉÒԺܺõĴ¦ÀíÀëÏßÊý¾Ý£¬µ«Óкܶೡ¾°Êý¾Ý²»¶ÏʵʱÉú³É£¬²¢ÇÒÐèҪʵʱ²éѯ´¦Àí¡£Speed Layer ÕýÊÇÓÃÀ´´¦ÀíÔöÁ¿µÄʵʱÊý¾Ý¡£

Speed Layer ºÍ Batch Layer ±È½ÏÀàËÆ£¬¶ÔÊý¾Ý½øÐмÆËã²¢Éú³É Realtime View£¬ÆäÖ÷񻂿±ðÔÚÓÚ£º

Speed Layer ´¦ÀíµÄÊý¾ÝÊÇ×î½üµÄÔöÁ¿Êý¾ÝÁ÷£¬Batch Layer ´¦ÀíµÄÈ«ÌåÊý¾Ý¼¯

Speed Layer ΪÁËЧÂÊ£¬½ÓÊÕµ½ÐÂÊý¾Ýʱ²»¶Ï¸üРRealtime View£¬¶ø Batch Layer ¸ù¾ÝÈ«ÌåÀëÏßÊý¾Ý¼¯Ö±½ÓµÃµ½ Batch View¡£

Lambda ¼Ü¹¹½«Êý¾Ý´¦Àí·Ö½âΪ Batch Layer ºÍ Speed Layer ÓÐÈçÏÂÓŵ㣺

ÈÝ´íÐÔ¡£Speed Layer Öд¦ÀíµÄÊý¾ÝÒ²²»¶ÏдÈë Batch Layer£¬µ± Batch Layer ÖÐÖØÐ¼ÆËãµÄÊý¾Ý¼¯°üº¬ Speed Layer ´¦ÀíµÄÊý¾Ý¼¯ºó£¬µ±Ç°µÄ Realtime View ¾Í¿ÉÒÔ¶ªÆú£¬ÕâÒ²¾ÍÒâζ×Å Speed Layer ´¦ÀíÖÐÒýÈëµÄ´íÎó£¬ÔÚ Batch Layer ÖØÐ¼ÆËãʱ¶¼¿ÉÒԵõ½ÐÞÕý¡£ÕâµãÒ²¿ÉÒÔ¿´³ÉÊÇ CAP ÀíÂÛÖеÄ×îÖÕÒ»ÖÂÐÔ£¨Eventual Consistency£©µÄÌåÏÖ¡£

¸´ÔÓÐÔ¸ôÀë¡£Batch Layer ´¦ÀíµÄÊÇÀëÏßÊý¾Ý£¬¿ÉÒԺܺõÄÕÆ¿Ø¡£Speed Layer ²ÉÓÃÔöÁ¿Ëã·¨´¦ÀíʵʱÊý¾Ý£¬¸´ÔÓÐÔ±È Batch Layer Òª¸ßºÜ¶à¡£Í¨¹ý·Ö¿ª Batch Layer ºÍ Speed Layer£¬°Ñ¸´ÔÓÐÔ¸ôÀëµ½ Speed Layer£¬¿ÉÒԺܺõÄÌá¸ßÕû¸öϵͳµÄ³°ôÐԺͿɿ¿ÐÔ¡£

4.3.Serving Layer

Lambda ¼Ü¹¹µÄ Serving Layer ÓÃÓÚÏìÓ¦Óû§µÄ²éѯÇëÇ󣬺ϲ¢ Batch View ºÍ Realtime View ÖеĽá¹ûÊý¾Ý¼¯µ½×îÖÕµÄÊý¾Ý¼¯¡£

Õâ¶ùÉæ¼°µ½Êý¾ÝÈçºÎºÏ²¢µÄÎÊÌâ¡£Ç°ÃæÎÒÃÇÌÖÂÛÁ˲éѯº¯ÊýµÄ Monoid ÐÔÖÊ£¬Èç¹û²éѯº¯ÊýÂú×ã Monoid ÐÔÖÊ£¬¼´Âú×ã½áºÏÂÊ£¬Ö»ÐèÒª¼òµ¥µÄºÏ²¢ Batch View ºÍ Realtime View ÖеĽá¹ûÊý¾Ý¼¯¼´¿É¡£·ñÔòµÄ»°£¬¿ÉÒ԰Ѳéѯº¯Êýת»»³É¶à¸öÂú×ã Monoid ÐÔÖʵIJéѯº¯ÊýµÄÔËË㣬µ¥¶À¶Ôÿ¸öÂú×ã Monoid ÐÔÖʵIJéѯº¯Êý½øÐÐ Batch View ºÍ Realtime View ÖеĽá¹ûÊý¾Ý¼¯ºÏ²¢£¬È»ºóÔÙ¼ÆËãµÃµ½×îÖյĽá¹ûÊý¾Ý¼¯¡£ÁíÍâÒ²¿ÉÒÔ¸ù¾ÝÒµÎñ×ÔÉíµÄÌØÐÔ£¬ÔËÓÃÒµÎñ×ÔÉíµÄ¹æÔòÀ´¶Ô Batch View ºÍ Realtime View ÖеĽá¹ûÊý¾Ý¼¯ºÏ²¢¡£

5.Big Picture

ÉÏÃæ·Ö±ðÌÖÂÛÁË Lambda ¼Ü¹¹µÄÈý²ã£ºBatch Layer£¬Speed Layer ºÍ Serving Layer¡£ÏÂͼ¸ø³öÁË Lambda ¼Ü¹¹µÄÒ»¸öÍêÕûÊÓͼºÍÁ÷³Ì¡£

Êý¾ÝÁ÷½øÈëϵͳºó£¬Í¬Ê±·¢Íù Batch Layer ºÍ Speed Layer ´¦Àí¡£

Batch Layer ÒÔ²»¿É±äÄ£ÐÍÀëÏß´æ´¢ËùÓÐÊý¾Ý¼¯£¬Í¨¹ýÔÚÈ«ÌåÊý¾Ý¼¯Éϲ»¶ÏÖØÐ¼ÆËã¹¹½¨²éѯËù¶ÔÓ¦µÄ Batch Views¡£

Speed Layer ´¦ÀíÔöÁ¿µÄʵʱÊý¾ÝÁ÷£¬²»¶Ï¸üвéѯËù¶ÔÓ¦µÄ Realtime Views¡£

Serving Layer ÏìÓ¦Óû§µÄ²éѯÇëÇ󣬺ϲ¢ Batch View ºÍ Realtime View ÖеĽá¹ûÊý¾Ý¼¯µ½×îÖÕµÄÊý¾Ý¼¯¡£

5.1.Lambda ¼Ü¹¹×é¼þÑ¡ÐÍ

ÏÂͼ¸ø³öÁË Lambda ¼Ü¹¹Öи÷¸ö²ã³£ÓõÄ×é¼þ¡£

Êý¾ÝÁ÷´æ´¢¿ÉÑ¡ÓûùÓÚ²»¿É±äÈÕÖ¾µÄ·Ö²¼Ê½ÏûϢϵͳ Kafka£»

Batch Layer Êý¾Ý¼¯µÄ´¦Àí¿ÉÑ¡Óà hadoop ÒÔ¼°Ê¹ÓÃÆ·¸ßÔÆ S3 ½øÐд洢£¨Ò»¸öÓÉ BingoCloudOS£¨Æ·¸ßÔÆ²Ù×÷ϵͳ£©ÌṩµÄ¼æÈÝ AWS S3 µÄÔÆ·þÎñ¹²ÄظøÄ㣩

Batch View µÄÔ¤¼ÆËã¿ÉÒÔÑ¡Óà MapReduce »ò Spark£»Batch View ×ÔÉí½á¹ûÊý¾ÝµÄ´æ´¢¿ÉʹÓà MySQL£¨²éѯÉÙÁ¿µÄ×î½ü½á¹ûÊý¾Ý£©£¬»ò hbase£¨²éѯ´óÁ¿µÄÀúÊ·½á¹ûÊý¾Ý£©¡£

Speed Layer ÔöÁ¿Êý¾ÝµÄ´¦Àí¿ÉÑ¡Óà Storm »ò Spark Streaming£»Realtime View ÔöÁ¿½á¹ûÊý¾Ý¼¯ÎªÁËÂú×ãʵʱ¸üеÄЧÂÊ£¬¿ÉÑ¡Óà Redis µÈÄÚ´æ NoSQL¡£

5.2.Lambda ¼Ü¹¹×é¼þÑ¡ÐÍÔ­Ôò

Lambda ¼Ü¹¹ÊǸöͨÓÿò¼Ü£¬¸÷¸ö²ãÑ¡ÐÍʱ²»Òª¾ÖÏÞʱÉÏÃæ¸ø³öµÄ×é¼þ£¬ÌرðÊǶÔÓÚ View µÄÑ¡ÐÍ¡£´ÓÎÒ¶Ô Lambda ¼Ü¹¹µÄʵ¼ùÀ´¿´£¬ÒòΪ View ÊǸöºÍÒµÎñ¹ØÁªÐԷdz£´óµÄ¸ÅÄView Ñ¡Ôñ×é¼þʱ¹Ø¼üÊÇÒª¸ù¾ÝÒµÎñµÄÐèÇó£¬À´Ñ¡Ôñ×îÊʺϲéѯµÄ×é¼þ¡£²»Í¬µÄ View ×é¼þµÄÑ¡ÔñÒªÉîÈëÍÚ¾òÊý¾ÝºÍ¼ÆËã×ÔÉíµÄÌØµã£¬´Ó¶øÑ¡Ôñ³ö×îÊʺÏÊý¾ÝºÍ¼ÆËã×ÔÉíÌØµãµÄ×é¼þ£¬Í¬Ê±²»Í¬µÄ View ¿ÉÒÔÑ¡Ôñ²»Í¬µÄ×é¼þ¡£

6.Lambda ¼Ü¹¹ vs. Event Sourcing vs. CQRS

ÔÚ Lambda ¼Ü¹¹ÉíÉÏ¿ÉÒÔ¿´µ½ºÜ¶àÏÖÓÐÉè¼ÆË¼ÏëºÍ¼Ü¹¹µÄÓ°×Ó£¬Èç Event Sourcing ºÍ CQRS£¬Õâ¶ùÎÒÃǰÑËüÃÇºÍ Lambda ¼Ü¹¹×öÒ»½áºÏ¶Ô±È£¬´Ó¶øÈ¥¸üÉîÈëµÄÀí½â Lambda ¼Ü¹¹¡£

6.1. ʼþËÝÔ´£¨Event Sourcing£©vs. Lambda ¼Ü¹¹

ʼþËÝÔ´£¨Event Sourcing£©ÊÇÓÉ´óÃû¶¦¶¦µÄ Martin Flower ´óÊåÌá³öÀ´µÄ¼Ü¹¹Ä£Ê½¡£Event Sourcing ±¾ÖÊÉÏÊÇÒ»ÖÖÊý¾Ý³Ö¾Ã»¯µÄ·½Ê½£¬Ëü½«Òý·¢±ä»¯µÄʼþ£¨Event£©±¾Éí´æ´¢ÏÂÀ´¡£Ïà±ÈÓÚ´«Í³Êý¾ÝÊdz־û¯·½Ê½£¬´æ´¢µÄÊÇʼþÒý·¢µÄ½á¹û£¬¶ø·Çʼþ±¾Éí£¬ÕâÑùÎÒÃÇÔÚ±£´æ½á¹ûµÄͬʱ£¬Êµ¼ÊÉÏʧȥÁË×·Ëݵ¼Ö½á¹ûÔ­ÒòµÄ»ú»á¡£

Õâ¶ù¿ÉÒÔ¿´µ½ Lambda ¼Ü¹¹ÖÐÊý¾Ý¼¯µÄ´æ´¢ºÍ Event Sourcing ÖеÄ˼ÏëÊÇÍêȫһֵ쬱¾Öʶ¼ÊDzÉÓò»¿É±äµÄÊý¾ÝÄ£ÐÍ´æ´¢Òý·¢±ä»¯µÄʼþ¶ø·Ç±ä»¯²úÉúµÄ½á¹û¡£´Ó¶øÔÚ·¢Éú´íÎóµÄʱºò£¬Äܹ»×·±¾ËÝÔ´£¬ÕÒµ½·¢Éú´íÎóµÄ¸ùÔ´£¬Í¨¹ýÖØÐ¼ÆË㶪Æú´íÎóµÄÐÅÏ¢À´»Ö¸´ÏµÍ³£¬´ïµ½ÏµÍ³µÄÈÝ´íÐÔ¡£

6.2.CQRS vs. Lambda ¼Ü¹¹

CQRS (Command Query Responsibility Segregation) ½«¶ÔÊý¾ÝµÄÐ޸IJÙ×÷ºÍ²éѯ²Ù×÷·ÖÀ룬Æä±¾ÖÊºÍ Lambda ¼Ü¹¹Ò»Ñù£¬Ò²ÊÇÒ»ÖÖÐÎʽµÄ¶Áд·ÖÀë¡£ÔÚ Lambda ¼Ü¹¹ÖУ¬Êý¾ÝÒÔ²»¿É±äµÄ·½Ê½´æ´¢ÏÂÀ´£¨Ð´²Ù×÷£©£¬×ª»»³É²éѯËù¶ÔÓ¦µÄ Views£¬²éѯ´Ó View ÖÐÖ±½ÓµÃµ½½á¹ûÊý¾Ý£¨¶Á²Ù×÷£©¡£

¶Áд·ÖÀ뽫¶ÁºÍдÁ½¸öÊӽǽøÐзÖÀ룬´øÀ´µÄºÃ´¦ÊǸ´ÔÓÐԵĸôÀ룬´Ó¶ø¼ò»¯ÏµÍ³µÄÉè¼Æ¡£Ïà±ÈÓÚ´«Í³×ö·¨ÖеĽ«¶ÁºÍд²Ù×÷·ÅÔÚÒ»ÆðµÄ´¦Àí·½Ê½£¬¶ÔÓÚ¶Áд²Ù×÷ÒµÎñ·Ç³£¸´ÔÓµÄϵͳ£¬Ö»»áʹϵͳ±äµÃÒì³£¸´ÔÓ£¬ÄÑÒÔά»¤¡£

7. ×ܽá

±¾ÎĽéÉÜÁË Lambda ¼Ü¹¹µÄ»ù±¾¸ÅÄî¡£

Lambda ¼Ü¹¹Í¨¹ý¶ÔÊý¾ÝºÍ²éѯµÄ±¾ÖÊÈÏʶ£¬ÈÚºÏÁ˲»¿É±äÐÔ£¨Immunability£©£¬¶Áд·ÖÀëºÍ¸´ÔÓÐÔ¸ôÀëµÈһϵÁмܹ¹Ô­Ôò£¬

½«´óÊý¾Ý´¦Àíϵͳ»®·ÖΪ Batch Layer, Speed Layer ºÍ Serving Layer Èý²ã£¬

´Ó¶øÉè¼Æ³öÒ»¸öÄÜÂú×ãʵʱ´óÊý¾Ýϵͳ¹Ø¼üÌØÐÔ£¨Èç¸ßÈÝ´í¡¢µÍÑÓʱºÍ¿ÉÀ©Õ¹µÈ£©µÄ¼Ü¹¹¡£

Lambda ¼Ü¹¹×÷Ϊһ¸öͨÓõĴóÊý¾Ý´¦Àí¿ò¼Ü£¬¿ÉÒԺܷ½±ãµÄ¼¯³É Hadoop£¬Kafka£¬Storm£¬Spark£¬Hbase µÈ¸÷Àà´óÊý¾Ý×é¼þ¡£

 
   
2406 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨ϵÄÊý¾ÝÖÎÀí
ÈçºÎÉè¼ÆÊµÊ±Êý¾Ýƽ̨£¨¼¼Êõƪ£©
´óÊý¾Ý×ʲú¹ÜÀí×ÜÌå¿ò¼Ü¸ÅÊö
Kafka¼Ü¹¹ºÍÔ­Àí
ELK¶àÖּܹ¹¼°ÓÅÁÓ
×îпγÌ
´óÊý¾Ýƽ̨´î½¨Óë¸ßÐÔÄܼÆËã
´óÊý¾Ýƽ̨¼Ü¹¹ÓëÓ¦ÓÃʵս
´óÊý¾ÝϵͳÔËά
´óÊý¾Ý·ÖÎöÓë¹ÜÀí
Python¼°Êý¾Ý·ÖÎö
³É¹¦°¸Àý
ijͨÐÅÉ豸ÆóÒµ PythonÊý¾Ý·ÖÎöÓëÍÚ¾ò
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© Python¼°Êý¾Ý·ÖÎö
ÉñÁúÆû³µ ´óÊý¾Ý¼¼Êõƽ̨-Hadoop
ÖйúµçÐÅ ´óÊý¾Ýʱ´úÓëÏÖ´úÆóÒµµÄÊý¾Ý»¯ÔËӪʵ¼ù