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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
´î½¨ÔÆÔ­ÉúÅäÖÃÖÐÐĵļ¼ÊõÑ¡ÐͺÍÂäµØÊµ¼ù
 
×÷ÕߣºËï×ÔÈ»
  2395  次浏览      27
 2021-6-3
 
±à¼­ÍƼö:
±¾ÎĽ«½éÉÜ FreeWheel ºËÐÄÒµÎñϵͳÔÚ AWS ÔÆÆ½Ì¨ÉϴÅäÖÃÖÐÐĵÄʵս£¬×÷Ϊ´î½¨ÔÆÔ­ÉúÅäÖÃÖÐÐĵIJο¼£¬Ï£ÍûÄܸø´ó¼Ò´øÀ´Æô·¢¡£
±¾ÎÄÀ´×Ôinfoq£¬ÓÉAlice±à¼­¡¢ÍƼö¡£

ÒýÑÔ

ÔÚ´Óµ¥ÌåÓ¦ÓÃÏò΢·þÎñ¼Ü¹¹×ªÐ͵Ĺý³ÌÖУ¬·þÎñÅäÖùÜÀí´ÓÖ»ÐèÒªÓ¦¶ÔÒ»¸öµ¥Ìå·þÎñ£¬±äΪӦ¶Ô´óÁ¿·Ö²¼Ê½·þÎñ£¬ÄѶȳʼ¸ºÎ¼¶Ôö¼Ó¡£ÎªÁ˽â¾öÕâ¸öÄÑÌ⣬¸÷ÖÖÓ¦¶Ô·Ö²¼Ê½·þÎñµÄÅäÖÃÖÐÐÄÓ¦Ô˶øÉú£¬ÈçºÎ´î½¨Ò»¸ö¸ßЧºÏÀíµÄÅäÖÃÖÐÐÄÒѾ­³ÉΪÿ¸ö´óÐÍ·Ö²¼Ê½ÏµÍ³±Ø¾­µÄ¿¼Ñé¡£¶øÔÚ·þÎñ¡°ÉÏÔÆ¡±µÄ´óÇ÷ÊÆÏ£¬ÈçºÎÈÃÅäÖÃÖÐÐÄÔÚÔÆÆ½Ì¨Ë³ÀûÂ䵨£¬¸ü½øÒ»²½£¬ÈçºÎ½èÖúÔÆ¼ÆËãµÄÓÅÊÆÈÃÅäÖÃÖÐÐÄÈ绢ÌíÒí£¬Ä¿Ç°ÒµÄÚ¶ÔÕâÒ»¿é»¹´¦ÓÚ̽Ë÷½×¶Î¡£

¸ü¶àÏà¹ØÄÚÈݲμûϵÁÐÎÄÕ£ºÔÆÔ­Éú»·¾³ÏµÄ΢·þÎñʵ¼ùÈ«½â

ΪʲôÐèÒªÅäÖÃÖÐÐÄ£¿

·Ö²¼Ê½ÏµÍ³ÐËÆðÖ®ºó£¬ÅäÖùÜÀí±äµÃÓÈΪ¸´ÔÓ¡£1984 Ä꣬ҵ½ç¾ÍÓÐÁ½Î»Ñ§Õß Kramer Jeff ºÍ Magee Jeff ÔÚ IEEE ·¢±íÁËһƪÎÄÕ¡¶·Ö²¼Ê½ÏµÍ³µÄ¶¯Ì¬ÅäÖá·£¬ÆäÖвûÊöµ½£º

¶¯Ì¬ÏµÍ³ÅäÖÃÊÇÔÚϵͳÔËÐÐʱ¶ÔÆä½øÐÐÐ޸ĺÍÀ©Õ¹µÄÄÜÁ¦¡£ÔÚ´óÐÍ·Ö²¼Ê½ÏµÍ³ÖУ¬ÕâÊÇÒ»¸ö±Ø²»¿ÉȱµÄ¹¦ÄÜ£¬ÒòΪÈç¹ûÐèҪֹͣÕû¸öϵͳÀ´¶ÔÆä²¿·ÖÓ²¼þ»òÈí¼þ½øÐÐÐ޸ģ¬ÔÚÉú²ú»·¾³ÊÇÄÑÒÔ½ÓÊܵ쬻òÕß»á²úÉú½Ï´ó¾­¼ÃËðʧ¡£ÁíÍ⣬¶¯Ì¬ÅäÖÃÒ²ÓÐÖúÓÚϵͳÔÚÉú²ú»·¾³ÉÏ×é¼þµÄÔöÁ¿¼¯³É£¬ÒÔ´ï³ÉϵͳÑݽøµÄÄ¿µÄ¡£

ÕâÆªÎÄÕÂÖ¸³öÁ˶¯Ì¬ÅäÖöÔÓÚ·Ö²¼Ê½ÏµÍ³µÄÖØÒªÐÔ£¬¼´ÔÚϵͳÔËÐÐʱ£¬ÈçºÎ¾­¼Ã°²È«µØ¶Ôϵͳ½øÐе÷Õû¡£ÏÖÔÚ·Ö²¼Ê½ÏµÍ³ÒѾ­·¢Õ¹µ½ÁË´ÓǰÄÑÒÔÏëÏóµÄ¸´Ôӳ̶ȣ¬³ýÁ˶¯Ì¬ÅäÖã¬ÅäÖùÜÀí»¹ÃæÁÙ¸ü¶àÌôÕ½£¬ÀýÈ磺

ÈçºÎͳһ¹ÜÀíÊýÁ¿ÖÚ¶àµÄ·þÎñÅäÖÃ

ÈçºÎÔÚÒìµØÖÚ¶à»úÆ÷½ÚµãÉϲ¿ÊðÅäÖÃ

ÈçºÎʵÏÖ»Ò¶È

ÈçºÎÈ·¶¨ÅäÖÃÊÇ·ñÉúЧ

ÈçºÎ¶ÔÅäÖýøÐÐÔÖ±¸

¡­

ΪÁ˽â¾öÕâЩÌôÕ½£¬ÅäÖÃÖÐÐÄÓ¦Ô˶øÉú¡£ÅäÖÃÖÐÐľÍÊÇ·Ö²¼Ê½·þÎñÖÐͳһ¹ÜÀí·þÎñÅäÖõÄϵͳ£¬Ëü¾ß±¸¸ßЧºÍ¶¯Ì¬¿ØÖÆ·þÎñµÄÄÜÁ¦¡£ÅäÖÃÖÐÐÄÒ»°ã¾ß±¸·þÎñ×¢²á¡¢·þÎñÅäÖùÜÀí¡¢²¿Êð·þÎñÅäÖõȻù±¾¹¦ÄÜ¡£ÏÂÃæÊÇÒ»¸ö΢·þÎñ¼Ü¹¹ÏÂÅäÖÃÖÐÐĵÄʾÒâͼ£º

ÅäÖÃÖÐÐÄÒ»°ã»á°üº¬·þÎñ¶Ë¡¢¿Í»§¶ËºÍ½çÃæÕâÈý¸ö×é¼þ£ºÃ¿¸ö΢·þÎñÆô¶¯Ê±¿ÉÒÔͨ¹ý¿Í»§¶Ë½øÐзþÎñ×¢²á£»Óû§¿ÉÒÔͨ¹ý½çÃæ´´½¨¡¢Ð޸ĺͲ¿ÊðÅäÖã»¶¯Ì¬ÅäÖù¦ÄÜ¿ÉÒÔͨ¹ý·þÎñ¶ËÊµÊ±ÍÆËÍ¡¢¿Í»§¶Ë¶¨ÆÚÀ­È¡»òÕßÁ½ÕßÍÆÀ­½áºÏÀ´ÊµÏÖ¡£

FreeWheel ÔÆÔ­ÉúÅäÖÃÖÐÐÄʵս

Í´µã

·þÎñÅäÖõÄÊýÁ¿´ó·ùÔö¼Ó

Freewheel ºËÐÄÒµÎñϵͳÖÐÒѲð·Ö³öÊýÊ®¸ö¶ÀÁ¢µÄ΢·þÎñ£¬Ã¿¸ö΢·þÎñ¶¼ÐèÒª²¿Êð¶à¸ö»·¾³£¨Staging¡¢Production¡¢¿ª·¢¡¢²âÊÔ»·¾³£©£¬¶à¸ö¼¯Èº£¬¶à¸öÇøÓò(Region)¡£¿ª·¢ÈËÔ±ÐèҪά»¤¶àÌ×·þÎñÅäÖá£

·þÎñÅäÖõIJ¿Êð·½Ê½²»Í¬

Freewheel ºËÐÄÒµÎñϵͳÔÚÔÆÆ½Ì¨ºÍÊý¾ÝÖÐÐĵIJ¿Êð·½Ê½£¬ÒÔ¼°ÔÚ²»Í¬»·¾³µÄ²¿Êð·½Ê½¸÷²»Ïàͬ¡£¿ª·¢ÈËÔ±ÐèҪͶÈëʱ¼ä³É±¾È¥Ñ§Ï°ºÍ¹ÜÀí¸÷ÖÖ²¿Êð·½Ê½¡£

ȱ·¦¶¯Ì¬ÅäÖù¦ÄÜ

Freewheel ºËÐÄÒµÎñϵͳÔÚÔËÐÐʱÐ޸ķþÎñÅäÖõÄÁ÷³Ì½ÏΪ·±Ëö£¬°üÀ¨Ìá½»¡¢ÆÀÉ󡢺ϲ¢·ÖÖ§¡¢ÔËÐвâÊÔ¡¢´ò°ü¡¢²¿Êð Staging ºÍ Production µÈ¡£Õâ¸öЧÂʲ»ÄÜÂú×ãÍŶÓÐèÇó£¬ÀýÈç Freewheel ×÷ÎªÃæÏòÆóÒµ¼¶¿Í»§Ìṩ¹ã¸æÍ¶·Å·þÎñµÄϵͳ£¬ÔÚ¹ã¸æÍ¶·ÅµÄ¸ß·åÆÚ´¦ÀíµÄÊý¾ÝÁ¿Ô¶¸ßÓÚÆ½³££¬¹¤³ÌʦÍŶÓÐèÒª¶¯Ì¬ÅäÖ÷þÎñµÄ³¬Ê±²ÎÊý£»ÓÖÈçÔÚÉú²ú»·¾³¶ÔÎÊÌâ½øÐж¨Î»ºÍµ÷ÊÔʱ£¬ÐèÒª¾¡¿ìµ÷¸ßÈÕÖ¾¼¶±ð£¬ÒÔ±ã¿ìËÙ½â¾öÎÊÌâ¡£

±£Ö¤ Freewheel ºËÐÄÒµÎñÏµÍ³ÃæÏòÆóÒµ¼¶Óû§µÄ¸ß¿ÉÓÃÐÔ

Èí¼þϵͳ×ÜÊÇ»áå´»úµÄ£¬µ±ÅäÖÃÖÐÐÄϵͳ±»Ðí¶à΢·þÎñÒÀÀµ×öÅäÖùÜÀíʱ£¬Ò»¶¨µÃ¿¼Âǵ½Ëüå´»úʱÆäËû·þÎñ¸ÃÔõô°ì¡£ËùÒÔÅäÖÃÖÐÐÄÐèҪʵÏÖΪÈõÒÀÀµ¶ø·ÇÇ¿ÒÀÀµ£¬¼´ÅäÖÃÖÐÐijöÏÖϵͳ¹ÊÕÏʱ£¬ÆäËû·þÎñÒ²ÄÜÕý³£Æô¶¯ºÍÔËÐС£

±£Ö¤ÅäÖÃÖÐÐĵݲȫÐÔ

ÅäÖÃÖÐÐĵĹÜÀí¶ÔÏóÊDZȽÏÃô¸ÐµÄ·þÎñÅäÖÃÏ¶Ô°²È«ÐÔÓнϸßÒªÇó£¬ÐèÒªºÏÀíÅäÖÃÓû§ºÍ¼¯ÈºµÄ·ÃÎÊȨÏÞ¡£

ÅäÖÃÖÐÐÄÑ¡ÐÍ

ΪÁ˽â¾öÉÏÊöÍ´µã£¬ÎÒÃÇ¿ªÊ¼Îª Freewheel ºËÐÄÒµÎñϵͳÉè¼Æ²¢´î½¨ÅäÖÃÖÐÐÄ¡£ÔÚÑ¡Ðͽ׶Σ¬ÎÒÃDzο¼Á˵±Ê±½ÏΪ³ÉÊìµÄ¼¸¸öÅäÖÃÖÐÐIJúÆ·£¬Èç Apollo¡¢Nacos¡¢Consul µÈ¡£ÅäÖÃÖÐÐĵĵÚÒ»¸ö°æ±¾ÖУ¬ÎÒÃÇÑ¡ÔñÁË Apollo ×÷Ϊ·þÎñ¶ËºÍ½çÃæ£¬ÒòΪ Apollo ÔÚÓû§½çÃæÓѺöȡ¢ºËÐŦÄÜÖ§³Ö¶È¡¢ÉçÇøÎĵµÍêÉÆ¶È·½Ãæ¶¼½ÏΪͻ³ö¡£Apollo ²úÆ·¼Ü¹¹Ö÷Òª°üº¬ Config Service£¨ÌṩÅäÖÃÍÆËͺÍÀ­È¡½Ó¿Ú£©¡¢Admin Service£¨ÌṩÅäÖùÜÀí½Ó¿Ú£©¡¢ Portal£¨Óû§½çÃæ£©ºÍ¿Í»§¶Ë£¬ÈçÏÂͼËùʾ£º

Freewheel ºËÐÄÒµÎñϵͳµ±Ê±ÕýÍù AWS ÔÆ·þÎñÉÏǨá㣬ÎÒÃÇΪÅäÖÃÖÐÐÄ¿ª·¢Á˿ͻ§¶Ë£¬²¢ÔÚ AWS ¿ª·¢»·¾³²¿ÊðÁË Apollo µÄÏà¹Ø·þÎñ¡£µ«ËæºóÎÒÃDzúÉúÁËһЩ¹ËÂÇ¡£

Ê×ÏÈÊÇѧϰά»¤³É±¾£ºFreewheel ºËÐÄÒµÎñϵͳµÄ΢·þÎñ¼Ü¹¹Ê¹Óà GO ¼¼ÊõÕ»£¬Óë Apollo ʹÓÃµÄ Java ²»Ò»Ö£¬¹¤³ÌʦÍŶÓÐèҪͶÈë¶îÍâµÄѧϰ³É±¾£»Ê¹Óà Apollo »¹ÐèÒªÔÚ AWS ÉÏά»¤ËÄÌ×·ÇÔÆÔ­ÉúµÄ·þÎñ£ºConfig Service¡¢Admin Service¡¢Portal ºÍ DB£¬ÓÉÓÚȱ·¦²úÆ·¼¶µÄ Apollo ¼¼ÊõÖ§³Ö£¬»á²úÉú½Ï´óµÄά»¤³É±¾¡£Æä´ÎÊDzúÆ·¹ú¼Ê»¯µÄÎÊÌ⣺Freewheel ¶ÔÓÚ¿ªÔ´²úÆ·µÄʹÓÃÓÐÑϸñµÄÉó¼ÆÁ÷³Ì£¬ÐèÒªÌá½»´úÂë¿â¡¢Ó¢ÎİæµÄ¼Ü¹¹Éè¼ÆºÍʹÓÃ˵Ã÷Îĵµ¡£Apollo ×÷Ϊһ¿î¹úÄÚ×ÔÑвúÆ·£¬Ã»Óз¢²¼ÏêϸµÄÓ¢ÎÄÎĵµ¡£

Òò´ËÎÒÃÇ¿ªÊ¼¿¼²ìÆäËû²úÆ·Èç AWS AppConfig¡£µ÷Ñз¢ÏÖ£¬AppConfig µÄ¹¦ÄÜûÓÐ Apollo ÄÇÃ´È«Ãæ£º

ÅäÖÃÖÐÐÄÒ»¸öÖØÒªµÄ·þÎñ¶ËÍÆË͹¦Äܲ»±» AppConfig Ö§³Ö£¬Õâ»áÓ°ÏìÅäÖÃÖÐÐÄµÄ SLA£¬¼´ÅäÖÃÉúЧµÄʱÑÓ¡£È»¶ø×÷Ϊһ¼Ò B2B ¹«Ë¾£¬Freewheel ¶ÔÅäÖÃÖÐÐÄ SLA µÄÒªÇó²»Ì«¸ß¡£¶øÅäÖÃÖÐÐÄÆäËû¼¸¸öÖØÒª¹¦ÄÜ£º¿Í»§¶ËÀ­È¡¡¢Óû§È¨ÏÞ¿ØÖÆ¡¢Óû§½çÃæ£¬ÎÒÃÇÄÜ»ùÓÚÏÖÓеÄ΢·þÎñ¼Ü¹¹ÓýÏСµÄ¿ª·¢³É±¾ÊµÏÖ¡£

µ«Ê¹Óà AppConfig µÄºÃ´¦ÊÇ£º×÷Ϊ AWS ÔÆÔ­Éú·þÎñ£¬AppConfig ¸úÎÒÃÇµÄ AWS ·þÎñ¼¯ÈºÓÐºÜºÃµÄÆõºÏ¶È£¬ÄÜ·½±ã»ñµÃ AWS ¼¼ÊõÍŶӵÄÖ§³Ö£¬½µµÍѧϰά»¤³É±¾ºÍʹÓóɱ¾¡£ÎÒÃǹÀËãÁËÅäÖÃÖÐÐĵķÑÓã¬Ö÷Òª°üÀ¨ AppConfig API µ÷ÓÃºÍ S3 ·ÑÓ᣼ÙÉèÒ»¸ö΢·þÎñ²¿ÊðÁ½¸öÇøÓò£¬Æô¶¯ 3 ¸ö POD£¬ÅäÖÃÎļþ´óСΪ 10K£¬Ã¿Ìì¸üÐÂÁ½´ÎÅäÖã¬Ã¿·ÖÖÓÂÖѯһ´Î AppConfig£¬ÄÇôÕâ¸ö΢·þÎñʹÓÃÅäÖÃÖÐÐĵķÑÓôóÔ¼ÊÇ 0.6 ÃÀÔª/Ô¡£

×ۺϿ¼ÂÇ Freewheel µÄÒµÎñÐèÇóºÍʹÓóɱ¾ºó£¬ÎÒÃDzÉÓÃÁË»ùÓÚ AWS AppConfig µÄÅäÖÃÖÐÐļܹ¹¡£

ÅäÖÃÖÐÐļܹ¹

ÅäÖÃÖÐÐĵĺËÐÄÄ£¿é°üÀ¨ AWS AppConfig ·þÎñ¶Ë¡¢Î¢·þÎñ¿Í»§¶Ë¡¢Óû§½çÃæ¡£Ö÷ҪʹÓó¡¾°°üÀ¨£º

¸÷¸ö΢·þÎñͨ¹ýÓû§½çÃæ¹ÜÀíÅäÖ㺰üÀ¨´´½¨ÅäÖÃÓ¦ÓóÌÐò£¬Ïò AWS S3 ¶ÁдÅäÖÃÎļþ£¬ ͨ¹ý AppConfig ²¿Êð×îеÄÅäÖã¬ÔÚÊý¾Ý¿âÖмǼÓû§µÄ²Ù×÷ÀúÊ·¡£

¸÷¸ö΢·þÎñͨ¹ý¿Í»§¶Ë¶Ô AppConfig ·þÎñ¶Ë½øÐж¨ÆÚÂÖѯ£¬Ò»µ©·¢ÏÖÅäÖøüУ¬¾Í´Ó AppConfig ·þÎñ¶ËÀ­È¡ÅäÖò¢Ê¹Ö®ÔÚ΢·þÎñÖÐÉúЧ¡£

ÅäÖÃÖÐÐÄÂäµØÊµÏÖ

AWS AppConfig ·þÎñ¶Ë

AWS AppConfig ÊÇ AWS ¿ª·¢ÓÃÀ´´´½¨¡¢¹ÜÀíºÍ¿ìËÙ²¿ÊðÓ¦ÓÃÅäÖõķþÎñ¡£ ¿Í»§¶ËºÍÓû§½çÃæµÄʵÏÖÓë AppConfig Ìṩ·þÎñµÄʵÌåÃÜÇÐÏà¹Ø¡£AppConfig ͨ¹ýÒÔÏÂʵÌåÀ´¹ÜÀíÓ¦ÓÃÅäÖãº

Ó¦ÓóÌÐò£¨Application£©£ºÓ¦ÓóÌÐò¾ÍÊÇÐèÒª AppConfig ÌṩÅäÖùÜÀíµÄÓ¦Óã¬ÈçÔÚ EC2 ʵÀýÉÏÔËÐеÄ΢·þÎñ£¬AWS Lambda µÄÎÞ·þÎñÆ÷Ó¦ÓóÌÐòµÈµÈ¡£

»·¾³£¨Environment£©£º¶ÔÓÚÿ¸öÓ¦ÓóÌÐò£¬¿ÉÒÔ¶¨ÒåÒ»¸ö»ò¶à¸ö»·¾³£¬ÀýÈç Staging »ò Production¡£

ÅäÖã¨Configuration£©ºÍÅäÖÃÎļþ£¨Configuration Profile£©£ºÃ¿¸ö»·¾³ÏÂÖ»ÓÐÒ»¸öÅäÖã¬ÅäÖÃÎļþ¾ÍÊǼǼÅäÖÃÄÚÈݵÄÎļþ¶ÔÏó¡£Ã¿´Î¸üÐÂÅäÖã¬Êµ¼Ê¸üеÄÊÇÅäÖÃÎļþµÄÄÚÈÝ£¨°æ±¾£©¡£

ÅäÖòßÂÔ£¨Deployment Strategy£©£ºÅäÖòßÂÔ¶¨ÒåÁËÅäÖõIJ¿Êð·½Ê½£¬È粿Êð½ÚµãÊÇÏßÐÔÀ©ÕÅ»¹ÊÇÖ¸ÊýÀ©ÕÅ¡¢²¿Êðʱ³¤¡¢¼à¿ØºÍ»Ø¹ö²ßÂԵȡ£

ÏÂͼÊÇ Freewheel ºËÐÄÒµÎñϵͳ¼¯ÈºµÄʵ¼ÊÓ¦Óó¡¾°£¬ÓÉÓÚ Development¡¢Staging ¡¢Production Èý¸ö»·¾³µÄ¼¯Èº»¥Ïà¸ôÀ룬ÎÒÃÇΪ²»Í¬»·¾³µÄ¼¯Èº´´½¨Á˶ÀÁ¢µÄ AppConfig ·þÎñ¶ËºÍÓû§½çÃæ¡£Î¢·þÎñÔÚÓû§½çÃæ´´½¨ÓëÖ®¹ØÁªµÄÓ¦ÓóÌÐò£¬Õâ¸öÓ¦ÓóÌÐò½ö°üº¬Ò»¸ö»·¾³¡£ÎÒÃÇÑ¡ÔñÁË S3 À´´æ´¢ÅäÖÃÎļþ£¬¿ÉÒÔͨ¹ýÓû§½çÃæ¶ÁдÅäÖÃÎļþ¡£Ä¿Ç°ÅäÖÃÖÐÐÄÔÚ²¿ÊðʱʹÓõÄÅäÖòßÂÔÊÇÿ 30 Ã벿Êð 50%µÄ½Úµã¡£

ÅäÖÃÖÐÐĿͻ§¶Ë

¿Í»§¶ËÊÇ΢·þÎñ½øÐÐÅäÖÃÂÖѯºÍÅäÖøüеÄÖØÒª×é¼þ¡£ÎÒÃÇÔÚÅäÖÃÖÐÐĿͻ§¶Ë×öÁËÔÖ±¸´¦Àí£¬´Ó¶øÊµÏÖÁË΢·þÎñ¼¯Èº¶ÔÅäÖÃÖÐÐĵÄÈõÒÀÀµ¡£¼´±ãÅäÖÃÖÐÐĵķþÎñ¶Ë»òÕßÓû§½çÃæ³öÏÖ¹ÊÕÏ£¬Î¢·þÎñ¼¯ÈºµÄÔËÐÐÒ²²¢²»ÊÜÓ°Ï죬ֻÊDz»ÄÜʹÓÃÅäÖùÜÀíµÄ¹¦ÄÜ¡£ÅäÖÃÖÐÐĿͻ§¶ËµÄ¹¤×÷Á÷³ÌÈçÏ£º

΢·þÎñÆô¶¯ºó£¬ÎÒÃǻὫ±¸·ÝÅäÖÃÎļþ¼ÓÔØµ½ÄÚ´æÖУ¬È»ºóÆô¶¯Ò»¸ö Go Routine ¹ØÁªÅäÖÃÖÐÐÄ£¬°´ÕÕÒ»¶¨Ê±¼ä¼ä¸ôÀ´ÂÖѯÅäÖá£Èç¹û·¢ÏÖÅäÖøüУ¬¾Í°Ñ¸üÐÂÄÚÈݺϲ¢µ½ÄÚ´æÅäÖÃºÍÆäËû¶¨ÖƵÄÅäÖÃÖУ¬·ñÔòµÈ´ýÏÂÒ»´ÎÂÖѯ¡£¿Í»§¶ËʹÓà Go ÓïÑÔ¿ª·¢£¬ÏÂÃæÊǹØÁªºÍ²éѯÅäÖÃÖÐÐĵÄʾÀý´úÂ룺

func InitConfigCenter(serviceName string, callbacks
...CustomCallback) {
go func() {
for {
func() {
defer func() {
// ´¦ÀíPanic
}()
appConfigClient := getAppConfigClient()
// ²éѯÅäÖøüУ¬ÈçÓиüÐÂÔòʹ֮ÉúЧ
GetAndMergeAppConfig(appConfigClient, serviceName, callbacks...)
}()
time.Sleep(time.Duration(pollingDuration) * time.Second)
}
}()
}

²ÎÊý serviceName£ºÔÚ·þÎñ¶Ë¾ßÓÐΨһÐԵıêÖ¾·û£¬Ò»°ãµÈͬ΢·þÎñÃû¡£¹ÜÀíÈËÔ±ÔÚÓû§½çÃæÐèÒªÊäÈëͬÑùµÄ serviceName È¥´´½¨ AppConfig Ó¦ÓóÌÐò£¬È»ºó¿Í»§¶ËºÍ·þÎñ¶Ëͨ¹ý¸Ã serviceName Æ¥ÅäÓ¦ÓóÌÐò¡£

²ÎÊý CustomCallback£ºÎ¢·þÎñ¿É¶¨ÖƵÄÐÞ¸ÄÅäÖõĽӿڡ£»ñÈ¡ÅäÖøüк󣬿ͻ§¶Ë»áĬÈÏÐÞ¸ÄÄÚ´æÅäÖÃʹÅäÖÃÉúЧ¡£µ«ÓÐЩÅäÖò»ÊÇ´ÓÄÚ´æÅäÖÃÖжÁÈ¡µÄ£¬ÀýÈç´æ´¢ÔÚÈ«¾Ö±äÁ¿ÀïµÄÅäÖ㬴Ëʱ¿ÉÒÔͨ¹ýÕâ¸ö½Ó¿Ú¶¨ÖƸüÐÂÅäÖõķ½·¨¡£

¿¼Âǵ½ÈõÒÀÀµµÄÉè¼ÆÔ­Ôò£¬¿Í»§¶ËÄÚ´æÅäÖõĸüвÉÓÃÁ˺ϲ¢²ßÂÔ£¨Merge£©¶ø·ÇÌæ´ú²ßÂÔ¡£³õʼÄÚ´æÅäÖôӱ¸·Ý¶ÁÈ¡£¬Ëæºó´Ó·þÎñ¶Ë²»Í£À­È¡×îÐÂÅäÖýøÐкϲ¢¡£·þÎñ¶ËÅäÖÿÉÒÔ¶ÔÄÚ´æÅäÖýøÐÐÈ«Á¿¸²¸Ç¡¢²¿·Ö¸²¸Ç¡¢»òÕßÐÂÔöÅäÖá£

¿Í»§¶ËµÄÄÚ´æÅäÖùÜÀíÊÇ»ùÓÚ Viper£¨"github.com/spf13/viper"£©ÊµÏֵģ¬ºÏ²¢ÅäÖÃʱʹÓÃÁË Viper.MergeConfig ·½·¨£º

func mergeAppConfig(newConfig *appconfig.GetConfigurationOutput,
callbacks ...CustomCallback) {
memoryConfig := config.Get()
if err := memoryConfig.MergeConfig
(bytes.NewReader(newConfig.Content)); err != nil {
// ´¦ÀíÅäÖúϲ¢´íÎó
}
// ¸üÐÂÄÚ´æÅäÖÃ
config.Set(memoryConfig)
// ¸üж¨ÖÆÅäÖÃ
for i, callback := range callbacks {
callback.CustomCallbackFunc(newConfig)
}
}

¿Í»§¶ËµÄÒ»¸öÖØÒªÂß¼­ÊÇÅäÖð汾µÄ±£´æºÍ±È¶Ô¡£¿Í»§¶ËÔÚ±¾µØ´æ´¢ÁË֮ǰÂÖѯ»ñµÃµÄ·þÎñ¶Ë×îÐÂÅäÖð汾£¬Ã¿´Îµ÷Óà AppConfig API ²éѯʱ¶¼»áÊäÈëÕâ¸öÅäÖð汾¡£AppConfig API »á±È½ÏÇëÇóÀïµÄÅäÖð汾ºÍ·þÎñ¶Ë×îеÄÅäÖð汾£¬Á½Õß²»Ò»ÖÂʱ»á·µ»Ø×îеÄÅäÖð汾ºÍÅäÖÃÄÚÈÝ£¬·ñÔò·µ»ØÔ­À´µÄÅäÖð汾¡£°æ±¾²»Ò»ÖÂʱ£¬µ÷Óà API µÄ·ÑÓûá±Èƽʱ¸ßºÜ¶à¡£¿Í»§¶ËÊÕµ½·þÎñ¶Ë´ð¸´ºó£¬ÔٴαȽϱ¾µØºÍ´ð¸´ÀïµÄÅäÖð汾£¬Èç¹û²»Ò»Ö¾ͻᱣ´æÐµİ汾£¬²¢ÇÒ½øÐÐÅäÖúϲ¢¡£ÏÂÃæÊǵ÷Óà AppConfig GetConfiguration API µÄ´úÂ룺

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/appconfig"
)
var latestConfigVersion = "-1" // µÚÒ»´Î²éѯʱµÄ³õʼ°æ±¾
?
func getAppConfig(region, env, clientId, configuration,
applicationName string) (*appconfig.GetConfigurationOutput, error) {
awsConfig := &aws.Config{ Region: aws.String(region) }
mySession := session.Must(session.NewSession(awsConfig))
appConfigClient := appconfig.New(mySession, aws.NewConfig())
return appConfigClient.GetConfiguration(&appconfig.
GetConfigurationInput{
Application: &applicationName,
Environment: &env,
Configuration: &configuration,
ClientConfigurationVersion: &latestConfigVersion,
// ʹÓñ¾µØ¼Ç¼µÄ×îзþÎñ¶ËÅäÖð汾
ClientId: &clientId,
})
}

GetConfiguration ÊäÈë°üÀ¨ AppConfig µÄÓ¦ÓóÌÐòÃû¡¢»·¾³Ãû¡¢ÅäÖÃÃû¡¢ÅäÖÃÎļþ°æ±¾ºÍ¿Í»§¶ËÖ¸¶¨µÄΨһ ClientId£¬Êä³ö GetConfigurationOutput °üÀ¨ÅäÖÃÎļþ°æ±¾ºÍÅäÖÃÄÚÈÝ£¨¿ÉÑ¡Ï¡£

ÅäÖÃÖÐÐÄÓû§½çÃæ

ÅäÖÃÖÐÐÄÓû§½çÃæÊÇÓÃÀ´Í³Ò»¹ÜÀí¸÷¸ö΢·þÎñÅäÖõĴ°¿Ú¡£ÎÒÃÇÔÚ Freewheel ÄÚ²¿ÒµÎñÊý¾Ý²éѯƽ̨ Falcon ÉϴÁËÅäÖÃÖÐÐĵÄÓû§½çÃæ£¬½öÔÊÐí LDAP ÕË»§¿ªÍ¨ÅäÖÃÖÐÐĵķÃÎÊ»ò¹ÜÀíȨÏÞ¡£

AppConfig ·þÎñÔÚ AWS ¿ØÖÆÆ½Ì¨Ò²ÓÐ×Ô¼ºµÄ¹ÜÀí½çÃæ£¬µ«ÊDz»ÄÜÂú×ãÎÒÃǵÄÐèÇó¡£Ê×ÏÈ AWS ¿ØÖÆÆ½Ì¨µÄȨÏÞ¹ÜÀí±È½ÏÑϸñ£¬¹¤³ÌʦÍŶÓÔÚÉú²ú»·¾³Ö»Óв¿·Ö¶ÁȨÏÞ£¬Ã»ÓÐдȨÏÞ£¬Èç¹ûÎÒÃÇÐèÒªÔÚ AWS ¿ØÖÆÆ½Ì¨ÉϹÜÀíºÍ²¿ÊðÅäÖã¬Ã¿´Î¶¼ÐèÒªµ¥¶ÀÉêÇëȨÏÞ¡£ÁíÍâ AppConfig Ô­ÉúµÄ¹ÜÀí½çÃæ±È½Ï¼òµ¥£¬²»ÄÜ¿´µ½¾ßÌåµÄÅäÖÃÏîÄÚÈÝ£¬ÐèҪȥÏàÓ¦µÄ S3 Ò³ÃæÏÂÔØÅäÖÃÎļþ£¬Ò²²»¾ß±¸ÅäÖöԱȺͲ鿴Óû§ÀúÊ·²Ù×÷µÄ¹¦ÄÜ¡£

ÅäÖÃÖÐÐÄÓû§½çÃæ¼Ü¹¹£º

ÅäÖÃÖÐÐÄÓû§½çÃæ°üº¬ÁËǰ¶ËºÍºó¶ËÄ£¿é£¬Ç°¶ËÄ£¿éÓÉ React ʵÏÖ£¬°üÀ¨ÒÔÏÂÒ³Ãæ£º

Ö÷Ò³£ºÕ¹Ê¾ËùÓÐ΢·þÎñÓ¦ÓóÌÐòÁÐ±í¡£

Ó¦ÓÃÒ³Ãæ£ºÕ¹Ê¾µ¥¸ö΢·þÎñÓ¦ÓóÌÐòµÄÏêϸÐÅÏ¢£¬ÓÉÖ÷Ò³½øÈë¡£

´´½¨Ò³Ã棺Ϊһ¸öеÄ΢·þÎñ´´½¨Ó¦ÓóÌÐò£¬ÓÉÖ÷Ò³½øÈë¡£

ÅäÖÃÉÏ´«Ò³Ã棺ÉÏ´«ÐµÄÅäÖÃÎļþ£¬ÓÉÓ¦ÓÃÒ³Ãæ½øÈë¡£

ÅäÖò¿ÊðÒ³Ãæ£ºÑ¡ÔñÒ»¸öÅäÖÃÎļþ°æ±¾½øÐÐÅäÖò¿Êð£¬ÓÉÓ¦ÓÃÒ³Ãæ½øÈë¡£

ÀúÊ·¼ÇÂ¼Ò³Ãæ£ºÕ¹Ê¾Ó¦ÓóÌÐòËùÓв¿ÊðÀúÊ·ºÍÓû§£¬ÓÉÓ¦ÓÃÒ³Ãæ½øÈë¡£

ºó¶ËÄ£¿éÓÉ Node.js ʵÏÖ£¬·ÖΪÅäÖùÜÀíºÍÓû§¹ÜÀíÁ½¸ö×ÓÄ£¿é¡£ÔÚÅäÖùÜÀíÄ£¿éµ÷Óà JS SDK µÄ AppConfig Client ºÍ S3 Client ʵÏÖÉÏÊöǰ¶ËÒ³Ãæ¹¦ÄÜ£»ÔÚÓû§¹ÜÀíÄ£¿éʵÏÖÁËȨÏÞ¹ÜÀíºÍÀúÊ·¼Ç¼¹¦ÄÜ£¬Óû§µÄ´´½¨¡¢ÉÏ´«¡¢²¿ÊðÐÐΪ»á±»¼Ç¼µ½Êý¾Ý¿âÖС£´´½¨Ò»¸ö¿ÉÓÃµÄ AppConfig Ó¦ÓóÌÐòʵ¼ÊÉϰüº¬ÁËËĸö²½Ö裺´´½¨Ó¦ÓóÌÐò£¬´´½¨»·¾³£¬ÉÏ´«³õʼÅäÖÃÎļþ£¬ÔÚÓ¦ÓóÌÐòÖаó¶¨ÅäÖÃÎļþ¡£ÔÚÓ¦ÓóÌÐòÖйØÁªÅäÖÃÎļþºó£¬»á¼Ç¼ÅäÖÃÎļþµÄµØÖ·ºÍ°æ±¾¡£Ã¿´ÎΪÕâ¸öÓ¦ÓÃÉÏ´«²¢²¿ÊðеÄÅäÖÃÎļþºó£¬¹ØÁªÅäÖÃÎļþµÄ°æ±¾¾Í»á±ä¶¯¡£ÔÚÀúÊ·¼ÇÂ¼Ò³Ãæ¿ÉÒÔ¿´µ½Àú´Î²¿ÊðµÄ״̬¡¢¿ªÊ¼Ê±¼ä¡¢ÅäÖð汾¡¢²¿Êðʱ³¤ºÍ²Ù×÷Óû§£¬»¹¿ÉÒÔ¶ÔÅäÖÃÄÚÈݽøÐÐÁé»î¶Ô±È¡£ÏÂÃæ¸ø´ó¼ÒչʾһÏÂÅäÖÃÖÐÐĵÄÓû§½çÃæ¡£

Falcon ƽ̨Ö÷Ò³£º

ÅäÖÃÖÐÐÄÖ÷Ò³£º

ÅäÖÃÖÐÐÄÀúÊ·¼ÇÂ¼Ò³Ãæ£º

Â䵨³£¼ûÎÊÌâ

ÔڴÅäÖÃÖÐÐĵÄʵս¹ý³ÌÖУ¬ÎÒÃDzÈÁ˲»ÉٵĿӣ¬Ò²×ܽáÁËһЩ¾­Ñé¡£ÔÚÕâÀï·ÖÏí¸ø´ó¼Ò£¬Ï£ÍûÄܶԴó¼ÒÓÐËù°ïÖú¡£

ÈçºÎºÏÀíʹÓà AppConfig ·þÎñʹÆäÊÕ·Ñ×îµÍ£¿

GetConfiguration API ÊÇ AWS AppConfig ·þÎñÖÐ×îÖØÒªµÄ API£¬Í¨¹ýÂÖѯÕâ¸ö API ¿ÉÒÔ»ñµÃÅäÖð汾±ä»¯ÐÅÏ¢ºÍ×îеÄÅäÖÃÏîÄÚÈÝ¡£¸Ã API ÇëÇóËù´øµÄ²ÎÊý ClientConfigurationVersion Óë·þÎñ¶Ë×îеÄÅäÖð汾һÖÂʱÊշѽϵͣ¬·ñÔòÊշѽϸߡ£Îª±ÜÃâ¶îÍâÊÕ·Ñ£¬¿Í»§¶ËÒ»¶¨ÒªÔÚ±¾µØ´æ´¢Ö®Ç°²éѯµÄ·þÎñ¶Ë×îеÄÅäÖð汾£¬ÔÚµ÷Óà API ʱʹÓá£

¿Í»§¶Ë»¹ÐèҪעÒâÒ»¸öÂß¼­£¬¾ÍÊǿͻ§¶ËÕæÊµÉúЧµÄÅäÖð汾²»Ò»¶¨µÈͬÓÚ·þÎñ¶Ë×îеÄÅäÖð汾£¬ÒòΪ¿Í»§¶Ë´Ó·¢ÏÖÅäÖð汾±ä»¯µ½Æô¶¯ÅäÖøüÐÂÕâÒ»¹ý³ÌÊÇ¿ÉÄܳö´íµÄ¡£¼´Ê¹¿Í»§¶ËÔÚÅäÖøüйý³Ì³ö´í£¬Ò²Òª±£´æ³ö´í°æ±¾¹©Ï´ε÷ÓÃʹÓá£

ÈçºÎ»ñÈ¡ÓÐЧµÄÅäÖÃÎļþ°æ±¾£¿

AppConfig µÄÅäÖÃÎļþ°æ±¾µÈͬÓÚ S3 Îļþ°æ±¾¡£µ« S3 ÉÏ´«ÅäÖÃÎļþºÍ AppConfig ²¿ÊðÅäÖò»ÊÇÒ»¸öÊÂÎñ²Ù×÷£¬ËùÒÔ×îÐ嵀 S3 Îļþ°æ±¾²»µÈͬÓÚ AppConfig µÄÓÐЧÅäÖÃÎļþ°æ±¾¡£ËùÒÔÒª»ñÈ¡ AppConfig ×îÐÂÉúЧµÄÅäÖÃÎļþ°æ±¾£¬²»Äܵ÷Óà S3 API£¬¶øÊǵ÷Óà AppConfig ListDeploymentsCommand API£¬¶ÁÈ¡·µ»ØÁбíÖÐ×îеÄÅäÖð汾¡£

ÈçºÎÔÚ±¾µØ¿ª·¢»·¾³µ÷ÊÔ AppConfig?

ÔÚ±¾µØ¿ª·¢»·¾³µ÷ÊÔ AppConfig ʱ²»ÄÜʹÓÃÉú²ú»·¾³µÄ IAM ½ÇÉ«£¬¿ÉÒÔʹÓÃÒ»¸ö AWS Õ˺ŵÄÁÙʱƾ֤À´·¢ËÍ AppConfig API ÇëÇó£º

import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
)

func getAWSSession(region, env, accessKey, secretKey,
awsSessionToken string) *session.Session {
awsConfig := &aws.Config{ Region: region }
if env == DEV_ENV {
creds := credentials.NewStaticCredentials(accessKey,
secretKey, awsSessionToken)
awsConfig.Credentials = creds
}
return session.Must(session.NewSession(awsConfig))
}

ÆäÖÐ accessKey¡¢secretKey¡¢awsSessionToken À´Ô´ÓÚ AWS CLI ΪÕâ¸ö AWS Õ˺ÅÌṩµÄÁÙʱƾ֤ÐÅÏ¢£¬¿ÉÔÚ AWS ¿ØÖÆÆ½Ì¨ÉÏÓÃÕ˺ŵǽºóʵʱ²éѯ¡£²»Ìí¼ÓÕâ¸öÁÙʱƾ֤ÐÅÏ¢¾Í»á×Ô¶¯Ê¹Óà EC2 ĬÈÏ»òÕßÅäÖÃµÄ IAM ½Çɫƾ֤¡£

ÈçºÎºÏÀíÅäÖà AppConfig ·þÎñµÄ¶ÁдȨÏÞ£¿

ÒÔ Freewheel ÅäÖÃÖÐÐĵĿͻ§¶ËºÍÓû§½çÃæÎªÀý£¬¿Í»§¶ËÐèÒª·¢ËÍ´óÁ¿ AppConfig ¶ÁÇëÇó£¬Óû§½çÃæÐèÒª·¢ËÍÉÙÁ¿ AppConfig ¶ÁдÇëÇó¡£ËùÒÔÎÒÃÇΪ¿Í»§¶Ë EC2 µÄĬÈÏ IAM ÅäÖÃÁË AppConfig ¶ÁȨÏÞ£¬ÎªÓû§½çÃæ EC2 ÉêÇëÁËÌØÊâ IAM ½ÇÉ«²¢ÎªËüÅäÖÃÁË AppConfig ¶ÁдȨÏÞ¡£ÒªÊ¹ÌØÊâ IAM ½ÇÉ«ÉúЧ£¬ÐèÒªÐÞ¸Ä K8S ²¿ÊðÎļþ£º

// deployment.yaml
spec:
template:
sepc:
serviceAccountName: {{ $.Your.Arn.Account.Name }}

// serviceaccount.yaml
annotations:
eks.amazonaws.com/role-arn: {{ $.Your.Arn.Role.Name }}

ÌØÊâ IAM ½ÇÉ«ÅäÖóɹ¦ºó£¬¿ÉÒÔÔÚ POD Àï²éѯ»·¾³±äÁ¿È·ÈÏ£ºAWS_ROLE_ARN£¬AWS_WEB_IDENTITY_TOKEN_FILE¡£Ê¹ÓÃÌØÊâ IAM ½ÇÉ«£¬ÐèҪͨ¹ý AWS STS »ñÈ¡ÁÙʱƾ֤ºóÔÙ·¢ËÍ AWS ·þÎñÇëÇó¡£×¢ÒâÈçʹÓà JS SDK V3 ·¢ËÍÇëÇó£¬ÔòÐèʹÓà v3.10 »òÒÔÉϰ汾£¨·ñÔò²»Ö§³Ö»ñȡƾ֤µÄ¹¦ÄÜ£©£¬ÈçÏÂËùʾ£º

// AWS JS SDK V3»ñȡƾ֤
const { AppConfigClient } = require("@aws-sdk/client-appconfig");
const { getDefaultRoleAssumerWithWebIdentity } = require("@aws-sdk/client-sts");
const { fromTokenFile } = require("@aws-sdk/credential-provider-web-identity");
const appconfig = new AppConfigClient({ credentials: fromTokenFile({
roleAssumerWithWebIdentity: getDefaultRoleAssumerWithWebIdentity() })
});

ʹÓÃÌØÊâ IAM ½ÇÉ«Óöµ½ ExpiredTokenException Ôõô½â¾ö£¿

EC2 ĬÈÏ IAM µÄȨÏÞ³¤ÆÚÓÐЧ£¬ÌØÊâ IAM ½ÇÉ«µÄƾ֤ÊÇÓÐÆÚÏ޵ġ£Èç¹ûÔÚ·þÎñÔËÐÐʱÓöµ½ÁË ExpiredTokenException£¬ÐèÒªÉóÊÓһϠAWS API Client µÄÉúÃüÖÜÆÚ¡£ÈçÅäÖÃÖÐÐÄÓû§½çÃæ£¬ÎªÃ¿´ÎÇëÇóÖØÐÂÉú³ÉÒ»¸ö AppConfigClient À´±ÜÃâÆ¾Ö¤¹ýÆÚ¡£

ÅäÖÃÖÐÐÄδÀ´Õ¹Íû

ÅäÖÃÇý¶¯×ÊÔ´ÕýÔÚ³ÉÎªÔÆ¼ÆËãµÄÒ»¸öÖØÒª¼¼ÊõÇ÷ÊÆ£¬¼´ÈÏΪ²»¹âÊÇÓ¦Óýø³Ì£¬ÓëÔÆ¼ÆËãÏà¹ØµÄËùÓÐ×ÊÔ´¶¼¿ÉÒÔͨ¹ýÅäÖÃÈ¥Çý¶¯¡£Õ⽫ÁîÅäÖÃÖÐÐĵÄÔÆ¶Ë֮·³äÂú±ä»¯ºÍÌôÕ½¡£Î´À´ÎÒÃÇÒ²»á¼ÌÐøË¼¿¼ÅäÖÃÖÐÐĵįäËûÓ¦ÓÃģʽ£¬±ÈÈçÈçºÎÔÚÔÆ·þÎñƽ̨ÉÏÓëÆäËû·þÎñÕûºÏ£¬ÈçºÎÈ¥¶ÀÁ¢Ö§³ÅijЩҵÎñ³¡¾°µÈµÈ¡£

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

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
ÔÆÔ­Éú¼Ü¹¹¸ÅÊö
K8S¸ß¿ÉÓü¯Èº¼Ü¹¹ÊµÏÖ
ÈÝÆ÷ÔÆ¹ÜÀíÖ®K8S¼¯Èº¸ÅÊö
k8s-ÕûÌå¸ÅÊöºÍ¼Ü¹¹
Ê®·ÖÖÓѧ»áÓÃdocker²¿Êð΢·þÎñ
×îпγÌ
ÔÆ¼ÆË㡢΢·þÎñÓë·Ö²¼Ê½¼Ü¹¹
Æóҵ˽ÓÐÔÆÔ­ÀíÓë¹¹½¨
»ùÓÚKubernetesµÄDevOpsʵ¼ù
ÔÆÆ½Ì¨¼Ü¹¹ÓëÓ¦Ó㨰¢ÀïÔÆ£©
Docker²¿Êð±»²âϵͳÓë×Ô¶¯»¯¿ò¼Üʵ¼ù
³É¹¦°¸Àý
±±¾© ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ͨÓù«Ë¾GE DockerÔ­ÀíÓëʵ¼ùÅàѵ
ij¾ü¹¤Ñо¿µ¥Î» MDA£¨Ä£ÐÍÇý¶¯¼Ü¹¹£©
ÖªÃûÏû·Ñ½ðÈÚ¹«Ë¾ ÁìÓòÇý¶¯Éè¼Æ
ÉîÛÚijÆû³µÆóÒµ Ä£ÐÍÇý¶¯µÄ·ÖÎöÉè¼Æ