æ ç»ãNew Timesãã®å·¥å Žã§åã³ãã£ãŒãªãŒã»ãã£ãããªã³
Azure Service Fabricã«é¢ããäŒè©±ãç¶ããŸãã åã®èšäºã§ãæåã«ã¹ããŒããã«ãµãŒãã¹ã«ã€ããŠèšè¿°ãã次ã«ASFã®ã¢ã¯ã¿ãŒã¢ãã«ã«ç§»ãèšç»ã«ã€ããŠè¿°ã¹ãŸããã æŠå¿µãå€æŽãããŸãããäŸãšããŠãå®çšŒåãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããè¿ããã®ã䜿çšããŠãçè«äžã®å©ç¹ãšå®çšçãªæå³ãããããã«ãããšãããšæããŸããã ASFã®ãã¹ãŠã®ã³ã³ããŒãã³ãã1ã€ã®ããã«ã«ãŸãšããããšãã§ããŸããããã«ãããã«ãããŒã¯ãããŒããããããŠãã¹ãŠãã¹ãŠã®çå ãcrownãäžããããšãã§ããŸãã ãã®ãããªèããæã£ãŠãç§ã¯æŽ»æ§åã®åè£è ãæ¢ããŠããŒã ãããžã§ã¯ãã®å¢å°ã«è¡ããŸããã
çããŠããæ»è
ãããŠããã®ãããªåè£ãèŠã€ãããŸããã 圌ãã¯ãéãã®èšäºãæžãã®ã奜ããªã®ã§ããã¹ãã¢ããŒããå ¥ããç®±ã«è©°ã蟌ããããšã¯ãããããAdvanced Direct Connectãããã³ã«ã䜿çšããæªå®æã®ã©ã€ãã©ãªãèŠã€ãåºããŸããã ãé¡ã«ã¯ã²ã©ããã²ã©ãããšã¯ãããã»ããã§ã»ãããæãèœãšããŠã圌ã¯äººçããŸã å éšã§æãŸã£ãŠãããšç¢ºä¿¡ããŸããã ãã®ã©ã€ãã©ãªã¯ãã€ãŠæªäœæã®ADCã¯ã©ã€ã¢ã³ãã察象ãšããŠããŸããããããã«åºã¥ããŠADCãããäœæããŠã¿ãŸãããïŒ ããã¯æ°é®®ã§ç¬åµçãªã¢ã€ãã¢ã§ã-è©ŠããŠã¿ãŠãã ããã
ADCãããã³ã«ã¯ã10幎以äžåã®2004幎ïŒ2013幎ã®ææ°ããŒãžã§ã³1.0.3ïŒã«NMDCã®åŸç¶ãšããŠç»å ŽããŸããïŒDCã®ã¿ã§ãïŒã NMDCãšåæ§ã«ãADCãã¹ãã¯åçŽãªããã¹ãã³ãã³ãã亀æããŸãã ããŒãã«ã¯2çš®é¡ãããããŸãããããã¯ãäžå€®ããŒãïŒããïŒãšãšã³ãã¯ã©ã€ã¢ã³ãã§ããããããšçžäºã«çµåããŸãã ãããä»ããŠãã¯ã©ã€ã¢ã³ãã¯éä¿¡ïŒãã£ããïŒããŠå¿ èŠãªãã¡ã€ã«ãæ€çŽ¢ã§ããŸãããããŒã¿è»¢éã¯ããããã€ãã¹ããŠã¯ã©ã€ã¢ã³ãéã§çŽæ¥å®è¡ãããŸãã 倧ãŸãã«èšããšãããã¯ã¯ã©ã€ã¢ã³ããèªèšŒãããªã¹ããä¿åããã¯ã©ã€ã¢ã³ãéã§ã³ãã³ããéä¿¡ããŸãã ç§ãç¥ã£ãŠããå¯äžã®æ¢åã®ãã©ã³ã¹ããŒãã¯TCPãadcïŒ//ã¢ãã¬ã¹æå®ã¹ããŒã ã§ãããããŒãã¯æšæºã§ã¯å®çŸ©ãããŠããŸããããå®éã«ã¯DC 411ã®éåžžã®ããŒãã«äœ¿çšãããŸããã¯ã©ã€ã¢ã³ãã¯ç¬èªã®ãã©ã€ããŒãIDãæã£ãŠããŸãèå¥åïŒïŒã¯ã©ã€ã¢ã³ãïŒã¯ä»ã®ã¯ã©ã€ã¢ã³ãã«ãã£ãŠã¢ãã¬ã¹æå®ãããŸãã
å žåçãªP2Pé ç·ã¯ADCã«ãæå¹ã§ã
ãããã³ã«ãæ¡åŒµããŠããŸã-å®å šã«æ°ããã³ãã³ããŸãã¯ãã©ã¡ãŒã¿ãŒãæ¢åã®ã³ãã³ãã«è¿œå ã§ããŸãã ãµããŒããããŠããæ©èœã®ãªã¹ãã¯ãæ¥ç¶ã確ç«ãããšãã«åãã/ã¯ã©ã€ã¢ã³ãã«ãã£ãŠçºè¡šãããŸãã ãããšã¯ã©ã€ã¢ã³ãã®åºæ¬çãªADCæ©èœã®å¿ é ãµããŒããããã³ãã¡ã€ã«å ±æã®ã¯ã©ã€ã¢ã³ãã®TCPx / UDPxã æ¡åŒµæ©èœã¯ããããã³ã«ã®æ©èœã匷åããããã®éåžžã«åŒ·åãªã¡ã«ããºã ã§ããããšãã°ãæ¡åŒµæ©èœã«ã¯ãããã€ãã®è¿œå ã®ããã·ã¥é¢æ°ïŒäœ¿çšãããæ©èœã®èª¿æŽã¯ãã¯ã©ã€ã¢ã³ããšããã®æ¥ç¶ã確ç«ãã段éã§ã®åºæ¬çãªæ©èœã«ãããŸãïŒãããã³å®å šãªADCSæ¥ç¶ãå«ãŸããŸãã
å¥åŠãªããšã«ãçŸåšã®ç¶æ³ã«é¢ããŠã¯ãP2Pãšãªã¢ã¯ãŸã çããŠããŸãïŒãã¡ãããåžžã«èŽããŠããæ¥æµã¯æ°ããŸããïŒã ãŸããStrongDC ++ïŒç§ã¯ä»¥åãã®ã¯ã©ã€ã¢ã³ãã䜿çšããŠããŸããïŒã®ãããšçžç¶äººã¯ãŸã éçºäžã§ãããããæå ã®ã¿ã¹ã¯ã¯ãŸã ãã®é©çšãããæå³ãå®å šã«å€±ã£ãŠããããã¢ã«ãããã¯ãªã¿ã¹ã¯ã«ãªã£ãŠããŸãã
æ®å¿µãªãããADCã®ä»æ§ã«ã¯æ³åã®äœå°ãæ®ãããŠããŸãããã²ãŒã ã®é³æ¥œã¯ããã®ããã°ã©ããŒã«ãã£ãŠæžãããŠãããã ãã§ãªããRFCã®ç²ŸåºŠãW3Cæšæºããã¯ã»ã©é ãããšã§ãã ãã®ãããéäžã§ãæ¢åã®ADCå®è£ ïŒADCH ++ãAirDC ++ãªã©ïŒã®è©³çŽ°ãæ確ã«ããå¿ èŠããããŸããã
çµç«ã¢ãã«
éåžžã©ãããäžè¬çãªã¢ãŒããã¯ãã£ã®èŠç©ããããå§ããŸãã ç°¡åã«ããããã«ãããã¯éããŠããŸããã€ãŸãããŠãŒã¶ãŒã¯ç»é²ãšãã¹ã¯ãŒããªãã§ãã°ã€ã³ã§ããŸãããååã¯äžæã§ãªããã°ãªããŸããã å šäœåã®3ã€ã®è«çéšåãããã«è¡šç€ºãããŸã-ããã¯TCPæ¥ç¶ãµãŒããŒãã¯ã©ã€ã¢ã³ããšäº€æããããã®ADCãå®è£ ãããªããžã§ã¯ããåã¯ã©ã€ã¢ã³ãã«1ã€ïŒãŠãŒã¶ãŒãšåŒã³ãŸãïŒãæåŸã«ãã¹ãŠã®ã¢ã¯ãã£ããªã¯ã©ã€ã¢ã³ãã®å ±éã«ã¿ãã°ã§ãã
TCPãµãŒããŒã¯TCPæ¥ç¶ã確ç«ããã¯ã©ã€ã¢ã³ããšã·ãªã¢ã«åãããADCã¡ãã»ãŒãžã亀æããŸãããŠãŒã¶ãŒã¯ä»æ§ã«åŸã£ãŠãããã³ã«ãæ£ããå®è£ ãã責任ããããã«ã¿ãã°ã¯ã¢ã¯ãã£ããªã¯ã©ã€ã¢ã³ãïŒèå¥åã®çºè¡ãå«ãïŒããã³ãããŒããã£ã¹ãã¡ãã»ãŒãžã®ãªã¹ãã管çãã圹å²ãæ ããŸãã ããã§ãã®ã¹ããŒãããèžããŸãã
ãžãªãªãã¡ã¬ã³ã¹
ããã§ãåè«çéšåã¯ãASFã³ã³ããŒãã³ãéã®äžèŽãèŠã€ããå¿ èŠããããŸãã äž»ãªå¶éã¯ãASFã«ååšããæå°ã®èªå·±èšè¿°ã³ãŒããšæ倧ã®æ©èœã§ãã
TCPãµãŒããŒ
TCPãµãŒããŒã«ã¯ç¶æ ããªããASFã¯ã©ã¹ã¿ãŒã®åããŒãã«1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå¿ èŠã§ã-æããã«ãããã¯ã¹ããŒãã¬ã¹ãµãŒãã¹ã§ã ïŒåã®èšäºã§èª¬æããã®ã§ãç¹°ãè¿ããŸããïŒã
ãŠãŒã¶ãŒ
ADCããŒã ãšã¯ã©ã€ã¢ã³ããšã®ããåããã¢ã¯ã¿ãŒã«å§ããŸãã
俳åª
å¥åŠãªããšã«ãç§åŠè ã®ç°å¢ãã俳åªã¢ãã«ïŒä¿³åªã¢ãã«ïŒãç»å ŽããŸããïŒãããã1973幎ã«ã¯åœæã®ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã«ãšã£ãŠé©ãã¹ãããšã§ã¯ãããŸããã§ããïŒã ãã®ã¢ãã«ã«ãããšããšã³ãã£ãã£ãšã¯ãïŒååãšããŠïŒç¶æ ãæã¡ãä»ã®ã¢ã¯ã¿ãŒãšã¯ç¬ç«ããŠæ©èœããéåæã§ã¡ãã»ãŒãžãéåä¿¡ã§ããä»ã®ã¢ã¯ã¿ãŒãäœæã§ããç¹å®ã®ãšã³ãã£ãã£ã§ãã ã¢ã¯ã¿ãŒã®ã»ããïŒãŸãã¯ã·ã¹ãã ïŒã¯ãç°ãªãã¿ã€ãã®ã¢ã¯ã¿ãŒãçµåã§ããŸãã åã¢ã¯ã¿ãŒã«ã¯ãã¡ãã»ãŒãžã³ã°çšã®ç¹å¥ãªã¢ãã¬ã¹ïŒéåžžã¯æ°å€ãŸãã¯ããã¹ãïŒããããŸãã ãã¹ãŠã®ã¢ã¯ã¿ãŒã¯äžŠè¡ããŠåäœããã¡ãã»ãŒãžã³ã°ã¯ââéåæã§ããããããã®ã¡ãã»ãŒãžã®åŠçã¯ã·ãŒã±ã³ã·ã£ã«ã§ã-ã¢ã¯ã¿ãŒã¯ãã·ã³ã°ã«ã¹ã¬ãããã§ãããåæãã€ã³ããšããŠæ©èœããäžåºŠã«æ倧1ã€ã®ã¡ãã»ãŒãžãåŠçããŸãã
ãã®ææ©çã¢ãã«ã¯ããŸããŸãªæ¹æ³ã§å®è£ ã§ããŸããAkka.NET ã Orleans ãASFã¢ã¯ã¿ãŒã®3ã€ã®ç°ãªãå®è£ ããããŸãã Akka.NETã§ã¯ãã¢ã¯ã¿ãŒã®äœæãã·ã¹ãã ããã®ã¢ã¯ã¿ãŒã®åé€ãããã³ã¢ã¯ã¿ãŒãžã®ã¡ãã»ãŒãžã®éä¿¡ãæ確ã«åºå¥ãããŸãã Akka.NETã¢ã¯ã¿ãŒã¯éå±€ã圢æãããããã芪ãã¯ãåäŸãã®è¡åãç£èŠã§ããŸãã OrleansãšASFã¯ç°ãªããã¹ãåããŸãã- åæ£ä»®æ³ã¢ã¯ã¿ãŒã®ãã©ããã¢ãã«ãæ¡çšããŸããããã®ã¢ãã«ã§ã¯ ããã¹ãŠã®ã¢ã¯ã¿ãŒãåžžã«ååšããŸãããæé»çãªç¶æ ã§ã®æåã®åŒã³åºããŸã§ã åŒã³åºããããšãã¢ã¯ã¿ãŒãäœæããããã®ç¶æ ããªããŒãéã§ç¶æãããŸãã éåæã¡ãã»ãŒãžã³ã°ã¯ââCïŒã€ã³ã¿ãŒãã§ã€ã¹ã®åŒã³åºãã«ãã£ãŠã¢ãã«åãããOrleansã§ã®å®å šãªãã¬ã«ãããã¯åé¢ãã®ããã«ãPub-Subãå®è£ ããæ°žç¶çãªã¹ããªãŒã ããããŸãã ASF Streamsã¯ãµããŒãããŠããŸãããããµãã¹ã¯ã©ã€ãã§ããã¢ã¯ã¿ãŒã€ãã³ãããããŸãã ïŒAkka.NETã®ããã«ïŒã¢ã¯ã¿ãŒã®åé€ãšãã®ç¶æ ã®ã¯ãªã¢ããããŸã-åé€åŸãã¢ã¯ã¿ãŒã¯æ¬¡ã®åŒã³åºãã®åã«åã³ã圱ã®äžçãã«å ¥ããŸãã ã芧ã®ããã«ããã¹ãŠã®å®è£ ã§åæ§ã®æ©èœãšç°ãªãæ©èœããããŸãã
å¥åŠãªããšã«ã質åã¯ããªãé »ç¹ã«ãããŸã-ASFã¢ã¯ã¿ãŒã¯ASFãµãŒãã¹ãšã©ãéãã®ã§ããïŒ åç §ããŠãã ãã-ãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ã¯ã¯ã©ã¹ã¿ãŒã®éå§æã«äžåºŠäœæãããASFãåæ¢ãŸãã¯åèµ·åãããŸã§æ©èœããå€éšããã³/ãŸãã¯å éšã®éä¿¡ãã€ã³ããæã¡ãŸãã ã¢ã¯ã¿ãŒã¯å€éšãªã¯ãšã¹ãã«ãã£ãŠäœæããã³åé€ããããã®æ°ã¯ã¯ã©ã¹ã¿ãŒã®ç©ççãªèœåã«ãã£ãŠã®ã¿å¶éãããŸãã ãããã£ãŠãäœæ¥äžã«åçã«å€æŽããããªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ïŒç°ãªãã¿ã€ãã®å¯èœæ§ãããïŒãå®è£ ããå¿ èŠãããå Žåããããã¯ã¢ã¯ã¿ãŒã§ãã äºåã«æ¢ç¥ã®æ°ã®ãªããžã§ã¯ããäœæããå¿ èŠãããå Žåãç¹ã«ãããã®ãªããžã§ã¯ããå€éšéä¿¡ãŸãã¯å éšæ©èœãå®è£ ããŠããå Žåããããã¯ãµãŒãã¹ã§ãã ãŸããã¢ã¯ã¿ãŒã¯åŒã³åºããé çªã«åŠçãããµãŒãã¹ã䞊è¡ããŠåŠçããããšãèŠããŠããããšãéèŠã§ãã
ãŠãŒã¶ãŒãã£ã¬ã¯ããª
ã³ã³ããŒãã³ãã«æ»ã-ã¢ã¯ãã£ããªã¯ã©ã€ã¢ã³ãã®ã«ã¿ãã°ã«ã€ããŠã¯ã ã¹ããŒããã«ãµãŒãã¹ãéžæããã®ãè«ççã§ãã
ã¹ããŒããã«ãµãŒãã¹
ã€ãŸããã¹ããŒããã«ãµãŒãã¹ã¯ã¹ããŒãã¬ã¹ãšåãã§ãããã¹ããŒãããããŸãã å®éããããã®ã©ã€ããµã€ã¯ã«ã¯äŒŒãŠããŸã-åãOnOpenãOnCloseãããã³RunAsyncã§ãã ã³ãã¥ãã±ãŒã·ã§ã³ã®ãªã¹ããŒãASF Remotingãªã©ãå¯èœã§ãããç¶æ ã®ååšã«ãã£ãŠé¡èãªéããçããŸãã ãŸã第äžã«ããããã¯çšèªã®éãã§ããã¹ããŒãã¬ã¹ãµãŒãã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ã€ããŠè©±ãããšãçã«ããªã£ãŠããå Žåãã¹ããŒããã«ãµãŒãã¹ã«ã¯ã¬ããªã«ããããŸãã ã¬ããªã«ã¯ã¬ããªã«ã»ããã«çµåãããŸããåã¬ããªã«ã»ããã«ã¯ããã®ãµãŒãã¹ã®ä»ã®ã»ãããšã¯ç¡é¢ä¿ã«ç¬èªã®ç¶æ ããããŸãã åã»ããã§ã¯ã1ã€ã®ã¬ããªã«ã®ã¿ããã©ã€ããªã§ãããæ®ãã¯ã»ã«ã³ããªã§ãããã©ã€ããªã¬ããªã«ã®ã¿ãç¶æ ãå€æŽã§ãïŒããã«å¯ŸããŠã®ã¿ã©ã€ããµã€ã¯ã«é¢æ°ãåŒã³åºãããŸãïŒãæ®ãã¯ãã¹ãŠç¶æ ãèªã¿åããŸãã ãµãŒãã¹ãããŒãã£ã·ã§ã³åãããŠããå ŽåãåããŒãã£ã·ã§ã³ã¯ãã®ãããªã¬ããªã«ã®ã»ããã§ããããããã£ãŠãç¬èªã®åå¥ã®ç¶æ ã«ãªããŸãã ããŒãã£ã·ã§ã³ãšã¬ããªã«ã®æ°ã®äž¡æ¹ããã¢ããªã±ãŒã·ã§ã³æ§æãéããŠïŒã¹ããŒãã¬ã¹ãµãŒãã¹ã®å Žåãšåæ§ã«ïŒããã«èšå®ãããŸãã ãã©ã€ããªã¬ããªã«ãèœã¡ãå Žåãã»ã«ã³ããªã¬ããªã«ã®1ã€ããã®åœ¹å²ãåŒãç¶ããŸãããããã£ãŠãä¿¡é Œæ§ã®ããã«ãASFã¯ã¯ã©ã¹ã¿ãŒããŒãã«æ²¿ã£ãŠåãã»ããã®ãã¹ãŠã®ã¬ããªã«ãåæ£ãããµãŒãã¹ã¹ããŒã¿ã¹ãããŒãéã§è€è£œãããŸãã IReliableStateã€ã³ã¿ãŒãã§ã€ã¹ãã掟çãããªããžã§ã¯ãã®ã¿ãç¶æ ã«ä¿åã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹èªäœã¯ããŒã¯ã³1ã«äŒŒãŠãããããå®éã«å®è£ ããããšã¯äžå¯èœã§ãããããç®±ããåºããŠããã«äœ¿çšã§ããä¿¡é Œã§ãããªããžã§ã¯ãã¯ãReliableDictionaryãšReliableQueueïŒèŸæžãšFIFOãã¥ãŒïŒã®2ã€ã ãã§ãã ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããŠãããã€ãã®ä¿¡é Œã§ãããªããžã§ã¯ãã®å€æŽãåæã§ããŸãã
åèšïŒ
æªéã®è©³çŽ°
ãã¬ãŒã³ã¹ããŒãã³ã°ã¯çµäºããŸãããèãåºããããã¹ãŠã®å®è£ ã«ç§»ããŸãããã ããã§ã¯ãæè¡çãªè©³çŽ°ã«å ¥ãããšãé¿ããäžè¬çãªèª¬æãšèãå Žæã«èªåèªèº«ãå¶éããå¿ èŠã«å¿ããŠã奜å¥å¿readerçãªèªè ããœãŒã¹ã³ãŒããçŽæ¥åç §ã§ããããã«ããŸãïŒèšäºã®æåŸã«ãªã³ã¯ããããŸãïŒã
ã ãããé çªã«ã
TCPãµãŒããŒ
TCPãµãŒããŒã®å Žåãæšæºã®TcpListener / TcpClientã䜿çšã§ããŸããããã¯ãéæšæºã®TcpCommuncationListenerã«ã©ãããããŸãã TcpListenerã¯OpenAsyncã§éå§ããCloseAsyncã§åæ¢ããŸãã TcpCommuncationListenerã¯CreateServiceInstanceListenersã«äœæãããŸãã
èšå®ã«ã¯å°ããªè©³çŽ°ããããŸã-Local.xmlã§ã®ããŒã«ã«ãããã°çšã«èšå®ããŸãã
<ãã©ã¡ãŒã¿ãŒå= "TcpServer_InstanceCount"å€= "1" />ãAzureã®ãã©ã¡ãŒã¿ãŒã¯
<ãã©ã¡ãŒã¿å= "TcpServer_InstanceCount"å€= "-1" />ããã¯ããããã°ã¯ã©ã¹ã¿ãŒã®ããŒããåãã³ã³ãã¥ãŒã¿ãŒäžã§ããŒã«ã«ã«èµ·åããããããã®éã§411ããŒããå ±æã§ããªããããå¿ èŠãªãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ã¯1ã€ã ãã§ãã ã-1ãã¯ãASFã¯ã©ã¹ã¿ãŒã®åããŒãã§ãµãŒãã¹ã®1ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ãããŠããå¿ èŠãããããšãæå³ããŸããAzureã§ã¯ãASFããŒãã¯ç°ãªãVMã«ãããããããç¬èªã®411ããŒããæã£ãŠããŸãã
é©åãªä¿³åªã«é£çµ¡ããæ¹æ³ãšåœŒã®äœæã¯äœã§ããïŒ ããã«ã€ããŠã¯ãã¢ã¯ã¿ãŒã®å®è£ ã§ããã«èª¬æããŸãããçŸæç¹ã§ã¯ïŒäºæž¬å¯èœã§ããïŒæåã®åé¡ã¯ãTCPæ¥ç¶ã®ç¢ºç«ã§ããããã«ãããTcpClientã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããã¯ã©ã€ã¢ã³ããæ¥ç¶ããã¯ã©ã¹ã¿ãŒããŒãã«ãã£ãããšåºå®ãããŸãã ã¢ã¯ã¿ãŒã¯ããŒãéã移åã§ããŸãããåŒã³åºãã®ã¯é£ãããããŸãã-ã¢ãã¬ã¹æå®å¯èœã§ãããã¢ã¯ã¿ãŒããTcpClientãåŒã³åºãæ¹æ³ã¯ïŒ çµå±ã®ãšãããã¡ãã»ãŒãžã¯åä¿¡ãšéä¿¡ã®äž¡æ¹ãè¡ãå¿ èŠããããŸãã ã¹ããŒãã¬ã¹ãµãŒãã¹èªäœã§ã¯äžå¯èœã§ããã©ã®ãµãŒãã¹ã€ã³ã¹ã¿ã³ã¹ã«å¿ èŠãªTcpClientãå«ãŸããŠãããã¯ããããŸããã ãããŠãã¢ã¯ã¿ãŒã€ãã³ããå©ãã«ãªããŸã-TcpClientã¯ãããã®ãã¢ã¯ã¿ãŒã®ã€ãã³ãããµãã¹ã¯ã©ã€ãããããããä»ããŠéä¿¡ã¡ãã»ãŒãžãåä¿¡ã§ããŸãïŒã¹ããªãŒã ã奜ãããäœã§ããããååŸããããšããŸãïŒã
ãŠãŒã¶ãŒ
ã¢ã¯ã¿ãŒã«ã¯ã次ã®ã¡ãã»ãŒãžã®åä¿¡ãšåŠçãããã³ã¯ã©ã€ã¢ã³ããžã®ã¡ãã»ãŒãžéä¿¡ãšãã2ã€ã®æ©èœãããããŸããã ããã§ãããããã³ã«ã®ãµããŒããæ åœããã®ã¯ã¢ã¯ã¿ãŒã§ãããããããã¯ããã®æãè€éãªéšåã§ãã ãã¥ãŒãã³ã®ç®±ã§ã¯ãªããçèãããã®ããããŸãã æåã«ãã¢ã¯ã¿ãŒã«å¯ŸåŠããæ¹æ³ãéžæããå¿ èŠããããŸãã ãã®ãããã³ã«ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯ããã«ãã£ãŠçºè¡ãããSIDã«ãã£ãŠã¢ãã¬ã¹æå®ãããŸãããã®SIDãASFã¢ã¯ã¿ãŒã®ã¢ãã¬ã¹ãšããŠäœ¿çšããªãã®ã¯ãªãã§ããïŒ ããã«ãADCã¯ãããã®4ã€ã®ãããã³ã«ç¶æ -PROTOCOLïŒæ¥ç¶ãã©ã¡ãŒã¿ãŒã®ããŽã·ãšãŒã·ã§ã³ïŒãIDENTIFYïŒã¯ã©ã€ã¢ã³ãæ å ±ïŒãVERIFYïŒãã¹ã¯ãŒãæ€èšŒïŒãNORMALïŒéåžžæäœïŒãæ³å®ããŠããŸãã ãããéããŠããããããã¹ã¯ãŒãã¯ãªããVERIFYã¯äžèŠã§ãã ãŸããASFã®ã¢ã¯ã¿ãŒã¯ä»®æ³ã§ãããããçããŠããããã«èŠããŠããŸã ã©ãã«ãæ¥ç¶ãããŠããªãã¢ã¯ã¿ãŒã«UNKNOWNç¶æ ãè¿œå ããããšã¯çã«ããªã£ãŠããŸãã
ç¶æ ãååšãããšããã«ã ç¶æ ãã·ã³ã衚瀺ãããŸããçä¿¡ADCã³ãã³ãã¯çŸåšã®ç¶æ ã«ãã£ãŠåŠçãããç¶æ éã®é·ç§»ã®ããªã¬ãŒãšããŠæ©èœããŸãã ASFã¯å®å šã«éåæã§ãããããã¹ããŒããã·ã³ã«ã¯éåæãå¿ èŠã§ãã æ¢è£œã®ã©ã€ãã©ãªãæ€çŽ¢ããŠããå€ãã®ãªãã·ã§ã³ã¯äœæãããŸããã§ããã ç³è«è ã¯ãæªåé«ããã³ã©ã¹ã»ãã«ã ãã«ãïŒå¥åAutofacããã³SerilogïŒããã³Appcelerate ïŒæ§ç§°bbv.CommonïŒã®èè ãšããŠç¡åœç±ãšèŠãªãããŸããã äž¡è ã¯å®å šã«åæããŠããããé©åããŸããã§ããã ã¹ããŒãã¬ã¹LiquidStateã®éåæã®åå«ããããŸãããæ©èœãäžè¶³ããŠããããããŸã èµ·åããŠããŸããã ç§ã¯èªè»¢è»ãæžãã®ã¯æ¬åœã«å¥œãã§ã¯ãããŸããããããã§ç§ã¯ããªããã°ãªããŸããã§ãããå©çã¯ç°¡åã§ãã 説æã¯UMLã¹ããŒããã·ã³ã«åºã¥ããŠããŸãïŒã¡ãªã¿ã«ãããã¯Milesããã³Mooreãã·ã³ãå«ããåªããæ£åŒãªã¢ãã«ã§ãïŒã
åé¡ã®çºçã®ãã®éšåã§2ã€ã®åé¡ãçºçããŸããã æåã®ã¡ã€ã³ã¯ãã·ã³ã°ã«ã¹ã¬ãããã¢ã¯ã¿ãŒã§ãã æ£åŒã«ã¯ãããã¯ã¢ã¯ã¿ãŒããå¥ã®ãªããžã§ã¯ããåŒã³åºãããšãã§ããããšãæå³ããŸããããã®åŒã³åºãããã¢ã¯ã¿ãŒãã³ãŒã«ããã¯ããããšã¯ã§ããŸããã å®éãASFã¯ã¢ã¯ã¿ãŒã®åå ¥å ŽãåŒãç¶ããµããŒãããŠããŸãããã³ãŒã«ãã§ãŒã³ã圌ããå§ãŸã£ãå Žåã®ã¿ã§ãã ããã«ããã®ãããªè§£æ±ºçã¯ãã¢ã¯ã¿ãŒéã®åŒã³åºãã«ã®ã¿é©çšãããŸããããšãã°ãã¢ã¯ã¿ãŒãããµãŒãã¹ãåŒã³åºããŠãã¢ã¯ã¿ãŒãã³ãŒã«ããã¯ããããšã¯ã§ããŸããã ãããŠããã®ãããªæ©èœã¯ãäŸãã°ãã¢ã¯ã¿ãŒãéå§ãããã£ã¬ã¯ããªãå®è¡ããããããŒããã£ã¹ãã®ããã«å¿ èŠã§ãããã¡ãã»ãŒãžã¯ã¡ãŒãªã³ã°ãªã¹ãã®äœè èªèº«ã«éãããã¹ãã§ãã è¯ã解決çãèŠã€ãããªãã£ãã®ã§ãã¢ã¯ã¿ãŒã2ã€ã®éšåã«åå²ããŸããã1ã€ã¯ã¯ã©ã€ã¢ã³ãããã¡ãã»ãŒãžãåä¿¡ããŠââã¢ã¯ã¿ãŒã®ç¶æ ãå¶åŸ¡ãã2ã€ç®ã¯ã¯ã©ã€ã¢ã³ãã«ã¡ãã»ãŒãžãéä¿¡ããã ãã§ãã ãã®çµæãåæ¹åããŒã¿ã¹ããªãŒã ãééãã2ã€ã®ã¢ã¯ã¿ãŒããããŸãã ã¢ã¯ã¿ãŒã®ã¿ã€ãã¯ç°ãªããããSIDãä»ããŠçããã¢ãã¬ãã·ã³ã°ã§ããŸãïŒASFã§ã¯ãã¢ã¯ã¿ãŒã®ã¿ã€ãã¯ãã®ã¢ãã¬ã¹ã«å«ãŸããŠãããããåãSIDã§ãã¢ã¯ã¿ãŒã®ã¢ãã¬ã¹ã¯ç°ãªããŸãïŒã
2çªç®ã®åé¡ã¯ãæ¥ç¶ã»ããã¢ããæéã§ãïŒADCã®çšèªã§ã¯ãããã¯NORMALç¶æ ãžã®ç§»è¡ã§ãïŒã ãããå¶éããããšã¯çã«ããªã£ãŠãããDCã®åé§äœãåãããŒãã䜿çšãããããæåã®ã¡ãã»ãŒãžãDCã«éä¿¡ãããšããäºå®ã«ãã£ãŠç¶æ³ãæªåããŸãã ãã®çµæãæ¥ç¶ããŠããDCã¯ã©ã€ã¢ã³ãã¯ã2çªç®ã®åºçŸãŸã§å¿çãåŸ ã¡ãŸãã 次ã¯ãASF ã¿ã€ããŒãšã¢ã©ãŒã ãé©çšããŸãã
ã¿ã€ããŒãšãªãã€ã³ããŒ
ASFã®ã¿ã€ããŒãšã¢ã©ãŒã ã¯ããã®ååã瀺ãããã«ãã¢ã©ãŒã ãšããŠæ©èœããŸãã ãããã¯äŒŒãŠããŸãããæå®ãããééã«åŸã£ãŠæå®ãããé¢æ°ãåŒã³åºããšããç¹ã®ã¿ãç°ãªããŸãã ã¿ã€ããŒã¯ãã¢ã¯ãã£ããªã¢ã¯ã¿ãŒã«ã®ã¿ååšãããã軜éãªãªããžã§ã¯ãã§ãããã¢ã¯ã¿ãŒãéã¢ã¯ãã£ãåããããšæ¶ããŸãã ãªãã€ã³ããŒã¯ä¿åãããã¢ã¯ã¿ãŒãšã¯å¥ã«æ©èœãããããéã¢ã¯ãã£ãåãããã¢ã¯ã¿ãŒã§ãã¢ã¯ãã£ãåã§ããŸãã ä»ã®ãã¹ãŠã®ã¿ã€ããŒããªãã€ã³ããŒã®ã¢ã¯ã¿ãŒã¡ãœããã®åŒã³åºãã¯ãäŸç¶ãšããŠãã·ã³ã°ã«ã¹ã¬ãããã§ããããªãã€ã³ããŒããã®åŒã³åºãã¯ãæ¬æ ŒçãªãåŒã³åºããšèŠãªãããéã¢ã¯ãã£ããªã¢ã¯ã¿ãŒãéã¢ã¯ãã£ãåãããšãã«èæ ®ãããŸãã ã¢ã¯ã¿ãŒã䜿çšããã¿ã€ããŒããã®åŒã³åºãã¯èæ ®ãããªããããã¢ã¯ã¿ãŒãã¿ã€ããŒã§éã¢ã¯ãã£ãã«ãªãã®ãé²ãããšã¯ã§ããŸããã
æ¥ç¶æéãå¶éããã«ã¯ãç䌌ADCã³ãã³ãConnectionTimedOutãéä¿¡ãã1åéãã®ãªãã€ã³ããŒã䜿çšããã®ãæãç°¡åã§ããNORMALç¶æ ã¯åçŽã«ããã飲ã¿èŸŒã¿ãä»ã®ãã¹ãŠã¯ãããã³ã«ã«åŸã£ãŠæ¥ç¶ãåæããŸãã
ãŠãŒã¶ãŒãã£ã¬ã¯ããª
ãã®ãµãŒãã¹ã«ã¯å€éšéä¿¡ããªããå éšã¿ã¹ã¯ã®å®è¡ã®ã¿ãç®çãšããŠããããã Remotingã䜿çšããŠéä¿¡ããããšã¯è«ççã§ãã ãã£ã¬ã¯ããªã®ããŒãã£ã·ã§ã³åã¯ããŸãæå³ããããŸãã-ãµãŒãã¹ã®ç¶æ ã¯èå¥åã®ã³ã¬ã¯ã·ã§ã³ãä¿åãããµãŒãã¹èªäœã¯å šäœãšããŠãªãã¬ãŒã·ã§ã³ãå®è£ ããŸãã ãã ãããããŒããã£ã¹ãã«ããã1ã€ã®ãã©ã€ããªãµãŒãã¹ã¬ããªã«ã§ã¯äžååãªè² è·ãçºçããå¯èœæ§ããããŸãã ãŸããããã§ã¯ãã¹ããŒããã«ãµãŒãã¹ã®å¥œå¥å¿featureçãªæ©èœãå©çšã§ããŸããã»ã«ã³ããªã¬ããªã«ã§ããªã¹ããŒãéãããšãã§ããŸãããèªã¿åãå°çšã§ãã ã«ã¿ãã°ç¶æ ã®ã¡ãŒã«ã¯äœãå€æŽããªãããããã¹ãŠã®ãµãŒãã¹ã¬ããªã«ã䜿çšããããšã劚ãããã®ã¯äœããããŸããã
çŸåšã®SIDã®ãªã¹ãã¯ReliableDictionaryã«æ ŒçŽãããŸã-ãã©ã³ã¶ã¯ã·ã§ã³å ã§åæã§ãããŠãŒã¶ãŒæ å ±ïŒååããµããŒããããŠããã¯ã©ã€ã¢ã³ãæ©èœãªã©ïŒãããŒå€ã«æ ŒçŽãããŸãã å¥ã®ReliableDictionaryã䜿çšããŠãå€ã®ãªãäžæã®ããŒã®ããã«ãã¯ã©ã€ã¢ã³ãã®ååã®äžææ§ã確èªããå¿ èŠããããŸãã ã«ã¿ãã°ã®éçºã«ã¯ç¹å¥ãªçæã¯ãããŸããã§ããããã¯ã©ã€ã¢ã³ãã®åæã«é¢é£ãããã¥ã¢ã³ã¹ããããŸãã
ã¯ã©ã€ã¢ã³ããåæããçç±ã¯2ã€ãããããŸãããããã¯ãéä¿¡ãã£ãã«ã®ãšã©ãŒïŒãœãŒã¹-TCPãµãŒããŒïŒãšãããã³ã«ã®ãšã©ãŒïŒãœãŒã¹-ã¢ã¯ã¿ãŒïŒã§ãã äž¡æ¹ã®ãšã©ãŒã¯èŽåœçãšèŠãªãããã¯ã©ã€ã¢ã³ãããåæãããŸãã ãšã©ãŒãäžå çã«åŠçãããã®ã§ããããããã³ã«ã®è²¬ä»»è ãšããŠã¢ã¯ã¿ãŒã§ãããè¡ãã®ãè«ççã§ãã ãããè¡ãã«ã¯ããªãã€ã³ããŒãšåãããšãè¡ãããšãã§ããŸã-å¥ã®ç䌌ADCã¡ãã»ãŒãžDisconnectOccuredãè¿œå ãããããã¢ã¯ã¿ãŒã®ã¹ããŒããã·ã³ã«å«ããŸãã å®å šã«ã¯ãªãŒãã³ã°ããã«ã¯ãã¢ã¯ã¿ãŒãå®å šã«åé€ããã®ãè¯ãã§ãããããã·ã£ããããŠã³ã®ã€ãã·ãšãŒã¿ãŒãã¢ã¯ã¿ãŒèªèº«ã§ããå Žåããããè¡ãæ¹æ³ã¯ãããŸããïŒ ãã®æ©èœã¯ãReliableQueueã䜿çšãããã£ã¬ã¯ããªã«è»¢éã§ããŸãããã®ãã¥ãŒã«ã¯ãåæãããã¯ã©ã€ã¢ã³ãã®SIDãè¿œå ãããŸããRunAsyncãã£ã¬ã¯ããªã§ã¯ããã®ãã¥ãŒã¯ãã¥ãŒããèå¥åãåãåãã察å¿ããã¢ã¯ã¿ãŒãåé€ããç¡éã«ãŒãã§åŠçãããŸãã
ãã®ãããªç¶æ ã¯æ¬¡ã®ãšããã§ãã
ãããŠäžè¬çã«ãéçºã¯çµãããŸããã ããŒã«ã«ã¯ã©ã¹ã¿ã§ã®ãã¹ãã§ã¯ãçŒãããŠã®ããã«2ã€ã®ADCã¯ã©ã€ã¢ã³ãïŒAirDC ++ã䜿çšïŒãçžäºã«æ¥ç¶ãããã¡ã€ã«ã亀æã§ããŸããã 倧äžå€«ã§ããããã§ã«Azureã«ãããå±éããŠã¿ãŠãã ããã
Azureã®å±é
å±éã¯ã¡ã¢ã®ãããªãã®ã ã£ããããã¹ããŒãªãŒã®æãéå±ãªéšåã§ãã ç¡æè©Šçšçãµãã¹ã¯ãªãã·ã§ã³ã䜿çšããŠå±éããå ŽåãASF管çã¯æ°ããããŒã¿ã«ããå©çšã§ããŸã ã æåã«ãã¯ã©ã¹ã¿ãŒåãRDPãŠãŒã¶ãŒããŒã¿ããªãœãŒã¹ã°ã«ãŒããããã³å ŽæãéžæããŸãã ããã©ã€ããªããŒãã¿ã€ãã®5ã€æªæºã®åæVM容éãéžæãããšããã®ã¯ã©ã¹ã¿ãŒããã¹ãã¯ã©ã¹ã¿ãŒãšããŠæå®ãããŸããã-ãã¹ãã¯ã©ã¹ã¿ãŒãäœã§ããããèŠã€ãããŸããã§ããããããŒã¿ã«èªäœããã®æšå¥šäºé ãèšè¿°ããŠããããã§ãã ã«ã¹ã¿ã ãšã³ããã€ã³ãã§ã¯ãããŒããã©ã³ãµãŒããã®ããŒãã§æ¥ç¶ãæž¡ãããã«411ãå¿ããã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ãã¹ãç®çã§ã¯ãå®å šã§ãªãã¯ã©ã¹ã¿ãŒãäœæããæ¹ãç°¡åã§ã-ããã ãã§ãã ASFã¯ã©ã¹ã¿ãŒã¯æããã«åçŽã§ãããAzureã¯æ¬¡ã®ãããªãªãœãŒã¹ã»ããå šäœãäœæããŸãã
ãªã¹ãã«ã¯ãVMã®vhdã¹ãã¬ãŒãžïŒ3ã§ã¯ãªã5ãååšããçç±ã¯æããã§ã¯ãããŸããïŒãAzure Diagnosticsã®ãã°ããã³æ å ±ã®ã¹ãã¬ãŒãžãVPNã«çµ±åãããä»®æ³ãã·ã³ã®ã»ãããå«ãŸããããããã¹ãŠã«ãããªãã¯IPã¢ãã¬ã¹ãå²ãåœãŠãããããŒããã©ã³ãµãŒãå«ãŸããŸãã
Azureã§ã®å±éã«ããã1ã€ã®åé¡ãæããã«ãªããŸãããã解決ã§ããŸããã§ããã Azureã¯411ããŒãã®å¯çšæ§ããã§ãã¯ãããã®äžã§TCPæ¥ç¶ãäœæããŠããã«åæããããã§ãã æ¥ç¶ãçºçãããšããã«ãTCPãµãŒããŒã¯SIDãäœæããŸãããSIDã¯ããã«äžèŠã«ãªããŸãã çè«çã«ã¯ãããã¯æ£ããåäœã§ã-ãµãŒããŒããã£ã±ãã«ãªãå¯èœæ§ããããŸãïŒADCã§ã¯1ã€ã®ããã®ãŠãŒã¶ãŒæ°ã«å¶éããããŸãïŒããå®éã«ã¯ãã®ã¢ãããŒãã¯å€±æããŸãã äžæ¹ãåçŽãªæ€èšŒã§ã¯ããããã®ç©ºã®æ¥ç¶ã¯é »ç¹ã«è¡ãããŸã-äžè¬çã«ãæéã«èŠãããè¬ã§ããéãã
ãã ããããã¯æ©èœã«åœ±é¿ãäžããªãã®ã§ããã¹ããåã³2ã€ã®ADCã¯ã©ã€ã¢ã³ããåã³ãã¡ã€ã«å ±æ-ãã¹ãŠãæ©èœããŠããããã§ãã ä»ã絶察ã«ä¹Ÿæ¯ã
ãããã«
äžè¬ã«ããã®ã¢ã€ãã¢ã¯ææãäžããŸãããASFå šäœã調ã¹ãŠãé¢äžããŠããªããã°ãå°ãªããšãããŸããŸãªæ©èœãšãã®æ©èœã®è©³çŽ°ã«ç²Ÿéããããšãã§ããŸããã ãŸãããã¹ãŠãASFã§ã¹ã ãŒãºã«å®è¡ãããããã§ã¯ãããŸããããæçµçµæã¯ãã¹ããããžã§ã¯ãã«ãšã£ãŠããã»ã©æªãã¯ãããŸããã èªè ã奜å¥å¿thatçã§ããããšãé¡ã£ãŠããŸãã ãããžã§ã¯ãå šäœã®ãœãŒã¹ã³ãŒãã¯GitHubã«ãããŸããæ°ããèšäºã«å¥ããåããŸãã