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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ZookeeperÔ­Àí
 
ת×ÔÍøÂ磬»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-11-12
  7246  次浏览      30
 

ZooKeeperÊÇÒ»¸ö·Ö²¼Ê½µÄ£¬¿ª·ÅÔ´ÂëµÄ·Ö²¼Ê½Ó¦ÓóÌÐòЭµ÷·þÎñ£¬Ëü°üº¬Ò»¸ö¼òµ¥µÄÔ­ÓO£¬·Ö²¼Ê½Ó¦ÓóÌÐò¿ÉÒÔ»ùÓÚËüʵÏÖͬ²½·þÎñ£¬ÅäÖÃά»¤ºÍÃüÃû·þÎñµÈ¡£ZookeeperÊÇhadoopµÄÒ»¸ö×ÓÏîÄ¿£¬Æä·¢Õ¹Àú³ÌÎÞÐè׸Êö¡£ÔÚ·Ö²¼Ê½Ó¦ÓÃÖУ¬ÓÉÓÚ¹¤³Ìʦ²»ÄܺܺõØÊ¹ÓÃËø»úÖÆ£¬ÒÔ¼°»ùÓÚÏûÏ¢µÄЭµ÷»úÖÆ²»ÊʺÏÔÚijЩӦÓÃÖÐʹÓã¬Òò´ËÐèÒªÓÐÒ»ÖÖ¿É¿¿µÄ¡¢¿ÉÀ©Õ¹µÄ¡¢·Ö²¼Ê½µÄ¡¢¿ÉÅäÖõÄЭµ÷»úÖÆÀ´Í³Ò»ÏµÍ³µÄ״̬¡£ZookeeperµÄÄ¿µÄ¾ÍÔÚÓÚ´Ë¡£±¾Îļòµ¥·ÖÎözookeeperµÄ¹¤×÷Ô­Àí£¬¶ÔÓÚÈçºÎʹÓÃzookeeper²»ÊDZ¾ÎÄÌÖÂÛµÄÖØµã¡£

1 ZookeeperµÄ»ù±¾¸ÅÄî

1.1 ½ÇÉ«

ZookeeperÖеĽÇÉ«Ö÷ÒªÓÐÒÔÏÂÈýÀ࣬ÈçϱíËùʾ£º

ϵͳģÐÍÈçͼËùʾ£º

1.2 Éè¼ÆÄ¿µÄ

1.×îÖÕÒ»ÖÂÐÔ£ºclient²»ÂÛÁ¬½Óµ½ÄĸöServer£¬Õ¹Ê¾¸øËü¶¼ÊÇͬһ¸öÊÓͼ£¬ÕâÊÇzookeeper×îÖØÒªµÄÐÔÄÜ¡£

2 .¿É¿¿ÐÔ£º¾ßÓмòµ¥¡¢½¡×³¡¢Á¼ºÃµÄÐÔÄÜ£¬Èç¹ûÏûÏ¢m±»µ½Ò»Ì¨·þÎñÆ÷½ÓÊÜ£¬ÄÇôËü½«±»ËùÓеķþÎñÆ÷½ÓÊÜ¡£

3 .ʵʱÐÔ£ºZookeeper±£Ö¤¿Í»§¶Ë½«ÔÚÒ»¸öʱ¼ä¼ä¸ô·¶Î§ÄÚ»ñµÃ·þÎñÆ÷µÄ¸üÐÂÐÅÏ¢£¬»òÕß·þÎñÆ÷ʧЧµÄÐÅÏ¢¡£µ«ÓÉÓÚÍøÂçÑÓʱµÈÔ­Òò£¬Zookeeper²»Äܱ£Ö¤Á½¸ö¿Í»§¶ËÄÜͬʱµÃµ½¸Õ¸üеÄÊý¾Ý£¬Èç¹ûÐèÒª×îÐÂÊý¾Ý£¬Ó¦¸ÃÔÚ¶ÁÊý¾Ý֮ǰµ÷ÓÃsync()½Ó¿Ú¡£

4 .µÈ´ýÎ޹أ¨wait-free£©£ºÂýµÄ»òÕßʧЧµÄclient²»µÃ¸ÉÔ¤¿ìËÙµÄclientµÄÇëÇó£¬Ê¹µÃÿ¸öclient¶¼ÄÜÓÐЧµÄµÈ´ý¡£

5.Ô­×ÓÐÔ£º¸üÐÂÖ»Äܳɹ¦»òÕßʧ°Ü£¬Ã»ÓÐÖмä״̬¡£

6 .˳ÐòÐÔ£º°üÀ¨È«¾ÖÓÐÐòºÍÆ«ÐòÁ½ÖÖ£ºÈ«¾ÖÓÐÐòÊÇÖ¸Èç¹ûÔÚһ̨·þÎñÆ÷ÉÏÏûÏ¢aÔÚÏûÏ¢bǰ·¢²¼£¬ÔòÔÚËùÓÐServerÉÏÏûÏ¢a¶¼½«ÔÚÏûÏ¢bǰ±»·¢²¼£»Æ«ÐòÊÇÖ¸Èç¹ûÒ»¸öÏûÏ¢bÔÚÏûÏ¢aºó±»Í¬Ò»¸ö·¢ËÍÕß·¢²¼£¬a±Ø½«ÅÅÔÚbÇ°Ãæ¡£

2 ZooKeeperµÄ¹¤×÷Ô­Àí

ZookeeperµÄºËÐÄÊÇÔ­×ӹ㲥£¬Õâ¸ö»úÖÆ±£Ö¤Á˸÷¸öServerÖ®¼äµÄͬ²½¡£ÊµÏÖÕâ¸ö»úÖÆµÄЭÒé½Ð×öZabЭÒé¡£ZabЭÒéÓÐÁ½ÖÖģʽ£¬ËüÃÇ·Ö±ðÊǻָ´Ä£Ê½£¨Ñ¡Ö÷£©ºÍ¹ã²¥Ä£Ê½£¨Í¬²½£©¡£µ±·þÎñÆô¶¯»òÕßÔÚÁìµ¼Õß±ÀÀ£ºó£¬Zab¾Í½øÈëÁ˻ָ´Ä£Ê½£¬µ±Áìµ¼Õß±»Ñ¡¾Ù³öÀ´£¬ÇÒ´ó¶àÊýServerÍê³ÉÁ˺ÍleaderµÄ״̬ͬ²½ÒԺ󣬻ָ´Ä£Ê½¾Í½áÊøÁË¡£×´Ì¬Í¬²½±£Ö¤ÁËleaderºÍServer¾ßÓÐÏàͬµÄϵͳ״̬¡£

ΪÁ˱£Ö¤ÊÂÎñµÄ˳ÐòÒ»ÖÂÐÔ£¬zookeeper²ÉÓÃÁ˵ÝÔöµÄÊÂÎñidºÅ£¨zxid£©À´±êʶÊÂÎñ¡£ËùÓеÄÌáÒ飨proposal£©¶¼ÔÚ±»Ìá³öµÄʱºò¼ÓÉÏÁËzxid¡£ÊµÏÖÖÐzxidÊÇÒ»¸ö64λµÄÊý×Ö£¬Ëü¸ß32λÊÇepochÓÃÀ´±êʶleader¹ØÏµÊÇ·ñ¸Ä±ä£¬Ã¿´ÎÒ»¸öleader±»Ñ¡³öÀ´£¬Ëü¶¼»áÓÐÒ»¸öеÄepoch£¬±êʶµ±Ç°ÊôÓÚÄǸöleaderµÄͳÖÎʱÆÚ¡£µÍ32λÓÃÓÚµÝÔö¼ÆÊý¡£

ÿ¸öServerÔÚ¹¤×÷¹ý³ÌÖÐÓÐÈýÖÖ״̬£º

1. LOOKING£ºµ±Ç°Server²»ÖªµÀleaderÊÇË­£¬ÕýÔÚËÑѰ

2.LEADING£ºµ±Ç°Server¼´ÎªÑ¡¾Ù³öÀ´µÄleader

3.FOLLOWING£ºleaderÒѾ­Ñ¡¾Ù³öÀ´£¬µ±Ç°ServerÓë֮ͬ²½

2.1 Ñ¡Ö÷Á÷³Ì

µ±leader±ÀÀ£»òÕßleaderʧȥ´ó¶àÊýµÄfollower£¬Õâʱºòzk½øÈë»Ö¸´Ä£Ê½£¬»Ö¸´Ä£Ê½ÐèÒªÖØÐÂÑ¡¾Ù³öÒ»¸öеÄleader£¬ÈÃËùÓеÄServer¶¼»Ö¸´µ½Ò»¸öÕýÈ·µÄ״̬¡£ZkµÄÑ¡¾ÙËã·¨ÓÐÁ½ÖÖ£ºÒ»ÖÖÊÇ»ùÓÚbasic paxosʵÏֵģ¬ÁíÍâÒ»ÖÖÊÇ»ùÓÚfast paxosË㷨ʵÏֵġ£ÏµÍ³Ä¬ÈϵÄÑ¡¾ÙË㷨Ϊfast paxos¡£ÏȽéÉÜbasic paxosÁ÷³Ì£º

1. 1 .Ñ¡¾ÙÏß³ÌÓɵ±Ç°Server·¢ÆðÑ¡¾ÙµÄÏ̵߳£ÈΣ¬ÆäÖ÷Òª¹¦ÄÜÊǶÔͶƱ½á¹û½øÐÐͳ¼Æ£¬²¢Ñ¡³öÍÆ¼öµÄServer£»

2. 2 .Ñ¡¾ÙÏß³ÌÊ×ÏÈÏòËùÓÐServer·¢ÆðÒ»´ÎѯÎÊ(°üÀ¨×Ô¼º)£»

3. 3 .Ñ¡¾ÙÏß³ÌÊÕµ½»Ø¸´ºó£¬ÑéÖ¤ÊÇ·ñÊÇ×Ô¼º·¢ÆðµÄѯÎÊ(ÑéÖ¤zxidÊÇ·ñÒ»ÖÂ)£¬È»ºó»ñÈ¡¶Ô·½µÄid(myid)£¬²¢´æ´¢µ½µ±Ç°Ñ¯ÎʶÔÏóÁбíÖУ¬×îºó»ñÈ¡¶Ô·½ÌáÒéµÄleaderÏà¹ØÐÅÏ¢(id,zxid)£¬²¢½«ÕâЩÐÅÏ¢´æ´¢µ½µ±´ÎÑ¡¾ÙµÄͶƱ¼Ç¼±íÖУ»

4. 4. ÊÕµ½ËùÓÐServer»Ø¸´ÒԺ󣬾ͼÆËã³özxid×î´óµÄÄǸöServer£¬²¢½«Õâ¸öServerÏà¹ØÐÅÏ¢ÉèÖóÉÏÂÒ»´ÎҪͶƱµÄServer£»

5. 5. Ï߳̽«µ±Ç°zxid×î´óµÄServerÉèÖÃΪµ±Ç°ServerÒªÍÆ¼öµÄLeader£¬Èç¹û´Ëʱ»ñʤµÄServer»ñµÃn/2 + 1µÄServerƱÊý£¬ ÉèÖõ±Ç°ÍƼöµÄleaderΪ»ñʤµÄServer£¬½«¸ù¾Ý»ñʤµÄServerÏà¹ØÐÅÏ¢ÉèÖÃ×Ô¼ºµÄ״̬£¬·ñÔò£¬¼ÌÐøÕâ¸ö¹ý³Ì£¬Ö±µ½leader±»Ñ¡¾Ù³öÀ´¡£

ͨ¹ýÁ÷³Ì·ÖÎöÎÒÃÇ¿ÉÒԵóö£ºÒªÊ¹Leader»ñµÃ¶àÊýServerµÄÖ§³Ö£¬ÔòServer×ÜÊý±ØÐëÊÇÆæÊý2n+1£¬ÇÒ´æ»îµÄServerµÄÊýÄ¿²»µÃÉÙÓÚn+1.

ÿ¸öServerÆô¶¯ºó¶¼»áÖØ¸´ÒÔÉÏÁ÷³Ì¡£ÔÚ»Ö¸´Ä£Ê½Ï£¬Èç¹ûÊǸմӱÀÀ£×´Ì¬»Ö¸´µÄ»òÕߏկô¶¯µÄserver»¹»á´Ó´ÅÅÌ¿ìÕÕÖлָ´Êý¾ÝºÍ»á»°ÐÅÏ¢£¬zk»á¼Ç¼ÊÂÎñÈÕÖ¾²¢¶¨ÆÚ½øÐпìÕÕ£¬·½±ãÔÚ»Ö¸´Ê±½øÐÐ״̬»Ö¸´¡£Ñ¡Ö÷µÄ¾ßÌåÁ÷³ÌͼÈçÏÂËùʾ£º

fast paxosÁ÷³ÌÊÇÔÚÑ¡¾Ù¹ý³ÌÖУ¬Ä³ServerÊ×ÏÈÏòËùÓÐServerÌáÒé×Ô¼ºÒª³ÉΪleader£¬µ±ÆäËüServerÊÕµ½ÌáÒéÒԺ󣬽â¾öepochºÍzxidµÄ³åÍ»£¬²¢½ÓÊܶԷ½µÄÌáÒ飬ȻºóÏò¶Ô·½·¢ËͽÓÊÜÌáÒéÍê³ÉµÄÏûÏ¢£¬Öظ´Õâ¸öÁ÷³Ì£¬×îºóÒ»¶¨ÄÜÑ¡¾Ù³öLeader¡£ÆäÁ÷³ÌͼÈçÏÂËùʾ£º

2.2 ͬ²½Á÷³Ì

Ñ¡ÍêleaderÒÔºó£¬zk¾Í½øÈë״̬ͬ²½¹ý³Ì¡£

1. 1. leaderµÈ´ýserverÁ¬½Ó£»

2. 2 .FollowerÁ¬½Óleader£¬½«×î´óµÄzxid·¢Ë͸øleader£»

3. 3 .Leader¸ù¾ÝfollowerµÄzxidÈ·¶¨Í¬²½µã£»

4. 4 .Íê³Éͬ²½ºó֪ͨfollower ÒѾ­³ÉΪuptodate״̬£»

5. 5 .FollowerÊÕµ½uptodateÏûÏ¢ºó£¬ÓÖ¿ÉÒÔÖØÐ½ÓÊÜclientµÄÇëÇó½øÐзþÎñÁË¡£

Á÷³ÌͼÈçÏÂËùʾ£º

2.3 ¹¤×÷Á÷³Ì

2.3.1 Leader¹¤×÷Á÷³Ì

LeaderÖ÷ÒªÓÐÈý¸ö¹¦ÄÜ£º

1. 1 .»Ö¸´Êý¾Ý£»

2. 2 .ά³ÖÓëLearnerµÄÐÄÌø£¬½ÓÊÕLearnerÇëÇó²¢ÅжÏLearnerµÄÇëÇóÏûÏ¢ÀàÐÍ£»

3. 3 .LearnerµÄÏûÏ¢ÀàÐÍÖ÷ÒªÓÐPINGÏûÏ¢¡¢REQUESTÏûÏ¢¡¢ACKÏûÏ¢¡¢REVALIDATEÏûÏ¢£¬¸ù¾Ý²»Í¬µÄÏûÏ¢ÀàÐÍ£¬½øÐв»Í¬µÄ´¦Àí¡£

PINGÏûÏ¢ÊÇÖ¸LearnerµÄÐÄÌøÐÅÏ¢£»REQUESTÏûÏ¢ÊÇFollower·¢Ë͵ÄÌáÒéÐÅÏ¢£¬°üÀ¨Ð´ÇëÇó¼°Í¬²½ÇëÇó£»ACKÏûÏ¢ÊÇFollowerµÄ¶ÔÌáÒéµÄ»Ø¸´£¬³¬¹ý°ëÊýµÄFollowerͨ¹ý£¬Ôòcommit¸ÃÌáÒ飻REVALIDATEÏûÏ¢ÊÇÓÃÀ´ÑÓ³¤SESSIONÓÐЧʱ¼ä¡£

LeaderµÄ¹¤×÷Á÷³Ì¼òͼÈçÏÂËùʾ£¬ÔÚʵ¼ÊʵÏÖÖУ¬Á÷³ÌÒª±ÈÏÂͼ¸´Ôӵö࣬Æô¶¯ÁËÈý¸öÏß³ÌÀ´ÊµÏÖ¹¦ÄÜ¡£

2.3.2 Follower¹¤×÷Á÷³Ì

FollowerÖ÷ÒªÓÐËĸö¹¦ÄÜ£º

1. 1. ÏòLeader·¢ËÍÇëÇó£¨PINGÏûÏ¢¡¢REQUESTÏûÏ¢¡¢ACKÏûÏ¢¡¢REVALIDATEÏûÏ¢£©£»

2. 2 .½ÓÊÕLeaderÏûÏ¢²¢½øÐд¦Àí£»

3. 3 .½ÓÊÕClientµÄÇëÇó£¬Èç¹ûΪдÇëÇ󣬷¢Ë͸øLeader½øÐÐͶƱ£»

4. 4 .·µ»ØClient½á¹û¡£

FollowerµÄÏûϢѭ»·´¦ÀíÈçϼ¸ÖÖÀ´×ÔLeaderµÄÏûÏ¢£º

1. 1 .PINGÏûÏ¢£º ÐÄÌøÏûÏ¢£»

2. 2 .PROPOSALÏûÏ¢£ºLeader·¢ÆðµÄÌá°¸£¬ÒªÇóFollowerͶƱ£»

3. 3 .COMMITÏûÏ¢£º·þÎñÆ÷¶Ë×îÐÂÒ»´ÎÌá°¸µÄÐÅÏ¢£»

4. 4 .UPTODATEÏûÏ¢£º±íÃ÷ͬ²½Íê³É£»

5. 5 .REVALIDATEÏûÏ¢£º¸ù¾ÝLeaderµÄREVALIDATE½á¹û£¬¹Ø±Õ´ýrevalidateµÄsession»¹ÊÇÔÊÐíÆä½ÓÊÜÏûÏ¢£»

6. 6 .SYNCÏûÏ¢£º·µ»ØSYNC½á¹ûµ½¿Í»§¶Ë£¬Õâ¸öÏûÏ¢×î³õÓɿͻ§¶Ë·¢Æð£¬ÓÃÀ´Ç¿ÖƵõ½×îеĸüС£

FollowerµÄ¹¤×÷Á÷³Ì¼òͼÈçÏÂËùʾ£¬ÔÚʵ¼ÊʵÏÖÖУ¬FollowerÊÇͨ¹ý5¸öÏß³ÌÀ´ÊµÏÖ¹¦Äܵġ£

¶ÔÓÚobserverµÄÁ÷³Ì²»ÔÙÐðÊö£¬observerÁ÷³ÌºÍFollowerµÄΨһ²»Í¬µÄµØ·½¾ÍÊÇobserver²»»á²Î¼Óleader·¢ÆðµÄͶƱ¡£

Ö÷Á÷Ó¦Óó¡¾°£º

ZookeeperµÄÖ÷Á÷Ó¦Ó󡾰ʵÏÖ˼·£¨³ýÈ¥¹Ù·½Ê¾Àý£©

(1)ÅäÖùÜÀí

¼¯ÖÐʽµÄÅäÖùÜÀíÔÚÓ¦Óü¯ÈºÖÐÊǷdz£³£¼ûµÄ£¬Ò»°ãÉÌÒµ¹«Ë¾ÄÚ²¿¶¼»áʵÏÖÒ»Ì×¼¯ÖеÄÅäÖùÜÀíÖÐÐÄ£¬Ó¦¶Ô²»Í¬µÄÓ¦Óü¯Èº¶ÔÓÚ¹²Ïí¸÷×ÔÅäÖõÄÐèÇ󣬲¢ÇÒÔÚÅäÖñä¸üʱÄܹ»Í¨Öªµ½¼¯ÈºÖеÄÿһ¸ö»úÆ÷¡£

ZookeeperºÜÈÝÒ×ʵÏÖÕâÖÖ¼¯ÖÐʽµÄÅäÖùÜÀí£¬±ÈÈ罫APP1µÄËùÓÐÅäÖÃÅäÖõ½/APP1 znodeÏ£¬APP1ËùÓлúÆ÷Ò»Æô¶¯¾Í¶Ô/APP1Õâ¸ö½Úµã½øÐÐ¼à¿Ø(zk.exist("/APP1",true)),²¢ÇÒʵÏֻص÷·½·¨Watcher£¬ÄÇôÔÚzookeeperÉÏ/APP1 znode½ÚµãÏÂÊý¾Ý·¢Éú±ä»¯µÄʱºò£¬Ã¿¸ö»úÆ÷¶¼»áÊÕµ½Í¨Öª£¬Watcher·½·¨½«»á±»Ö´ÐУ¬ÄÇôӦÓÃÔÙÈ¡ÏÂÊý¾Ý¼´¿É(zk.getData("/APP1",false,null));

ÒÔÉÏÕâ¸öÀý×ÓÖ»ÊǼòµ¥µÄ´Ö¿ÅÁ£¶ÈÅäÖÃ¼à¿Ø£¬Ï¸¿ÅÁ£¶ÈµÄÊý¾Ý¿ÉÒÔ½øÐзֲ㼶¼à¿Ø£¬ÕâÒ»Çж¼ÊÇ¿ÉÒÔÉè¼ÆºÍ¿ØÖƵġ£

(2)¼¯Èº¹ÜÀí

Ó¦Óü¯ÈºÖУ¬ÎÒÃdz£³£ÐèÒªÈÃÿһ¸ö»úÆ÷ÖªµÀ¼¯ÈºÖУ¨»òÒÀÀµµÄÆäËûijһ¸ö¼¯Èº£©ÄÄЩ»úÆ÷ÊÇ»î×ŵ쬲¢ÇÒÔÚ¼¯Èº»úÆ÷ÒòΪ崻ú£¬ÍøÂç¶ÏÁ´µÈÔ­ÒòÄܹ»²»ÔÚÈ˹¤½éÈëµÄÇé¿öÏÂѸËÙ֪ͨµ½Ã¿Ò»¸ö»úÆ÷¡£

ZookeeperͬÑùºÜÈÝÒ×ʵÏÖÕâ¸ö¹¦ÄÜ£¬±ÈÈçÎÒÔÚzookeeper·þÎñÆ÷¶ËÓÐÒ»¸öznode½Ð/APP1SERVERS,ÄÇô¼¯ÈºÖÐÿһ¸ö»úÆ÷Æô¶¯µÄʱºò¶¼È¥Õâ¸ö½ÚµãÏ´´½¨Ò»¸öEPHEMERALÀàÐ͵Ľڵ㣬±ÈÈçserver1´´½¨/APP1SERVERS/SERVER1(¿ÉÒÔʹÓÃip,±£Ö¤²»Öظ´)£¬server2´´½¨/APP1SERVERS/SERVER2£¬È»ºóSERVER1ºÍSERVER2¶¼watch /APP1SERVERSÕâ¸ö¸¸½Úµã£¬ÄÇôҲ¾ÍÊÇÕâ¸ö¸¸½ÚµãÏÂÊý¾Ý»òÕß×Ó½Úµã±ä»¯¶¼»á֪ͨ¶Ô¸Ã½Úµã½øÐÐwatchµÄ¿Í»§¶Ë¡£ÒòΪEPHEMERALÀàÐͽڵãÓÐÒ»¸öºÜÖØÒªµÄÌØÐÔ£¬¾ÍÊǿͻ§¶ËºÍ·þÎñÆ÷¶ËÁ¬½Ó¶Ïµô»òÕßsession¹ýÆÚ¾Í»áʹ½ÚµãÏûʧ£¬ÄÇôÔÚijһ¸ö»úÆ÷¹Òµô»òÕß¶ÏÁ´µÄʱºò£¬Æä¶ÔÓ¦µÄ½Úµã¾Í»áÏûʧ£¬È»ºó¼¯ÈºÖÐËùÓжÔ/APP1SERVERS½øÐÐwatchµÄ¿Í»§¶Ë¶¼»áÊÕµ½Í¨Öª£¬È»ºóÈ¡µÃ×îÐÂÁÐ±í¼´¿É¡£

ÁíÍâÓÐÒ»¸öÓ¦Óó¡¾°¾ÍÊǼ¯ÈºÑ¡master,Ò»µ©master¹ÒµôÄܹ»ÂíÉÏÄÜ´ÓslaveÖÐÑ¡³öÒ»¸ömaster,ʵÏÖ²½ÖèºÍǰÕßÒ»Ñù£¬Ö»ÊÇ»úÆ÷ÔÚÆô¶¯µÄʱºòÔÚAPP1SERVERS´´½¨µÄ½ÚµãÀàÐͱäΪEPHEMERAL_SEQUENTIALÀàÐÍ£¬ÕâÑùÿ¸ö½Úµã»á×Ô¶¯±»±àºÅ

ÎÒÃÇĬÈϹ涨±àºÅ×îСµÄΪmaster,ËùÒÔµ±ÎÒÃǶÔ/APP1SERVERS½Úµã×ö¼à¿ØµÄʱºò£¬µÃµ½·þÎñÆ÷ÁÐ±í£¬Ö»ÒªËùÓм¯Èº»úÆ÷Âß¼­ÈÏΪ×îС±àºÅ½ÚµãΪmaster£¬ÄÇômaster¾Í±»Ñ¡³ö£¬¶øÕâ¸ömasterå´»úµÄʱºò£¬ÏàÓ¦µÄznode»áÏûʧ£¬È»ºóеķþÎñÆ÷Áбí¾Í±»ÍÆË͵½¿Í»§¶Ë£¬È»ºóÿ¸ö½ÚµãÂß¼­ÈÏΪ×îС±àºÅ½ÚµãΪmaster£¬ÕâÑù¾Í×öµ½¶¯Ì¬masterÑ¡¾Ù¡£

Zookeeper ¼àÊÓ£¨Watches£© ¼ò½é

Zookeeper C API µÄÉùÃ÷ºÍÃèÊöÔÚ include/zookeeper.h ÖпÉÒÔÕÒµ½£¬ÁíÍâ´ó²¿·ÖµÄ Zookeeper C API ³£Á¿¡¢½á¹¹ÌåÉùÃ÷Ò²ÔÚ zookeeper.h ÖУ¬Èç¹ûÈç¹ûÄãÔÚʹÓà C API ÊÇÓöµ½²»Ã÷°×µÄµØ·½£¬×îºÃ¿´¿´ zookeeper.h£¬»òÕß×Ô¼ºÊ¹Óà doxygen Éú³É Zookeeper C API µÄ°ïÖúÎĵµ¡£

Zookeeper ÖÐ×îÓÐÌØÉ«ÇÒ×î²»ÈÝÒ×Àí½âµÄÊǼàÊÓ(Watches)¡£Zookeeper ËùÓеĶÁ²Ù×÷¡ª¡ªgetData(), getChildren(), ºÍ exists() ¶¼ ¿ÉÒÔÉèÖüàÊÓ(watch)£¬¼àÊÓʼþ¿ÉÒÔÀí½âΪһ´ÎÐԵĴ¥·¢Æ÷£¬ ¹Ù·½¶¨ÒåÈçÏ£º a watch event is one-time trigger, sent to the client that set the watch, which occurs when the data for which the watch was set changes¡£¶Ô´ËÐèÒª×÷³öÈçÏÂÀí½â£º

1¡¢£¨Ò»´ÎÐÔ´¥·¢£©One-time trigger

µ±ÉèÖüàÊÓµÄÊý¾Ý·¢Éú¸Ä±äʱ£¬¸Ã¼àÊÓʼþ»á±»·¢Ë͵½¿Í»§¶Ë£¬ÀýÈ磬Èç¹û¿Í»§¶Ëµ÷ÓÃÁË getData("/znode1", true) ²¢ÇÒÉÔºó /znode1 ½ÚµãÉϵÄÊý¾Ý·¢ÉúÁ˸ıä»òÕß±»É¾³ýÁË£¬¿Í»§¶Ë½«»á»ñÈ¡µ½ /znode1 ·¢Éú±ä»¯µÄ¼àÊÓʼþ£¬¶øÈç¹û /znode1 ÔÙÒ»´Î·¢ÉúÁ˱仯£¬³ý·Ç¿Í»§¶ËÔÙ´Î¶Ô /znode1 ÉèÖüàÊÓ£¬·ñÔò¿Í»§¶Ë²»»áÊÕµ½Ê¼þ֪ͨ¡£

2¡¢£¨·¢ËÍÖÁ¿Í»§¶Ë£©Sent to the client

Zookeeper ¿Í»§¶ËºÍ·þÎñ¶ËÊÇͨ¹ý socket ½øÐÐͨÐŵģ¬ÓÉÓÚÍøÂç´æÔÚ¹ÊÕÏ£¬ËùÒÔ¼àÊÓʼþºÜÓпÉÄܲ»»á³É¹¦µØµ½´ï¿Í»§¶Ë£¬¼àÊÓʼþÊÇÒì²½·¢ËÍÖÁ¼àÊÓÕߵģ¬Zookeeper ±¾ÉíÌṩÁ˱£ÐòÐÔ(ordering guarantee)£º¼´¿Í»§¶ËÖ»ÓÐÊ×ÏÈ¿´µ½Á˼àÊÓʼþºó£¬²Å»á¸ÐÖªµ½ËüËùÉèÖüàÊ znode ·¢ÉúÁ˱仯(a client will never see a change for which it has set a watch until it first sees the watch event). ÍøÂçÑÓ³Ù»òÕ߯äËûÒòËØ¿ÉÄܵ¼Ö²»Í¬µÄ¿Í»§¶ËÔÚ²»Í¬µÄʱ¿Ì¸Ð֪ijһ¼àÊÓʼþ£¬µ«ÊDz»Í¬µÄ¿Í»§¶ËËù¿´µ½µÄÒ»ÇоßÓÐÒ»ÖµÄ˳Ðò¡£

3¡¢ £¨±»ÉèÖà watch µÄÊý¾Ý£©The data for which the watch was set

ÕâÒâζ×Å znode ½Úµã±¾Éí¾ßÓв»Í¬µÄ¸Ä±ä·½Ê½¡£ÄãÒ²¿ÉÒÔÏëÏó Zookeeper ά»¤ÁËÁ½Ìõ¼àÊÓÁ´±í£ºÊý¾Ý¼àÊÓºÍ×Ó½Úµã¼àÊÓ(data watches and child watches) getData() and exists() ÉèÖÃÊý¾Ý¼àÊÓ£¬getChildren() ÉèÖÃ×Ó½Úµã¼àÊÓ¡£ »òÕߣ¬ÄãÒ²¿ÉÒÔÏëÏó Zookeeper ÉèÖõIJ»Í¬¼àÊÓ·µ»Ø²»Í¬µÄÊý¾Ý£¬getData() ºÍ exists() ·µ»Ø znode ½ÚµãµÄÏà¹ØÐÅÏ¢£¬¶ø getChildren() ·µ»Ø×Ó½ÚµãÁÐ±í¡£Òò´Ë£¬ setData() »á´¥·¢ÉèÖÃÔÚijһ½ÚµãÉÏËùÉèÖõÄÊý¾Ý¼àÊÓ(¼Ù¶¨Êý¾ÝÉèÖóɹ¦)£¬¶øÒ»´Î³É¹¦µÄ create() ²Ù×÷Ôò»á³ö·¢µ±Ç°½ÚµãÉÏËùÉèÖõÄÊý¾Ý¼àÊÓÒÔ¼°¸¸½ÚµãµÄ×Ó½Úµã¼àÊÓ¡£Ò»´Î³É¹¦µÄ delete() ²Ù×÷½«»á´¥·¢µ±Ç°½ÚµãµÄÊý¾Ý¼àÊÓºÍ×Ó½Úµã¼àÊÓʼþ£¬Í¬Ê±Ò²»á´¥·¢¸Ã½Úµã¸¸½ÚµãµÄchild watch¡£

Zookeeper ÖеļàÊÓÊÇÇáÁ¿¼¶µÄ£¬Òò´ËÈÝÒ×ÉèÖá¢Î¬»¤ºÍ·Ö·¢¡£µ±¿Í»§¶ËÓë Zookeeper ·þÎñÆ÷¶ËʧȥÁªÏµÊ±£¬¿Í»§¶Ë²¢²»»áÊÕµ½¼àÊÓʼþµÄ֪ͨ£¬Ö»Óе±¿Í»§¶ËÖØÐÂÁ¬½Óºó£¬ÈôÔÚ±ØÒªµÄÇé¿öÏ£¬ÒÔǰע²áµÄ¼àÊÓ»áÖØÐ±»×¢²á²¢´¥·¢£¬¶ÔÓÚ¿ª·¢ÈËÔ±À´Ëµ Õâͨ³£ÊÇ͸Ã÷µÄ¡£Ö»ÓÐÒ»ÖÖÇé¿ö»áµ¼Ö¼àÊÓʼþµÄ¶ªÊ§£¬¼´£ºÍ¨¹ý exists() ÉèÖÃÁËij¸ö znode ½ÚµãµÄ¼àÊÓ£¬µ«ÊÇÈç¹ûij¸ö¿Í»§¶ËÔÚ´Ë znode ½Úµã±»´´½¨ºÍɾ³ýµÄʱ¼ä¼ä¸ôÄÚÓë zookeeper ·þÎñÆ÷ʧȥÁËÁªÏµ£¬¸Ã¿Í»§¶Ë¼´Ê¹ÉÔºóÖØÐÂÁ¬½Ó zookeeper·þÎñÆ÷ºóÒ²µÃ²»µ½Ê¼þ֪ͨ¡£

   
7246 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù