ãç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ãããç¨ããä¸å ·åæ¤åº
ããã¾ãã¾ãªä¸»ä½ï¼ã¹ã¬ãããããã»ã¹ãæ©å¨ãªã©ï¼ãåä½ãã並è¡ã·ã¹ãã ã§ã¯ãã»ã³ãµã¼å ¥åãªã©å¤çããã®ã¤ãã³ããã¡ãã»ã¼ã¸ã®éåä¿¡ããã®å¤±æãå²ãè¾¼ã¿ãæ éã«ããåèµ·åãªã©ãããããã®ç¶æ å¤åã®å¯è½æ§ãããã¾ããã¾ãããããã®ç¶æ å¤åãçºçããé åºãã¿ã¤ãã³ã°ãç¡æ°ã«ãããç¹å®ã®å ´åã®ã¿ã«ä¸å ·åãé¡å¨åãåé¡ãçºçãããã¨ãããã¾ããããã«ãå®è£ ããã·ã¹ãã ãå®è¡ãã¦ããOSã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ããããã¯ã¼ã¯ã®ç¶æ³ãªã©ã«ãããç¶æ å¤åã®é åºãã¿ã¤ãã³ã°ã¯ãã®é½åº¦å¤ãã£ã¦ãã¾ãã¾ãããã®ããããã¾ãã¾ãªå¯è½æ§ãæå³çã«å¶å¾¡ãã¦ãã¹ãããããä¸å ·åãåç¾ããããããã¨ãå°é£ã§ãã
ãããããèæ ®ããã¨ãå¿ è¦ãªã¢ããã¼ãã¯ã¾ããè¨è¨ã¢ãã«ä¸ã§ãã¾ãã¾ãªå¯è½æ§ããã£ããã¨ãã¹ããããã¨ã«ãªãã¾ãããã·ãã¥ã¬ã¼ã·ã§ã³ãããã¨ãã£ã¦ãããã§ããããã¨ã¯ãããç¶æ å¤åã®é åºãã¿ã¤ãã³ã°ãç¡æ°ã«ãããã¨ãåé¡ãªã®ã§ãããã¤ãã®ã±ã¼ã¹ã試ããã¨ãã¦ããä¸å®ã®ä¿¡é ¼æ§ãæ ä¿ã§ããã¨ã¯ããã¾ãããçµè«ã¨ãã¦ãæ³å®ããããã¹ã¦ã®å¯è½æ§ãç¶²ç¾ çã«èª¿ã¹ãå¿ è¦ããããã¨ããããã¾ãã
ãããã«å¯¾ãã¦ããç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ããã¨ããæè¡ãããã¾ããããè¨èªã§æ¬ä¼¼ã³ã¼ããæ¸ãã¨ããã¼ã«ããã®æ¬ä¼¼ã³ã¼ãã§è¡¨ç¾ããããã¹ã¦ã®å¯è½æ§ãç¶²ç¾ çã«ãã¹ãããã¨ãããã®ã§ãããã¡ãããå®éã«ãã¹ã¦ã®å¯è½æ§ã試ãããã§ã¯ãªãããã¾ãã¾ãªçè«ã»æè¡ãé§ä½¿ãã¦ãããã¨åçã®ãã¨ãå¹ççã«ãã£ã¦ããã¾ãã
ãäºä¾ãã¯ã©ã¦ãã·ã¹ãã ã§ã®ä¸å ·åçºè¦
ãAmazon Web Servicesï¼ä»¥ä¸ãAWSï¼ã®éçºã«ããã¦ã¯ããã®ãç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ããã使ã£ã¦ãã¾ããã¯ã©ã¦ãã§ã¯ã大éã®ãªã¯ã¨ã¹ãã»ãã¼ã¿ãé«éã«ãé«ãå¯ç¨æ§ããã£ã¦ä¿åãå¦çãããããããã¼ã¿ã®è¤è£½ãä½ããã¨ã«ãªãã¾ãããã®éããã¼ã¿ã®æ¸ãè¾¼ã¿ãè¤è£½éã®éåä¿¡ããã¼ãã®å¿çé ããã¯ã©ãã·ã¥ãªã©ããã¾ãã¾ãªç¶æ å¤åããã¾ãã¾ãªé åºã»ã¿ã¤ãã³ã°ã§çºçãã¦ã大ä¸å¤«ãï¼ä¾ãã°æ¸ãè¾¼ã¿ãã¼ã¿ãæ¶ããªããï¼ãåé¡ã«ãªãã¾ããããã§ãç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ããã使ã£ãããã§ããå®éã«ãæ¬ä¼¼ã³ã¼ãä¸ã§35ã¹ããããããªãè¤éãªããããç¾å®çãªä¸å ·åãæ¤åºããã¨å ±åããã¦ãã¾ãã
ãã¡ãªã¿ã«AWSã®å ´åã¯ããããã¼ã ãæ´»ç¨ããå¾ã«ãä»ã®ãã¼ã å©ç¨ã«å©ç¨ãåºãã£ã¦ãã£ãããã§ããå®ã¯ããç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ããã¨ããã®ã¯ãç§ãèããè¨èã§ã¯ãªããAWSå ã§å©ç¨ãåºãã£ã¦ããéã«ä½¿ãããè¨ãåãã§ãããå½¢å¼ææ³ãããæ¤è¨¼ãã¨å¼ã¶ã¨é ããã®ã«æãã¦ãã¾ããããã¨ããçç±ã§ç¨ããããè¨èã¨ã®ãã¨ã§ããå°ããã³ããæ°ããã¾ãããæ´å²çã«ä½¿ããã¦ããè¨èãå°éç¨èªã®å°è±¡ã«æ¯ãåãããå¿ è¦ã¯ãªãã®ã§ããã
ãå°éç¨èªã§ã®è£è¶³ãã¢ãã«æ¤æ»æè¡
ãããã§ç´¹ä»ããæè¡ã¯ã¢ãã«æ¤æ»ã¨å¼ã°ãã¾ãããSPINãããNuSMVãï¼ã¨ãã«æ¬ä¼¼ã³ã¼ãã®è¨èªã§ã¯ãªããã¼ã«ã®ååï¼ãããç¥ããã¦ãã¾ããAmazonã§ç¨ããæ¬ä¼¼ã³ã¼ãã®è¨èªã¯ãTLA+ãã¨å¼ã°ãããã®ã§ããæ®å¿µãªãããæ¥æ¬èªã§ã¯ãã¾ãTLA+ã®æ å ±ãè¦ã¤ãããªãããããã¾ãããããããTLA+ã¯ãLaTeXã®éçºè ã§ããã¨ã¨ãã«ãåæ£ã·ã¹ãã ã«ãããèæ éæ§æè¡ã®åºç¤ã確ç«ãããã¨ã§èåãªLeslie Lamportæ°ãéçºããè¨èªã¨ãã¦ããç¥ããã¦ãã¾ãã
ããªã¹ã1ã«ããããã¯ã¼ã¯ã·ã¹ãã ã§ã®ã¯ã©ã¤ã¢ã³ãããã°ã©ã ã«å¯¾å¿ããæ¬ä¼¼ã³ã¼ãã®è¨è¿°ä¾ãç´¹ä»ãã¾ãããã¡ãã¯SPINã§è¨è¿°ãã¦ãã¾ããã³ã¡ã³ããè¦ãã°å¤§ã¾ããªåä½ã¯ç解ãã¦ããã ããã§ãããã
active proctype client(){ // ã¯ã©ã¤ã¢ã³ãããã»ã¹ã®ä¾ byte rmsg; bool retried = false; start: c2s ! request; // ãªã¯ã¨ã¹ãã®ãµã¼ãã¸ã®éä¿¡ if :: s2c ? rmsg -> // ãµã¼ãããã®å¿çåä¿¡ if // æåã失æãã©ã¡ããã®ã¡ãã»ã¼ã¸ãæ¥ã¦çµæãè¨é² :: rmsg == success -> logc = success :: rmsg == failure -> logc = failure fi :: timeout -> // ã¿ã¤ã ã¢ã¦ãæã®å¦ç if :: !retried -> // å試è¡æ¸ã¿ã§ãªããã°åè©¦è¡ retried = true; goto start :: else -> logc = maybefailure fi fi }
ããã®ãç¶²ç¾ çãã¹ããå¯è½ãªæ¬ä¼¼ã³ã¼ããã§ãããã®ã¯ãç¶²ç¾ çãã¹ããããã¦ããããã¼ã«ã®ã»ãã ã¨æããæ¹ãããã§ããããããããããããã®ã¯ãæ¬ä¼¼ã³ã¼ããã§ã¯ãªããããã°ã©ã ã³ã¼ããã®ãã®ã®æ¤æ»ã¨æãããããããã¾ããããããå®ã¯ãç¶²ç¾ çãã¹ããã§ãããã¨ã¯ãæ¬ä¼¼ã³ã¼ãã®å¤§ããªå©ç¹ã§ããããã¦ãè¦ç¹ãçµããå®è£ 詳細ãå«ã¾ãã¦ããªãæ¬ä¼¼ã³ã¼ããç¨ããæ¹ããæ¬è³ªçãªåé¡ç¹ãæ½åºãããæçãªçµæãå¾ãããã®ã§ãã