±à¼ÍƼö: |
±¾ÎÄÖ÷Òª´ÓÎÊÌâ±³¾°£¬Ä¿±êÒªÇó£¬
¹¦ÄÜÄ£¿é£¬Google Dapper£¬·½°¸±È½Ï£¬Tracing ºÍ Monitor
Çø±ðÁù¸ö·½Ãæ½øÐнéÉÜ¡£
±¾ÎÄÀ´×ÔÓÚDevOps¼¼ÊõÕ»£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£ |
|
ÎÊÌâ±³¾°
Ëæ×Å΢·þÎñ¼Ü¹¹µÄÁ÷ÐУ¬·þÎñ°´ÕÕ²»Í¬µÄά¶È½øÐвð·Ö£¬Ò»´ÎÇëÇóÍùÍùÐè񻃾¼°µ½¶à¸ö·þÎñ¡£
»¥ÁªÍøÓ¦Óù¹½¨ÔÚ²»Í¬µÄÈí¼þÄ£¿é¼¯ÉÏ£¬ÕâЩÈí¼þÄ£¿é£¬ÓпÉÄÜÊÇÓɲ»Í¬µÄÍŶӿª·¢¡¢¿ÉÄÜʹÓò»Í¬µÄ±à³ÌÓïÑÔÀ´ÊµÏÖ¡¢ÓпÉÄܲ¼ÔÚÁ˼¸Ç§Ì¨·þÎñÆ÷£¬ºá¿ç¶à¸ö²»Í¬µÄÊý¾ÝÖÐÐÄ¡£
Òò´Ë£¬¾ÍÐèҪһЩ¿ÉÒÔ°ïÖúÀí½âϵͳÐÐΪ¡¢ÓÃÓÚ·ÖÎöÐÔÄÜÎÊÌâµÄ¹¤¾ß£¬ÒԱ㷢Éú¹ÊÕϵÄʱºò£¬Äܹ»¿ìËÙ¶¨Î»ºÍ½â¾öÎÊÌâ¡£
È«Á´Â·¼à¿Ø×é¼þ¾ÍÔÚÕâÑùµÄÎÊÌâ±³¾°Ï²úÉúÁË¡£×î³öÃûµÄÊǹȸ蹫¿ªµÄÂÛÎÄÌáµ½µÄ Google Dapper¡£
ÏëÒªÔÚÕâ¸öÉÏÏÂÎÄÖÐÀí½â·Ö²¼Ê½ÏµÍ³µÄÐÐΪ£¬¾ÍÐèÒª¼à¿ØÄÇЩºá¿çÁ˲»Í¬µÄÓ¦Óᢲ»Í¬µÄ·þÎñÆ÷Ö®¼äµÄ¹ØÁª¶¯×÷¡£
ËùÒÔ£¬ÔÚ¸´ÔÓµÄ΢·þÎñ¼Ü¹¹ÏµÍ³ÖУ¬¼¸ºõÿһ¸öǰ¶ËÇëÇó¶¼»áÐγÉÒ»¸ö¸´Ôӵķֲ¼Ê½·þÎñµ÷ÓÃÁ´Â·¡£Ò»¸öÇëÇóÍêÕûµ÷ÓÃÁ´¿ÉÄÜÈçÏÂͼËùʾ£º

ÄÇôÔÚÒµÎñ¹æÄ£²»¶ÏÔö´ó¡¢·þÎñ²»¶ÏÔö¶àÒÔ¼°Æµ·±±ä¸üµÄÇé¿öÏ£¬Ãæ¶Ô¸´Ôӵĵ÷ÓÃÁ´Â·¾Í´øÀ´Ò»ÏµÁÐÎÊÌ⣺
1.ÈçºÎ¿ìËÙ·¢ÏÖÎÊÌ⣿
2.ÈçºÎÅжϹÊÕÏÓ°Ï췶Χ£¿
3.ÈçºÎÊáÀí·þÎñÒÀÀµÒÔ¼°ÒÀÀµµÄºÏÀíÐÔ£¿
4.ÈçºÎ·ÖÎöÁ´Â·ÐÔÄÜÎÊÌâÒÔ¼°ÊµÊ±ÈÝÁ¿¹æ»®£¿
ͬʱÎÒÃÇ»á¹Ø×¢ÔÚÇëÇó´¦ÀíÆÚ¼ä¸÷¸öµ÷Óõĸ÷ÏîÐÔÄÜÖ¸±ê£¬±ÈÈ磺ÍÌÍÂÁ¿£¨TPS£©¡¢ÏìӦʱ¼ä¼°´íÎó¼Ç¼µÈ¡£
1.ÍÌÍÂÁ¿£¬¸ù¾ÝÍØÆË¿É¼ÆËãÏàÓ¦×é¼þ¡¢Æ½Ì¨¡¢ÎïÀíÉ豸µÄʵʱÍÌÍÂÁ¿¡£
2.ÏìӦʱ¼ä£¬°üÀ¨ÕûÌåµ÷ÓõÄÏìӦʱ¼äºÍ¸÷¸ö·þÎñµÄÏìӦʱ¼äµÈ¡£
3.´íÎó¼Ç¼£¬¸ù¾Ý·þÎñ·µ»ØÍ³¼Æµ¥Î»Ê±¼äÒì³£´ÎÊý¡£
È«Á´Â·ÐÔÄÜ¼à¿Ø´ÓÕûÌåά¶Èµ½¾Ö²¿Î¬¶Èչʾ¸÷ÏîÖ¸±ê£¬½«¿çÓ¦ÓõÄËùÓе÷ÓÃÁ´ÐÔÄÜÐÅÏ¢¼¯ÖÐÕ¹ÏÖ£¬¿É·½±ã¶ÈÁ¿ÕûÌåºÍ¾Ö²¿ÐÔÄÜ£¬²¢ÇÒ·½±ãÕÒµ½¹ÊÕϲúÉúµÄÔ´Í·£¬Éú²úÉϿɼ«´óËõ¶Ì¹ÊÕÏÅųýʱ¼ä¡£
ÓÐÁËÈ«Á´Â·¼à¿Ø¹¤¾ß£¬ÎÒÃÇÄܹ»´ïµ½£º
ÇëÇóÁ´Â·×·×Ù£¬¹ÊÕÏ¿ìËÙ¶¨Î»£º¿ÉÒÔͨ¹ýµ÷ÓÃÁ´½áºÏÒµÎñÈÕÖ¾¿ìËÙ¶¨Î»´íÎóÐÅÏ¢¡£
¿ÉÊÓ»¯£º¸÷¸ö½×¶ÎºÄʱ£¬½øÐÐÐÔÄÜ·ÖÎö¡£
ÒÀÀµÓÅ»¯£º¸÷¸öµ÷Óû·½ÚµÄ¿ÉÓÃÐÔ¡¢ÊáÀí·þÎñÒÀÀµ¹ØÏµÒÔ¼°ÓÅ»¯¡£
Êý¾Ý·ÖÎö£¬ÓÅ»¯Á´Â·£º¿ÉÒԵõ½Óû§µÄÐÐΪ·¾¶£¬»ã×Ü·ÖÎöÓ¦ÓÃÔںܶàÒµÎñ³¡¾°¡£
1 Ä¿±êÒªÇó
ÈçÉÏËùÊö£¬ÄÇôÎÒÃÇÑ¡ÔñÈ«Á´Â·¼à¿Ø×é¼þÓÐÄÄЩĿ±êÒªÇóÄØ£¿Google Dapper ÖÐÒ²Ìáµ½ÁË£¬×ܽáÈçÏ£º
1¡¢Ì½ÕëµÄÐÔÄÜÏûºÄ
APM ×é¼þ·þÎñµÄÓ°ÏìÓ¦¸Ã×öµ½×㹻С¡£·þÎñµ÷ÓÃÂñµã±¾Éí»á´øÀ´ÐÔÄÜËðºÄ£¬Õâ¾ÍÐèÒªµ÷Óøú×ٵĵÍËðºÄ£¬Êµ¼ÊÖл¹»áͨ¹ýÅäÖòÉÑùÂʵķ½Ê½£¬Ñ¡ÔñÒ»²¿·ÖÇëÇóÈ¥·ÖÎöÇëÇó·¾¶¡£ÔÚһЩ¸ß¶ÈÓÅ»¯¹ýµÄ·þÎñ£¬¼´Ê¹Ò»µãµãËðºÄÒ²»áºÜÈÝÒײì¾õµ½£¬¶øÇÒÓпÉÄÜÆÈʹÔÚÏß·þÎñµÄ²¿ÊðÍŶӲ»µÃ²»½«¸ú×Ùϵͳ¹ØÍ£¡£
2¡¢´úÂëµÄÇÖÈëÐÔ
¼´Ò²×÷ΪҵÎñ×é¼þ£¬Ó¦µ±¾¡¿ÉÄÜÉÙÈëÇÖ»òÕßÎÞÈëÇÖÆäËûÒµÎñϵͳ£¬¶ÔÓÚʹÓ÷½Í¸Ã÷£¬¼õÉÙ¿ª·¢ÈËÔ±µÄ¸ºµ£¡£
¶ÔÓÚÓ¦ÓõijÌÐòÔ±À´Ëµ£¬ÊDz»ÐèÒªÖªµÀÓиú×ÙϵͳÕâ»ØÊµġ£Èç¹ûÒ»¸ö¸ú×ÙϵͳÏëÉúЧ£¬¾Í±ØÐëÐèÒªÒÀÀµÓ¦ÓõĿª·¢ÕßÖ÷¶¯ÅäºÏ£¬ÄÇôÕâ¸ö¸ú×ÙϵͳҲ̫´àÈõÁË£¬ÍùÍùÓÉÓÚ¸ú×ÙϵͳÔÚÓ¦ÓÃÖÐÖ²Èë´úÂëµÄ
bug »òÊèºöµ¼ÖÂÓ¦ÓóöÎÊÌ⣬ÕâÑù²ÅÊÇÎÞ·¨Âú×ã¶Ô¸ú×Ùϵͳ¡°ÎÞËù²»ÔڵIJ¿Êð¡±Õâ¸öÐèÇó¡£
3¡¢¿ÉÀ©Õ¹ÐÔ
Ò»¸öÓÅÐãµÄµ÷Óøú×Ùϵͳ±ØÐëÖ§³Ö·Ö²¼Ê½²¿Ê𣬾߱¸Á¼ºÃµÄ¿ÉÀ©Õ¹ÐÔ¡£Äܹ»Ö§³ÖµÄ×é¼þÔ½¶àµ±È»Ô½ºÃ¡£»òÕßÌṩ±ã½ÝµÄ²å¼þ¿ª·¢API£¬¶ÔÓÚһЩûÓÐ¼à¿Øµ½µÄ×é¼þ£¬Ó¦Óÿª·¢ÕßÒ²¿ÉÒÔ×ÔÐÐÀ©Õ¹¡£
4¡¢Êý¾ÝµÄ·ÖÎö
Êý¾ÝµÄ·ÖÎöÒª¿ì £¬·ÖÎöµÄά¶È¾¡¿ÉÄܶࡣ¸ú×ÙϵͳÄÜÌṩ×ã¹»¿ìµÄÐÅÏ¢·´À¡£¬¾Í¿ÉÒÔ¶ÔÉú²ú»·¾³ÏµÄÒì³£×´¿ö×ö³ö¿ìËÙ·´Ó¦¡£·ÖÎöµÄÈ«Ãæ£¬Äܹ»±ÜÃâ¶þ´Î¿ª·¢¡£
2 ¹¦ÄÜÄ£¿é
Ò»°ãµÄÈ«Á´Â·¼à¿ØÏµÍ³£¬´óÖ¿ɷÖΪËÄ´ó¹¦ÄÜÄ£¿é£º
1.ÂñµãÓëÉú³ÉÈÕÖ¾
Âñµã¼´ÏµÍ³ÔÚµ±Ç°½ÚµãµÄÉÏÏÂÎÄÐÅÏ¢£¬¿ÉÒÔ·ÖΪ ¿Í»§¶ËÂñµã¡¢·þÎñ¶ËÂñµã£¬ÒÔ¼°¿Í»§¶ËºÍ·þÎñ¶ËË«ÏòÐÍÂñµã¡£ÂñµãÈÕ־ͨ³£Òª°üº¬ÒÔÏÂÄÚÈÝtraceId¡¢spanId¡¢µ÷ÓõĿªÊ¼Ê±¼ä£¬ÐÒéÀàÐÍ¡¢µ÷Ó÷½ipºÍ¶Ë¿Ú£¬ÇëÇóµÄ·þÎñÃû¡¢µ÷ÓúÄʱ£¬µ÷Óýá¹û£¬Òì³£ÐÅÏ¢µÈ£¬Í¬Ê±Ô¤Áô¿ÉÀ©Õ¹×ֶΣ¬ÎªÏÂÒ»²½À©Õ¹×ö×¼±¸£»
²»ÄÜÔì³ÉÐÔÄܸºµ££ºÒ»¸ö¼Ûֵδ±»ÑéÖ¤£¬È´»áÓ°ÏìÐÔÄܵĶ«Î÷£¬ÊǺÜÄÑÔÚ¹«Ë¾ÍƹãµÄ£¡
ÒòΪҪд log£¬ÒµÎñ QPS Ô½¸ß£¬ÐÔÄÜÓ°ÏìÔ½ÖØ¡£Í¨¹ý²ÉÑùºÍÒì²½log½â¾ö¡£
2.ÊÕ¼¯ºÍ´æ´¢ÈÕÖ¾
Ö÷ÒªÖ§³Ö·Ö²¼Ê½ÈÕÖ¾²É¼¯µÄ·½°¸£¬Í¬Ê±Ôö¼Ó MQ ×÷Ϊ»º³å£»
ÿ¸ö»úÆ÷ÉÏÓÐÒ»¸ö deamon ×öÈÕÖ¾ÊÕ¼¯£¬ÒµÎñ½ø³Ì°Ñ×Ô¼ºµÄ Trace ·¢µ½ daemon£¬daemon
°ÑÊÕ¼¯ Trace ÍùÉÏÒ»¼¶·¢ËÍ£»
¶à¼¶µÄ collector£¬ÀàËÆ pub/sub ¼Ü¹¹£¬¿ÉÒÔ¸ºÔؾùºâ£»
¶Ô¾ÛºÏµÄÊý¾Ý½øÐРʵʱ·ÖÎöºÍÀëÏß´æ´¢£»
ÀëÏß·ÖÎö ÐèÒª½«Í¬Ò»Ìõµ÷ÓÃÁ´µÄÈÕÖ¾»ã×ÜÔÚÒ»Æð£»
3.·ÖÎöºÍͳ¼Æµ÷ÓÃÁ´Â·Êý¾Ý£¬ÒÔ¼°Ê±Ð§ÐÔ
µ÷ÓÃÁ´¸ú×Ù·ÖÎö£º°Ñͬһ TraceID µÄ Span ÊÕ¼¯ÆðÀ´£¬°´Ê±¼äÅÅÐò¾ÍÊÇtimeline¡£°ÑParentID
´®ÆðÀ´¾ÍÊǵ÷ÓÃÕ»¡£
Å×Òì³£»òÕß³¬Ê±£¬ÔÚÈÕÖ¾Àï´òÓ¡ TraceID¡£ÀûÓà TraceID ²éѯµ÷ÓÃÁ´Çé¿ö£¬¶¨Î»ÎÊÌâ¡£
ÒÀÀµ¶ÈÁ¿£º
Ç¿ÒÀÀµ£ºµ÷ÓÃʧ°Ü»áÖ±½ÓÖжÏÖ÷Á÷³Ì
¸ß¶ÈÒÀÀµ£ºÒ»´ÎÁ´Â·Öе÷ÓÃij¸öÒÀÀµµÄ¼¸Âʸß
Ƶ·±ÒÀÀµ£ºÒ»´ÎÁ´Â·µ÷ÓÃͬһ¸öÒÀÀµµÄ´ÎÊý¶à
ÀëÏß·ÖÎö£º°´TraceID»ã×Ü£¬Í¨¹ýSpanµÄIDºÍParentID»¹Ôµ÷ÓùØÏµ£¬·ÖÎöÁ´Â·ÐÎ̬¡£
ʵʱ·ÖÎö£º¶Ôµ¥ÌõÈÕÖ¾Ö±½Ó·ÖÎö£¬²»×ö»ã×Ü£¬ÖØ×é¡£µÃµ½µ±Ç°QPS£¬ÑÓ³Ù¡£
4.Õ¹ÏÖÒÔ¼°¾ö²ßÖ§³Ö
3 Google Dapper
3.1 Span
»ù±¾¹¤×÷µ¥Ôª£¬Ò»´ÎÁ´Â·µ÷Ó㨿ÉÒÔÊÇRPC£¬DBµÈûÓÐÌØ¶¨µÄÏÞÖÆ£©´´½¨Ò»¸öspan£¬Í¨¹ýÒ»¸ö64λID±êʶËü£¬uuid½ÏΪ·½±ã£¬spanÖл¹ÓÐÆäËûµÄÊý¾Ý£¬ÀýÈçÃèÊöÐÅÏ¢£¬Ê±¼ä´Á£¬key-value¶ÔµÄ£¨Annotation£©tagÐÅÏ¢£¬parent_idµÈ£¬ÆäÖÐparent-id¿ÉÒÔ±íʾspanµ÷ÓÃÁ´Â·À´Ô´¡£

ÉÏͼ˵Ã÷ÁË span ÔÚÒ»´Î´óµÄ¸ú×Ù¹ý³ÌÖÐÊÇʲôÑùµÄ¡£Dapper ¼Ç¼ÁË span Ãû³Æ£¬ÒÔ¼°Ã¿¸ö
span µÄ ID ºÍ¸¸ ID£¬ÒÔÖØ½¨ÔÚÒ»´Î×·×Ù¹ý³ÌÖв»Í¬ span Ö®¼äµÄ¹ØÏµ¡£Èç¹ûÒ»¸ö spanûÓи¸
ID ±»³ÆÎª root span¡£ËùÓÐ span ¶¼¹ÒÔÚÒ»¸öÌØ¶¨µÄ¸ú×ÙÉÏ£¬Ò²¹²ÓÃÒ»¸ö¸ú×Ù id¡£
Span Êý¾Ý½á¹¹£º
type Span struct {
TraceID int64 // ÓÃÓÚ±êʾһ´ÎÍêÕûµÄÇëÇóid
Name string
ID int64 // µ±Ç°Õâ´Îµ÷ÓÃspan_id
ParentID int64 // Éϲã·þÎñµÄµ÷ÓÃspan_id ×îÉϲã·þÎñparent_idΪnull
Annotation []Annotation // ÓÃÓÚ±ê¼ÇµÄʱ¼ä´Á
Debug bool
} |
3.2 Trace
ÀàËÆÓÚ Ê÷½á¹¹µÄSpan¼¯ºÏ£¬±íʾһ´ÎÍêÕûµÄ¸ú×Ù£¬´ÓÇëÇóµ½·þÎñÆ÷¿ªÊ¼£¬·þÎñÆ÷·µ»Øresponse½áÊø£¬¸ú×Ùÿ´Îrpcµ÷ÓõĺÄʱ£¬´æÔÚΨһ±êʶtrace_id¡£±ÈÈ磺ÄãÔËÐеķֲ¼Ê½´óÊý¾Ý´æ´¢Ò»´ÎTrace¾ÍÓÉÄãµÄÒ»´ÎÇëÇó×é³É¡£

Trace
ÿÖÖÑÕÉ«µÄnote±ê×¢ÁËÒ»¸öspan£¬Ò»ÌõÁ´Â·Í¨¹ýTraceIdΨһ±êʶ£¬Span±êʶ·¢ÆðµÄÇëÇóÐÅÏ¢¡£Ê÷½ÚµãÊÇÕû¸ö¼Ü¹¹µÄ»ù±¾µ¥Ôª£¬¶øÃ¿Ò»¸ö½ÚµãÓÖÊǶÔspanµÄÒýÓ᣽ڵãÖ®¼äµÄÁ¬Ïß±íʾµÄspanºÍËüµÄ¸¸spanÖ±½ÓµÄ¹ØÏµ¡£ËäÈ»spanÔÚÈÕÖ¾ÎļþÖÐÖ»ÊǼòµ¥µÄ´ú±íspanµÄ¿ªÊ¼ºÍ½áÊøÊ±¼ä£¬ËûÃÇÔÚÕû¸öÊ÷ÐνṹÖÐÈ´ÊÇÏà¶Ô¶ÀÁ¢µÄ¡£
3.3 Annotation
×¢½â£¬ÓÃÀ´¼Ç¼ÇëÇóÌØ¶¨Ê¼þÏà¹ØÐÅÏ¢£¨ÀýÈçʱ¼ä£©£¬Ò»¸öspanÖлáÓжà¸öannotation×¢½âÃèÊö¡£Í¨³£°üº¬Ëĸö×¢½âÐÅÏ¢£º
(1) cs£ºClient Start£¬±íʾ¿Í»§¶Ë·¢ÆðÇëÇó
(2) sr£ºServer Receive£¬±íʾ·þÎñ¶ËÊÕµ½ÇëÇó
(3) ss£ºServer Send£¬±íʾ·þÎñ¶ËÍê³É´¦Àí£¬²¢½«½á¹û·¢Ë͸ø¿Í»§¶Ë
(4) cr£ºClient Received£¬±íʾ¿Í»§¶Ë»ñÈ¡µ½·þÎñ¶Ë·µ»ØÐÅÏ¢
AnnotationÊý¾Ý½á¹¹£º
type Annotation struct {
Timestamp int64
Value string
Host Endpoint
Duration int32
} |
3.4 µ÷ÓÃʾÀý
1. ÇëÇóµ÷ÓÃʾÀý
µ±Óû§·¢ÆðÒ»¸öÇëÇóʱ£¬Ê×Ïȵ½´ïǰ¶ËA·þÎñ£¬È»ºó·Ö±ð¶ÔB·þÎñºÍC·þÎñ½øÐÐRPCµ÷Óã»
B·þÎñ´¦ÀíÍê¸øA×ö³öÏìÓ¦£¬µ«ÊÇC·þÎñ»¹ÐèÒªºÍºó¶ËµÄD·þÎñºÍE·þÎñ½»»¥Ö®ºóÔÙ·µ»¹¸øA·þÎñ£¬×îºóÓÉA·þÎñÀ´ÏìÓ¦Óû§µÄÇëÇó£»

ÇëÇóµ÷ÓÃʾÀý
2. µ÷Óùý³Ì×·×Ù
ÇëÇóµ½À´Éú³ÉÒ»¸öÈ«¾Ö TraceID£¬Í¨¹ý TraceID ¿ÉÒÔ´®ÁªÆðÕû¸öµ÷ÓÃÁ´£¬Ò»¸öTraceID
´ú±íÒ»´ÎÇëÇó¡£
³ýÁËTraceIDÍ⣬»¹ÐèÒªSpanIDÓÃÓڼǼµ÷Óø¸×Ó¹ØÏµ¡£Ã¿¸ö·þÎñ»á¼Ç¼ÏÂparent idºÍspan
id£¬Í¨¹ýËûÃÇ¿ÉÒÔ×éÖ¯Ò»´ÎÍêÕûµ÷ÓÃÁ´µÄ¸¸×Ó¹ØÏµ¡£
Ò»¸öûÓÐparent idµÄspan³ÉΪroot span£¬¿ÉÒÔ¿´³Éµ÷ÓÃÁ´Èë¿Ú¡£
ËùÓÐÕâЩID¿ÉÓÃÈ«¾ÖΨһµÄ64λÕûÊý±íʾ£»
Õû¸öµ÷Óùý³ÌÖÐÿ¸öÇëÇó¶¼ÒªÍ¸´«TraceIDºÍSpanID¡£
ÿ¸ö·þÎñ½«¸Ã´ÎÇëÇ󸽴øµÄTraceIDºÍ¸½´øµÄSpanID×÷Ϊparent id¼Ç¼Ï£¬²¢ÇÒ½«×Ô¼ºÉú³ÉµÄSpanIDÒ²¼Ç¼Ï¡£
Òª²é¿´Ä³´ÎÍêÕûµÄµ÷ÓÃÔò Ö»Òª¸ù¾ÝTraceID²é³öËùÓе÷ÓüǼ£¬È»ºóͨ¹ýparent idºÍspan
id×éÖ¯ÆðÕû¸öµ÷Óø¸×Ó¹ØÏµ¡£

Õû¸öµ÷Óùý³Ì×·×Ù
3. µ÷ÓÃÁ´ºËÐŤ×÷
µ÷ÓÃÁ´Êý¾ÝÉú³É£¬¶ÔÕû¸öµ÷Óùý³ÌµÄËùÓÐÓ¦ÓýøÐÐÂñµã²¢Êä³öÈÕÖ¾¡£
µ÷ÓÃÁ´Êý¾Ý²É¼¯£¬¶Ô¸÷¸öÓ¦ÓÃÖеÄÈÕÖ¾Êý¾Ý½øÐвɼ¯¡£
µ÷ÓÃÁ´Êý¾Ý´æ´¢¼°²éѯ£¬¶Ô²É¼¯µ½µÄÊý¾Ý½øÐд洢£¬ÓÉÓÚÈÕÖ¾Êý¾ÝÁ¿Ò»°ã¶¼ºÜ´ó£¬²»½öÒªÄÜ¶ÔÆä´æ´¢£¬»¹ÐèÒªÄÜÌṩ¿ìËÙ²éѯ¡£
Ö¸±êÔËËã¡¢´æ´¢¼°²éѯ£¬¶Ô²É¼¯µ½µÄÈÕÖ¾Êý¾Ý½øÐи÷ÖÖÖ¸±êÔËË㣬½«ÔËËã½á¹û±£´æÆðÀ´¡£
¸æ¾¯¹¦ÄÜ£¬Ìṩ¸÷ÖÖ·§Öµ¾¯¸æ¹¦ÄÜ¡£
4. ÕûÌ岿Êð¼Ü¹¹

·þ5. AGENTÎÞÇÖÈ벿Êð
·þͨ¹ýAGENT´úÀíÎÞÇÖÈëʽ²¿Ê𣬽«ÐÔÄܲâÁ¿ÓëÒµÎñÂß¼ÍêÈ«·ÖÀ룬¿ÉÒÔ²âÁ¿ÈÎÒâÀàµÄÈÎÒâ·½·¨µÄÖ´ÐÐʱ¼ä£¬ÕâÖÖ·½Ê½´ó´óÌá¸ßÁ˲ɼ¯Ð§ÂÊ£¬²¢ÇÒ¼õÉÙÔËά³É±¾¡£¸ù¾Ý·þÎñ¿ç¶ÈÖ÷Òª·ÖΪÁ½´óÀàAGENT£º
·þÎñÄÚAGENT£¬ÕâÖÖ·½Ê½ÊÇͨ¹ý Java µÄagent»úÖÆ£¬¶Ô·þÎñÄÚ²¿µÄ·½·¨µ÷Óòã´ÎÐÅÏ¢½øÐÐÊý¾ÝÊÕ¼¯£¬Èç·½·¨µ÷ÓúÄʱ¡¢Èë²Î¡¢³ö²ÎµÈÐÅÏ¢¡£
¿ç·þÎñAGENT£¬ÕâÖÖÇé¿öÐèÒª¶ÔÖ÷Á÷RPC¿ò¼ÜÒÔ²å¼þÐÎʽÌṩÎÞ·ìÖ§³Ö¡£²¢Í¨¹ýÌṩ±ê×¼Êý¾Ý¹æ·¶ÒÔÊÊÓ¦×Ô¶¨ÒåRPC¿ò¼Ü£º
1£©DubboÖ§³Ö£»
£¨2£©RestÖ§³Ö£»
£¨3£©×Ô¶¨ÒåRPCÖ§³Ö£» |
6. µ÷ÓÃÁ´¼à¿ØºÃ´¦
×¼È·ÕÆÎÕÉú²úÒ»ÏßÓ¦Óò¿ÊðÇé¿ö£»
´Óµ÷ÓÃÁ´È«Á÷³ÌÐÔÄܽǶȣ¬Ê¶±ð¶Ô¹Ø¼üµ÷ÓÃÁ´£¬²¢½øÐÐÓÅ»¯£»
Ìṩ¿É×·ËݵÄÐÔÄÜÊý¾Ý£¬Á¿»¯ IT ÔËά²¿ÃÅÒµÎñ¼ÛÖµ£»
¿ìËÙ¶¨Î»´úÂëÐÔÄÜÎÊÌ⣬ÐÖú¿ª·¢ÈËÔ±³ÖÐøÐÔµÄÓÅ»¯´úÂ룻
ÐÖú¿ª·¢ÈËÔ±½øÐа׺вâÊÔ£¬Ëõ¶ÌϵͳÉÏÏßÎȶ¨ÆÚ£»
4 ·½°¸±È½Ï
ÊÐÃæÉϵÄÈ«Á´Â·¼à¿ØÀíÂÛÄ£ÐÍ´ó¶à¶¼ÊÇ½è¼ø Google Dapper ÂÛÎÄ£¬±¾ÎÄÖØµã¹Ø×¢ÒÔÏÂÈýÖÖ APM
×é¼þ£º
Zipkin£ºÓÉTwitter¹«Ë¾¿ªÔ´£¬¿ª·ÅÔ´´úÂë·Ö²¼Ê½µÄ¸ú×Ùϵͳ£¬ÓÃÓÚÊÕ¼¯·þÎñµÄ¶¨Ê±Êý¾Ý£¬ÒÔ½â¾ö΢·þÎñ¼Ü¹¹ÖеÄÑÓ³ÙÎÊÌ⣬°üÀ¨£ºÊý¾ÝµÄÊÕ¼¯¡¢´æ´¢¡¢²éÕÒºÍÕ¹ÏÖ¡£
Pinpoint£ºÒ»¿î¶ÔJava±àдµÄ´ó¹æÄ£·Ö²¼Ê½ÏµÍ³µÄAPM¹¤¾ß£¬Óɺ«¹úÈË¿ªÔ´µÄ·Ö²¼Ê½¸ú×Ù×é¼þ¡£
Skywalking£º¹ú²úµÄÓÅÐãAPM×é¼þ£¬ÊÇÒ»¸ö¶ÔJAVA·Ö²¼Ê½Ó¦ÓóÌÐò¼¯ÈºµÄÒµÎñÔËÐÐÇé¿ö½øÐÐ×·×Ù¡¢¸æ¾¯ºÍ·ÖÎöµÄϵͳ¡£
ÒÔÉÏÈýÖÖÈ«Á´Â·¼à¿Ø·½°¸ÐèÒª¶Ô±ÈµÄÏîÌáÁ¶³öÀ´£º
1.̽ÕëµÄÐÔÄÜ
Ö÷ÒªÊÇagent¶Ô·þÎñµÄÍÌÍÂÁ¿¡¢CPUºÍÄÚ´æµÄÓ°Ï졣΢·þÎñµÄ¹æÄ£ºÍ¶¯Ì¬ÐÔʹµÃÊý¾ÝÊÕ¼¯µÄ³É±¾´ó·ù¶ÈÌá¸ß¡£
2.collectorµÄ¿ÉÀ©Õ¹ÐÔ
Äܹ»Ë®Æ½À©Õ¹ÒÔ±ãÖ§³Ö´ó¹æÄ£·þÎñÆ÷¼¯Èº¡£
3.È«ÃæµÄµ÷ÓÃÁ´Â·Êý¾Ý·ÖÎö
Ìṩ´úÂë¼¶±ðµÄ¿É¼ûÐÔÒÔ±ãÇáËɶ¨Î»Ê§°ÜµãºÍÆ¿¾±¡£
4.¶ÔÓÚ¿ª·¢Í¸Ã÷£¬ÈÝÒ׿ª¹Ø
Ìí¼Óй¦ÄܶøÎÞÐèÐ޸ĴúÂ룬ÈÝÒׯôÓûòÕß½ûÓá£
5.ÍêÕûµÄµ÷ÓÃÁ´Ó¦ÓÃÍØÆË
×Ô¶¯¼ì²âÓ¦ÓÃÍØÆË£¬°ïÖúÄã¸ãÇå³þÓ¦Óõļܹ¹
4.1 ̽ÕëµÄÐÔÄÜ
±È½Ï¹Ø×¢Ì½ÕëµÄÐÔÄÜ£¬±Ï¾¹ APM ¶¨Î»»¹Êǹ¤¾ß£¬Èç¹ûÆôÓÃÁËÁ´Â·¼à¿Ø×齨ºó£¬Ö±½Óµ¼ÖÂÍÌÍÂÁ¿½µµÍ¹ý°ë£¬ÄÇÒ²ÊDz»ÄܽÓÊܵġ£¶Ô
skywalking¡¢zipkin¡¢pinpoint ½øÐÐÁËѹ²â£¬²¢Óë»ùÏߣ¨Î´Ê¹ÓÃ̽Õ룩µÄÇé¿ö½øÐÐÁ˶Աȡ£
Ñ¡ÓÃÁËÒ»¸ö³£¼ûµÄ»ùÓÚ Spring µÄÓ¦ÓóÌÐò£¬°üº¬ Spring Boot, Spring MVC£¬redis¿Í»§¶Ë£¬mysql¡£¼à¿ØÕâ¸öÓ¦ÓóÌÐò£¬Ã¿¸ötrace£¬Ì½Õë»áץȡ5¸öspan£¨1
Tomcat, 1 SpringMVC, 2 Jedis, 1 Mysql£©¡£Õâ±ß»ù±¾ºÍ skywalkingtest
µÄ²âÊÔÓ¦Óò¶à¡£
Ä£ÄâÁËÈýÖÖ²¢·¢Óû§£º500£¬750£¬1000¡£Ê¹ÓÃjmeter²âÊÔ£¬Ã¿¸öÏ̷߳¢ËÍ30¸öÇëÇó£¬ÉèÖÃ˼¿¼Ê±¼äΪ10ms¡£Ê¹ÓõIJÉÑùÂÊΪ1£¬¼´100%£¬Õâ±ßÓëÉú²ú¿ÉÄÜÓвî±ð¡£pinpointĬÈϵIJÉÑùÂÊΪ20£¬¼´50%£¬Í¨¹ýÉèÖÃagentµÄÅäÖÃÎļþ¸ÄΪ100%¡£zipkinĬÈÏÒ²ÊÇ1¡£×éºÏÆðÀ´£¬Ò»¹²ÓÐ12ÖÖ¡£ÏÂÃæ¿´Ï»ã×Ü±í£º

´ÓÉϱí¿ÉÒÔ¿´³ö£¬ÔÚÈýÖÖÁ´Â·¼à¿Ø×é¼þÖУ¬skywalking µÄ̽Õë¶ÔÍÌÍÂÁ¿µÄÓ°Ïì×îС£¬zipkinµÄÍÌÍÂÁ¿¾ÓÖС£pinpoint
µÄ̽Õë¶ÔÍÌÍÂÁ¿µÄÓ°Ïì½ÏΪÃ÷ÏÔ£¬ÔÚ500²¢·¢Óû§Ê±£¬²âÊÔ·þÎñµÄÍÌÍÂÁ¿´Ó1385½µµÍµ½774£¬Ó°ÏìºÜ´ó¡£È»ºóÔÙ¿´ÏÂCPUºÍmemoryµÄÓ°Ï죬ÔÚÄÚ²¿·þÎñÆ÷½øÐеÄѹ²â£¬¶ÔCPUºÍmemoryµÄÓ°Ïì¶¼²î²»¶àÔÚ10%Ö®ÄÚ¡£
4.2 collectorµÄ¿ÉÀ©Õ¹ÐÔ
collectorµÄ¿ÉÀ©Õ¹ÐÔ£¬Ê¹µÃÄܹ»Ë®Æ½À©Õ¹ÒÔ±ãÖ§³Ö´ó¹æÄ£·þÎñÆ÷¼¯Èº¡£
1. zipkin
¿ª·¢ zipkin-Server£¨Æäʵ¾ÍÊÇÌṩµÄ¿ªÏä¼´Óðü£©£¬zipkin-agent Óë zipkin-Server
ͨ¹ý http »òÕß mq ½øÐÐͨÐÅ£¬http ͨÐÅ»á¶ÔÕý³£µÄ·ÃÎÊÔì³ÉÓ°Ï죬ËùÒÔ»¹ÊÇÍÆ¼ö»ùÓÚmqÒì²½·½Ê½Í¨ÐÅ£¬zipkin-Server
ͨ¹ý¶©ÔľßÌåµÄ topic ½øÐÐÏû·Ñ¡£Õâ¸öµ±È»ÊÇ¿ÉÒÔÀ©Õ¹µÄ£¬¶à¸ö zipkin-Server ʵÀý½øÐÐÒì²½Ïû·Ñ
mq ÖÐµÄ¼à¿ØÐÅÏ¢¡£

zipkin
2. skywalking
skywalkingµÄcollectorÖ§³ÖÁ½ÖÖ²¿Êð·½Ê½£ºµ¥»úºÍ¼¯ÈºÄ£Ê½¡£collectorÓëagentÖ®¼äµÄͨÐÅʹÓÃÁËgRPC¡£
3. pinpoint
ͬÑù£¬pinpointÒ²ÊÇÖ§³Ö¼¯ÈººÍµ¥»ú²¿ÊðµÄ¡£pinpoint agentͨ¹ýthriftͨÐÅ¿ò¼Ü£¬·¢ËÍÁ´Â·ÐÅÏ¢µ½collector¡£
4.3 È«ÃæµÄµ÷ÓÃÁ´Â·Êý¾Ý·ÖÎö
È«ÃæµÄµ÷ÓÃÁ´Â·Êý¾Ý·ÖÎö£¬Ìṩ´úÂë¼¶±ðµÄ¿É¼ûÐÔÒÔ±ãÇáËɶ¨Î»Ê§°ÜµãºÍÆ¿¾±¡£
zipkin

zipkinÁ´Â·µ÷Ó÷ÖÎö
zipkin µÄÁ´Â·¼à¿ØÁ£¶ÈÏà¶ÔûÓÐÄÇôϸ£¬´ÓÉÏͼ¿ÉÒÔ¿´µ½µ÷ÓÃÁ´ÖоßÌåµ½½Ó¿Ú¼¶±ð£¬ÔÙ½øÒ»²½µÄµ÷ÓÃÐÅÏ¢²¢Î´Éæ¼°¡£
skywalking

skywalkingÁ´Â·µ÷Ó÷ÖÎö
skywalking »¹Ö§³Ö20+µÄÖмä¼þ¡¢¿ò¼Ü¡¢Àà¿â£¬±ÈÈ磺Ö÷Á÷µÄdubbo¡¢Okhttp£¬»¹ÓÐDBºÍÏûÏ¢Öмä¼þ¡£ÉÏͼskywalkingÁ´Â·µ÷Ó÷ÖÎö½ØÈ¡µÄ±È½Ï¼òµ¥£¬Íø¹Øµ÷ÓÃuser·þÎñ£¬ÓÉÓÚÖ§³ÖÖÚ¶àµÄÖмä¼þ£¬ËùÒÔskywalkingÁ´Â·µ÷Ó÷ÖÎö±ÈzipkinÍ걸Щ¡£
pinpoint

pinpointÁ´Â·µ÷Ó÷ÖÎö
pinpointÓ¦¸ÃÊÇÕâÈýÖÖAPM×é¼þÖУ¬Êý¾Ý·ÖÎö×îΪÍ걸µÄ×é¼þ¡£Ìṩ´úÂë¼¶±ðµÄ¿É¼ûÐÔÒÔ±ãÇáËɶ¨Î»Ê§°ÜµãºÍÆ¿¾±£¬ÉÏͼ¿ÉÒÔ¿´µ½¶ÔÓÚÖ´ÐеÄsqlÓï¾ä£¬¶¼½øÐÐÁ˼Ǽ¡£»¹¿ÉÒÔÅäÖñ¨¾¯¹æÔòµÈ£¬ÉèÖÃÿ¸öÓ¦ÓöÔÓ¦µÄ¸ºÔðÈË£¬¸ù¾ÝÅäÖõĹæÔò±¨¾¯£¬Ö§³ÖµÄÖмä¼þºÍ¿ò¼ÜÒ²±È½ÏÍ걸¡£
4.4 ¶ÔÓÚ¿ª·¢Í¸Ã÷£¬ÈÝÒ׿ª¹Ø
¶ÔÓÚ¿ª·¢Í¸Ã÷£¬ÈÝÒ׿ª¹Ø£¬Ìí¼Óй¦ÄܶøÎÞÐèÐ޸ĴúÂ룬ÈÝÒׯôÓûòÕß½ûÓá£ÎÒÃÇÆÚÍû¹¦ÄÜ¿ÉÒÔ²»Ð޸ĴúÂë¾Í¹¤×÷²¢Ï£ÍûµÃµ½´úÂë¼¶±ðµÄ¿É¼ûÐÔ¡£
¶ÔÓÚÕâÒ»µã£¬Zipkin ʹÓÃÐ޸ĹýµÄÀà¿âºÍËü×Ô¼ºµÄÈÝÆ÷(Finagle)À´Ìṩ·Ö²¼Ê½ÊÂÎñ¸ú×ٵŦÄÜ¡£µ«ÊÇ£¬ËüÒªÇóÔÚÐèҪʱÐ޸ĴúÂë¡£skywalkingºÍpinpoint¶¼ÊÇ»ùÓÚ×Ö½ÚÂëÔöÇ¿µÄ·½Ê½£¬¿ª·¢ÈËÔ±²»ÐèÒªÐ޸ĴúÂ룬²¢ÇÒ¿ÉÒÔÊÕ¼¯µ½¸ü¶à¾«È·µÄÊý¾ÝÒòΪÓÐ×Ö½ÚÂëÖеĸü¶àÐÅÏ¢¡£
4.5 ÍêÕûµÄµ÷ÓÃÁ´Ó¦ÓÃÍØÆË
×Ô¶¯¼ì²âÓ¦ÓÃÍØÆË£¬°ïÖúÄã¸ãÇå³þÓ¦Óõļܹ¹¡£

pinpointÁ´Â·ÍØÆË

skywalkingÁ´Â·ÍØÆË

zipkinÁ´Â·ÍØÆË
ÉÏÃæÈý·ùͼ£¬·Ö±ðչʾÁËAPM ×é¼þ¸÷×Եĵ÷ÓÃÍØÆË£¬¶¼ÄÜʵÏÖÍêÕûµÄµ÷ÓÃÁ´Ó¦ÓÃÍØÆË¡£Ïà¶ÔÀ´Ëµ£¬pinpoint
½çÃæÏÔʾµÄ¸ü¼Ó·á¸»£¬¾ßÌåµ½µ÷ÓõÄDBÃû£¬zipkinµÄÍØÆË¾ÖÏÞÓÚ·þÎñÓÚ·þÎñÖ®¼ä¡£
4.6 PinpointÓëZipkinϸ»¯±È½Ï
4.6.1 PinpointÓëZipkin²îÒìÐÔ
Pinpoint ÊÇÒ»¸öÍêÕûµÄÐÔÄÜ¼à¿Ø½â¾ö·½°¸£ºÓдÓ̽Õë¡¢ÊÕ¼¯Æ÷¡¢´æ´¢µ½ Web ½çÃæµÈÈ«Ì×Ìåϵ£»¶ø
Zipkin Ö»²àÖØÊÕ¼¯Æ÷ºÍ´æ´¢·þÎñ£¬ËäȻҲÓÐÓû§½çÃæ£¬µ«Æä¹¦ÄÜÓë Pinpoint ²»¿ÉͬÈÕ¶øÓï¡£·´¶ø
Zipkin ÌṩÓÐ Query ½Ó¿Ú£¬¸üÇ¿´óµÄÓû§½çÃæºÍϵͳ¼¯³ÉÄÜÁ¦£¬¿ÉÒÔ»ùÓڸýӿڶþ´Î¿ª·¢ÊµÏÖ¡£
Zipkin ¹Ù·½ÌṩÓлùÓÚ Finagle ¿ò¼Ü£¨Scala ÓïÑÔ£©µÄ½Ó¿Ú£¬¶øÆäËû¿ò¼ÜµÄ½Ó¿ÚÓÉÉçÇø¹±Ï×£¬Ä¿Ç°¿ÉÒÔÖ§³Ö
Java¡¢Scala¡¢Node¡¢Go¡¢Python¡¢Ruby ºÍ C# µÈÖ÷Á÷¿ª·¢ÓïÑԺͿò¼Ü£»µ«ÊÇ
Pinpoint ĿǰֻÓйٷ½ÌṩµÄ Java Agent ̽Õ룬ÆäËûµÄ¶¼ÔÚÇëÇóÉçÇøÖ§Ô®ÖУ¨Çë²Î¼û
#1759 ºÍ #1760£©¡£
Pinpoint ÌṩÓÐ Java Agent ̽Õ룬ͨ¹ý×Ö½ÚÂë×¢ÈëµÄ·½Ê½ÊµÏÖµ÷ÓÃÀ¹½ØºÍÊý¾ÝÊÕ¼¯£¬¿ÉÒÔ×öµ½ÕæÕýµÄ´úÂëÎÞÇÖÈ룬ֻÐèÒªÔÚÆô¶¯·þÎñÆ÷µÄʱºòÌí¼ÓһЩ²ÎÊý£¬¾Í¿ÉÒÔÍê³É̽ÕëµÄ²¿Ê𣻶ø
Zipkin µÄ Java ½Ó¿ÚʵÏÖ Brave£¬Ö»ÌṩÁË»ù±¾µÄ²Ù×÷ API£¬Èç¹ûÐèÒªÓë¿ò¼Ü»òÕßÏîÄ¿¼¯³ÉµÄ»°£¬¾ÍÐèÒªÊÖ¶¯Ìí¼ÓÅäÖÃÎļþ»òÔö¼Ó´úÂë¡£
Pinpoint µÄºó¶Ë´æ´¢»ùÓÚ HBase£¬¶ø Zipkin »ùÓÚ Cassandra¡£
4.6.2 Pinpoint Óë Zipkin ÏàËÆÐÔ
Pinpoint Óë Zipkin ¶¼ÊÇ»ùÓÚ Google Dapper µÄÄÇÆªÂÛÎÄ£¬Òò´ËÀíÂÛ»ù´¡´óÖÂÏàͬ¡£Á½Õß¶¼Êǽ«·þÎñµ÷Óòð·Ö³ÉÈô¸ÉÓм¶Áª¹ØÏµµÄ
Span£¬Í¨¹ý SpanId ºÍ ParentSpanId À´½øÐе÷ÓùØÏµµÄ¼¶Áª£»×îºóÔÙ½«Õû¸öµ÷ÓÃÁ´Á÷¾µÄËùÓеÄ
Span »ã¾Û³ÉÒ»¸ö Trace£¬±¨¸æ¸ø·þÎñ¶ËµÄ collector ½øÐÐÊÕ¼¯ºÍ´æ´¢¡£
¼´±ãÔÚÕâÒ»µãÉÏ£¬Pinpoint Ëù²ÉÓõĸÅÄîÒ²²»ÍêÈ«ÓëÄÇÆªÂÛÎÄÒ»Ö¡£±ÈÈçËû²ÉÓà TransactionId
À´È¡´ú TraceId£¬¶øÕæÕýµÄ TraceId ÊÇÒ»¸ö½á¹¹£¬ÀïÃæ°üº¬ÁË TransactionId,
SpanId ºÍ ParentSpanId¡£¶øÇÒ Pinpoint ÔÚ Span ÏÂÃæÓÖÔö¼ÓÁËÒ»¸ö
SpanEvent ½á¹¹£¬ÓÃÀ´¼Ç¼һ¸ö Span ÄÚ²¿µÄµ÷ÓÃϸ½Ú£¨±ÈÈç¾ßÌåµÄ·½·¨µ÷Óõȵȣ©£¬Òò´Ë Pinpoint
ĬÈÏ»á±È Zipkin ¼Ç¼¸ü¶àµÄ¸ú×ÙÊý¾Ý¡£
µ«ÊÇÀíÂÛÉϲ¢Ã»ÓÐÏÞ¶¨ Span µÄÁ£¶È´óС£¬ËùÒÔÒ»¸ö·þÎñµ÷ÓÿÉÒÔÊÇÒ»¸ö Span£¬ÄÇôÿ¸ö·þÎñÖеķ½·¨µ÷ÓÃÒ²¿ÉÒÔÊǸö
Span£¬ÕâÑùµÄ»°£¬Æäʵ Brave Ò²¿ÉÒÔ¸ú×Ùµ½·½·¨µ÷Óü¶±ð£¬Ö»ÊǾßÌåʵÏÖ²¢Ã»ÓÐÕâÑù×ö¶øÒÑ¡£
4.6.3 ×Ö½ÚÂë×¢Èë vs API µ÷ÓÃ
Pinpoint ʵÏÖÁË»ùÓÚ×Ö½ÚÂë×¢ÈëµÄ Java Agent ̽Õ룬¶ø Zipkin µÄ Brave
¿ò¼Ü½ö½öÌṩÁËÓ¦ÓòãÃæµÄ API£¬µ«ÊÇϸÏëÎÊÌâÔ¶²»ÄÇô¼òµ¥¡£×Ö½ÚÂë×¢ÈëÊÇÒ»ÖÖ¼òµ¥´Ö±©µÄ½â¾ö·½°¸£¬ÀíÂÛÉÏÀ´ËµÎÞÂÛÈκη½·¨µ÷Ó㬶¼¿ÉÒÔͨ¹ý×¢Èë´úÂëµÄ·½Ê½ÊµÏÖÀ¹½Ø£¬Ò²¾ÍÊÇ˵ûÓÐʵÏÖ²»Á˵ģ¬Ö»Óв»»áʵÏֵġ£µ«
Brave Ôò²»Í¬£¬ÆäÌṩµÄÓ¦ÓòãÃæµÄ API »¹ÐèÒª¿ò¼Üµ×²ãÇý¶¯µÄÖ§³Ö£¬²ÅÄÜʵÏÖÀ¹½Ø¡£
±ÈÈ磬MySQL µÄ JDBC Çý¶¯£¬¾ÍÌṩÓÐ×¢Èë interceptor µÄ·½·¨£¬Òò´ËÖ»ÐèҪʵÏÖ
StatementInterceptor ½Ó¿Ú£¬²¢ÔÚ Connection String ÖнøÐÐÅäÖ㬾ͿÉÒԺܼòµ¥µÄʵÏÖÏà¹ØÀ¹½Ø£»¶øÓë´ËÏà¶ÔµÄ£¬µÍ°æ±¾µÄ
MongoDB µÄÇý¶¯»òÕßÊÇ Spring Data MongoDB µÄʵÏÖ¾ÍûÓÐÈç´Ë½Ó¿Ú£¬ÏëҪʵÏÖÀ¹½Ø²éѯÓï¾äµÄ¹¦ÄÜ£¬¾Í±È½ÏÀ§ÄÑ¡£
Òò´ËÔÚÕâÒ»µãÉÏ£¬Brave ÊÇÓ²ÉË£¬ÎÞÂÛʹÓÃ×Ö½ÚÂë×¢Èë¶àôÀ§ÄÑ£¬µ«ÖÁÉÙÒ²ÊÇ¿ÉÒÔʵÏֵ쬵«ÊÇ Brave
È´ÓÐÎÞ´ÓÏÂÊֵĿÉÄÜ£¬¶øÇÒÊÇ·ñ¿ÉÒÔ×¢È룬Äܹ»¶à´ó³Ì¶ÈÉÏ×¢È룬¸ü¶àµÄÈ¡¾öÓÚ¿ò¼ÜµÄ API ¶ø²»ÊÇ×ÔÉíµÄÄÜÁ¦¡£
4.6.4 ÄѶȼ°³É±¾
¾¹ý¼òµ¥ÔĶÁ Pinpoint ºÍ Brave ²å¼þµÄ´úÂ룬¿ÉÒÔ·¢ÏÖÁ½ÕßµÄʵÏÖÄѶÈÓÐÌìÈÀÖ®±ð¡£ÔÚ¶¼Ã»ÓÐÈκοª·¢ÎĵµÖ§³ÅµÄǰÌáÏ£¬Brave
±È Pinpoint ¸üÈÝÒ×ÉÏÊÖ¡£Brave µÄ´úÂëÁ¿ºÜÉÙ£¬ºËÐŦÄܶ¼¼¯ÖÐÔÚ brave-core
Õâ¸öÄ£¿éÏ£¬Ò»¸öÖеÈˮƽµÄ¿ª·¢ÈËÔ±£¬¿ÉÒÔÔÚÒ»ÌìÖ®ÄÚ¶Á¶®ÆäÄÚÈÝ£¬²¢ÇÒÄÜ¶Ô API µÄ½á¹¹Óзdz£ÇåÎúµÄÈÏʶ¡£
Pinpoint µÄ´úÂë·â×°Ò²ÊǷdz£ºÃµÄ£¬ÓÈÆäÊÇÕë¶Ô×Ö½ÚÂë×¢ÈëµÄÉϲã API µÄ·â×°·Ç³£³öÉ«£¬µ«ÊÇÕâÒÀȻҪÇóÔĶÁÈËÔ±¶Ô×Ö½ÚÂë×¢Èë¶àÉÙÓÐһЩÁ˽⣬ËäÈ»ÆäÓÃÓÚ×¢Èë´úÂëµÄºËÐÄ
API ²¢²»¶à£¬µ«ÒªÏëÁ˽â͸³¹£¬¿ÖÅ»¹µÃÉîÈë Agent µÄÏà¹Ø´úÂ룬±ÈÈçºÜÄÑһĿÁËÈ»µÄÀí½â addInterceptor
ºÍ addScopedInterceptor µÄÇø±ð£¬¶øÕâÁ½¸ö·½·¨¾ÍÊÇλÓÚ Agent µÄÓйØÀàÐÍÖС£
ÒòΪ Brave µÄ×¢ÈëÐèÒªÒÀÀµµ×²ã¿ò¼ÜÌṩÏà¹Ø½Ó¿Ú£¬Òò´Ë²¢²»ÐèÒª¶Ô¿ò¼ÜÓÐÒ»¸öÈ«ÃæµÄÁ˽⣬ֻÐèÒªÖªµÀÄÜÔÚʲôµØ·½×¢È룬Äܹ»ÔÚ×¢ÈëµÄʱºòÈ¡µÃʲôÊý¾Ý¾Í¿ÉÒÔÁË¡£¾ÍÏñÉÏÃæµÄÀý×Ó£¬ÎÒÃǸù±¾²»ÐèÒªÖªµÀ
MySQL µÄ JDBC Driver ÊÇÈçºÎʵÏÖµÄÒ²¿ÉÒÔ×öµ½À¹½Ø SQL µÄÄÜÁ¦¡£µ«ÊÇ Pinpoint
¾Í²»È»£¬ÒòΪ Pinpoint ¼¸ºõ¿ÉÒÔÔÚÈκεط½×¢ÈëÈκδúÂ룬ÕâÐèÒª¿ª·¢ÈËÔ±¶ÔËùÐè×¢ÈëµÄ¿âµÄ´úÂëʵÏÖÓзdz£ÉîÈëµÄÁ˽⣬ͨ¹ý²é¿´Æä
MySQL ºÍ Http Client ²å¼þµÄʵÏ־ͿÉÒÔ¶´²ìÕâÒ»µã£¬µ±È»ÕâÒ²´ÓÁíÍâÒ»¸ö²ãÃæËµÃ÷ Pinpoint
µÄÄÜÁ¦È·Êµ¿ÉÒԷdz£Ç¿´ó£¬¶øÇÒÆäĬÈÏʵÏֵĺܶà²å¼þÒѾ×öµ½Á˷dz£Ï¸Á£¶ÈµÄÀ¹½Ø¡£
Õë¶Ôµ×²ã¿ò¼ÜûÓй«¿ª API µÄʱºò£¬Æäʵ Brave Ò²²¢²»ÍêÈ«Î޼ƿÉÊ©£¬ÎÒÃÇ¿ÉÒÔ²ÉÈ¡ AOP
µÄ·½Ê½£¬Ò»ÑùÄܹ»½«Ïà¹ØÀ¹½Ø×¢Èëµ½Ö¸¶¨µÄ´úÂëÖУ¬¶øÇÒÏÔÈ» AOP µÄÓ¦ÓÃÒª±È×Ö½ÚÂë×¢Èë¼òµ¥ºÜ¶à¡£
ÒÔÉÏÕâЩֱ½Ó¹ØÏµµ½ÊµÏÖÒ»¸ö¼à¿ØµÄ³É±¾£¬ÔÚ Pinpoint µÄ¹Ù·½¼¼ÊõÎĵµÖУ¬¸ø³öÁËÒ»¸ö²Î¿¼Êý¾Ý¡£Èç¹û¶ÔÒ»¸öϵͳ¼¯³ÉµÄ»°£¬ÄÇôÓÃÓÚ¿ª·¢
Pinpoint ²å¼þµÄ³É±¾ÊÇ 100£¬½«´Ë²å¼þ¼¯³ÉÈëϵͳµÄ³É±¾ÊÇ 0£»µ«¶ÔÓÚ Brave£¬²å¼þ¿ª·¢µÄ³É±¾Ö»ÓÐ
20£¬¶ø¼¯³É³É±¾ÊÇ 10¡£´ÓÕâÒ»µãÉÏ¿ÉÒÔ¿´³ö¹Ù·½¸ø³öµÄ³É±¾²Î¿¼Êý¾ÝÊÇ 5:1¡£µ«Êǹٷ½ÓÖÇ¿µ÷ÁË£¬Èç¹ûÓÐ
10 ¸öϵͳÐèÒª¼¯³ÉµÄ»°£¬ÄÇô×ܳɱ¾¾ÍÊÇ 10 * 10 + 20 = 120£¬¾Í³¬³öÁË Pinpoint
µÄ¿ª·¢³É±¾ 100£¬¶øÇÒÐèÒª¼¯³ÉµÄ·þÎñÔ½¶à£¬Õâ¸ö²î¾à¾ÍÔ½´ó¡£
4.6.5 ͨÓÃÐÔºÍÀ©Õ¹ÐÔ
ºÜÏÔÈ»£¬ÕâÒ»µãÉÏ Pinpoint ÍêÈ«´¦ÓÚÁÓÊÆ£¬´ÓÉçÇøËù¿ª·¢³öÀ´µÄ¼¯³É½Ó¿Ú¾Í¿É¼ûÒ»°ß¡£
Pinpoint µÄÊý¾Ý½Ó¿Úȱ·¦Îĵµ£¬¶øÇÒÒ²²»Ì«±ê×¼£¨²Î¿¼ÂÛ̳ÌÖÂÛÌû£©£¬ÐèÒªÔĶÁºÜ¶à´úÂë²Å¿ÉÄÜʵÏÖÒ»¸ö×Ô¼ºµÄ̽Õ루±ÈÈç
Node µÄ»òÕß PHP µÄ£©¡£¶øÇÒÍŶÓΪÁËÐÔÄÜ¿¼ÂÇʹÓÃÁË Thrift ×÷ΪÊý¾Ý´«ÊäÐÒé±ê×¼£¬±ÈÆð
HTTP ºÍ JSON ¶øÑÔÄѶÈÔö¼ÓÁ˲»ÉÙ¡£
4.6.6 ÉçÇøÖ§³Ö
ÕâÒ»µãÒ²²»±Ø¶à˵£¬Zipkin ÓÉ Twitter ¿ª·¢£¬¿ÉÒÔËãµÃÉÏÊÇÃ÷ÐÇÍŶӣ¬¶ø Naver µÄÍŶÓÖ»ÊÇÒ»¸öĬĬÎÞÎŵÄСÍŶӣ¨´Ó
#1759 µÄÌÖÂÛÖпÉÒÔ¿´³ö£©¡£ËäȻ˵Õâ¸öÏîÄ¿ÔÚ¶ÌÆÚÄÚ²»Ì«¿ÉÄÜÏûʧ»òÍ£Ö¹¸üУ¬µ«±Ï¾¹²»ÈçǰÕßÓÃÆðÀ´¸ü¼Ó·ÅÐÄ¡£¶øÇÒûÓиü¶àÉçÇø¿ª·¢³öÀ´µÄ²å¼þ£¬ÈÃ
Pinpoint Ö»ÒÀ¿¿ÍŶÓ×ÔÉíµÄÁ¦Á¿Íê³ÉÖî¶à¿ò¼ÜµÄ¼¯³ÉʵÊôÀ§ÄÑ£¬¶øÇÒËûÃÇĿǰµÄ¹¤×÷ÖØµãÒÀÈ»ÊÇÔÚÌáÉýÐÔÄܺÍÎȶ¨ÐÔÉÏ¡£
4.6.7 ÆäËû
Pinpoint ÔÚʵÏÖÖ®³õ¾Í¿¼Âǵ½ÁËÐÔÄÜÎÊÌ⣬www.naver.com ÍøÕ¾µÄºó¶ËijЩ·þÎñÿÌìÒª´¦Àí³¬¹ý
200 ÒڴεÄÇëÇó£¬Òò´ËËûÃÇ»áÑ¡Ôñ Thrift µÄ¶þ½øÖƱ䳤±àÂë¸ñʽ¡¢¶øÇÒʹÓà UDP ×÷Ϊ´«ÊäÁ´Â·£¬Í¬Ê±ÔÚ´«µÝ³£Á¿µÄʱºòÒ²¾¡Á¿Ê¹ÓÃÊý¾Ý²Î¿¼×ֵ䣬´«µÝÒ»¸öÊý×Ö¶ø²»ÊÇÖ±½Ó´«µÝ×Ö·û´®µÈµÈ¡£ÕâЩÓÅ»¯Ò²Ôö¼ÓÁËϵͳµÄ¸´ÔÓ¶È£º°üÀ¨Ê¹ÓÃ
Thrift ½Ó¿ÚµÄÄѶȡ¢UDP Êý¾Ý´«ÊäµÄÎÊÌâ¡¢ÒÔ¼°Êý¾Ý³£Á¿×ÖµäµÄ×¢²áÎÊÌâµÈµÈ¡£
Ïà±È֮ϣ¬Zipkin ʹÓÃÊìϤµÄ Restful ½Ó¿Ú¼Ó JSON£¬¼¸ºõûÓÐÈκÎѧϰ³É±¾ºÍ¼¯³ÉÄѶȣ¬Ö»ÒªÖªµÀÊý¾Ý´«Êä½á¹¹£¬¾Í¿ÉÒÔÇáÒ×µÄΪһ¸öеĿò¼Ü¿ª·¢³öÏàÓ¦µÄ½Ó¿Ú¡£
ÁíÍâ Pinpoint ȱ·¦Õë¶ÔÇëÇóµÄ²ÉÑùÄÜÁ¦£¬ÏÔÈ»ÔÚ´óÁ÷Á¿µÄÉú²ú»·¾³Ï£¬²»Ì«¿ÉÄܽ«ËùÓеÄÇëÇóÈ«²¿¼Ç¼£¬Õâ¾ÍÒªÇó¶ÔÇëÇó½øÐвÉÑù£¬ÒÔ¾ö¶¨Ê²Ã´ÑùµÄÇëÇóÊÇÎÒÐèÒª¼Ç¼µÄ¡£Pinpoint
ºÍ Brave ¶¼Ö§³Ö²ÉÑù°Ù·Ö±È£¬Ò²¾ÍÊǰٷÖÖ®¶àÉÙµÄÇëÇó»á±»¼Ç¼ÏÂÀ´¡£µ«ÊÇ£¬³ý´ËÖ®Íâ Brave »¹ÌṩÁË
Sampler ½Ó¿Ú£¬¿ÉÒÔ×Ô¶¨Òå²ÉÑù²ßÂÔ£¬ÓÈÆäÊǵ±½øÐÐ A/B ²âÊÔµÄʱºò£¬ÕâÑùµÄ¹¦Äܾͷdz£ÓÐÒâÒåÁË¡£
4.6.8 ×ܽá
´Ó¶ÌÆÚÄ¿±êÀ´¿´£¬Pinpoint ȷʵ¾ßÓÐѹµ¹ÐÔµÄÓÅÊÆ£ºÎÞÐè¶ÔÏîÄ¿´úÂë½øÐÐÈκθ͝¾Í¿ÉÒÔ²¿Êð̽Õë¡¢×·×ÙÊý¾ÝϸÁ£»¯µ½·½·¨µ÷Óü¶±ð¡¢¹¦ÄÜÇ¿´óµÄÓû§½çÃæÒÔ¼°¼¸ºõ±È½ÏÈ«ÃæµÄ
Java ¿ò¼ÜÖ§³Ö¡£µ«Êdz¤Ô¶À´¿´£¬Ñ§Ï° Pinpoint µÄ¿ª·¢½Ó¿Ú£¬ÒÔ¼°Î´À´Îª²»Í¬µÄ¿ò¼ÜʵÏֽӿڵijɱ¾¶¼»¹ÊǸöδ֪Êý¡£
Ïà·´£¬ÕÆÎÕ Brave ¾ÍÏà¶ÔÈÝÒ×£¬¶øÇÒ Zipkin µÄÉçÇø¸ü¼ÓÇ¿´ó£¬¸üÓпÉÄÜÔÚδÀ´¿ª·¢³ö¸ü¶àµÄ½Ó¿Ú¡£ÔÚ×µÄÇé¿öÏ£¬ÎÒÃÇÒ²¿ÉÒÔ×Ô¼ºÍ¨¹ý
AOP µÄ·½Ê½Ìí¼ÓÊʺÏÓÚÎÒÃÇ×Ô¼ºµÄ¼à¿Ø´úÂ룬¶ø²¢²»ÐèÒªÒýÈëÌ«¶àµÄм¼ÊõºÍиÅÄî¡£¶øÇÒÔÚδÀ´ÒµÎñ·¢Éú±ä»¯µÄʱºò£¬Pinpoint
¹Ù·½ÌṩµÄ±¨±íÊÇ·ñÄÜÂú×ãÒªÇóÒ²²»ºÃ˵£¬Ôö¼Óеı¨±íÒ²»á´øÀ´²»¿ÉÒÔÔ¤²âµÄ¹¤×÷ÄѶȺ͹¤×÷Á¿¡£
5 Tracing ºÍ Monitor Çø±ð
Monitor ¿É·ÖΪϵͳ¼à¿ØºÍÓ¦ÓÃ¼à¿Ø¡£ÏµÍ³¼à¿Ø±ÈÈçCPU£¬ÄÚ´æ£¬ÍøÂ磬´ÅÅ̵ȵÈÕûÌåµÄϵͳ¸ºÔصÄÊý¾Ý£¬Ï¸»¯¿É¾ßÌåµ½¸÷½ø³ÌµÄÏà¹ØÊý¾Ý¡£ÕâÒ»ÀàÐÅÏ¢ÊÇÖ±½Ó¿ÉÒÔ´ÓϵͳÖеõ½µÄ¡£Ó¦ÓÃ¼à¿ØÐèÒªÓ¦ÓÃÌṩ֧³Ö£¬±©Â¶ÁËÏàÓ¦µÄÊý¾Ý¡£±ÈÈçÓ¦ÓÃÄÚ²¿ÇëÇóµÄQPS£¬ÇëÇó´¦ÀíµÄÑÓʱ£¬ÇëÇó´¦ÀíµÄerrorÊý£¬ÏûÏ¢¶ÓÁеĶÓÁг¤¶È£¬±ÀÀ£Çé¿ö£¬½ø³ÌÀ¬»ø»ØÊÕÐÅÏ¢µÈµÈ¡£MonitorÖ÷ҪĿ±êÊÇ·¢ÏÖÒì³££¬¼°Ê±±¨¾¯¡£
Tracing µÄ»ù´¡ºÍºËÐͼÊǵ÷ÓÃÁ´¡£Ïà¹ØµÄ metric ´ó¶à¶¼ÊÇÎ§ÈÆµ÷ÓÃÁ´·ÖÎöµÃµ½µÄ¡£Tracing
Ö÷ҪĿ±êÊÇϵͳ·ÖÎö¡£ÌáǰÕÒµ½ÎÊÌâ±È³öÏÖÎÊÌâºóÔÙÈ¥½â¾ö¸üºÃ¡£
Tracing ºÍÓ¦Óü¶µÄ Monitor ¼¼ÊõÕ»ÉÏÓкܶ๲ͬµã¡£¶¼ÓÐÊý¾ÝµÄ²É¼¯£¬·ÖÎö£¬´æ´¢ºÍչʽ¡£Ö»ÊǾßÌåÊÕ¼¯µÄÊý¾Ýά¶È²»Í¬£¬·ÖÎö¹ý³Ì²»Ò»Ñù¡£ |