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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
±£ÕÏIDC°²È«£º·Ö²¼Ê½HIDS¼¯Èº¼Ü¹¹Éè¼Æ
 
  1522  次浏览      27
 2019-2-13
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚÍøÂ磬 ±¾ÎÄÖ÷Òª´Ó¿ÉÓÃÐÔ¡¢¿É¿¿ÐÔ¡¢¿É¿ØÐÔ¡¢¼à¿ØÈ۶ϵȽǶÈ×öµÄ¼Ü¹¹Éè¼ÆÓë¿ò¼ÜÉè¼Æ£¬·ÖÏíµÄ²úÆ·Ñз¢Ë¼Â·¡£

±³¾°

½üÄêÀ´£¬»¥ÁªÍøÉϰ²È«Ê¼þƵ·¢£¬ÆóÒµÐÅÏ¢°²È«Ô½À´Ô½Êܵ½ÖØÊÓ£¬¶øIDC·þÎñÆ÷°²È«ÓÖÊÇ×ÝÉî·ÀÓùÌåϵÖеÄÖØÒªÒ»»·¡£±£ÕÏIDC°²È«£¬³£ÓõÄÊÇ»ùÓÚÖ÷»úÐÍÈëÇÖ¼ì²âϵͳHost-based Intrusion Detection System£¬¼´HIDS¡£ÔÚHIDSÃæ¶Ô¼¸Ê®Íǫ̀ÉõÖÁÉϰÙÍǫ̀¹æÄ£µÄIDC»·¾³Ê±£¬ÏµÍ³¼Ü¹¹¸ÃÈçºÎÉè¼ÆÄØ£¿¸´ÔӵķþÎñÆ÷»·¾³£¬ÍøÂç»·¾³£¬¾Þ´óµÄÊý¾ÝÁ¿¸øÎÒÃÇ´øÀ´ÁËÄÄЩ¼¼ÊõÌôսĨ£¿

ÐèÇóÃèÊö

¶ÔÓÚHIDS²úÆ·£¬ÎÒÃǰ²È«²¿ÃŵIJúÆ·¾­ÀíÌá³öÁËÒÔÏÂÐèÇó£º

1.Âú×ã50W-100W·þÎñÆ÷Á¿¼¶µÄIDC¹æÄ£¡£

2.²¿ÊðÔڸ߲¢·¢·þÎñÆ÷Éú²ú»·¾³£¬ÒªÇóAgentµÍÐÔÄܵÍËðºÄ¡£

3.¹ã·ºµÄ²¿Êð¼æÈÝÐÔ¡£

4.Æ«ÏòÓ¦ÓòãºÍÓû§Ì¬ÈëÇÖ¼ì²â£¨¿ÉÒÔºÍÄÚºË̬¼ì²â²¿·Ö½âñ¡£

5.Õë¶ÔÀûÓÃÖ÷»úAgentÅŲé©¶´µÄ×î¼±Ð賡¾°Ìṩ»ù±¾µÄÄÜÁ¦£¬¿ÉÒÔʵÏÖº£Á¿»·¾³Ï¿ìËÙ²éÕÒϵͳ©¶´¡£

6.Agent¸úServerµÄÅäÖÃÏ·¢Í¨µÀ°²È«¡£

7.ÅäÖÃÐÅÏ¢¶ÁȡдÈëÐèÒª¼øÈ¨¡£

8.ÅäÖñä¸üÀúÊ·¼Ç¼¡£

9.Agent²å¼þ¾ß±¸×Ô¸üй¦ÄÜ¡£

·ÖÎöÐèÇó

Ê×ÏÈ£¬·þÎñÆ÷ÒµÎñ½ø³ÌÓÅÏȼ¶¸ß£¬HIDS Agent½ø³Ì×Ô¼º¿ÉÒÔÖÕÖ¹£¬µ«²»ÄÜÓ°ÏìËÞÖ÷»úµÄÖ÷ÒªÒµÎñ£¬ÕâÊǵÚÒ»Òªµã£¬ÄÇôҵÎñÐèÒª¾ß±¸È۶Ϲ¦ÄÜ£¬²¢¾ß±¸×ÔÎÒ»Ö¸´ÄÜÁ¦¡£

Æä´Î£¬½ø³Ì±£»î¡¢Î¬³ÖÐÄÌø¡¢ÊµÊ±»ñÈ¡ÐÂÖ¸ÁîÄÜÁ¦£¬°ÙÍǫ̀AgentµÄÈ«Á¿¿ØÖÆÊ±¼äÒ»¶¨Òª¶Ì¡£¾Ù¸ö¼«¶ËµÄÀý×Ó£¬µ±Agent³öÏÖ½ô¼±Çé¿ö£¬ÐèҪȫÁ¿Í£Ö¹Ê±£¬ÄÇôȫÁ¿Í£Ö¹µÄÃüÁîÏ·¢£¬ÐèÒªÔÚ1-2·ÖÖÓÄÚÍê³É£¬ÉõÖÁ30Ãë¡¢20ÃëÄÚÍê³É¡£ÕâЩ½«»áÊǺܴóµÄ¼¼ÊõÌôÕ½¡£

»¹ÓжÔÅäÖö¯Ì¬¸üУ¬ÈÕÖ¾¼¶±ð¿ØÖÆ£¬Ï¸·Ö¾«È·¿ØÖƵ½Ã¿¸öAgentÉϵÄÿ¸öHIDS×Ó½ø³Ì£¬ÄÜ×ÔÓɵؿØÖÆÃ¿¸ö½ø³ÌµÄÆôÍ££¬Ã¿¸öAgentµÄ²ÎÊý£¬Ò²Äܾ«È·µÄ¸Ð֪ÿ̨AgentµÄÉÏÏß¡¢ÏÂÏßÇé¿ö¡£

ͬʱ£¬Agent±¾ÉíÊǰ²È«Agent£¬°²È«µÄÒòËØÒ²Òª¿¼ÂǽøÈ¥£¬°üÀ¨Í¨ÐÅͨµÀµÄ°²È«ÐÔ£¬ÅäÖùÜÀíµÄ°²È«ÐԵȵȡ£

×îºó£¬·þÎñ¶ËÒ²ÒªÓÐÒ»ÖÂÐÔ±£ÕÏ¡¢¿ÉÓÃÐÔ±£ÕÏ£¬¶ÔÓÚ´óÁ¿AgentµÄ¹ÜÀí£¬±ØÐëÄÜʵÏÖÈÎÎñ·Ö̯£¬²¢Ðд¦ÀíÈÎÎñ£¬ÇÒ±£Ö¤Êý¾ÝµÄÒ»ÖÂÐÔ¡£¿¼Âǵ½¹«Ë¾¹æÄ£²»¶ÏµØÀ©´ó£¬ÒµÎñ²»¶ÏµØÔö¶à£¬ÌرðÊÇÃÀÍźʹóÖÚµãÆÀºÏ²¢ºó£¬Ãæ¶ÔµÄ¸÷ÖÖ²Ù×÷ϵͳÎÊÌ⣬²úÆ·»¹Òª¾ß±¸Á¼ºÃµÄ¼æÈÝÐÔ¡¢¿Éά»¤ÐԵȡ£

×ܽáÏÂÀ´£¬²úÆ·¼Ü¹¹Òª·ûºÏÒÔÏÂÌØÐÔ£º

1.¼¯Èº¸ß¿ÉÓá£

2.·Ö²¼Ê½£¬È¥ÖÐÐÄ»¯¡£

3.ÅäÖÃÒ»ÖÂÐÔ£¬ÅäÖÃ¶à°æ±¾¿É×·ËÝ¡£

4.·ÖÖÎÓë»ã×Ü¡£

5.¼æÈݲ¿Êð¸÷ÖÖLinux ·þÎñÆ÷£¬Ö»Î¬»¤Ò»¸ö°æ±¾¡£

6.½ÚÊ¡×ÊÔ´£¬Õ¼ÓýÏÉÙµÄCPU¡¢ÄÚ´æ¡£

7.¾«È·µÄÈÛ¶ÏÏÞÁ÷¡£

8.·þÎñÆ÷ÊýÁ¿¹æÄ£´ïµ½°ÙÍò¼¶µÄ¼¯Èº¸ºÔØÄÜÁ¦¡£

¼¼ÊõÄѵã

ÔÚÁгö²úÆ·ÐèҪʵÏֵŦÄܵ㡢¼¼Êõµãºó£¬ÔÙÀ´·ÖÎöÏÂÓöµ½µÄ¼¼ÊõÌôÕ½£¬°üÀ¨²»ÏÞÓÚÒÔϼ¸µã£º

1.×ÊÔ´ÏÞÖÆ£¬½ÏСµÄCPU¡¢ÄÚ´æ¡£

2.ÎåÊ®ÍòÉõÖÁÒ»°ÙÍǫ̀·þÎñÆ÷µÄAgent´¦Àí¿ØÖÆÎÊÌâ¡£

3.Á¿¼¶´óÁ˺󣬼¯Èº¿ØÖÆ´øÀ´µÄ¿ØÖÆÐ§ÂÊ£¬ÏìÓ¦ÑÓ³Ù£¬Êý¾ÝÒ»ÖÂÐÔÎÊÌâ¡£

4.Á¿¼¶´óÁ˺ó£¬Êý¾Ý´«Êä¶ÔÕû¸ö·þÎñÆ÷ÄÚÍø´øÀ´µÄÁ÷Á¿³å»÷ÎÊÌâ¡£

5.Á¿¼¶´óÁ˺ó£¬ÔËÐл·¾³¸ü¸´ÔÓ£¬AgentÒì³£±íÏֵĸÐÖªÎÊÌâ¡£

6.Á¿¼¶´óÁ˺ó£¬ÒµÎñÈÕÖ¾¡¢³ÌÐòÔËÐÐÈÕÖ¾µÄ´«Êä¡¢´æ´¢ÎÊÌ⣬±»¼à¿ØÒµÎñ·ÃÎÊÁ¿Í»Ôö´øÀ´¼à¿ØÊý¾ÝÁª¶¯Í»Ôö£¬¶ÔÄÚÍø´ø¿í£¬´æ´¢¼¯ÈºµÄ±¬·¢Ñ¹Á¦ÎÊÌâ¡£

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬¼¼ÊõÄѵ㼸ºõ¶¼ÊÇ·þÎñÆ÷µ½´ïÒ»¶¨Á¿¼¶´øÀ´µÄ£¬¶ÔÓÚ´óÁ¿µÄ·þÎñ£¬¼¯Èº·Ö²¼Ê½ÊÇÒµ½ç³£¼ûµÄ½â¾ö·½°¸¡£

¼Ü¹¹Éè¼ÆÓë¼¼ÊõÑ¡ÐÍ

¶ÔÓÚ¹ÜÀíAgentµÄ·þÎñ¶ËÀ´Ëµ£¬ÒªÊµÏָ߿ÉÓá¢ÈÝÔÖÉè¼Æ£¬ÄÇôһ¶¨Òª×ö¶à»ú·¿²¿Ê𣬾ÍÒ»¶¨»áÓöµ½Êý¾ÝÒ»ÖÂÐÔÎÊÌâ¡£ÄÇôÊý¾ÝµÄ´æ´¢£¬¾ÍÒª¿¼ÂÇ·Ö²¼Ê½´æ´¢×é¼þ¡£ ·Ö²¼Ê½Êý¾Ý´æ´¢ÖУ¬´æÔÚÒ»¸ö¶¨Àí½ÐCAP¶¨Àí£º

CAPµÄ½âÊÍ

¹ØÓÚCAP¶¨Àí£¬·ÖΪÒÔÏÂÈýµã£º

1.Ò»ÖÂÐÔ£¨Consistency£©£º·Ö²¼Ê½Êý¾Ý¿âµÄÊý¾Ý±£³ÖÒ»Ö¡£

2.¿ÉÓÃÐÔ£¨Availability£©£ºÈκÎÒ»¸ö½Úµãå´»ú£¬ÆäËû½Úµã¿ÉÒÔ¼ÌÐø¶ÔÍâÌṩ·þÎñ¡£

3.·ÖÇøÈÝ´íÐÔ£¨ÍøÂç·ÖÇø£©Partition Tolerance£ºÒ»¸öÊý¾Ý¿âËùÔڵĻúÆ÷»µÁË£¬ÈçÓ²ÅÌ»µÁË£¬Êý¾Ý¶ªÊ§ÁË£¬¿ÉÒÔÌí¼Óһ̨»úÆ÷£¬È»ºó´ÓÆäËûÕý³£µÄ»úÆ÷°Ñ±¸·ÝµÄÊý¾Ýͬ²½¹ýÀ´¡£

¸ù¾Ý¶¨Àí£¬·Ö²¼Ê½ÏµÍ³Ö»ÄÜÂú×ãÈýÏîÖеÄÁ½Ïî¶ø²»¿ÉÄÜÂú×ãÈ«²¿ÈýÏî¡£Àí½âCAP¶¨ÀíµÄ×î¼òµ¥·½Ê½ÊÇÏëÏóÁ½¸ö½Úµã·Ö´¦·ÖÇøÁ½²à¡£ÔÊÐíÖÁÉÙÒ»¸ö½Úµã¸üÐÂ״̬»áµ¼ÖÂÊý¾Ý²»Ò»Ö£¬¼´É¥Ê§ÁËConsistency¡£Èç¹ûΪÁ˱£Ö¤Êý¾ÝÒ»ÖÂÐÔ£¬½«·ÖÇøÒ»²àµÄ½ÚµãÉèÖÃΪ²»¿ÉÓã¬ÄÇôÓÖɥʧÁËAvailability¡£³ý·ÇÁ½¸ö½Úµã¿ÉÒÔ»¥ÏàͨÐÅ£¬²ÅÄܼȱ£Ö¤ConsistencyÓÖ±£Ö¤Availability£¬ÕâÓֻᵼÖÂɥʧPartition Tolerance¡£

CAPµÄÑ¡Ôñ

ΪÁËÈÝÔÖÉÏÉè¼Æ£¬¼¯Èº½ÚµãµÄ²¿Ê𣬻áÑ¡ÔñµÄÒìµØ¶à»ú·¿£¬ËùÒÔ ¡¸Partition tolerance¡¹ÊDz»¿ÉÄܱÜÃâµÄ¡£ÄÇô¿ÉÑ¡µÄÊÇ AP Óë CP¡£

ÔÚHIDS¼¯ÈºµÄ³¡¾°À¸÷¸öAgent¶Ô¼¯Èº³ÖÐø¿ÉÓÃÐÔûÓзdz£Ç¿µÄÒªÇó£¬ÔÚ¶ÌÔÝʱ¼äÄÚ£¬ÊÇ¿ÉÒÔ³öÏÖÒì³££¬³öÏÖÎÞ·¨Í¨Ñ¶µÄÇé¿ö¡£µ«×îÖÕ״̬±ØÐëÒªÒ»Ö£¬²»ÄÜ´æÔÚ¼¯ÈºÏ·¢¹ØÍ£Ö¸Á¶ø³öÏÖ¸ö±ðAgent²»Ìý´Ó¼¯Èº¿ØÖƵÄÇé¿ö³öÏÖ¡£ËùÒÔ£¬ÎÒÃÇÐèÒªÒ»¸öÂú×ã CP µÄ²úÆ·¡£

Âú×ãCPµÄ²úÆ·Ñ¡Ôñ

ÔÚ¿ªÔ´ÉçÇøÖУ¬±È½Ï³öÃûµÄ¼¸¿îÂú×ãCPµÄ²úÆ·£¬±ÈÈçetcd¡¢ZooKeeper¡¢ConsulµÈ¡£ÎÒÃÇÐèÒª¸ù¾Ý¼¸¿î²úÆ·µÄÌØµã£¬¸ù¾ÝÎÒÃÇÐèÇóÀ´Ñ¡Ôñ·ûºÏÎÒÃÇÐèÇóµÄ²úÆ·¡£

²åÒ»¾ä£¬ÍøÉϺܶàÈË˵ConsulÊÇAP²úÆ·£¬ÕâÊǸö´íÎóµÄÃèÊö¡£¼ÈÈ»ConsulÖ§³Ö·Ö²¼Ê½²¿Êð£¬ÄÇôһ¶¨»á³öÏÖ¡¸ÍøÂç·ÖÇø¡¹µÄÎÊÌ⣬ ÄÇôһ¶¨ÒªÖ§³Ö¡¸Partition tolerance¡¹¡£ÁíÍ⣬ÔÚconsulµÄ¹ÙÍøÉÏ×Ô¼ºÒ²Ìáµ½ÁËÕâµã

Consul is opinionated in its usage while Serf is a more flexible and general purpose tool. In CAP terms, Consul uses a CP architecture, favoring consistency over availability. Serf is an AP system and sacrifices consistency for availability. This means Consul cannot operate if the central servers cannot form a quorum while Serf will continue to function under almost all circumstances.

etcd¡¢ZooKeeper¡¢Consul¶Ô±È

½èÓÃetcd¹ÙÍøÉÏetcdÓëZooKeeperºÍConsulµÄ±È½Ïͼ¡£

ÔÚÎÒÃÇHIDS AgentµÄÐèÇóÖУ¬³ýÁË»ù±¾µÄ·þÎñ·¢ÏÖ ¡¢ÅäÖÃͬ²½ ¡¢ÅäÖÃ¶à°æ±¾¿ØÖÆ ¡¢±ä¸ü֪ͨµÈ»ù±¾ÐèÇóÍ⣬ÎÒÃÇ»¹ÓлùÓÚ²úÆ·°²È«ÐÔÉϵĿ¼ÂÇ£¬±ÈÈç´«ÊäͨµÀ¼ÓÃÜ¡¢Óû§È¨ÏÞ¿ØÖÆ¡¢½ÇÉ«¹ÜÀí¡¢»ùÓÚKeyµÄȨÏÞÉ趨µÈ£¬Õâµã etcd±È½Ï·ûºÏÎÒÃÇÒªÇ󡣺ܶà´óÐ͹«Ë¾¶¼ÔÚʹÓ㬱ÈÈçKubernetes¡¢AWS¡¢OpenStack¡¢Azure¡¢Google Cloud¡¢Huawei CloudµÈ£¬²¢ÇÒetcdµÄÉçÇøÖ§³Ö·Ç³£ºÃ¡£»ùÓÚÕ⼸µãÒòËØ£¬ÎÒÃÇÑ¡Ôñetcd×÷ΪHIDSµÄ·Ö²¼Ê½¼¯Èº¹ÜÀí¡£

Ñ¡Ôñetcd

¶ÔÓÚetcdÔÚÏîÄ¿ÖеÄÓ¦Óã¬ÎÒÃÇ·Ö±ðʹÓò»Í¬µÄAPI½Ó¿ÚʵÏÖ¶ÔÓ¦µÄÒµÎñÐèÇ󣬰´ÕÕÒµÎñ»®·ÖÈçÏ£º

1.Watch»úÖÆÀ´ÊµÏÖÅäÖñä¸üÏ·¢£¬ÈÎÎñÏ·¢µÄʵʱ»ñÈ¡»úÖÆ¡£

2.ÄÔÁÑÎÊÌâÔÚetcdÖв»´æÔÚ£¬etcd¼¯ÈºµÄÑ¡¾Ù£¬Ö»ÓÐͶƱ´ïµ½ N/2+1 ÒÔÉÏ£¬²Å»áÑ¡×öLeader£¬À´±£Ö¤Êý¾ÝÒ»ÖÂÐÔ¡£ÁíÍâÒ»¸öÍøÂç·ÖÇøµÄMember½Úµã½«ÎÞÖ÷¡£

3.ÓïÑÔÇ׺ÍÐÔ£¬Ò²ÊÇGolang¿ª·¢µÄ£¬Client SDK¿âÎȶ¨¿ÉÓá£

4.Key´æ´¢µÄÊý¾Ý½á¹¹Ö§³Ö·¶Î§ÐÔµÄKey²Ù×÷¡£

5.User¡¢RoleȨÏÞÉ趨²»Í¬¶ÁдȨÏÞ£¬À´¿ØÖÆKey²Ù×÷£¬±ÜÃâÆäËû¿Í»§¶ËÐÞ¸ÄÆäËûKeyµÄÐÅÏ¢¡£

6.TLSÀ´±£Ö¤Í¨µÀÐÅÏ¢´«µÝ°²È«¡£

7.Txn·Ö²¼Ê½ÊÂÎñAPIÅäºÏCompare APIÀ´È·¶¨Ö÷»úÉÏÏßµÄKeyΨһÐÔ¡£

8.Lease×âÔ¼»úÖÆ£¬¹ýÆÚKeyÊÍ·Å£¬¸üºÃµÄ¸ÐÖªÖ÷»úÏÂÏßÐÅÏ¢¡£

9.etcdµ×²ãKeyµÄ´æ´¢ÎªBTree½á¹¹£¬²éÕÒʱ¼ä¸´ÔÓ¶ÈΪO£¨©Sn£©£¬°ÙÍò¼¶ÉõÖÁǧÍò¼¶KeyµÄ²éÕÒºÄÊ±Çø±ð²»´ó¡£

etcd KeyµÄÉè¼Æ

ǰ׺°´½ÇÉ«É趨£º

1.ServerÅäÖÃÏ·¢Ê¹Óà /hids/server/config/{hostname}/master¡£

2.Agent×¢²áÉÏÏßʹÓà /hids/agent/master/{hostname}¡£

3.PluginÅäÖûñȡʹÓà /hids/agent/config/{hostname}/plugin/ID/conf_name¡£

Server Watch /hids/server/config/{hostname}/master£¬ÊµÏÖAgentÖ÷»úÉÏÏßµÄ˲¼ä¸ÐÖª¡£Agent Watch /hids/server/config/{hostname}/À´»ñÈ¡ÅäÖñä¸ü£¬ÈÎÎñÏ·¢¡£Agent×¢²áµÄKey´øÓÐLease Id£¬²¢ÆôÓÃkeepalive£¬ÏÂÏߺó˲¼ä¸ÐÖª¡£ £¨Òì³£ÏÂÏߣ¬»áÓÐ1/3µÄkeepaliveʱ¼äÑÓ³Ù£©

¹ØÓÚKeyµÄȨÏÞ£¬¸ù¾Ý²»Í¬Ç°×º£¬É趨²»Í¬RoleȨÏÞ¡£¸³Öµ¸ø²»Í¬µÄUser£¬À´ÊµÏÖ¶ÔKeyµÄȨÏÞ¿ØÖÆ¡£

etcd¼¯Èº¹ÜÀí

ÔÚetcd½ÚµãÈÝÔÖ¿¼ÂÇ£¬¿¼ÂÇDNS¹ÊÕÏʱ£¬½Úµã»áÑ¡Ôñ²¿ÊðÔÚ¶à¸ö³ÇÊУ¬¶à¸ö»ú·¿£¬ÒÔÎÒÃÇ·þÎñÆ÷»ú·¿Ñ¡ÔñÀ´¿´£¬Ôڴ󲿷ֻú·¿¶¼ÓÐÒ»¸ö½Úµã£¬×ۺϳÐÔØÐèÇó£¬ÎÒÃÇÑ¡ÔñÁËN̨·þÎñÆ÷²¿ÊðÔÚ¸ö±ðÖØÒª»ú·¿£¬À´Âú×ã¸ºÔØ¡¢ÈÝÔÖÐèÇó¡£µ«¶ÔÓÚetcdÕâÖÖ·Ö²¼Ê½Ò»ÖÂÐÔÇ¿µÄ×é¼þÀ´Ëµ£¬Ã¿¸öд²Ù×÷¶¼ÐèÒªN/2-1µÄ½ÚµãÈ·Èϱä¸ü£¬²Å»á½«Ð´ÇëÇóдÈëÊý¾Ý¿âÖУ¬ÔÙͬ²½µ½¸÷¸ö½Úµã£¬ÄÇôÒâζ׎ڵãÔ½¶à£¬ÐèҪȷÈϵÄÍøÂçÇëÇóÔ½¶à£¬ºÄʱԽ¶à£¬·´¶ø»áÓ°Ï켯Ⱥ½ÚµãÐÔÄÜ¡£Õâµã£¬ÎÒÃǺóÐø½«ÌáÉýµ¥¸ö·þÎñÆ÷ÐÔÄÜ£¬ÒÔ¼°ÎþÉü²¿·ÖÈÝÔÖÐÔÀ´ÌáÉý¼¯Èº´¦ÀíËÙ¶È¡£

¿Í»§¶ËÌîдµÄIPÁÐ±í£¬°üº¬ÓòÃû¡¢IP¡£IPÓÃÀ´¹æ±ÜDNS¹ÊÕÏ£¬ÓòÃûÓÃÀ´×öMember½Úµã¸üС£×îºÃ²»ÒªÊ¹ÓÃDiscover·½°¸£¬±ÜÃâ¶ÔÄÚÍøDNS·þÎñÆ÷²úÉú½Ï´óѹÁ¦¡£

ͬʱ£¬ÔÚÅäÖÃetcd½ÚµãµÄµØÖ·Ê±£¬Ò²Òª¿¼Âǵ½ÄÚÍøDNS¹ÊÕϵij¡¾°£¬µØÖ·Ìîд»á»ìºÏIP¡¢ÓòÃûÁ½ÖÖÐÎʽ¡£

1.IPµÄµØÖ·£¬±ãÓÚ¹æ±ÜÄÚÍøDNS¹ÊÕÏ¡£

2.ÓòÃûÐÎʽ£¬±ãÓÚ×ö¸ö±ð½Úµã¸üÌæ»òÀ©ÈÝ¡£

ÎÒÃÇÔÚÉè¼Æ²úÆ·¼Ü¹¹Ê±£¬ÎªÁ˰²È«ÐÔ£¬¿ªÆôÁËTLSÖ¤ÊéÈÏÖ¤£¬µ±½Úµã±ä¸üʱ£¬Ö¤ÊéµÄÉú³ÉҲͬÑùÒª¿¼Âǵ½ÉÏÃæÁ½ÖÖ·½°¸µÄÓ°Ï죬֤ÊéÀïÐèÒª°üº¬¹Ì¶¨IP£¬ÒÔ¼°DNSÓòÃû·¶Î§µÄÁ½ÖÖ¸ñʽ¡£

etcd Cluster½ÚµãÀ©ÈÝ

½ÚµãÀ©ÈÝ£¬¹Ù·½ÊÖ²áÉÏÒ²ÓÐÍêÕûµÄ·½°¸£¬etcdµÄClientÀïʵÏÖÁ˽¡¿µ¼ì²âÓë¹ÊÕÏÇ¨ÒÆ£¬ÄÜ×Ô¶¯µÄÇ¨ÒÆµ½½ÚµãIPÁбíÖÐµÄÆäËû¿ÉÓÃIP¡£Ò²Äܶ¨Ê±¸üÐÂetcd Node List£¬¶ÔÓÚetcd ClusterµÄ¼¯Èº½Úµã±ä¸üÀ´Ëµ£¬²»´æÔÚÎÊÌâ¡£ÐèÒªÎÒÃÇ×¢ÒâµÄÊÇ£¬TLSÖ¤ÊéµÄ¼æÈÝ¡£

·Ö²¼Ê½HIDS¼¯Èº¼Ü¹¹Í¼

¼¯ÈººËÐÄ×é¼þ¸ß¿ÉÓã¬ËùÓÐAgent¡¢Server¶¼ÒÀÀµ¼¯Èº£¬¶¼¿ÉÒÔÎÞ·ìÀ©Õ¹£¬ÇÒ²»Ó°ÏìÕû¸ö¼¯ÈºµÄÎȶ¨ÐÔ¡£¼´Ê¹ServerÈ«²¿å´»ú£¬Ò²²»Ó°ÏìËùÓÐAgentµÄ¼ÌÐø¹¤×÷¡£

ÔÚÒÔºóServer°æ±¾Éý¼¶Ê±£¬Agent²»»áÖжϣ¬Ò²²»»á´øÀ´Ñ©±ÀʽµÄÓ°Ïì¡£etcd¼¯Èº¿ÉÒÔ×öµ½µ¥½ÚµãÉý¼¶£¬Ò»Ö±µ½Õû¸ö¼¯ÈºÉý¼¶£¬¸÷¸ö×é¼þÈ«¶¼½âñî¡£

±à³ÌÓïÑÔÑ¡Ôñ

¿¼Âǵ½¹«Ë¾·þÎñÆ÷Á¿´ó£¬ÒµÎñ¸´ÔÓ£¬ÐèÇó»·¾³¶à±ä£¬²Ù×÷ϵͳ¿ÉÄܰüÀ¨¸÷ÖÖLinuxÒÔ¼°WindowsµÈ¡£ÎªÁ˱£Ö¤ÏµÍ³µÄ¼æÈÝÐÔ£¬ÎÒÃÇÑ¡ÔñÁËGolang×÷Ϊ¿ª·¢ÓïÑÔ£¬Ëü¾ß±¸ÒÔÏÂÌØµã£º

1.¿ÉÒÔ¾²Ì¬±àÒ룬ֱ½Óͨ¹ýsyscallÀ´ÔËÐУ¬²»ÒÀÀµlibc£¬¼æÈÝÐԸߣ¬¿ÉÒÔÔÚËùÓÐLinuxÉÏÖ´ÐУ¬²¿Êð±ã½Ý¡£

2.¾²Ì¬±àÒëÓïÑÔ£¬Äܽ«¼òµ¥µÄ´íÎóÔÚ±àÒëǰ¾Í·¢ÏÖ¡£

3.¾ß±¸Á¼ºÃµÄGC»úÖÆ£¬Õ¼ÓÃϵͳ×ÊÔ´ÉÙ£¬¿ª·¢³É±¾µÍ¡£

4.ÈÝÆ÷»¯µÄºÜ¶à²úÆ·¶¼ÊÇGolang±àд£¬±ÈÈçKubernetes¡¢DockerµÈ¡£

5.etcdÏîĿҲÊÇGolang±àд£¬Àà¿â¡¢²âÊÔÓÃÀý¿ÉÒÔÖ±½ÓÓã¬SDKÖ§³Ö¿ìËÙ¡£

6.Á¼ºÃµÄCSP²¢·¢Ä£ÐÍÖ§³Ö£¬¸ßЧµÄЭ³Ìµ÷¶È»úÖÆ¡£

²úÆ·¼Ü¹¹´ó·½Ïò

HIDS²úÆ·Ñз¢Íê³Éºó£¬²¿ÊðµÄ·þÎñ¶¼ÔËÐÐן÷ÖÖÒµÎñµÄ·þÎñÆ÷£¬ÒµÎñµÄÖØÒªÐÔÅÅÔÚµÚÒ»£¬ÎÒÃDzúÆ·µÄ¹¦ÄÜÅÅÔÚºóÃæ¡£Îª´Ë£¬È·¶¨Á˼¸¸ö²úÆ·µÄ´ó·½Ïò£º

¸ß¿ÉÓã¬Êý¾ÝÒ»Ö£¬¿ÉºáÏòÀ©Õ¹¡£

ÈÝÔÖÐԺã¬ÄÜÓ¦¶Ô»ú·¿¼¶µÄÍøÂç¹ÊÕÏ¡£

¼æÈÝÐԺã¬Ö»Î¬»¤Ò»¸ö°æ±¾µÄAgent¡£

ÒÀÀµµÍ£¬²»ÒÀÀµÈκζ¯Ì¬Á´½Ó¿â¡£

ÇÖÈëÐԵͣ¬²»×öHook£¬²»×öϵͳÀà¿â¸ü¸Ä¡£

È۶Ͻµ¼¶¿É¿¿£¬Äþ¿É×Ô¼º¹Òµô£¬Ò²²»Ó°ÏìÒµÎñ ¡£

²úƷʵÏÖ

ƪ·ùÏÞÖÆ£¬½öÌÖÂÛ¿ò¼ÜÉè¼Æ¡¢ÈÛ¶ÏÏÞÁ÷¡¢¼à¿Ø¸æ¾¯¡¢×ÔÎÒ»Ö¸´ÒÔ¼°²úƷʵÏÖÉϵÄÖ÷½ø³ÌÓë½ø³Ì¼à¿Ø¡£

¿ò¼ÜÉè¼Æ

ÈçÉÏͼ£¬ÔÚ¿ò¼ÜµÄÉè¼ÆÉÏ£¬·â×°³£ÓÃÀà¿â£¬³éÏ󻯶¨ÒåInterface£¬°þÀëetcd Client£¬È«¾Ö»¯Logger£¬³éÏó»¯AppµÄÆô¶¯¡¢Í˳ö·½·¨¡£Ê¹µÃ¸÷Ä£¿é£¨ÒÔϼò³ÆApp£©Ö»ÐèҪʵÏÖ×Ô¼ºµÄÒµÎñ¼´¿É£¬¿ÉÒÔ·½±ã¿ì½ÝµÄ½øÐÐÂß¼­±àд£¬ÎÞÐè¹ØÐĵײãʵÏÖ¡¢ÅäÖÃÀ´Ô´¡¢ÖØÊÔ´ÎÊý¡¢ÈÛ¶Ï·½°¸µÈµÈ¡£

ɳÏä¸ôÀë

¿¼Âǵ½×Ó½ø³Ì²»ÄÜÎÞÏÞµÄÔö³¤ÏÂÈ¥£¬ÄÇô±ØÈ»ÓÐÒ»¸ö½ø³Ì°üº¬¶à¸öÄ£¿éµÄ¹¦ÄÜ£¬¸÷AppÖ®¼ä¼ÈÄÜʹÓù«Óõײã×é¼þ£¨Logger¡¢etcd ClientµÈ£©£¬ÓÖÄÜÈñ˴ËÖ®¼ä»¥²»Ó°Ï죬ÕâÀï½øÐÐÁËɳÏ仯´¦Àí£¬¸÷¸öÊôÐÔ¶ÔÏó½öÔÚ¸÷AppµÄsandboxÀïÉúЧ¡£Í¬ÑùÄÜʵÏÖÁËApp½ø³ÌµÄÐÔÄÜÈÛ¶Ï£¬Í£Ö¹ËùÓеÄÒµÎñÂß¼­¹¦ÄÜ£¬µ«ÓÖÄܾßÓлù±¾µÄ×ÔÎÒ»Ö¸´¹¦ÄÜ¡£

IConfig

¶Ô¸÷AppµÄÅäÖóéÏ󻯴¦Àí£¬ÊµÏÖIConfigµÄ¹²Óз½·¨½Ó¿Ú£¬ÓÃÓÚ¶ÔÅäÖõĺ¯Êýµ÷Ó㬱ÈÈçCheckµÄ¼ì²â·½·¨£¬¼ì²âÅäÖúϷ¨ÐÔ£¬¼ì²âÅäÖõÄ×î´óÖµ¡¢×îСֵ·¶Î§£¬¹æ±ÜʹÓÃÈËÔ±ÅäÖò»ÔÚºÏÀí·¶Î§ÄÚµÄÇé¿ö£¬´Ó¶ø±ÜÃâ´øÀ´µÄ·çÏÕ¡£

¿ò¼Üµ×²ãÓÃReflectÀ´´¦ÀíJSONÅäÖ㬽âÎö¶ÁÈ¡ÌîдµÄÅäÖÃÏ¸úConfig¶ÔÏó¶Ô±È£¬Ìî³äµ½¶ÔÓ¦StructµÄÊôÐÔÉÏ£¬ÔÊÐíJSONÅäÖÃÀïÖ»Ìîд±ä»¯µÄÅäÖã¬Ã»ÌîдµÄÅäÖÃÏÔòʹÓÃConfig¶ÔÓ¦StructµÄĬÈÏÅäÖᣱãÓÚÁé»î´¦ÀíÅäÖÃÐÅÏ¢¡£

type IConfig interface {
Check() error //¼ì²âÅäÖúϷ¨ÐÔ
}

func ConfigLoad(confByte []byte, config IConfig)

(IConfig, error) {
...
//·´ÉäÉú³ÉÁÙʱµÄIConfig
var confTmp IConfig
confTmp = reflect.New(reflect.ValueOf(config).Elem().Type()).

Interface().(IConfig)
...

//·´Éä confTmp µÄÊôÐÔ
confTmpReflect := reflect.TypeOf(confTmp).Elem()
confTmpReflectV := reflect.ValueOf(confTmp).Elem()

//·´Éäconfig IConfig
configReflect := reflect.TypeOf(config).Elem()
configReflectV := reflect.ValueOf(config).Elem()
...
for i = 0; i < num; i++ {
//±éÀú´¦Àíÿ¸öField
envStructTmp := configReflect.Field(i)
//¸ù¾ÝÅäÖÃÖеÄÏÀ´¸²¸ÇĬÈÏÖµ
if envStructTmp.Type == confStructTmp.Type {
configReflectV.FieldByName(envStructTmp.Name).

Set(confTmpReflectV.Field(i))


Timer¡¢Clockµ÷¶È

ÔÚÒµÎñÊý¾Ý²úÉúʱ£¬ºÜ¶àµØ·½ÐèÒª¼Ç¼ʱ¼ä£¬Ê±¼äµÄ»ñȡҲ»á²úÉúºÜ¶àϵͳµ÷Óá£ÓÈÆäÊÇÔÚÿÃëÖÓ²úÉú³ÉǧÉÏÍò¸öʼþ£¬ÕâЩʼþ¶¼ÐèÒªµ÷Óûñȡʱ¼ä½Ó¿Ú£¬½øÐÐclock_gettimeµÈϵͳµ÷Ó㬻á´ó´óÔö¼ÓϵͳCPU¸ºÔØ¡£ ¶øºÜ¶àʼþ²úÉúʱ¼äµÄ׼ȷÐÔÒªÇ󲻸ߣ¬¾«È·µ½Ã룬»òÕß¼¸°Ù¸öºÁÃë¼´¿É£¬ÄÇô¿ò¼ÜÀïʵÏÖÁËÒ»¸ö¿ÅÁ£¶È·ûºÏÐèÇóµÄ£¨±ÈÈç100ms¡¢200ms¡¢»òÕß1sµÈ£©¼ä¸ôʱ¼ä¸üеÄʱÖÓ£¬¼´Âú×ãʼþ¶Ôʱ¼äµÄÐèÇó£¬ÓÖ¼õÉÙÁËϵͳµ÷Óá£

ͬÑù£¬ÔÚÓÐЩTicker³¡¾°ÖУ¬TickerµÄ¼ä¸ô¿ÅÁ£ÒªÇ󲻸ßʱ£¬Ò²¿ÉÒԺϲ¢³ÉÒ»¸öTicker£¬¼õÉÙ¶ÔCPUʱÖӵĵ÷Óá£

Catcher

ÔÚ¶àЭ³Ì³¡¾°Ï£¬»áÓõ½ºÜ¶àЭ³ÌÀ´´¦Àí³ÌÐò£¬¶ÔÓÚ¸ö±ðЭ³ÌµÄpanic´íÎó£¬ÉϲãÏß³ÌÒªÓÐÒ»¸öÁ¼ºÃµÄ²¶»ñ»úÖÆ£¬Äܽ«Ð­³Ì´íÎóÅ׳öÈ¥£¬²¢Äָܻ´ÔËÐУ¬²»ÒªÈýø³Ì±ÀÀ£Í˳ö£¬Ìá¸ß³ÌÐòµÄÎȶ¨ÐÔ¡£

³éÏó½Ó¿Ú

¿ò¼Üµ×²ã³éÏ󻯷â×°SandboxµÄInit¡¢Run¡¢Shutdown½Ó¿Ú£¬¹æ·¶¸÷AppµÄ¶ÔÍâ½Ó¿Ú£¬ÈÃAppµÄ³õʼ»¯¡¢ÔËÐС¢Í£Ö¹µÈ²Ù×÷¶¼±ê×¼»¯¡£AppµÄÄ£¿éÒµÎñÂß¼­£¬²»ÐèÒª¹Ø×¢PIDÎļþ¹ÜÀí£¬²»¹Ø×¢Ó뼯ȺͨѶ£¬²»¹ØÐÄÓ븸½ø³ÌͨѶµÈͨÓòÙ×÷£¬Ö»ÐèҪʵÏÖ×Ô¼ºµÄÒµÎñÂß¼­¼´¿É¡£AppÓë¿ò¼ÜµÄͳһ¿ØÖÆ£¬²ÉÓÃContext°üÒÔ¼°Sync.CondµÈÌõ¼þËø×÷Ϊͬ²½¿ØÖÆÌõ¼þ£¬À´Í¬²½AppÓë¿ò¼ÜµÄÉúÃüÖÜÆÚ£¬Í¬²½¶àЭ³ÌÖ®¼äͬ²½£¬²¢ÊµÏÖAppµÄ°²È«Í˳ö£¬±£Ö¤Êý¾Ý²»¶ªÊ§¡£

ÏÞÁ÷

ÍøÂçIO

1.ÏÞÖÆÊý¾ÝÉϱ¨ËÙ¶È¡£

2.¶ÓÁд洢Êý¾ÝÈÎÎñÁÐ±í¡£

3.´óÓÚ¶ÓÁ㤶ÈÊý¾Ý¶ªÆú¡£

4.¶ªÆúÊý¾Ý×ÜÊý¼ÆÊý¡£

5.¼ÆÊýÐÅÏ¢×÷ΪÐÄÌø×´Ì¬Êý¾ÝÉϱ¨µ½ÈÕÖ¾ÖÐÐÄ£¬ÓÃÓÚÊý¾Ý¶ÔÕË¡£

´ÅÅÌIO

³ÌÐòÔËÐÐÈÕÖ¾£¬¶ÔÈÕÖ¾¼¶±ð»®·Ö£¬²Î¿¼ /usr/include/sys/syslog.h£º

1.LOG_EMERG

2.LOG_ALERT

3.LOG_CRIT

4.LOG_ERR

5.LOG_WARNING

6.LOG_NOTICE

7.LOG_INFO

8.LOG_DEBUG

ÔÚ´úÂë±àдʱ£¬¸ù¾ÝÐèÇóÑ¡Óü¶±ð¡£¼¶±ðÔ½µÍÈÕÖ¾Á¿Ô½´ó£¬ÖØÒª³Ì¶ÈÔ½µÍ£¬Ô½²»ÐèÒª·¢ËÍÖÁÈÕÖ¾ÖÐÐÄ£¬Ð´Èë±¾µØ´ÅÅÌ¡£ÄÇôÔÚÒì³£Çé¿öÅŲéʱ£¬·½±ã²Î¿¼¡£

ÈÕÖ¾Îļþ´óС¿ØÖÆ£¬·Ö2¸öÎļþ£¬Ã¿¸öÎļþ²»³¬¹ý¹Ì¶¨´óС£¬±ÈÈç20M¡¢50MµÈ¡£²¢ÇÒ£¬¶ÔÁ½¸öÎļþ½øÐÐÀ´»ØÐ´£¬±ÜÃâÈÕ־дÂú´ÅÅ̵ÄÇé¿ö¡£

IRetry

ΪÁ˼ÓÇ¿AgentµÄ³°ôÐÔ£¬²»ÄÜÒòΪijЩRPC¶¯×÷ʧ°Üºóµ¼ÖÂÕûÌ幦Äܲ»¿ÉÓã¬Ò»°ã»áÓÐÖØÊÔ¹¦ÄÜ¡£Agent¸úetcd ClusterÒ²ÊÇTCP³¤Á¬½Ó£¨HTTP2£©£¬µ±½ÚµãÖØÆô¸ü»»»òÍøÂ翨¶ÙµÈÒ쳣ʱ£¬Agent»áÖØÁ¬£¬ÄÇÃ´ÖØÁ¬µÄƵÂÊ¿ØÖÆ£¬²»ÄÜÊÇËÀÑ­»·°ãµÄÖØÊÔ¡£¼ÙÉè·þÎñÆ÷ÄÚÍø½»»»»úÒòÄÚÍøÁ÷Á¿½Ï´ó²úÉú¶¶¶¯£¬´¥·¢ÁËAgentÖØÁ¬»úÖÆ£¬²»¶ÏµÄÖØÁ¬ÓÖ¼ÓÖØÁ˽»»»»úµÄ¸ºµ££¬Ôì³ÉÑ©±ÀЧӦ£¬ÕâÖÖÉè¼Æ±ØÐëÒª±ÜÃâ¡£ ÔÚÿ´ÎÖØÊÔºó£¬ÐèÒª×öÒ»¶¨µÄ»ØÍË»úÖÆ£¬³£¼ûµÄÖ¸Êý¼¶»ØÍË£¬±ÈÈçÈçÏÂÉè¼Æ£¬ÔÚ¹æ±ÜÑ©±À³¡¾°Ï£¬ÓÖÄܱ£ÕÏAgentµÄ³°ôÐÔ£¬É趨×î´óÖØÊÔ¼ä¸ô£¬Ò²±ÜÃâÁËAgentʧ¿ØµÄÎÊÌâ¡£

//ÍøÂç¿âÖØÊÔInterface
type INetRetry interface {
//¿ªÊ¼Á¬½Óº¯Êý
Connect() error
String() string
//»ñÈ¡×î´óÖØÊÔ´ÎÊý
GetMaxRetry() uint
...
}
// µ×²ãʵÏÖ
func (this *Context) Retry(netRetry INetRetry) error {
...
maxRetries = netRetry.GetMaxRetry() //×î´óÖØÊÔ´ÎÊý
hashMod = netRetry.GetHashMod()
for {
if c.shutting {
return errors.New("c.shutting is true...")
}
if maxRetries > 0 && retries >= maxRetries {
c.logger.Debug("Abandoning %s after %d retries.", netRetry.String(), retries)
return errors.New("³¬¹ý×î´óÖØÊÔ´ÎÊý")
}
...
if e := netRetry.Connect(); e != nil {
delay = 1 << retries
if delay == 0 {
delay = 1
}
delay = delay * hashInterval
...
c.logger.Emerg("Trying %s after %d seconds , retries:%d,error:%v", netRetry.String(), delay, retries, e)
time.Sleep(time.Second * time.Duration(delay))
}
...
}

ʼþ²ð·Ö

°ÙÍǫ̀IDC¹æÄ£µÄAgent²¿Êð£¬ÔÚÈÎÎñÖ´ÐС¢¼¯ÈºÍ¨Ñ¶»ò¶ÔËÞÖ÷»ú²úÉú×ÊÔ´Ó°Ïìʱ£¬Îñ±ØÒª´í·å½øÐУ¬¸ù¾Ýÿ̨Ö÷»úµÄÎ¨Ò»ÌØÕ÷ȡ죬²ð·ÖÖ´ÐУ¬±ÜÃâÔì³ÉÑ©±ÀЧӦ¡£

¼à¿Ø¸æ¾¯

¹Åʱºò£¬Ðоü´òÕÌʱ£¬Ìᳫ¡¸±øÂíδ¶¯£¬Á¸²ÝÏÈÐС¹£¬ÎÞÒÉÊÇÀä±øÆ÷ʱ´ú¾ö¶¨Ê¤¸º×ßÏòµÄÖØÒªÒòËØ¡£×ö²úÆ·Ò²ÊÇ£¬ÓÈÆäÊÇ´óÐͲúÆ·£¬Òª¶Ô×Ô¼ºÔËÐÐ×´¿öÓÐÏêϸµÄÕÆ¿Ø£¬×öºÃ¼à¿Ø¸æ¾¯£¬²ÅÄÜÈ·±£²úÆ·µÄ³É¹¦¡£

¶ÔÓÚetcd¼¯ÈºµÄ¼à¿Ø£¬×é¼þ±¾ÉíÌṩÁËMetricsÊý¾ÝÊä³ö½Ó¿Ú£¬¹Ù·½ÍƼöÁËPrometheusÀ´²É¼¯Êý¾Ý£¬Ê¹ÓÃGrafanaÀ´×ö¾ÛºÏ¼ÆË㡢ͼ±ê»æÖÆ£¬ÎÒÃÇ×öÁËAlertµÄ½Ó¿Ú¿ª·¢£¬¶Ô½ÓÁ˹«Ë¾µÄ¸æ¾¯ÏµÍ³£¬ÊµÏÖIM¡¢¶ÌÐÅ¡¢µç»°¸æ¾¯¡£

AgentÊýÁ¿¸ÐÖª£¬ÒÀÀµWatchÊý×Ö£¬ÊµÊ±×¼È·¸ÐÖª¡£

ÈçÏÂͼ£¬À´×Ô²úÆ·¸Õ¿ªÊ¼»Ò¶ÈʱµÄijһʱ¿Ì½ØÍ¼£¬Active Streams£¨¼´etcd WatchµÄKeyÊýÁ¿£©¼´Îª¶ÔÓ¦AgentÊýÁ¿£¬Ã¿´Î»Ò¶ÈµÄ²úÆ·ÊýÁ¿¡£ÒòΪ¸Ã²Ù×÷£¬ÊÇAgentÖ±½ÓÓ뼯ȺͨѶ£¬²¢ÇÒÿ¸öAgentÖ»WatchÒ»¸öKey¡£ÇÒ¼¯ÈºÊý¾Ý¾ß±¸Î¨Ò»ÐÔ¡¢Ò»ÖÂÐÔ£¬Ô¶±ÈÐÄÌøÈÕÖ¾µÄ´¦ÀíҪ׼ȷµÄ¶à¡£

etcd¼¯ÈºMembersÖ®¼ä½¡¿µ×´¿ö¼à¿Ø

ÓÃÓÚ¼à¿Ø¹ÜÀíetcd¼¯ÈºµÄ×´¿ö£¬°üÀ¨Member½ÚµãÖ®¼äÊý¾Ýͬ²½£¬LeaderÑ¡¾Ù´ÎÊý£¬Í¶Æ±·¢Æð´ÎÊý£¬¸÷½ÚµãµÄÄÚ´æÉêÇë×´¿ö£¬GCÇé¿öµÈ£¬¶Ô¼¯ÈºµÄ½¡¿µ×´¿ö×öÈ«ÃæÕÆ¿Ø¡£

³ÌÐòÔËÐÐ״̬¼à¿Ø¸æ¾¯

È«Á¿¼à¿ØAagentµÄ×ÊÔ´Õ¼ÓÃÇé¿ö£¬Í³¼ÆÃ¿ÌìʹÓÃ×î´óCPU\ÄÚ´æµÄÖ÷»úAgent£¬È·¶¨ÎÊÌâµÄÓ°Ï췶Χ£¬¼°Ê±×ö²ßÂÔµ÷Õû£¬±ÜÃâÓ°Ïìµ½ÒµÎñ·þÎñµÄÔËÐС£²¢ÔÚºóÐø°æ±¾ÉÏÖð²½×öµ÷ÕûÓÅ»¯¡£

°ÙÍǫ̀·þÎñÆ÷£¬ÈÕÖ¾¸æ¾¯Á¿·Ç³£´ó£¬Õâ¸ö¼¶±ðµÄ¸æ¾¯ÐÅÏ¢µÄɸѡ¡¢¾ÛºÏÊDZز»¿ÉÉٵġ£¼õÉÙÎÞÓø澯£¬ÈÃÑз¢ÔËάÈËԱƣÓÚ±¼Ãü£¬Ò²±ÜÃâÎÞÓø澯µ¼ÖÂÑз¢ÈËÔ±·ÅËÉÁ˾¯Ì裬ǰÆÚºöÂÔ¸öÀý¸æ¾¯£¬ÏȽâ¾öÖ÷Ҫì¶Ü¡£

1.¸æ¾¯ÐÅÏ¢·Ö¼¶£¬¸æ¾¯ÐÅϢϸ·ÖID¡£

2.¸ù¾Ý¸æ¾¯¼¶±ð¹ýÂË£¬¸ù¾Ý¸æ¾¯ID¾ÛºÏ¸æ¾¯£¬À´·¢ÏÖͬÀàÐÍ´íÎó¡£

3.¸ù¾Ý¸æ¾¯ÐÅÏ¢µÄËùÔÚ»ú·¿¡¢ÏîÄ¿×é¡¢²úÆ·ÏßµÈά¶ÈÀ´¾ÛºÏ¸æ¾¯£¬À´·¢ÏÖͬÀàÐÍ´íÎó¡£

Êý¾Ý²É¼¯¸æ¾¯

µ¥»úÊý¾ÝÊý¾Ý´óС¡¢×ÜÁ¿µÄÀúÊ·Êý¾Ý¶Ô±È¸æ¾¯¡£

°´»ú·¿¡¢ÏîÄ¿×é¡¢²úÆ·ÏßµÈά¶ÈµÄ´óС¡¢×ÜÁ¿µÈά¶ÈµÄÀúÊ·Êý¾Ý¶Ô±È¸æ¾¯¡£

Êý¾Ý²É¼¯´óС¡¢×ÜÁ¿µÄ¶ÔÕ˹¦ÄÜ£¬ÅжϾ­¹ýһϵÁд¦ÀíÁ÷³ÌµÄÈÕÖ¾ÊÇ·ñ¶ªÊ§µÄ¼à¿Ø¸æ¾¯¡£

ÈÛ¶Ï

1.Õë¶Ôµ¥»úAgentʹÓÃ×ÊÔ´´óСµÄãÐÖµÈÛ¶Ï£¬CPUʹÓÃÂÊ£¬Á¬ÐøN´Î´¥·¢´óÓÚµÈÓÚ5%£¬Ôò½øÐб£»¤ÐÔÈÛ¶Ï£¬Í˳öËùÓÐÒµÎñÂß¼­£¬ÒÔ±£»¤Ö÷»úµÄÒµÎñ³ÌÐòÓÅÏÈ¡£

2.Master½ø³Ì½øÈë¿ÕÏÐ״̬£¬µÈ´ýµÚ¶þ´Îʱ¼äTickerµ½À´£¬¾ö¶¨ÊÇ·ñ»Ö¸´ÔËÐС£

3.¸÷¸öApp»ùÓÚÒµÎñ²ãÃæµÄ¼à¿ØÈ۶ϲßÂÔ¡£

»Ò¶È¹ÜÀí

ÔÚÇ°ÃæµÄÅäÖùÜÀíÖеÄetcd KeyÉè¼ÆÀÒѾ­Ï¸·Öµ½Ã¿¸öÖ÷»ú£¨¼´Ã¿¸öAgent£©Ò»¸öKey¡£ÄÇô£¬·þÎñ¶ËµÄ¹ÜÀí£¬Ö»ÒªÇø·Ö¸ÃÖ÷»úËùÊô»ú·¿¡¢»·¾³¡¢Èº×é¡¢²úÆ·Ïß¼´¿É£¬ÄÇô£¬ÎÒÃǵĹÜÀíAgentµÄ¿ÅÁ£¶È¿ÉÒÔ¾«È·µ½Ã¿¸öÖ÷»ú£¬Ò²¾ÍÊÇÖ§³ÖÈÎÒâγ¶ÈµÄ»Ò¶È·¢²¼¹ÜÀíÓëÃüÁîÏ·¢¡£

Êý¾ÝÉϱ¨Í¨µÀ

×é¼þÃûΪ log_agent £¬Êǹ«Ë¾ÄÚ²¿Í³Ò»ÈÕÖ¾Éϱ¨×é¼þ£¬»á²¿ÊðÔÚÿһ̨VM¡¢DockerÉÏ¡£Ö÷»úÉÏËùÓÐÒµÎñ¾ù¿É½«ÈÕÖ¾·¢ËÍÖÁ¸Ã×é¼þ¡£ log_agent»á½«ÈÕÖ¾Éϱ¨µ½Kafka¼¯ÈºÖУ¬¾­¹ý´¦Àíºó£¬ÂäÈëHive¼¯ÈºÖС££¨Ï¸½Ú²»ÔÚ±¾ÆªÌÖÂÛ·¶Î§£©

Ö÷½ø³Ì

Ö÷½ø³ÌʵÏÖ¸úetcd¼¯ÈºÍ¨ÐÅ£¬¹ÜÀíÕû¸öAgentµÄÅäÖÃÏ·¢ÓëÃüÁîÏ·¢£»¹ÜÀí¸÷¸ö×ÓÄ£¿éµÄÆô¶¯ÓëÍ£Ö¹£»¹ÜÀí¸÷¸ö×ÓÄ£¿éµÄCPU¡¢ÄÚ´æÕ¼ÓÃÇé¿ö£¬¶Ô×ÊÔ´³¬±ê½øÐнøÐÐÈÛ¶Ï´¦Àí£¬Èóö×ÊÔ´£¬±£Ö¤ÒµÎñ½ø³ÌµÄÔËÐС£

²å¼þ»¯¹ÜÀíÆäËûÄ£¿é£¬¶à½ø³Ìģʽ£¬±ãÓÚÌá¸ß²úÆ·Áé»îÐÔ£¬¿É¸ü¼ò±ãµÄ¸üÐÂÆô¶¯×ÓÄ£¿é£¬²»»áÒòΪ¸ö±ðÄ£¿é²å¼þµÄ¹¦ÄÜ¡¢BUGµ¼ÖÂÕû¸öAgent±ÀÀ£¡£

½ø³Ì¼à¿Ø

·½°¸Ñ¡Ôñ

ÎÒÃÇÔÚÑз¢Õâ²úƷʱ£¬×öÁËºÜ¶à¹ØÓÚlinux½ø³Ì´´½¨¼à¿ØµÄµ÷ÑУ¬²»ÏÞÓÚ°²È«²úÆ·£¬´óÔ¼ÓÐÏÂÃæÈýÖÖ¼¼Êõ·½°¸£º

¶ÔÓÚ¹«Ë¾µÄËùÓзþÎñÆ÷À´Ëµ£¬¼¸Ê®Íǫ̀¶¼ÊÇÒѾ­ÔÚÔËÐеķþÎñÆ÷£¬ÐÂÉϵÄÈκβúÆ·£¬¶¼¾¡Á¿±ÜÃâ¶Ô·þÎñÆ÷ÓÐÓ°Ï죬¸üºÎ¿öÊÇËùÓзþÎñÆ÷¶¼Òª²¿ÊðµÄAgent¡£ Òâζ×ÅÎÒÃÇÔÚÑ¡ÔñϵͳÇÖÈëÐÔÀ´Ëµ£¬ÓÅÏÈÑ¡Ôñ×îСÇÖÈëÐԵķ½°¸¡£

¶ÔÓÚNetlinkµÄ·½°¸Ô­Àí£¬¿ÉÒԲο¼ÕâÕÅͼ

ϵͳÇÖÈëÐԱȽÏ

cn_proc¸úAutidÔÚ¡¸ÏµÍ³ÇÖÈëÐÔ¡¹ºÍ¡¸Êý¾Ý׼ȷÐÔ¡¹À´Ëµ£¬cn_proc·½°¸¸üºÃ£¬¶øÇÒʹÓÃCPU¡¢ÄÚ´æµÈ×ÊÔ´Çé¿ö£¬¸ü¿É¿Ø¡£

HookµÄ·½°¸£¬¶ÔϵͳÇÖÈëÐÔÌ«¸ßÁË£¬ÓÈÆäÊÇÕâÖÖ×îµ×²ã×öHOOK syscallµÄ×ö·¨£¬ÍòÒ»²âÊÔ²»³ä·Ö£¬ÔÚÌØ¶¨»·¾³Ï£¬ÓÐÒ»¶¨µÄ¸ÅÂÊ»á³öÏÖBug£¬¶øÔÚ°ÙÍòIDCµÄ¹æÄ£Ï£¬Õ⽫³ÉΪ´óÃæ»ýʼþ£¬¿ÉÄÜ»áÔì³ÉÖØ´óʹʡ£

¼æÈÝÐÔÉϱȽÏ

cn_proc²»¼æÈÝDocker£¬Õâ¸ö¿ÉÒÔÔÚËÞÖ÷»úÉϲ¿ÊðÀ´½â¾ö¡£

HookµÄ·½°¸£¬ÐèÒªÕë¶ÔÿÖÖLinuxµÄ·¢Ðаæ×ö¶¨ÖÆ£¬Î¬»¤³É±¾½Ï¸ß£¬ÇÒ²»·ûºÏ³¤Ô¶Ä¿±ê£¨ÊÕ¹ºÍⲿ¹«Ë¾Ê±Óöµ½¸÷ʽ¸÷Ñù²Ù×÷ϵͳÎÊÌ⣩

Êý¾Ý׼ȷÐԱȽÏ

ÔÚ´óÁ¿PID´´½¨µÄ³¡¾°£¬±ÈÈçDockerµÄËÞÖ÷»úÉÏ£¬Äں˷µ»ØPIDʱ£¬ÒòΪPID·µ»Ø·Ç³£¶à·Ç³£¿ì£¬ºÜ¶à½ø³ÌÆô¶¯ºó£¬Á¢¿ÌÏûʧÁË£¬ÁíÍâÒ»¸öÏ̶߳¼»¹Ã»È¥¶ÁÈ¡/proc/£¬½ø³Ì¶¼¶ªÊ§ÁË£¬³¡¾°³£³öÏÖÔÚBashÖ´ÐÐijЩÃüÁî¡£

×îÖÕ£¬ÎÒÃÇÑ¡ÔñLinux Kernel Netlink½Ó¿ÚµÄcn_procÖ¸Áî×÷ΪÎÒÃǽø³Ì¼à¿Ø·½°¸£¬½èÖú¶ÔBashÃüÁîµÄÊÕ¼¯£¬×÷Ϊ¸Ã·½°¸µÄ²¹³ä¡£µ±È»£¬ÈÔÈ»´æÔÚ¶ªÊý¾ÝµÄÇé¿ö£¬µ«ÎÒÃÇΪÁËϵͳÎȶ¨ÐÔ£¬²úÆ·ÇÖÈëÐԵ͵ÈÒµÎñÐèÇó£¬ÎþÉüÁËһЩ°²È«ÐÔÉϵı£ÕÏ¡£

¶ÔÓÚDockerµÄ³¡¾°£¬²ÉÓÃËÞÖ÷»úÔËÐУ¬²¶»ñÊý¾Ý£¬¹ØÁªµ½DockerÈÝÆ÷£¬Éϱ¨µ½ÈÕÖ¾ÖÐÐĵÄ×ö·¨À´ÊµÏÖ¡£

Óöµ½µÄÎÊÌâ

ÄÚºËNetlink·¢ËÍÊý¾Ý¿¨×¡

Äں˷µ»ØÊý¾ÝÌ«¿ì£¬Óû§Ì¬ParseNetlinkMessage½âÎö¶Áȡ̫Âý£¬µ¼ÖÂÓû§Ì¬ÍøÂçBuffÕ¼Âú£¬Äں˲»ÔÙ·¢ËÍÊý¾Ý¸øÓû§Ì¬£¬½ø³Ì¿ÕÏС£¶ÔÓÚÕâ¸öÎÊÌ⣬ÎÒÃÇÔÚÓû§Ì¬×öÁ˶ÓÁпØÖÆ£¬È·±£½âÎöʱ¼äµÄÎÊÌâ²»»áÓ°Ïìµ½Äں˷¢ËÍÊý¾Ý¡£¶ÔÓÚ¶ÓÁеij¤¶È£¬ÎÒÃÇ×öÁ˶¨ÖµÏÞÖÆ£¬Éú²úËÙ¶È´óÓÚÏû·ÑËٶȵϰ£¬¿ÉÒÔ¶ªÆúһЩÊý¾Ý£¬À´±£Ö¤ÒµÎñÕý³£ÔËÐУ¬²¢ÇÒÀ´¿ØÖƽø³ÌµÄÄÚ´æÔö³¤ÎÊÌâ¡£

ÒÉËÆ¡°ÄÚ´æÐ¹Â¶¡±ÎÊÌâ

ÔÚһ̨DockerµÄËÞÖ÷»úÉÏ£¬ÔËÐÐÁË50¸öDockerʵÀý£¬Ã¿¸öDocker¶¼ÔËÐÐÁ˸´ÔÓµÄÒµÎñ³¡¾°£¬Æµ·±µÄ´´½¨½ø³Ì£¬ÔÚ×î³õµÄ²úƷʵÏÖÉÏ£¬Æô¶¯Ê±´óÔ¼10MÄÚ´æÕ¼Óã¬Ò»Ììºó´ïµ½200MµÄÇé¿ö¡£

¾­¹ýÎÒÃÇDebug·ÖÎö·¢ÏÖ£¬ÔÚParseNetlinkMessage´¦ÀíÄں˷¢³öµÄÏûϢʱ£¬PIDƵ·±´´½¨´øÀ´ÄÚ´æÆµ·±ÉêÇ룬¶ÔÏ󯵷±ÊµÀý»¯£¬Õ¼ÓôóÁ¿Äڴ档ͬʱ£¬ÔÚGolang GCʱ£¬É¨Ãè¡¢ÇåÀí¶¯×÷´øÀ´´óÁ¿CPUÏûºÄ¡£ÔÚ´úÂëÖУ¬·¢ÏÖ¶ÔÓÚlinux/connector.hÀïµÄstruct cb_msg¡¢linux/cn_proc.hÀïµÄstruct proc_event½á¹¹Ì寵·±´´½¨£¬´øÀ´ÄÚ´æÉêÇëµÈÎÊÌ⣬ÒÔ¼°GolangµÄGCÌØÐÔ£¬ÄÚ´æÉêÇëºó£¬²»»áÔÚGCʱÁ¢¿Ì¹é»¹²Ù×÷ϵͳ£¬¶øÊÇÔÚºǫ́ÈÎÎñÀÖ𽥵Ĺ黹µ½²Ù×÷ϵͳ£¬¼û£ºdebug.FreeOSMemory

FreeOSMemory forces a garbage collection followed by an attempt to return as much memory to the operating system as possible. (Even if this is not called, the runtime gradually returns memory to the operating system in a background task.)

µ«ÔÚÕâ¸öÒµÎñ³¡¾°À´óÁ¿Æµ·±µÄ´´½¨PID£¬Æµ·±µÄÉêÇëÄڴ棬´´½¨¶ÔÏó£¬ÄÇôÉêÇëËÙ¶ÈÔ¶Ô¶´óÓÚÊÍ·ÅËÙ¶È£¬×ÔÈ»ÄÚ´æ¾ÍÒ»Ö±¶Ñ»ý¡£

´ÓÎĵµÖпÉÒÔ¿´³ö£¬FreeOSMemoryµÄ·½·¨¿ÉÒÔ½«ÄÚ´æ¹é»¹¸ø²Ù×÷ϵͳ£¬µ«ÎÒÃDz¢Ã»ÓвÉÓÃÕâÖÖ·½°¸£¬ÒòΪËüÖα겻Öα¾£¬Ã»·¨½â¾öÄÚ´æÆµ·±ÉêÇëÆµ·±´´½¨µÄÎÊÌ⣬Ҳ²»ÄܽµµÍCPUʹÓÃÂÊ¡£

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬ÎÒÃDzÉÓÃÁËsync.PoolµÄÄÚÖöÔÏ󳨷½Ê½£¬À´¸´ÓûØÊÕ¶ÔÏ󣬱ÜÃâ¶ÔÏ󯵷±´´½¨£¬¼õÉÙÄÚ´æÕ¼ÓÃÇé¿ö£¬ÔÚÕë¶Ô¼¸¸öƵ·±´´½¨µÄ¶ÔÏó×ö¶ÔÏ󳨻¯ºó£¬Í¬ÑùµÄ²âÊÔ»·¾³£¬ÄÚ´æÎȶ¨¿ØÖÆÔÚ15M×óÓÒ¡£

´óÁ¿¶ÔÏóµÄ¸´Óã¬Ò²¼õÉÙÁ˶ÔÏóµÄÊýÁ¿£¬Í¬ÑùµÄ£¬ÔÚGolang GCÔËÐÐʱ£¬Ò²¼õÉÙÁ˶ÔÏóµÄɨÃèÊýÁ¿¡¢»ØÊÕÊýÁ¿£¬½µµÍÁËCPUʹÓÃÂÊ¡£

ÏîÄ¿½øÕ¹

ÔÚ²úÆ·µÄÑз¢¹ý³ÌÖУ¬Ò²Óöµ½ÁËһЩÎÊÌ⣬±ÈÈ磺

1.etcd Client Lease KeepaliveµÄBug¡£

2.Agent½ø³Ì×ÊÔ´ÏÞÖÆµÄCgroup´¥·¢¼¸´ÎÄÚºËBug¡£

3.DockerËÞÖ÷»úÉÏ˲ʱ´óÁ¿½ø³Ì´´½¨µÄÐÔÄÜÎÊÌâ¡£

4.ÍøÂç¼à¿ØÄ£¿éÔÚ´¦ÀíNginx·´Ïò´úÀíʱ£¬¶¯éü¼¸Ê®ÍòTCPÁ´½ÓµÄÍøÂçÊý¾Ý»ñȡѹÁ¦¡£

5.¸ö±ð½ø³Ì´ò¿ªÁË10WÒÔÉϵÄfd¡£

·½·¨Ò»¶¨±ÈÀ§ÄѶ࣬µ«·½·¨²»ÊÇÅÄÄÔ´üÏë³öÀ´µÄ£¬Ò»¶¨ÒªÉîÈë̽Ë÷ÎÊÌâµÄ¸ù±¾Ô­Òò£¬ÕÒµ½ÏµÍ³ÐÔµÄÐÞ¸´·½·¨£¬¾ß±¸¸ß¿ÉÓᢸßÐÔÄÜ¡¢¼à¿Ø¸æ¾¯¡¢ÈÛ¶ÏÏÞÁ÷µÈ¹¦Äܺ󣬶ÔÓÚ³öÏÖµÄÎÊÌ⣬Äܹ»Ìáǰ·¢ÏÖ£¬½«¹ÊÕÏÓ°Ïì×îС»¯£¬Ìáǰ×ö´¦Àí¡£ÔÚÓ¦¶Ô²úÆ·ÔËÓª¹ý³ÌÖÐÓöµ½µÄ¸÷ÖÖÎÊÌâʱ£¬·êɽ¿ªÂ·£¬ÓöË®´îÇÅ£¬¶¼¿ÉÒÔ´ÓÈݵÄÓ¦¶Ô¡£

¾­¹ýÎÒÃÇÒ»ÄêµÄŬÁ¦£¬ÒѾ­²¿ÊðÁ˳ýÁ˸ö±ðÌØÊâÒµÎñÏßÖ®ÍâµÄÆäËûËùÓзþÎñÆ÷£¬ÊýÁ¿´ï¼¸Ê®Íǫ̀£¬²úÆ·Îȶ¨ÔËÐС£ÔÚÊý¾ÝÍêÕûÐÔ¡¢×¼È·ÐÔÉÏ£¬»¹ÓдýÌá¸ß£¬ÔÚ¾«Ï¸»¯ÔËÓªÉÏ£¬ÐèÒª¶à×ö¸Ä½ø¡£

±¾Æª¸ü¶àµÄÊÇÑз¢½Ç¶ÈÉÏÈí¼þ¼Ü¹¹ÉϵÄÉè¼Æ£¬¹ØÓÚ°²È«Ê¼þ·ÖÎö¡¢Êý¾Ý½¨Ä£¡¢ÔËÓª²ßÂԵȷ½ÃæµÄ¾­ÑéºÍ¼¼ÇÉ£¬Î´À´½«»áÓÉÆäËûͬѧ½øÐзÖÏí£¬¾´ÇëÆÚ´ý¡£

×ܽá

ÎÒÃÇÔÚÑз¢Õâ¿î²úÆ·¹ý³ÌÖУ¬Ò²¿´µ½ÁËÍøÉÏ¿ªÔ´Á˼¸¿îͬÀà²úÆ·£¬Ò²Á˽âÁËËûÃǵÄÉè¼ÆË¼Â·£¬·¢Ïֺܶà²úÆ·¶¼ÊǰÑÖ÷Òª·½Ïò·ÅÔÚÁ˵¥¸öÄ£¿éµÄʵÏÖÉÏ£¬¶øºöÂÔÁ˲úÆ·¼Ü¹¹ÉϵÄÖØÒªÐÔ¡£

±ÈÈ磬ÓеIJúƷʹÓÃÁËsyscall hookÕâÖÖÇÖÈëÐԸߵķ½°¸À´±£ÕÏÊý¾ÝÍêÕûÐÔ£¬Ê¹µÃ¶ÔϵͳÇÖÈëÐԷdz£¸ß£¬Hook´úÂëµÄÎȶ¨ÐÔ£¬Ò²ÑÏÖØÓ°ÏìÁ˲Ù×÷ϵͳÄں˵ÄÎȶ¨¡£Í¬Ê±£¬Hook´úÂëҲȱÉÙÁË¼à¿ØÈ۶ϵĴëÊ©£¬ÔÚ¼¸Ê®Íò·þÎñÆ÷¹æÄ£µÄ³¡¾°Ï²¿Êð£¬Ç±ÔڵķçÏÕ¿ÉÄÜÈð²È«²¿ÃÅÎÞ·¨½ÓÊÜ£¬ÉõÖÁÊÇÖÂÃüµÄ¡£

ÕâÖÖÉè¼Æ£¬¿ÉÄÜÔÚ·þÎñÆ÷Á¿¼¶Ð¡Ê±£¬¶ÔÓÚ³öÏÖµÄÎÊÌâ¶à»¨µãʱ¼äÒ²ÄÜÖð¸ö½øÐÐά»¤£¬µ«Ó¦¶Ô¼¸Ê®ÍòÉõÖÁÉϰÙÍǫ̀·þÎñÆ÷ʱ£¬¶Ôά»¤³É±¾¡¢Îȶ¨ÐÔ¡¢¼à¿ØÈ۶ϵȶ¼ÊǺܴóµÄ¼¼ÊõÌôÕ½¡£Í¬Ê±£¬ÔÚÑз¢ÉÏ£¬Ò²ºÜÄÑʵÏÖ²úÆ·µÄ¿ìËÙµü´ú£¬¶øÕâÖÖ·½Ê½´øÀ´µÄÓ°Ï죬¼¸ºõ¶¼»áµ¼ÖÂÄÚºËå´»úÖ®ÀàÖÂÃüÎÊÌâ¡£ÕâÖÖʹʣ¬Ê¹Ó÷þÎñÆ÷µÄÒµÎñ·½ºÜÄѽøÐнÓÊÜ£¬ÊƱػáÓ°Ïì²úÆ·µÄÑз¢ËÙ¶È¡¢ÍƽøËÙ¶È£»Ó°ÏìͬÊ£¨SREÔËάµÈ£©¶Ô²úÆ·µÄÐÅÐÄ£¬½ø¶ø¶ÔºóÐø²úÆ·µÄÍÆ½ø´øÀ´ºÜ´óµÄ×èÁ¦¡£

 

 

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

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶