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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
´ÓÒøÐÐתÕËʧ°Üµ½·Ö²¼Ê½ÊÂÎñ£º×ܽáÓë˼¿¼
 
  4376  次浏览      27
 2018-3-16 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚxybaby£¬·Ö²¼Ê½ÊÂÎñÊÇÖ¸ÊÂÎñµÄ²ÎÓëÕß¡¢Ö§³ÖÊÂÎñµÄ·þÎñÆ÷¡¢×ÊÔ´·þÎñÆ÷ÒÔ¼°ÊÂÎñ¹ÜÀíÆ÷·Ö±ðλÓÚ²»Í¬µÄ·Ö²¼Ê½ÏµÍ³µÄ²»Í¬½ÚµãÖ®ÉÏ¡£ ¡£

ÕýÎÄ

˼¿¼Õâ¸öÎÊÌâµÄ³õÖÔ£¬ÊÇÓÐÒ»´Î¸øÅóÓÑתÕË£¬½á¹ûÎÒµÄÇ®±»¿ÛÁË£¬ÅóÓÑûÊÕµ½Ç®¡£¶øÎÒ֮ǰһֱÈÏÎªÒøÐÐתÕËÒ»¶¨ÊÇÓÉÊÂÎñ±£Ö¤Ç¿Ò»ÖÂÐԵģ¬ÓÚÊÇѧϰ¡¢×ܽáÁËһϷֲ¼Ê½ÊÂÎñµÄ¸÷ÖÖÀíÂÛ¡¢·½·¨¡£

ÊÂÎñÊÇÒ»¸ö·Ç³£¹ãÒåµÄ´Ê»ã£¬¸÷Ðи÷Òµ½â¶Á¶¼²»Ò»Ñù¡£¶ÔÓÚ³ÌÐòÔ±£¬ÊÂÎñµÈ¼ÛÓÚTransaction£¬ÊÇÖ¸Ò»×éÁ¬ÐøµÄ²Ù×÷£¬ÕâЩ²Ù×÷×éºÏ³ÉÒ»¸öÂß¼­µÄ¡¢ÍêÕûµÄ²Ù×÷¡£¼´Õâ×é²Ù×÷Ö´ÐÐǰºó£¬ÏµÍ³ÐèÒª´¦ÓÚÒ»¸ö¿ÉÔ¤ÖªµÄ¡¢Ò»ÖµÄ״̬¡£Òò´Ë£¬ÕâÒ»×é²Ù×÷Ҫô¶¼³É¹¦Ö´ÐУ¬ÒªÃ´¶¼²»ÄÜÖ´ÐУ»Èç¹û²¿·Ö³É¹¦£¬²¿·Öʧ°Ü£¬³É¹¦µÄ²¿·ÖÐèÒª»Ø¹ö£¨rollback£©¡£

æ¢ÃÃÆª£º ÔÙÂÛ·Ö²¼Ê½ÊÂÎñ£º´ÓÀíÂÛµ½Êµ¼ù

¹ØÏµÐÍÊý¾Ý¿âÊÂÎñ

´ó¶àÊýÈË¿ÉÄܺÍÎÒÒ»Ñù£¬µÚÒ»´ÎÌý˵ÊÂÎñÊÇÔÚѧϰ¹ØÏµÐÍÊý¾Ý¿â£¨mysql¡¢sql server¡¢Oracle£©µÄʱºò£¬ÔÚ¹ØÏµÐÍÊý¾Ý¿âÖУ¬Èç¹ûÒ»×é²Ù×÷Âú×ãACIDÌØÐÔ£¬ÄÇô³ÆÖ®ÎªÒ»¸öÊÂÎñ¡£¹ØÓÚ¹ØÏµÐÍÊý¾Ý¿âµÄACID ÌØÐÔ£¬²»¹ÜÊǽ̲ϹÊÇÍøÂçÉ϶¼ÓдóÁ¿µÄ×ÊÁÏ£¬ÕâÀïÖ»¼òµ¥½éÉÜ¡£

A£¨Atomic£©£ºÔ­×ÓÐÔ£¬¹¹³ÉÊÂÎñµÄËùÓвÙ×÷£¬ÒªÃ´¶¼Ö´ÐÐÍê³É£¬ÒªÃ´È«²¿²»Ö´ÐУ¬²»¿ÉÄܳöÏÖ²¿·Ö³É¹¦²¿·Öʧ°ÜµÄÇé¿ö

C£¨Consistency£©£ºÒ»ÖÂÐÔ£¬ÔÚÊÂÎñÖ´ÐÐǰºó£¬Êý¾Ý¿âµÄÒ»ÖÂÐÔÔ¼ÊøÃ»Óб»ÆÆ»µ¡£ÕâÀïµÄÒ»ÖÂÐÔº¬ÒåºóÃæ»áÏêϸ½âÊÍ

I£¨Isolation£©£º¸ôÀëÐÔ£¬Êý¾Ý¿âÖеÄÊÂÎñÒ»°ã¶¼ÊDz¢·¢µÄ£¬¸ôÀëÐÔÊÇÖ¸²¢·¢µÄÁ½¸öÊÂÎñµÄÖ´Ðл¥²»¸ÉÈÅ£¬Ò»¸öÊÂÎñ²»ÄÜ¿´µ½ÆäËûÊÂÎñÔËÐйý³ÌµÄÖмä״̬

D£¨Durability£©£º³Ö¾ÃÐÔ£¬ÊÂÎñÍê³ÉÖ®ºó£¬¸ÃÊÂÎñ¶ÔÊý¾ÝµÄ¸ü¸Ä»á±»³Ö¾Ã»¯µ½Êý¾Ý¿â£¬ÇÒ²»»á±»»Ø¹ö¡£

ÎÒÃǾÙÒ»¸ö¼òµ¥µÄתÕ˵ÄÀý×Ó£¬Óû§A¸øÍæ¼ÒBת100¿éÇ®£¬ÄÇÃ´Éæ¼°µ½Á½¸ö²Ù×÷£ºÍæ¼ÒAµÄÕË»§¿Û100Ôª£¬Íæ¼ÒBµÄÕË»§¼Ó100Ôª¡£¼´

UserA.account -= 100
UserB.account += 100

Ô­×ÓÐԺܺÃÀí½â£¬ÕâÁ½¸ö²Ù×÷Ҫô¶¼³É¹¦£¬ÒªÃ´¶¼²»Ö´ÐУ¨¸ü׼ȷµÄÊÇ´ÓЧ¹ûÉÏÀ´¿´µÈ¼ÛÓÚ¶¼Ã»ÓÐÖ´ÐУ©¡£²»¿ÉÄܳöÏÖÓû§AµÄÇ®¼õÉÙÁ˶øÓû§BµÄǮûÔö¼ÓµÄÇé¿ö£¬Óû§ÊDz»ÔÊÐíµÄ£»¸ü²»¿ÉÄܳöÏÖÓû§BµÄÇ®Ôö¼Ó ¶ø Óû§AµÄǮûÓмõÉÙµÄÇé¿ö£¬ÒøÐÐÊǾø¶Ô²»¸ÉµÄ¡£

Ò»ÖÂÐÔ˵һÆðÀ´´ó¼Ò¶¼¶®£¬µ«ÊÇÉÆðÀ´Ò²ÊÇËÆ¶®·Ç¶®¡£ACIDÖеÄÒ»ÖÂÐÔ£¬ÍøÂçÉϵĽéÉܶ¼ºÜÄ£ºý£¬¶¼ÊÇ˵Ҫ´¦ÓÚÒ»ÖµÄ״̬£¬ÄÇʲôÊÇÒ»ÖµÄ×´Ì¬ÄØ£¬±ÈÈçתÕ˲Ù×÷ÖУ¬A¿ÛÇ®£¬B¼ÓÇ®£¬ABµÄÇ®µÄ×ÛºÏÊÇÒ»¶¨µÄ£¬Õâ¸öÊÇ·ñÊôÓÚACIDÖеÄConsistencyÄØ£¿ÎÒ¾õµÃ²»Êǵģ¬ Wiki Transaction_processing ºÍ Wiki£º ACID ·Ö±ðÊÇÕâôÃèÊöµÄ

Consistency: A transaction is a correct transformation of the state. The actions taken as a group do not violate any of the integrity constraints associated with the state.

The consistency property ensures that any transaction will bring the database from one valid state to another. Any data written to the database must be valid according to all defined rules, including constraints, cascades, triggers, and any combination thereof. This does not guarantee correctness of the transaction in all ways the application programmer might have wanted (that is the responsibility of application-level code), but merely that any programming errors cannot result in the violation of any defined rules.

ÉÏÃæºÚÉ«¼Ó´ÖµÄ²¿·ÖÖ¸³ö£¬ACIDÖеÄÒ»ÖÂÐÔÊÇÖ¸ÍêÕûÐÔÔ¼Êø²»±»ÆÆ»µ£¬ÍêÕûÐÔ°üº¬ÊµÌåÍêÕûÐÔ£¨Ö÷ÊôÐÔ²»Îª¿Õ£©¡¢²ÎÕÕÍêÕûÐÔ£¨Íâ¼ü±ØÐë´æÔÚÔ­±íÖУ©¡¢Óû§×Ô¶¨ÒåµÄÍêÕûÐÔ¡£Óû§×Ô¶¨ÒåµÄÍêÕûÐÔ±ÈÈçÁÐÖµ·Ç¿Õ£¨not null£©¡¢ÁÐֵΨһ£¨unique£©¡¢ÁÐÖµÊÇ·ñÂú×ãÒ»¸öbool±í´ïʽ£¨checkÓï¾ä£¬ÈçÐÔ±ðÖ»ÄÜÓÐÁ½¸öÖµ¡¢ËêÊýÊÇÒ»¶¨·¶Î§ÄÚµÄÕûÊýµÈ£©£¬ÀýÈçage smallint CHECK (age >=0 AND age <= 120).Êý¾Ý¿â±£Ö¤ageµÄÖµÔÚ[0, 120]µÄ·¶Î§£¬Èç¹û²»ÔÚÕâ¸ö·¶ÎÄ£¬ÄÇô¸üвÙ×÷ʧ°Ü£¬ÊÂÎñÒ²»áʧ°Ü¡£ÁíÍ⣬ÏòmysqlÖеÄcascade£¬ÒÔ¼°´¥·¢Æ÷£¨trigger£©¶¼ÊôÓÚÓû§×Ô¶¨ÒåµÄÍêÕûÐÔÔ¼Êø¡£ÔÚMongoDB3.2ÖÐ document validation¾ÍÊÇÓû§×Ô¶¨ÒåµÄÍêÕûÐÔÔ¼Êø£¬ÔÚ²åÈë»òÕ߸üÐÂdocuemntµÄʱºò¼ì²é£¬²»¹ýÓû§¿ÉÒÔ×ÔÐÐÉ趨validationAction£¬È·¶¨µ±Êý¾Ý²»·ûºÏÔ¼ÊøÊ±µÄ±íÏÖ£¬Ä¬ÈÏΪerror£¬¼´¾Ü¾øÊý¾Ýд²Ù×÷¡£

Òò´Ë£¬Óû§A£¬BÔÚÕâ´ÎÊÂÎñ²Ù×÷ǰºó£¬ÕË»§µÄ×ܺÍÒ»¶¨£¬ÊÇÓ¦ÓòãÃæµÄÒ»ÖÂÐÔ£¬¶ø²»ÊÇÊý¾Ý¿â±£Ö¤µÄÒ»ÖÂÐÔ£¬Ó¦ÓòãÃæµÄÒ»ÖÂÐÔÊÂʵÉÏÊÇÓÉÔ­×ÓÐÔÀ´±£Ö¤µÄ¡£

¸ôÀëÐÔ˵ÆðÀ´¼òµ¥£¬µ«ÊÂʵÉϱ³ºóµÄÊÂÇéºÜ¸´ÔÓ£¬Êý¾Ý¿âµÄ¸ôÀëÐÔÒÀÀµÓÚ¼ÓËø»òÕß¶à°æ±¾¿ØÖÆ¡£¼òµ¥À´Ëµ£¬Èç¹ûUserA.account³õʼֵΪ500£¬Ö´ÐÐÍêµÚÒ»ÌõÖ¸Á¼´¼õÈ¥100£©£¬µ«ÊÂÎñ»¹Ã»ÓÐÌá½»£¬ÆäËûµÄÊÂÎñÊDz»ÄܶÁµ½Õâ¸öÖмä½á¹û£¨UserA.accountµÄֵΪ400£©µÄ¡£Õâ¾ÍÊDZÜÃâÁËÔà¶Á£¨Drity Read£©£¬¶ÔÓ¦µÄ¸ôÀë¼¶±ð¾ÍÊÇREAD_COMMITTED¡£ÔÚSQL±ê×¼ÖУ¬¶¨ÒåÁËËĸö¸ôÀë¼¶±ð£º

READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE

À´½â¾öÊÂÎñ²¢·¢ÖдøÀ´µÄһϼ¸¸öÎÊÌâÔà¶Á£¨Dirty Read)¡¢²»¿ÉÖØ¸´¶Á£¨Non-repeatable Read£©¡¢»Ã¶Á£¨Phantom Read£©

²»Í¬µÄÊý¾Ý¿â»òÕß˵´æ´¢ÒýÇæÄ¬ÈÏÖ§³Ö²»Í¬µÄ¸ôÀë¼¶±ð£¬±ÈÈçInnoDB´æ´¢ÒýÇæÄ¬ÈÏÖ§³ÖREPEATABLE_READ£¬¶øMongodbÖ»Ö§³ÖREAD_UNCOMMITTED

³Ö¾ÃÐÔÐèÒª¿¼Âǵ½Ò»¸öÊÂÎñÔÚÖ´Ðйý³ÌÖеĸ÷ÖÖÇé¿öµÄÒì³£¡£Ò»¸öÊÂÎñµÄÁ÷³ÌÊÇÕâÑùµÄ£º

¿ªÆôÒ»¸öÊÂÎñ

Ö´ÐÐÒ»×é²Ù×÷

Èç¹û¶¼Ö´Ðгɹ¦£¬ÄÇôÌá½»²¢½áÊøÊÂÎñ

Èç¹ûÈκβÙ×÷ʧ°Ü£¬ÄÇô»Ø¹öÒѾ­Ö´ÐеIJÙ×÷£¬½áÊøÊÂÎñ

ÔÚÊÂÎñÖ´Ðйý³ÌÖУ¬Èç¹û³öÏÖ¹ÊÕÏ£¬±ÈÈç¶Ïµç¡¢å´»ú£¬Õâ¸öʱºò¾ÍÒªÀûÓÃÈÕÖ¾£¨redo log»òÕßundo log£© ¼ÓÉÏ checkpointÀ´±£Ö¤ÊÂÎñµÄÍêÕû½áÊø¡£

·Ö²¼Ê½ÊÂÎñ

µ±Êý¾ÝµÄ¹æÄ£Ô½À´Ô½´ó£¬³¬³öÁ˵¥¸ö¹ØÏµÐÍÊý¾Ý¿âµÄ´¦ÀíÄÜÁ¦£¬Õâ¸öʱºò¾Í³öÏÖÁ˹ØÏµÐÍÊý¾ÝµÄ´¹Ö±·Ö±í»òÕßˮƽ·Ö±í£¬Ò²³öÏÖÁËÌìȻ֧³ÖˮƽÀ©Õ¹£¨sharding£©µÄNoSql¡£ÁíÍ⣬´óÐÍÍøÕ¾µÄ·þÎñ»¯£¨SOA£©ÒÔ¼°ÕâÁ½Äê·Ç³£»ðµÄ΢·þÎñ£¬ÍùÍù½«·þÎñ½øÐвð·Ö£¬µ¥¶À²¿Êð£¬×ÔȻҲʹÓöÀÁ¢µÄÊý¾Ý¿â£¬ÉõÖÁÊÇÒì¹¹µÄÊý¾Ý¿â¡£Õâ¸öʱºò£¬¹ØÏµÐÍÊý¾Ý¿â±£Ö¤ÊÂÎñµÄÊֶΣ¬±ÈÈç¼ÓËø¡¢ÈÕÖ¾¾ÍÐв»Í¨ÁË¡£µ±È»£¬±¾ÎÄÌÖÂ۵IJ»½ö½öÊÇÊý¾Ý¿â£¬Ò²°üº¬·Ö²¼Ê½´æ´¢¡¢ÏûÏ¢¶ÓÁУ¬ÒÔ¼°ÈκÎÒª±£Ö¤Ô­×ÓÐÔ¡¢³Ö¾ÃÐÔµÄÂß¼­¡£

·Ö²¼Ê½ÊÂÎñµÄ×î´óÌôÕ½ÔÚÓÚCAP£¬ÔÚ¡¶CAPÀíÂÛÓëMongoDBÒ»ÖÂÐÔ¡¢¿ÉÓÃÐÔµÄһЩ˼¿¼¡·Ò»ÎÄÖÐÓÐÏêϸ½éÉÜ¡£¼ò¶øÑÔÖ®£¬ÓÉÓÚÍøÂç·Ö¸î£¨P£º Network Partition£©µÄ´æÔÚ£¬Óû§²»µÃ²»ÔÚÒ»ÖÂÐÔ£¨C Consistency£©Óë¿ÉÓÃÐÔ£¨A£º Avaliable£©Ö®Ç°×öȨºâ¡£Èç¹ûÒª±£Ö¤Ç¿Ò»ÖÂÐÔ£¨Ö÷ÒªÊÇÓ¦ÓòãÃæµÄǿһÖÂÐÔ£©£¬ÄÇôÔÚÍøÂç·Ö¸îµÄʱºò£¬ÏµÍ³¾Í²»¿ÉÓã»Èç¹ûÒª±£Ö¤¸ß¿ÉÓÃÐÔ£¬ÄÇô¾ÍÖ»ÄÜÌṩÈõÒ»ÖÂÐÔ£¬±£Ö¤×îÖÕÒ»Ö¡£ÏÂÃæÌáµ½µÄ¸÷ÖÖʵÏÖ·Ö²¼Ê½ÊÂÎñµÄ·½·¨¡¢Ð­Òé¶¼ÐèÒªÔÚÒ»ÖÂÐÔÓë¿ÉÓÃÐÔÖ®¼äȨºâ¡£

2PC

Ìáµ½·Ö²¼Ê½ÊÂÎñ£¬Ê×ÏÈÏëµ½µÄ¿Ï¶¨ÊÇÁ½½×¶ÎÌá½»£¨2pc£¬two-phase commit protocol£©£¬2pcÊǷdz£¾­µäµÄǿһÖÂÐÔ¡¢ÖÐÐÄ»¯µÄÔ­×ÓÌύЭÒé¡£ÖÐÐÄ»¯ÊÇָЭÒéÖÐÓÐÁ½Àà½Úµã£ºÒ»¸öÖÐÐÄ»¯Ð­µ÷Õ߽ڵ㣨coordinator£©ºÍN¸ö²ÎÓëÕ߽ڵ㣨participant¡¢cohort£©¡£

¹ËÃû˼Ò壬Á½½×¶ÎÌύЭÒéµÄÿһ´ÎÊÂÎñÌá½»·ÖΪÁ½¸ö½×¶Î£º

ÔÚµÚÒ»½×¶Î£¬Ð­µ÷ÕßѯÎÊËùÓеIJÎÓëÕßÊÇ·ñ¿ÉÒÔÌá½»ÊÂÎñ£¨Çë²ÎÓëÕßͶƱ£©£¬ËùÓвÎÓëÕßÏòЭµ÷ÕßͶƱ¡£

ÔÚµÚ¶þ½×¶Î£¬Ð­µ÷Õ߸ù¾ÝËùÓвÎÓëÕßµÄͶƱ½á¹û×ö³öÊÇ·ñÊÂÎñ¿ÉÒÔÈ«¾ÖÌá½»µÄ¾ö¶¨£¬²¢Í¨ÖªËùÓеIJÎÓëÕßÖ´Ðиþö¶¨¡£ÔÚÒ»¸öÁ½½×¶ÎÌá½»Á÷³ÌÖУ¬²ÎÓëÕß²»Äܸıä×Ô¼ºµÄͶƱ½á¹û¡£Á½½×¶ÎÌύЭÒéµÄ¿ÉÒÔÈ«¾ÖÌá½»µÄǰÌáÊÇËùÓеIJÎÓëÕß¶¼Í¬ÒâÌá½»ÊÂÎñ£¬Ö»ÒªÓÐÒ»¸ö²ÎÓëÕßͶƱѡÔñ·ÅÆú(abort)ÊÂÎñ£¬ÔòÊÂÎñ±ØÐë±»·ÅÆú¡£

wikiÉϸø³öÁ˼òÒªÁ÷³Ì£º

×¢Ò⣬ÉÏͼÖÐ×îÏÂÃæÒ»ÐÐÒ²±íÃ÷£¬Á½½×¶ÎÌύЭÒéÒ²ÒÀÀµÓëÈÕÖ¾£¬Ö»Òª´æ´¢½éÖʲ»³öÎÊÌ⣬Á½½×¶ÎЭÒé¾ÍÄÜ×îÖÕ´ïµ½Ò»ÖµÄ״̬£¨³É¹¦»òÕ߻عö£©

¶øÏÂͼ£¨À´×Ôslideshare£©ÏêϸÃèÊöÁËÕû¸öÁ÷³Ì£º

ÔÚÁõ½ÜµÄ¡¶·Ö²¼Ê½Ô­Àí½éÉÜÖС·£¬Óзdz£ÏêϸµÄÁ÷³Ì½éÉÜ£¬¿ÉÒÔÅäºÏÉÏͼһÆð¿´£¬ÁíÍ⻹½éÉÜÁËÔÚ¸÷ÖÖÒì³£Çé¿öÏ£¨±ÈÈçCoordinator¡¢Participantå´»ú£¬ÍøÂç·Ö¸îµ¼Öµij¬Ê±£©Á½½×¶ÎЭÒéµÄ¹¤×÷Çé¿ö¡¢¹¤×÷ЧÂÊ¡£ÁíÍ⣬ÔÚÕâÆªÎÄÕÂÖÐÒ²ÓбȽÏÇåÎúµÄÁ÷³Ì½éÉÜ¡£ÔÚÕâÀïÖ»ÌÖÂÛ2PCµÄÓÅȱµã£º

Óŵ㣺ǿһÖÂÐÔ£¬Ö»Òª½Úµã»òÕßÍøÂç×îÖÕ»Ö¸´Õý³££¬Ð­Òé¾ÍÄܱ£Ö¤Ë³Àû½áÊø£»²¿·Ö¹ØÏµÐÍÊý¾Ý¿â£¨Oracle£©¡¢¿ò¼ÜÖ±½ÓÖ§³Ö

ȱµã£ºÁ½½×¶ÎÌύЭÒéµÄÈÝ´íÄÜÁ¦½Ï²î£¬±ÈÈçÔÚ½Úµãå´»ú»òÕß³¬Ê±µÄÇé¿öÏ£¬ÎÞ·¨È·¶¨Á÷³ÌµÄ״̬£¬Ö»Äܲ»¶ÏÖØÊÔ£»Á½½×¶ÎÌύЭÒéµÄÐÔÄܽϲ ÏûÏ¢½»»¥¶à£¬ÇÒÊÜ×îÂý½ÚµãÓ°Ïì

ÕâÆªÎÄÕÂÃèÊöÁËΪʲôÁ½½×¶ÎÌύЭÒéÔÚ·Ö²¼Ê½ÏµÍ³Öв»ÊÊÓãº

ϵͳ¡°Ë®Æ½¡±ÉìËõµÄËÀµÐ¡£»ùÓÚÁ½½×¶ÎÌá½»µÄ·Ö²¼Ê½ÊÂÎñÔÚÌá½»ÊÂÎñʱÐèÒªÔÚ¶à¸ö½ÚµãÖ®¼ä½øÐÐЭµ÷,×î´óÏ޶ȵØÍƺóÁËÌá½»ÊÂÎñµÄʱ¼äµã£¬¿Í¹ÛÉÏÑÓ³¤ÁËÊÂÎñµÄÖ´ÐÐʱ¼ä£¬Õâ»áµ¼ÖÂÊÂÎñÔÚ·ÃÎʹ²Ïí×ÊԴʱ·¢Éú³åÍ»ºÍËÀËøµÄ¸ÅÂÊÔö¸ß£¬Ëæ×ÅÊý¾Ý¿â½ÚµãµÄÔö¶à£¬ÕâÖÖÇ÷ÊÆ»áÔ½À´Ô½ÑÏÖØ£¬´Ó¶ø³ÉΪϵͳÔÚÊý¾Ý¿â²ãÃæÉÏˮƽÉìËõµÄ"¼ÏËø"£¬ ÕâÊǺܶàShardingϵͳ²»²ÉÓ÷ֲ¼Ê½ÊÂÎñµÄÖ÷ÒªÔ­Òò¡£

ËùÑÔÉõÊÇ£¡

3PC

Èý½×¶ÎÌύЭÒ飨3pc Three-phase_commit_protocol£©Ö÷ÒªÊÇΪÁ˽â¾öÁ½½×¶ÎÌύЭÒéµÄ×èÈûÎÊÌ⣬´ÓÔ­À´µÄÁ½¸ö½×¶ÎÀ©Õ¹ÎªÈý¸ö½×¶Î£¬²¢ÇÒÔö¼ÓÁ˳¬Ê±»úÖÆ¡£

3PCÖ»Êǽâ¾öÁËÔÚÒì³£Çé¿öÏÂ2PCµÄ×èÈûÎÊÌ⣬µ«µ¼ÖÂÒ»´ÎÌá½»Òª´«µÝ6ÌõÏûÏ¢£¬ÑÓʱºÜ´ó¡£¾ßÌåÁ÷³ÌÃèÊö¿É²Î¼û¡¶¹ØÓÚ·Ö²¼Ê½ÊÂÎñ¡¢Á½½×¶ÎÌύЭÒé¡¢Èý½×ÌύЭÒé¡·Ò»ÎÄ¡£

TCC

TCCÊÇTry¡¢Commit¡¢CancelµÄËõд£¬ÔÚ¹úÄÚÓÉÓÚÖ§¸¶±¦µÄ²¼µÀ¶ø¹ãΪÈËÖª£¬TCCÔÚ±£Ö¤Ç¿Ò»ÖÂÐÔµÄͬʱ£¬×î´óÏÞ¶ÈÌá¸ßϵͳµÄ¿ÉÉìËõÐÔÓë¿ÉÓÃÐÔ¡£

ÎÒÃǼÙÉèÒ»¸öÍêÕûµÄÒµÎñ°üº¬Ò»×é×ÓÒµÎñ£¬Try²Ù×÷Íê³ÉËùÓеÄ×ÓÒµÎñ¼ì²é£¬Ô¤Áô±ØÒªµÄÒµÎñ×ÊÔ´£¬ÊµÏÖÓëÆäËûÊÂÎñµÄ¸ôÀ룻ConfirmʹÓÃTry½×¶ÎÔ¤ÁôµÄÒµÎñ×ÊÔ´ÕæÕýÖ´ÐÐÒµÎñ£¬¶øÇÒConfirm²Ù×÷Âú×ãÃݵÈÐÔ£¬ÒÔ±éÖ§³ÖÖØÊÔ£»Cancel²Ù×÷ÊÍ·ÅTry½×¶ÎÔ¤ÁôµÄÒµÎñ×ÊÔ´£¬Í¬ÑùÒ²Âú×ãÃݵÈÐÔ¡£¡°Ò»´ÎÍêÕûµÄ½»Ò×ÓÉһϵÁÐ΢½»Ò×µÄTry ²Ù×÷×é³É£¬Èç¹ûËùÓеÄTry ²Ù×÷¶¼³É¹¦£¬×îÖÕÓÉ΢½»Ò׿ò¼ÜÀ´Í³Ò»Confirm£¬·ñÔòͳһCancel£¬´Ó¶øÊµÏÖÁËÀàËÆ¾­µäÁ½½×¶ÎÌύЭÒ飨2PC£©µÄǿһÖÂÐÔ¡£¡±

Óë2PCЭÒé±È½Ï £¬TCCÓµÓÐÒÔÏÂÌØµã£º

λÓÚÒµÎñ·þÎñ²ã¶ø·Ç×ÊÔ´²ã £¬ÓÉÒµÎñ²ã±£Ö¤Ô­×ÓÐÔ

ûÓе¥¶ÀµÄ×¼±¸(Prepare)½×¶Î£¬½µµÍÁËÌύЭÒéµÄ³É±¾

Try²Ù×÷ ¼æ±¸×ÊÔ´²Ù×÷Óë×¼±¸ÄÜÁ¦

Try²Ù×÷¿ÉÒÔÁé»îÑ¡ÔñÒµÎñ×ÊÔ´µÄËø¶¨Á£¶È£¬¶ø²»ÊÇËø×¡Õû¸ö×ÊÔ´£¬Ìá¸ßÁ˲¢·¢¶È

µ±È»£¬TCCÐèÒª½Ï¸ßµÄ¿ª·¢³É±¾£¬Ã¿¸ö×ÓÒµÎñ¶¼ÐèÒªÓÐÏìÓ¦µÄcomfirm¡¢Cancel²Ù×÷£¬¼´ÊµÏÖÏàÓ¦µÄ²¹³¥Âß¼­¡£

»ùÓÚÏûÏ¢µÄ·Ö²¼Ê½ÊÂÎñ

ÕâÀàÊÂÎñ»úÖÆ½«·Ö²¼Ê½ÊÂÎñ·Ö³É¶à¸ö±¾µØÊÂÎñ£¬ÕâÀï³ÆÖ®ÎªÖ÷ÊÂÎñÓë´ÓÊÂÎñ¡£Ê×ÏÈÖ÷ÊÂÎñ±¾µØÏÈÐÐÌá½»£¬È»ºóͨ¹ýÏûϢ֪ͨ´ÓÊÂÎñ£¬´ÓÊÂÎñ´ÓÏûÏ¢ÖлñÈ¡ÐÅÏ¢½øÐб¾µØÌá½»¡£¿ÉÒÔ¿´³öÕâÊÇÒ»ÖÖÒì²½ÊÂÎñ»úÖÆ¡¢Ö»Äܱ£Ö¤×îÖÕÒ»ÖÂÐÔ£»µ«¿ÉÓÃÐԷdz£¸ß£¬²»»áÒòΪ¹ÊÕ϶ø·¢Éú×èÈû¡£ÁíÍ⣬Ö÷ÊÂÎñÒѾ­ÏÈÐÐÌá½»£¬Èç¹ûÒòΪ´ÓÊÂÎñÎÞ·¨Ìá½»£¬Òª»Ø¹öÖ÷ÊÂÎñ»¹ÊDZȽÏÂé·³£¬ËùÒÔÕâÖÖģʽֻÊÊÓÃÓÚÀíÂÛÉÏ´ó¸ÅÂʵȳɹ¦µÄÒµÎñÇé¿ö£¬¼´´ÓÊÂÎñµÄÌύʧ°Ü¿ÉÄÜÊÇÓÉÓÚ¹ÊÕÏ£¬¶ø²»´ó¿ÉÄÜÊÇÂß¼­´íÎó¡£

»ùÓÚÒì²½ÏûÏ¢µÄÊÂÎñ»úÖÆÖ÷ÒªÓÐÁ½ÖÖ·½Ê½£º±¾µØÏûÏ¢±íÓëÊÂÎñÏûÏ¢¡£¶þÕßµÄÇø±ðÔÚÓÚ£ºÔõô±£Ö¤Ö÷ÊÂÎñµÄÌá½»ÓëÏûÏ¢·¢ËÍÕâÁ½¸ö²Ù×÷µÄÔ­×ÓÐÔ¡£

Èç¹ûÓÃÒì²½ÏûϢʵÏÖתÕ˵ÄÀý×Ó£¬ÄÇô²Ù×÷·ÖΪËIJ¿£ºÓû§A¿ÛÇ®£¬·¢ÏûÏ¢£¬Óû§BÊÕÏûÏ¢£¬Óû§B¿ÛÇ®¡£Ç°Á½²½±ØÐë±£Ö¤Ô­×ÓÐÔ£¬Èç¹ûA¿ÛÇ®³É¹¦µ«ÊÇûÓз¢³öÏûÏ¢£¬ÄÇôÓû§AËðʧÁË£»Èç¹û·¢ÏûÏ¢³É¹¦£¬µ«ÊÇûÓпÛÇ®£¬ÄÇôÓû§B¾Í¶àµÃÁËÒ»±ÊÇ®£¬ÒøÐп϶¨²»¸É¡£

±¾µØÏûÏ¢±í

»ùÓÚ±¾µØÏûÏ¢±íµÄ·½°¸ÊÇÖ¸½«ÏûϢдÈë±¾µØÊý¾Ý¿â£¬Í¨¹ý±¾µØÊÂÎñ±£Ö¤Ö÷ÊÂÎñÓëÏûϢдÈëµÄÔ­×ÓÐÔ¡£ÀýÈçÒøÐÐתÕ˵ÄÀý×Ó£¬Î±ÂëÈçÏ£º

egin transaction:
update User set account = account - 100 where userId = 'A'
insert into message(userId, amount, status) values('A', 100, 1)
commit transaction

È»ºóͨ¹ýpull»òÕßpushģʽ£¬´ÓÒµÎñ»ñÈ¡ÏûÏ¢²¢Ö´ÐС£Èç¹ûÊÇpushģʽ£¬ÄÇôһ°ãʹÓþßÓг־û¯¹¦ÄܵÄÏûÏ¢¶ÓÁУ¬´ÓÊÂÎñÎñ¶©ÔÄÏûÏ¢¡£Èç¹ûÊÇpullģʽ£¬ÄÇô´ÓÊÂÎñ¶¨Ê±È¥À­È¡ÏûÏ¢£¬È»ºóÖ´ÐС£

mongodbµÄдÈë¾ÍºÜÏñ±¾µØÏûÏ¢±í£¬ÔÚWriteConcernΪw:1µÄÇé¿öÏ£¬¸üвÙ×÷ֻҪдµ½oplogÒÔ¼°primary¾Í¿ÉÒÔÏò¿Í»§¶Ë·µ»Ø¡£secondaryÒì²½À­È¡oplog²¢±¾µØ¼Ç¼ִÐС£

ÊÂÎñÏûÏ¢£º

ÊÂÎñÏûÏ¢ÒÀÀµÓÚÖ§³Ö¡°ÊÂÎñÏûÏ¢¡±µÄÏûÏ¢¶ÓÁУ¬Æä»ù±¾Ë¼ÏëÊÇ ÀûÓÃÏûÏ¢Öмä¼äʵʩÁ½½×¶ÎÌá½»£¬½«±¾µØÊÂÎñºÍ·¢ÏûÏ¢·ÅÔÚÁËÒ»¸ö·Ö²¼Ê½ÊÂÎñÀ±£Ö¤ÒªÃ´±¾µØ²Ù×÷³É¹¦³É¹¦²¢ÇÒ¶ÔÍâ·¢ÏûÏ¢³É¹¦£¬ÒªÃ´Á½Õß¶¼Ê§°Ü¡£Á÷³ÌÈçÏ£º

ÊÂÎñÏòÏûÏ¢¶ÓÁз¢ËÍÔ¤±¸ÏûÏ¢

Ö÷ÊÂÎñÊÕµ½ACKÖ®ºó±¾µØÖ´ÐÐÖ÷ÊÂÎñ

¾ÝÖ´ÐеĽá¹û£¨³É¹¦»òʧ°Ü£©ÏòÏûÏ¢¶ÓÁз¢ËÍÌá½»»òÕ߻عöÏûÏ¢

ÏêϸµÄÁ÷³ÌÈçÏÂͼ£¨Í¼Æ¬À´Ô´¼ûˮӡ£©Ëùʾ£º

²»ÄÑ¿´µ½£¬Ïà±È±¾µØÏûÏ¢±íµÄ·½Ê½£¬ÊÂÎñÏûÏ¢ÓÉÏûÏ¢Öмä¼þ±£Ö¤±¾µØÊÂÎñÓëÏûÏ¢µÄÔ­×ÓÐÔ£¬²»ÒÀÀµÓÚ±¾µØÊý¾Ý¿â´æ´¢ÏûÏ¢¡£µ«ÊµÏÖÁË¡°ÊÂÎñÏûÏ¢¡±µÄÏûÏ¢¶ÓÁбȽÏÉÙ£¬»¹²»¹»Í¨Óá£

²»¹ÜÊDZ¾µØÏûÏ¢±í»¹ÊÇÊÂÎñÏûÏ¢£¬¶¼ÐèÒª±£Ö¤´ÓÊÂÎñÖ´ÐÐÇÒ½ö½öÖ´ÐÐÒ»´Î£¬exact once¡£Èç¹ûʧ°Ü£¬ÐèÒªÖØÊÔ£¬µ«Ò²²»¿ÉÄÜÎÞÏ޴εÄÖØÊÔ£¬µ±´ÓÊÂÎñ×îÖÕʧ°ÜµÄÇé¿öÏ£¬ÐèҪ֪ͨÖ÷ÒµÎñ»Ø¹öÂ𣿵«ÊÇ´Ëʱ£¬Ö÷ÊÂÎñÒѾ­Ìá½»£¬Òò´ËÖ»ÄÜͨ¹ý²¹³¥£¬ÊµÏÖÂß¼­ÉϵĻعö£¬¶øµ±Ç°Ê±¼äµã¾àÖ÷ÊÂÎñµÄÌá½»ÒѾ­ÓÐÒ»¶¨Ê±¼ä£¬»Ø¹öÒ²¿ÉÄÜʧ°Ü¡£Òò´Ë£¬×îºÃÊDZ£Ö¤´ÓÊÂÎñÂß¼­Éϲ»»áʧ°Ü£¬Íòһʧ°Ü£¬¼Ç¼log²¢±¨¾¯£¬È˹¤½éÈë¡£

1PC

1PC£¨one phase commit£©Õâ¸ö¸ÅÄÎÒÊÇÔÚ¡¶Distributed systems for fun and profit¡·Ò»ÎÄÖп´µ½µÄ£¬Ó¦¸ÃÊǶԱê2PC£¬3PC¡£ÔÚwikiÖв¢Ã»ÓÐÕýʽµÄ´ÊÌõ£¬ÔÚgoogleÉϵÄÎÄÕÂÒ²²»ÊǺܶࡣÔÚÎÒµÄÀí½âÖУ¬1PCÊÊÓÃÓÚ·Ö²¼Ê½´æ´¢ÏµÍ³µÄ¸´ÖƼ¯£¬¼´¸´ÖƼ¯Öжà¸ö½ÚµãµÄÊý¾ÝÌá½»£¬¡£Ò»°ãÀ´Ëµ£¬ÕâЩ½Úµã´æ´¢Í¬ÑùµÄÊý¾Ý£¬Ö»Òªµ¥¸ö½ÚµãÄÜÌá½»£¬ÆäËû½ÚµãÀíÂÛÉÏÒ²Ó¦¸Ã¿ÉÒÔÌá½»¡£ÔÚ¡¶Distributed systems for fun and profit¡·ÖÐÊÇÕâôÃèÊöµÄ£º

Having a second phase in place before the commit is considered permanent is useful, because it allows the system to roll back an update when a node fails. In contrast, in primary/backup ("1PC"), there is no step for rolling back an operation that has failed on some nodes and succeeded on others, and hence the replicas could diverge.

¼´¶ÔÓÚ·Ö²¼Ê½´æ´¢ÖÐʹÓ÷dz£¹ã·ºµÄÖÐÐÄ»¯¸´ÖƼ¯Ð­ÒéPrimary Secondary£¬ÔÚ²¿·Ö½Úµãʧ°Ü¡¢²¿·Ö½Úµã³É¹¦µÄÇé¿öÏÂûÓлعö²Ù×÷£¬¿ÉÄܻᵼÖ²»Ò»Ö¡£²»¹ýÕâЩ·Ö²¼Ê½´æ´¢ÏµÍ³¶¼½ßÁ¦±£Ö¤£¬ÕâЩ²»Ò»ÖÂÊÇÔÝʱµÄ£¬»áͨ¹ýÖØÊÔµÈÊֶα£Ö¤×îÖÕµÄÒ»Ö¡£

1PCµÄÓŵãÊÇÐÔÄܷdz£ºÃ£¬¶øÇÒÖ»ÓÐÔÚ³öÏÖÎïÀí¹ÊÕϵÄʱºò²Å»á³öÏÖ²»Ò»Ö¡£

±ÈÈçÔÚMongoDBÖУ¬¸üвÙ×÷»áдÈëPrimary½ÚµãÒÔ¼°oplog collection£¬Secondary½Úµã´ÓPrimary½ÚµãµÄoplog collectionÀ­È¡²Ù×÷ÈÕÖ¾²¢Ö´ÐУ¬ÕâÊÇÒ»¸öÒì²½µÄ¹ý³Ì¡£¼°Ê±Secondary½ÚµãÒòΪ¹ÊÕÏÖ´ÐÐoplogʧ°Ü£¬Promary½ÚµãµÄÊý¾ÝÒ²²»»á»Ø¹ö¡£ÔÚ¡¶´ø×ÅÎÊÌâѧϰ·Ö²¼Ê½ÏµÍ³Ö®ÖÐÐÄ»¯¸´ÖƼ¯¡·ÖÐÒ²Ìáµ½¹ý£¬ÎªÁËÌá¸ßÊý¾Ý¿É¿¿ÐÔ£¨±ÜÃ⼫¶ËÇé¿öÏÂÊý¾Ý±»»Ø¹ö£©£¬É趨WriteConcernΪw:Majority£¬£¨shardÓÐÒ»¸öPrimary Ò»¸öSecondary Ò»¸öArbiter×é³É£©¡£Èç¹ûÕâ¸öʱºòÓÉÓÚÆäÖÐÒ»¸ösecondary¹Òµô£¬Ð´Èë²Ù×÷ÊDz»¿ÉÄܳɹ¦µÄ¡£Òò´Ë£¬ÔÚ³¬Ê±Ê±¼äµ½´ïÖ®ºó£¬»áÏò¿Í»§¶Ë·µ»Ø³ö´íÐÅÏ¢¡£µ«ÊÇÔÚÕâ¸öʱºòÊý¾ÝÊdz־û¯µ½ÁËprimary½Úµã£¬²»»á±»»Ø¹ö¡£Èç¹û´ËʱSecondaryÖØÆô£¬ÄÇôÊÇ»á´ÓPrimaryÀ­È¡ÈÕÖ¾²¢Ö´ÐС£ËùÒÔµ±¿Í»§¶Ë·µ»ØµÄ³ö´íÐÅÏ¢°üº¬ WriteResult.writeConcernError ʱ£¬Ó¦¸Ã½÷É÷´¦Àí

¶ÔÓÚ·Ö²¼Ê½ÎļþϵͳGFS¡¢haystack£¬Èç¹ûSecondary½Úµãʧ°Ü£¬Ò²»á²ÉÈ¡¼òµ¥´Ö±©µÄÖØÊÔ£¬²¢Í¨¹ýһЩ»úÖÆ£¨cheksum£¬offset£©À´±£Ö¤×îÖÕÄܶÁµ½ÕýÈ·µÄÊý¾Ý

˼¿¼Óë×ܽá

¸ü¶àµÄʱºò£¬·Ö²¼Ê½ÊÂÎñÖ»ÐèÒª±£Ö¤Ô­×ÓÐÔ£¬Õâ¸öÔ­×ÓÐÔÒ²±£Ö¤ÁËÓ¦ÓòãÃæÉϵÄÒ»ÖÂÐÔ£¬¶øÓɱ¾µØÊÂÎñÀ´±£Ö¤¸ôÀëÐÔ¡¢³Ö¾ÃÐÔ¡£

Ô­×ÓÐÔÕâ¸ö¶«Î÷£¬¼´Ê¹²»ÊÇ·Ö²¼Ê½£¬½ö½öÊǵ¥½ø³Ìµ¥Ïß³ÌÒ²ÊÇÐèÒª¿¼Âǵģ¬Õâ¾ÍÊÇC++ÖеÄRAII£¬pythonÖеÄwith statement£¬ÒÔ¼°¸÷ÖÖÓïÑÔµÄtry...finally...¡£µ±Éæ¼°µ½¿ç½ø³Ì¡¢Ò첽ͨÐŵÄʱºò£¬¾ÍºÜÄÑͨ¹ýÓïÑÔ²ãÃæµÄ»úÖÆ±£Ö¤Ô­×ÓÐÔÁË¡£

ÔÚ·Ö²¼Ê½ÁìÓò£¬ÓÉÓÚÍøÂç»òÕß»úÆ÷¹ÊÕÏ£¬¾­³£ÐèÒªÖØÊÔ£¬Òò´ËÃݵÈÐԷdz£ÖØÒª

ºÜ¶à³¡¾°£¬±ÈÈçµçÉÌ¡¢ÍøÂ繺Ʊ£¬Ê×ÏÈÒª±£Ö¤µÄÊǸ߿ÉÓ㬲»´ó¿ÉÄܲÉÓÃǿһÖÂÐÔ£¬Òò´ËÎÒÃÇÒ²»á¿´µ½¡®ÕýÔÚ´¦ÀíÖÐ...¡®ÕâÖÖÖмä״̬£¬ºǫ́ºÜ¿ÉÄÜÊÇÒì²½´¦ÀíµÄ£¬ÔÚ12306Âò¹ýƱµÄ»°¶¼ÖªµÀ£¬Ïµ¥³É¹¦µ½×îºóÊÇ·ñÄܳöƱÓɺܳ¤Ò»¶Îʱ¼ä¡£

ÔÚ±ÊÕßµÄÒµÎñÁìÓò£¬²¢Ã»ÓÐÉæ¼°µ½Ç¿Ò»ÖÂÐԵij¡¾°£¬Ö»Òª×îÖÕÒ»ÖÂÐÔ¾ÍÐÐÁË¡£ÉÏÃæµÄÌáµ½µÄ¸÷ÖÖ°ì·¨£¬²»¹ÜÊÇ2PC¡¢TCC¡¢±¾µØÏûÏ¢±í¡¢ÊÂÎñÏûÏ¢£¬¶¼ÐèÒªÒýÈë¶îÍâµÄ¿ò¼Ü»òÕß×é¼þ¡£ËùÒÔ¸ü¶àµÄʱºòÊDzÉȡҵÎñ²¹³¥µÄ·½Ê½£¬±ÈÈçÒ»¸öÉæ¼°Á½¸ö½ø³ÌµÄ²Ù×÷ÐèÒª±£Ö¤Ô­×ÓÐÔ£¬½ø³Ì¼äRPCͨÐÅ£¬ÄÇôһ°ãÊÇA½ø³ÌÏÈÖ´ÐУ¬È»ºóRPCµ÷ÓÃB½ø³Ì½Ó¿Ú£¬¸ù¾ÝB½ø³ÌµÄ·µ»Ø½á¹û£¬¾ø¶ÔÊÇ·ñ»Ø¹ö£¨²¹³¥£©£»µ«Èç¹ûÉæ¼°µ½Òì²½RPC¡¢»òÕß¶àÏ̡߳¢»òÕßÁ½¸öÒÔÉϽø³ÌµÄ´®ÁªÊ±£¬ÄÇô¾Í²»Ò»¶¨Äܲ¹³¥¡¢ÉõÖÁºÜÄѲ¹³¥ÁË£¬Õâ¸öʱºòÖ»¼Ç¼һ¸öerror log£¬È»ºó֪ͨÈ˹¤ÅŲ顣Òò´Ë£¬ÊÂÎñ²¹³¥Ö»ÊʺÏÒµÎñ±È½Ï¼òµ¥µÄ³£¼û£¬¶øÇÒºÜÄÑÐγÉͨÓõĿò¼Ü£¬»òÕß˵ʵÓÃÐÔ²»Ç¿¡£

֮ǰһֱÒÔΪÏñÒøÐÐתÕËÕâÖÖ³¡¾°£¬Ò»¶¨ÊÇǿһÖÂÐԵġ£ºóÀ´×Ô¼ºÓöµ½Õâôһ»ØÊ£¬ÎÒ¸øÅóÓÑתÕË£¬ÎÒÕâ±ßÏÔʾתÕ˳ɹ¦£¬µ«ÅóÓѲ¢Ã»ÓÐÊÕµ½Ç®¡£ÎÒÒÔΪÊÇÐèÒªÒ»¶¨Ê±¼ä£¬½á¹û24Сʱ֮ºó»¹Ã»ÓÐÊÕµ½¡£ÎÒ×Ô¼ºÖØÐ±ȶÔתÕ˵¥£¬²Å·¢ÏÖÊǰѶԷ½µÄ¿ª»§ÒøÐÐд´íÁË¡£Òò´Ë¿É¼û£¬×ªÕËÕâ¸ö²Ù×÷¿Ï¶¨²»ÊÇǿһÖÂÐÔ£¬¾ßÌåÔõô¸ãµÄÔÚÍøÉÏҲûÓв鵽¡£¸ü¿ÓµùµÄÊÇ£¬×ªÕËʧ°Ü£¬ÎÒµÄÇ®±»¿ÛÁË£¬ÅóÓÑҲûÓÐÊÕµ½Ç®£¬µ«ÊÇÎÒûÓÐÊÕµ½ÈκÎÏûÏ¢£¬Ò²Ã»ÓиøÎÒ°ÑÇ®ÍË»ØÀ´£¬ÔÚÎÒ´òµç»°µ½ÒøÐÐÈ¥×Éѯ֮ºó²ÅÍË»ØÀ´¡£Õâ¸öÌåÑéÕæµÄºÜ²î£¬µ«ÒøÐÐÊÇ´óÒ¯£¬Ã»°ì·¨£¡

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

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù