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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
΢·þÎñÖÐ̨¼¼Êõ½âÎö֮ȫÁ´Â··Ö²¼Ê½×·×Ùϵͳʵ¼ù
 
×÷Õߣº·ë¸Õ
  2360  次浏览      27
 2021-2-22 
   
 
±à¼­ÍƼö:
±¾ÎĽ«ÏêϸÆÊÎö FreeWheel Biz-UI ÍÅ¶Ó´Ó 0 µ½ 1 ¹¹½¨ºÍ¸Ä½øÈ«Á´Â··Ö²¼Ê½×·×ÙϵͳµÄ¹ý³Ì¡£
±¾ÎÄÀ´×ÔÓÚinfoq£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼­¡¢ÍƼö¡£

Biz-UI ÍŶÓÔÚºËÐÄÒµÎñϵͳµÄ¿ª·¢¹ý³ÌÖУ¬½«¾ßÓй²ÐԵŦÄÜÄ£¿é³éÏó³öÀ´£¬Öð½¥Íê³ÉÁËÖÐ̨µÄ¹¹½¨£¬ÎªÒµÎñÂß¼­ÌṩÁËÇ¿ÓÐÁ¦µÄ»ù´¡×é¼þÖ§³Å¡£ÆäÖзֲ¼Ê½×·×Ùϵͳ×÷Ϊһ¸öÖØÒªµÄ×é³É²¿·Ö£¬Îª¼à¿Ø·þÎñÖ®¼äµÄµ÷Óᢶ¨Î»ºÍµ÷ÊÔÏßÉÏÎÊÌ⣬ÌṩÁËÓÐÁ¦µÄÖ§³Å¡£

΢·þÎñ-×½³æ¼Ç

С־ËùÔڵļ¼Êõ²¿ÃŸոնÔÓ·Ö׵ĵ¥ÌåÓ¦ÓÃÍê³ÉÁ˲ð½â£¬ÍÆÐÐ΢·þÎñÀíÄ½«Ö®Ç°ÔÓô۵ò»¿É¿ª½»µÄ´úÂë°´ÒµÎñÄ£¿é²ð·Ö³ÉÒ»¸öÒ»¸öµÄ΢·þÎñ¡£Ëæ×ÅÏîÄ¿µÄÍÆ¶¯£¬´ó¼Òȷʵ¸ÐÊܵ½Î¢·þÎñ´øÀ´µÄÊÕÒæ£¬²ð½âÍêÒÔºó¶Ôµ¥¸ö΢·þÎñά»¤ÆðÀ´Ò²¸ü¼Ó·½±ã¡£µ«Óë´ËͬʱҲ´øÀ´ÁËÒ»Ð©Ö®Ç°Î´ÔøÓöµ½µÄÎÊÌâ......

Ò»Õó¼±´ÙµÄÊÖ»úÁåÉù´ò¶ÏÁËС־µÄ˼Ð÷£¬¿´×ÅÊìϤµÄÀ´µçºÅÂ룬С־ÐÄÏëÕæÊÇÅÂʲôÀ´Ê²Ã´£¬ÐÂÉϵķþÎñÁ賿ÓÖ³öÎÊÌâÁË¡£

¡°Î¹£¬Ð¡Ö¾°¡£¬ÏßÉϱ¨¾¯ÁË£¬Í¦½ô¼±µÄ£¬Äã¸Ï½ô¿´Ò»Ï°ɣ¬Ò»»áÏßÉÏÁÄ¡£¡±

ÊìÁ·µØ·­¿ª±¨¾¯Óʼþ£¬´¦ÀíÕâÀàÎÊÌâ¶ÔС־À´ËµÒѾ­Çá³µÊì·¡£Ïêϸ·ÖÎöÁËһϱ¨¾¯ÄÚÈÝ£¬Ð¡Ö¾¶Ï¶¨ÊÇÏÂÓηþÎñ³öÎÊÌâµ¼Öµı¨¾¯¡£

¡°ÀÏÀÎÒÊÇС־£¬ÎÒÃÇÕâ±ß¸Õ¸Õ³öÀ´Ò»¸ö±¨¾¯£¬Í¦ÑÏÖØµÄ£¬¸Õ¿´ÁËÒ»ÏÂϵͳÈÕÖ¾£¬ÊÇÔÚµ÷ÄãÃǶ©µ¥·þÎñµÄʱºò³ö´íÁË£¬Äã°ï¿´Ò»Ï°ɣ¬ÎÒÒ»»á°ÑÈÕÖ¾·¢Ä㶤¶¤¡£¡±

ÀÏÀî¾­¹ýÅŲ飬·¢ÏÖÊÇÉÏÓηþÎñµÄÎÊÌ⣬ÓÚÊÇ×¥½ôÁªÏµÀÏÇ®¡£¡°ÀÏÇ®°¡£¬»¹Ã»Ë¯Äذɣ¿¸Õ¸ÕС־ÄDZ߳öÎÊÌ⣬ӰÏìÁ˲»ÉÙ¿Í»§¡£²éÈÕÖ¾·¢ÏÖÊǶ©µ¥Õâ±ß±¨´íÁË£¬ÎÒ¿´ÁËһ϶©µ¥·þÎñµÄÈÕÖ¾£¬ÊÇÄãÃÇÄÇ±ßµÄ¿â´æ·þÎñ±¨Á˲»ÉÙ 500£¬Äã¸Ï½ôÆðÀ´¿´Ò»Ï°ɡ£¡±

ÆÁĻǰС־¡¢ÀÏÀî¡¢ÀÏÇ®ÕýÔÚÈÈ»ð³¯ÌìµØ×½³æÕÒ bug.

΢·þÎñ£¬×÷Ϊһ¸ö½ü¼¸Äê·Ç³£»ðÈȵϰÌ⣬ÇÐÇÐʵʵ½â¾öÁ˺ܶ൥ÌåÓ¦ÓõÄÍ´µã£¬µ«Óë´ËͬʱҲ´øÀ´ÁËһЩеÄÍ´µã¡£

FreeWheel ºËÐÄÒµÎñ²¿ÃŽáºÏ×ÔÉíµÄʵ¼ÊÇé¿ö£¬ÒÔ΢·þÎñµÄ·½Ê½¶Ô֮ǰµÄµ¥Ò»Ó¦ÓÃ×öÁ˲ð·Ö¡£Í¬Ê±£¬ÎªÁ˱ÜÃâÉÏÃæ¹ÊÊÂÀïµÄÇé¿ö·¢Éú£¬ÎÒÃÇÒýÈëÁË·Ö²¼Ê½×·×ÙϵͳÓÃÀ´½â¾ö¡¾ÈçºÎÔÚ΢·þÎñϵͳÖпìËÙ¶¨Î»ÎÊÌ⣿¡¿¡¢¡¾ÈçºÎ¹Û²ì¸´Ôӵĵ÷ÓÃÁ´¡¢·ÖÎöµ÷ÓõÄÍøÂç½á¹¹£¿¡¿µÈµÈÎÊÌâ¡£

·Ö²¼Ê½×·×Ùϵͳ

·Ö²¼Ê½×·×Ùϵͳ(Distributed Tracing System)¿ÉÒÔÓÃÀ´½â¾ö΢·þÎñϵͳÖеij£ÎÊÌⶨλ¡¢bug ×·×Ù¡¢ÍøÂç½á¹¹·ÖÎöµÈÎÊÌâ¡£¸ÃϵͳµÄÊý¾ÝÄ£ÐÍ×îÔçÓÉGoogle¡¯s Dapper ÂÛÎÄÌá³ö£¬Ö÷Òª°üº¬Èçϼ¸¸ö²¿·Ö£º

Trace: ÓÃÀ´ÃèÊö·Ö²¼Ê½ÏµÍ³ÖÐÒ»¸öÍêÕûµÄµ÷ÓÃÁ´£¬Ã¿Ò»¸ö Trace »áÓÐÒ»¸ö¶ÀÓÐµÄ Trace ID¡£

Span: ·Ö²¼Ê½ÏµÍ³ÖеÄÒ»¸öСµÄµ÷Óõ¥Ôª£¬¿ÉÒÔÊÇÒ»¸ö΢·þÎñÖÐµÄ service, Ò²¿ÉÒÔÊÇÒ»´Î·½·¨µ÷Óã¬ÉõÖÁÒ»¸ö¼òµ¥µÄ´úÂë¿éµ÷Óá£Span ¿ÉÒÔ°üº¬Æðʼʱ¼ä´Á¡¢log µÈÐÅÏ¢¡£Ã¿Ò»¸ö Span »áÓÐÒ»¸ö¶ÀÓÐµÄ Span ID.

Span Context: °üº¬¶îÍâ Trace ÐÅÏ¢µÄÊý¾Ý½á¹¹£¬span context ¿ÉÒÔ°üº¬ Trace ID¡¢Span ID, ÒÔ¼°ÆäËûÈκÎÐèÒªÏòÏÂÓÎ service ´«µÝµÄ trace ÐÅÏ¢¡£

ÔÚÕâ»ù´¡ÉÏ£¬ÉçÇøÎªÁËʵÏÖ¸÷¸ö±à³ÌÓïÑԺ͸÷ÖÖ¿ò¼ÜµÄ½Ó¿Úͳһ£¬·¢Õ¹³öÁËOpenTracing Specification ÒÔ¼° OpenTracing API¡£ºóÀ´Òµ½çÒ²Ïà¼ÌÍÆ³öÁ˼¸¿î±È½Ï³ÉÊìµÄ²úÆ·£¬Èç Zipkin¡¢Jaeger¡¢LightStep¡¢DataDog µÈ¡£

·Ö²¼Ê½×·×ÙϵͳÊÇÈçºÎ½â¾ö¿ç·þÎñµ÷ÓÃʱµÄÎÊÌⶨλµÄÄØ£¿¶ÔÓÚÒ»´Î¿Í»§µ÷Ó㬷ֲ¼Ê½×·×Ùϵͳ»áÔÚÇëÇóµÄÈë¿Ú´¦Éú³ÉÒ»¸ö TraceID£¬ÓÃÕâ¸ö TraceID °Ñ¿Í»§ÇëÇó½øÈëÿ¸ö΢·þÎñÖеĵ÷ÓÃÈÕÖ¾´®ÁªÆðÀ´£¬ÐγÉÒ»¸öʱÐòͼ¡£ÈçÏÂͼËùʾ£¬¼ÙÉè A µÄÁ½¶Ë±íʾһ´Î¿Í»§µ÷ÓõĿªÊ¼ºÍ½áÊø£¬Öмä»á¾­¹ýÀàËÆ B¡¢ C¡¢D¡¢ E µÈºó¶Ë·þÎñ¡£´ËʱÈç¹û E ³öÎÊÌ⣬¾Í¿ÉÒԺܿìËٵض¨Î»µ½£¬¶ø²»ÓÃͬʱÈà A¡¢B¡¢C¡¢D ¶¼²ÎÓë½øÀ´²éÎÊÌâ¡£

(ͼƬÀ´Ô´:www.jaegertracing.io)

Biz-UI ·Ö²¼Ê½×·×Ùϵͳʵ¼ù

¼¼ÊõÑ¡ÐÍ

ÔÚ FreeWheel ºËÐÄÒµÎñϵͳ΢·þÎñ´î½¨¹ý³ÌÖУ¬ÎÒÃÇÉî¶Èµ÷ÑÐÁËÏÖÓеķֲ¼Ê½×·×Ùϵͳ½â¾ö·½°¸£¬Õë¶ÔÆäÖм¸¸ö±È½ÏÖØÒªµÄÑ¡ÐÍÖ¸±ê×öÁËÉî¶ÈµÄÌÖÂÛ¡£

Ö¸±ê ÃèÊö
ÊÇ·ñÖ§³ÖGo Client? FreeWheelºËÐÄÒµÎñϵͳ´óÁ¿Óõ½Go×÷Ϊ¿ª·¢ÓïÑÔ£¬Õâ¾ÍʹµÃÎÒÃǸüÇãÏòÓÚÌṩ±ãÀûµÄGo ¿Í»§¶ËµÄ½â¾ö·½°¸¡£
ÊÇ·ñÖ§³ÖgRPC?
¸÷¸öÒµÎñÄ£¿éÖ®¼äÖ÷Ҫͨ¹ýgRPC½øÐÐͨѶ£¬ÊÇ·ñÄÜÖ§³ÖgRPCЭÒéÊÇÒ»¸öÖØÒªµÄÆÀ¼ÛÖ¸±ê¡£
TraceÊý¾ÝÈçºÎ´æ´¢£¿
ÒµÎñ´úÂë½ÓÈëTraceÒÔºó±ØÈ»»á²úÉú´óÁ¿µÄÊý¾Ý£¬ÕâЩTraceÊý¾ÝÈçºÎ´æ´¢£¿ÈçºÎ·ÖÎö£¿ÈçºÎ¼ò½àÇåÎúµØ½«TraceÐÅϢչʾ¸ø¿ª·¢ÈËÔ±£¿ÕâÒ²ÊÇÑ¡Ð͹ý³ÌÖÐÐèÒª¿¼ÂǵÄÒ»¸öÖØÒªÖ¸±ê¡£
À©Õ¹ÐÔ Ëæ×Å»ù´¡¼Ü¹¹µÄÉý¼¶¸ÄÔ죬²»¶ÏÓÐеÄ×é¼þ±»ÒýÈë¡£ÆÀ¹À½â¾ö·½°¸ÊÇ·ñÖ§³ÖÖîÈçIstioµÈ×é¼þÒ²½«ÊÇÐèÒª¿¼ÂǵÄÎÊÌâ¡£

»ùÓÚÉÏÃæ¼¸¸öÖ¸±ê£¬ÎÒÃǶÔÊÐÃæÉÏÖ÷Á÷µÄ¿ªÔ´ÏîÄ¿½øÐÐɸѡ£¬°üÀ¨ Jeager¡¢Zipkin µÈ£¬¿¼Âǵ½Êг¡Õ¼ÓÐÂÊ¡¢ÏîÄ¿³ÉÊì¶È¡¢ÏîÄ¿ÆõºÏ¶È£¬ÎÒÃÇ×îÖÕÑ¡ÔñÁËͬΪ Golang ¿ª·¢µÄ Jaeger¡£Jeager Tracing ¿ò¼ÜÏÂÖ÷Òª°üº¬Èý´óÄ£¿é£ºTracingAgent, Tracing Collector ºÍ Tracing Query¡£

·þÎñ ÃèÊö
Agent ×÷ΪËÞÖ÷»úÉϵÄÒ»¸ödaemon½ø³ÌÓÃÀ´¼àÌý´Ó·þÎñ¶Ë·¢³öµÄtraceÊý¾Ý°ü£¬È»ºóÅúÁ¿µØ·¢ÍùCollector¡£Agent»á±»²¿Êðµ½ËùÓеÄËÞÖ÷»úÉÏ£¬Í¬Ê±Ò²ÊµÏÖÁ˶ÔÓÚCollectorµÄ·Óɺ͸ºÔؾùºâµÈ¹¦ÄÜ£¬ÒÔÃâËùÓÐÇëÇó¶¼·¢µ½Í¬Ò»¸öCollector ʵÌåÉÏ¡£
Collecto
CollectorÓÃÀ´ÊÕ¼¯´ÓAgent·¢À´µÄtraceÊý¾Ý°ü£¬²¢½øÐÐһϵÁд¦Àí£¬°üÀ¨traceÊý¾Ý°üУÑé¡¢index¡¢¸ñʽת»»µÈ£¬×îÖÕ´æ´¢µ½¶ÔÓ¦µÄÊý¾Ý²Ö¿â¡£Collector¿ÉÒÔ¶Ô½ÓÏñCassandra¡¢ElasticSearchÕâÀàµÄ´æ´¢·þÎñ¡£ÔÚJaegerºóÐøµÄ°æ±¾ÀïÒ²¼ÓÈëÁ˶ÔKafkaµÄÖ§³Ö£¬Í¬Ê±ÌṩÁËÒ»¸öInjester(Ò²¾ÍÊÇÒ»¸öKafka consumer)ÓÃÀ´Ïû·ÑKafkaÖеÄÊý¾Ý¡£
Query UI Query UIÌṩ¿ÉÊÓ»¯µÄ²éѯ·þÎñ£¬´ÓÊý¾Ý²Ö¿âÖмìË÷²éѯ¶ÔÓ¦µÄTrace ID£¬²¢½øÐпÉÊÓ»¯µÄ¼Ó¹¤Õ¹Ê¾¡£
Spark Job Query UI²»½ö¿ÉÒÔչʾµ¥¸ötraceÖи÷¸öSpanµÄ´ÓÊô¹ØÏµÓëʱÐò¹ØÏµ£¬»¹ÄÜÌṩÁËչʾ¸÷΢·þÎñÖ®¼äµ÷ÓùØÏµµÄ¹¦ÄÜ¡£Spark Job´ÓElasticSearch¶ÁȡԭʼµÄÊý¾Ý£¬²¢ÒÔÀëÏߵķ½Ê½½øÐÐÁ÷´¦Àí£¬·ÖÎö³ö·þÎñÖ®¼äµÄµ÷ÓùØÏµ£¬µ÷ÓôÎÊýµÈ£¬Éú³ÉµÄµ÷ÓùØÏµÊý¾Ý¿ÉÒÔÓÉQuey UI½øÐÐչʾ¡£
¿Í»§¶Ë ÓÃÀ´ÓëÒµÎñ´úÂë½øÐм¯³É¡£

ÕûÌåµÄ¼Ü¹¹ÈçÏÂͼËùʾ£º

(ͼƬÀ´Ô´:www.jaegertracing.io)

ÂäµØÊµ¼ùÓëÓÅ»¯¸ÄÔì

ÐÂϵͳʵʩµÄµÚÒ»²½ÍùÍùÊÇ·ÖÎöÏÖÓм¼Êõ»·¾³£¬Ä¿µÄÊǾ¡¿ÉÄܵظ´ÓÃÒÑÓеŦÄÜ¡¢Ä£¿é£¬ÔËά»·¾³µÈ¡£ÕâÑùÄÜ´ó´ó¼õÉÙºóÐøµÄά»¤¡¢ÔËάµÈ³É±¾¡£

FreeWheel ºËÐÄÒµÎñƽ̨ÏÖÓеĻù´¡»·¾³°üÀ¨Èçϼ¸µã£º

Ê×ÏÈÊÇÏÖÓÐ΢·þÎñ¶ÔÍâÌṩµÄ½Ó¿ÚЭÒé¶àÖÖ¶àÑù£¬ÀýÈç gRPC¡¢HTTP(»ùÓÚ gRPC-Gateway)¡¢HTTP(Âã HTTP) µÈ¡£

FreeWheel ÏÖÓÐÒ»Ì× ELK+Kafka ¼¯ÈºÓÃÀ´ÊÕ¼¯ºÍ·ÖÎöϵͳÈÕÖ¾¡£

΢·þÎñµÄ»ù´¡ÔËÐл·¾³»ùÓÚ Kubernetes+Istio£¬³ýÁËÉÙÐíµÄÌØÊâ·þÎñÔËÐÐÔÚÎïÀí»úÉÏÒÔÍ⣬¾ø´ó²¿·ÖÒµÎñ·þÎñ¶¼ÔËÐÐÔÚ K8s ¼¯Èº(AWS EKS)ÖУ¬Ò²¾ÍÊÇ˵ÿ¸ö·þÎñµÄʵÀý¶¼×÷Ϊ¼¯ÈºÖеÄÒ»¸ö pod ÔÚÔËÐС£

»ùÓÚÒÔÉϱ³¾°£¬ÎÒÃÇÉè¼ÆÁË Tracing ϵͳʵʩ·½°¸£¬²¢¶Ô²¿·ÖÄ£¿é½øÐÐÁËÉý¼¶¸ÄÔì¡£

Ê×ÏÈ£¬ÓÉÓÚ¸÷¸ö΢·þÎñ¶ÔÍâÌṩµÄ½Ó¿ÚÒ²²»¾¡Í³Ò»£¬ÏÖÓеĽӿڰüÀ¨ gRPC¡¢gRPC-Gateway¡¢HTTP£¬ÉõÖÁ WebSocket¡£ÎÒÃÇÔÚ Jeager-client »ù´¡ÉÏ×öÁËÒ»²ã·â×°£¬ÊµÏÖÁËÒ»¸ö Tracing client Lib£¬¸Ã lib ¿ÉÒÔÕë¶Ô²»Í¬µÄͨѶЭÒé¶ÔÁ÷Á¿½øÐнٳ֣¬²¢½« Trace ÐÅÏ¢×¢Èëµ½ÇëÇóÖС£»¹À©Õ¹ÐԵؼÓÈëÁ˹ýÂËÆ÷(¹ýÂ˸ø¶¨ÌØÕ÷µÄÁ÷Á¿)¡¢ TraceID Éú³É¡¢TraceID ÌáÈ¡£¬Óë Zipkin Header ¼æÈݵȹ¦ÄÜ¡£Õⲿ·Ö»áËæ×ÅÆ½Ì¨µÄ²»¶ÏÀ©Õ¹ºÍ¸ÄÔì½øÐгÖÐøµÄ¸üкÍά»¤¡£

ÁíÍ⣬ΪÁ˳ä·ÖÀûÓù«Ë¾ÏÖÓÐµÄ ElasticSearch ¼¯Èº£¬ÎÒÃǾö¶¨Óà ElasticSearch ×÷Ϊ׷×ÙϵͳµÄºó¶Ë´æ´¢¡£ÓÉÓÚʹÓ󡾰Ϊд¶à¶ÁÉÙ£¬ÎªÁ˱£»¤ ElasticSerach£¬ÎÒÃǾö¶¨Óà Kafka ×÷Ϊ»º³å£¬¼´¶Ô Collecor ½øÐÐÀ©Õ¹£¬½«Êý¾Ý½øÐд¦Àí²¢×ª»»³É ElasticSearch ¿É¶ÁµÄ json ¸ñʽдÈë Kafka£¬ ÔÙͨ¹ý logstash Ïû·ÑдÈë ElasticSearch ÖС£

´ËÍ⣬¶ÔÓÚ Spark dependency Job£¬Í¬ÑùÐèÒª½«Êý¾Ýת»»Îª¶ÔÓ¦µÄ Json ¸ñʽдÈë Kafka£¬×îÖÕ´æ´¢µ½ ElasticSearch¡£ÕâÀï¶Ô Spark Dependency Job µÄÊä³ö²¿·Ö×öÁËÀ©Õ¹£¬ÈÃÆäÖ§³ÖÏò Kafka Öе¼ÈëÊý¾Ý¡£×îºó£¬ÓÉÓÚ΢·þÎñϵͳÄÚ²¿²¿Êð»·¾³µÄ²îÒ죬ÎÒÃÇÌṩÁ˼æÈÝ K8s sidecar, K8s Daemonset, On-perm daeom process µÈ²¿Êð·½Ê½¡£

ÐÂÉè¼ÆµÄ¼Ü¹¹ÈçÏÂͼËùʾ£º

Êý¾Ý²É¼¯²ã

Öмä¼þ

¶ÔÓÚ»ùÓÚ Golang ¿ª·¢µÄ΢·þÎñ£¬Trace ÐÅÏ¢ÔÚ·þÎñÄÚ²¿´«²¥Ö÷ÒªÒÀÀµ context.Context¡£FreeWheel ºËÐÄÒµÎñϵͳÖÐÒ»°ãÀ´½²Ö§³ÖÁ½ÖÖͨѶЭÒ飺HTTP and GRPC£¬ÆäÖÐ HTTP ½Ó¿ÚÖ÷ÒªÒÀÀµ GRPC-Gateway ×Ô¶¯Éú³É¡£µ±È»Ò²ÓÐÒ»²¿·Ö·þÎñ²»Éæ¼° GRPC£¬ Ö±½Ó¶ÔÍⱩ¶ HTTP ½Ó¿Ú¡£ÕâÀï HTTP Ö÷ÒªÃæÏòµÄµ÷Ó÷½ÊÇ OpenAPI »òÕßǰ¶Ë UI¡£Í¬Ê±£¬·þÎñÓë·þÎñÖ®¼äÒ»°ã²ÉÓà GRPC ·½Ê½Í¨Ñ¶¡£¶ÔÓÚÕâÀೡ¾°£¬Tracinglib ÌṩÁ˱ØÒªµÄ×é¼þ¹©ÒµÎñ΢·þÎñʹÓá£Æä´«²¥¹ý³ÌÈçÏÂͼËùʾ£º

Õë¶ÔÈë¿ÚÁ÷Á¿£¬Tracing Client Lib ·â×°ÁË HTTP Öмä¼þ¡¢ GRPC Öмä¼þ£¬ÒÔ¼°Óë GRPC-Gateway ÕâÒ»²ãµÄ¼æÈÝ¡£Õë¶Ô³ö¿ÚÁ÷Á¿£¬Tracing Client Lib ·â×°ÁË GRPC-Client Öмä¼þ¡£ÕâÀïµÄ¡°·â×°¡±²»µ¥µ¥Ö¸¶Ô Jaeger client lib Ìṩ·½·¨µÄ¼òµ¥ wrapper£¬»¹°üÀ¨ÖîÈç Tracing ״̬¼à²â¡¢ÇëÇó¹ýÂ˵ȹ¦ÄÜ¡£±È½ÏµäÐ͵ÄÏñ "/check_alive", "/metrics"ÕâÀàûÓбØÒª trace µÄÇëÇó¿ÉÒÔͨ¹ýÇëÇó¹ýÂ˵ŦÄܹýÂ˵ô´Ó¶ø²»¼Ç¼ Trace¡£

Istio ¼¯³É

Á˽â Istio µÄͬѧӦ¸ÃÖªµÀ£¬Istio ±¾ÉíÖ§³Ö Jaeger Tracing ¼¯³É¡£¶ÔÓÚ¿ç·þÎñµÄÇëÇó£¬Istio ¿ÉÒÔ½Ù³ÖÖîÈç GRPC/HTTP µÈÀàÐ͵ÄÁ÷Á¿£¬Éú³É¶ÔÓ¦µÄ Trace ÐÅÏ¢¡£Òò´ËÈç¹ûÄܽ«ÒµÎñ´úÂëÖÐµÄ Trace ÐÅÏ¢Óë Istio ½øÐм¯³É£¬¾ÍÄܹ»¼à¿Øµ½Õû¸öµ÷ÓÃÍøÂçÓëÒµÎñÄÚ²¿ Trace µÄÍêÕûÐÅÏ¢£¬·½±ã²é¿´ Istio sidecar µ½·þÎñÕâ¸öµ÷Óùý³ÌµÄÍøÂçÇé¿ö¡£

ÎÊÌâÔÚÓÚ£¬Istio ¼¯³É Tracing ʱ²ÉÈ¡ÁË Zipkin B3 Header ±ê×¼£¬Æä¸ñʽÈçÏ£º

X-B3-TraceId: {TraceID}
X-B3-ParentSpanId: {ParentSpanID}
X-B3-SpanId: {SpanID}
X-B3-Sampled: {SampleFlag}

¶ø FreeWheel ºËÐÄÒµÎñϵͳÄÚ²¿Ëù²ÉÓÃµÄ TracerHeader ¸ñʽΪ£º

FW-Trace-ID: {TraceID}:{SpanID}:{ParentSpanID}:{SampleFlag}

²¢ÇÒ FW Trace Header ±»¹ã·ºµØÓ¦ÓÃÔÚÒµÎñ´úÂëÖУ¬¼¯³ÉÁËÖîÈç log, change_history µÈ·þÎñ£¬Ò»Ê±¼äÄÑÒÔ±»ÍêÈ«Ìæ»»¡£Õë¶ÔÕâ¸öÎÊÌ⣬ÎÒÃÇÖØÐ´ÁË Jaeger Client ÖеĽ« Injector ºÍ Extractor£¬Æä½Ó¿Ú¶¨ÒåÈçÏ£º

// Injector½Ó¿ÚµÄÖ÷Òª×÷ÓÃÊǽ«Trace HeaderÊý¾Ý°´Õռȶ¨µÄÂß¼­²åÈëµ½ÉÏÏÂÎÄÖС£
type Injector interface {
// Inject ½« `SpanContext` and ×¢Èëµ½ `carrier`ÖУ¬ÕâÀïcarrierÖ÷ÒªÊÇÖ¸ÉÏÏÂÎÄContext
//
Inject(ctx SpanContext, carrier interface{}) error
}

// Extractor½Ó¿ÚµÄÖ÷Òª×÷ÓÃÊǽ«ÉÏÏÂÎÄÖеÄTraceÊý¾Ý³éÈ¡³öÀ´
type Extractor interface {
// Extract ½«ÉÏÏÂÎÄ×÷Ϊcarrier, ÌáÈ¡ÆäheaderÖеÄTraceÐÅÏ¢£¬²¢·µ»ØÒ»¸öSpanContext¶ÔÏó¡£
Extract(carrier interface{}) (SpanContext, error)
}

ÐÂʵÏÖµÄ Injector ºÍ Extractor ͬʱ¼æÈÝ B3 Header ºÍ Freewheel Trace Header¡£·þÎñ½ÓÊÕµ½ÇëÇóʱ»áÓÅÏȲ鿴ÓÐûÓÐ B3 Header£¬ÔÚÉú³ÉРSpan µÄʱºòͬʱ²åÈë FreeWheel Trace Header¡£¼´ FreeWheel Trace Header ¼ÌÐøÔÚ·þÎñÄÚ²¿Ê¹Ó㬿ç·þÎñÖ®¼äµÄµ÷ÓÃÒÔ B3 Header ΪÖ÷¡£

X-B3-TraceId: {TraceID}
X-B3-ParentSpanId: {ParentSpanID}
X-B3-SpanId: {SpanID}
X-B3-Sampled: {SampleFlag}
FW-Trace-ID: {TraceID}:{SpanID}:{ParentSpanID}:{SampleFlag}

Êý¾Ý»º³åÓëÖÐת²ã

ÉÏÎÄÌáµ½Êý¾Ý´æ´¢Ñ¡Óà ElasticSearch, Êý¾ÝµÄ²É¼¯Óë´æ´¢ÊÇÒ»¸öµäÐ͵Äд¶à¶ÁÉÙµÄÒµÎñ³¡¾°¡£¶ÔÕâÀೡ¾°£¬ÎÒÃÇÒýÈë Kafka ×÷ΪÊý¾ÝµÄ»º³åÓëÖÐת²ã¡£»ùÓÚÕâ¸ö˼·ÎÒÃÇ¶Ô Collector ½øÐÐÁ˸ÄÔ죬¼ÓÈëÁË Collector Kafka Producer ×é¼þ£¬ÔÚ Collector ÉϽ« span ÐÅϢתΪ json ·¢¸ø Kafka£¬È»ºóÓÉ Logstash ×÷Ϊ Consumer ´æ´¢µ½ ElasticSearch¡£¶ÔÓÚ Trace ÐÅÏ¢£¬ElasticSearch ´æ´¢Ö÷Òª·ÖΪÁ½´ó²¿·Ö£º·þÎñ/²Ù×÷Ë÷ÒýºÍ Span Ë÷Òý¡£·þÎñ/²Ù×÷Ë÷ÒýÖ÷ÒªÓÃÀ´Îª query ui Ìṩ¿ìËÙ¼ìË÷·þÎñ(Service Name)ºÍ²Ù×÷(Operation Name), ½á¹¹ÈçÏ£º

//Ë÷Òý½á¹¹
{
"serviceName": "v3_adaptor",
"operationName": "HTTP GET"
}

Span ½á¹¹ÌåÓÉ Tracing ¿Í»§¶ËÉú³É£¬Ö÷Ҫһϼ¸´ó²¿·Ö£º

»ù´¡ trace ÐÅÏ¢£¬Èç traceID, spanID, parentID, operationName,duration¡£

Tags£¬Õⲿ·ÖÖ÷Òª°üº¬ÒµÎñÂß¼­Ïà¹ØµÄÐÅÏ¢Èç request method, url, response code µÈ¡£

References£¬Ö÷ÒªÓÃÀ´±íʾ Span µÄ¸¸×Ó´ÓÊô¹ØÏµ¡£

Process£¬·þÎñµÄ»ù±¾ÐÅÏ¢¡£

Logs£¬ÓÃÓÚ¸øÒµÎñ´úÂëÀ©Õ¹Ê¹Óá£

//Span body
{
"traceID": "5082be69746ed84a",
"spanID": "5082be69746ed84a",
"operationName": "HTTP GET",
"startTime": ...,
"duration": 616,
"references": [
{
"refType": "CHILD_OF",
"spanID": "14a9e000a96a2671",
"traceID": "259f404f8409a4d7"
}
],
"tags": [
{
"key": "http.url",
"type": "string",
"value": "/services/v3/**.xml"
},
{
"key": "http.status_code",
"type": "int64",
"value": "500"
},
//...
],
"logs": [],
"process": {
"serviceName": "your_service_name",
"tags": [
{
"key": "hostname",
"type": "string",
"value": "xx-mac"
},
//...
]
}
}

´æ´¢Óë¼ÆËã²ã

ÕâÒ»²ãÖ÷ÒªÓÃÓÚ¶Ô Trace Êý¾Ý½øÐг־û¯ºÍÀëÏß·ÖÎö¡£ÀûÓà ElasticSearch »á¶ÔÊý¾Ý½øÐÐ·ÖÆ¬£¬·Ö index µÄ´æ´¢£¬·ÀÖ¹ÀúÊ·Êý¾Ý¶ªÊ§£¬·½±ã¶ÔÀúÊ·ÎÊÌâ½øÐлØËÝ¡£²»¹ý¼ÈÈ»Ìáµ½³Ö¾Ã»¯¾ÍÄÑÃâÒª¿¼ÂÇÊý¾Ý¹æÄ£µÄÎÊÌ⣬³ÖÐø´óÁ¿µÄÀúÊ·Êý¾ÝдÈëµ½ ElasticSeach »á²»¶ÏÔö¼ÓÆä¸ºµ££¬¶øÇÒ¶ÔÓÚ¹ýÓÚ¾ÃÔ¶µÄÀúÊ·Êý¾Ý£¬±»¼ìË÷µ½µÄƵÂÊÒ²Ïà¶Ô½ÏС¡£ÕâÀïÎÒÃDzÉÈ¡¶¨ÆÚ¹éµµµÄ²ßÂÔ£¬¶ÔÓÚ³¬¹ý 30 ÌìµÄÊý¾Ý½øÐй鵵£¬×ª´æµ½ ES Ö®ÍâÒÔ±¸²»Ê±Ö®Ðè¡£ElasticSearch Ö»¶ÔÏà¶Ô½Ï¡°ÈÈ¡±µÄÊý¾ÝÌṩ¼ìË÷·þÎñ¡£

ÀëÏß·ÖÎöÖ÷ÒªÓÃÓÚ¶Ô EalsticSearch ÖÐµÄ Span Êý¾Ý½øÐзÖÎö£¬ÉÏÎÄÎÒÃÇÌáµ½Ò»¸ö Span Êý¾Ý½á¹¹°üº¬Æä×ÔÉíµÄ TraceID ºÍËü¸¸½ÚµãµÄ TraceID£¬Ã¿Ò»¸ö½Úµã¶¼°üº¬×ÔÉí´ÓÊôÓëÄĸö·þÎñ¡£

ÕâÀïÎÒÃÇÖ»¹ØÐÄ¿ç·þÎñÖ®¼äµÄµ÷ÓùØÏµ£¬ÀýÈçÉÏͼ£¬ÀëÏß·ÖÎöʱֻ¿¼ÂÇ A, B, C, E Õ⼸¸ö½Úµã£¬ÓÉÓÚ D ½ÚµãÓë C, E ½Úµã¶¼ÔÚ·þÎñ 3 ÄÚ²¿£¬ËùÒÔ½«ÆäºöÂÔ¡£·ÖÎö³öÀ´µÄ½á¹ûÈçͼËùʾ

չʾ²ã

չʾ²ãÖ÷ÒªÖ¸ Query-UI, ¹¦ÄÜÊÇ´Ó ElacticSearch ÖвéѯÊý¾Ý£¬¶Ô¾ßÓÐÏàͬ TraceID µÄÊý¾Ý½øÐоۺϣ¬²¢ÔÚǰ¶Ë½øÐÐäÖȾ¡£´Ó QueryUI ÖпÉÒÔÇåÎúµÄ¿´µ½Ò»ÌõÇëÇó¾­ÀúÁ˼¸¸ö²»Í¬µÄ·þÎñ(ÒÔ²»Í¬ÑÕÉ«±ê×¢)£¬ÔÚÿ¸ö·þÎñÖеĵ½´ïʱ¼äºÍ½áÊøÊ±¼ä£¬Õû¸öÇëÇó×ܹ²¾­ÀúµÄʱ¼äµÈ¡£

δÀ´Õ¹Íû

Ëæ×Å FreeWheel ºËÐÄÒµÎñƽ̨²»¶ÏµØÀ©³äºÍÑݽø£¬·Ö²¼Ê½×·×ÙϵͳҲÐèÒª½øÐв»¶ÏÉý¼¶¸ÄÔìÒÔÊÊÅäÒµÎñÐèÇó¡£ÀýÈ粿·ÖÒµÎñ´úÂëÕýÔÚ³¢ÊÔ Serverless µÄ·½Ê½£¬Ò²¾ÍÒªÇó Tracing ϵͳ֧³ÖÖîÈç AWS Lambda µÈʹÓó¡¾°¡£¶ÔÓÚÕâÖÖÐÎʽµÄÐèÇó£¬ÎÒÃǽ«½ô¸úÒµÎñ£¬³ÖÐøµ÷ÑУ¬ÒÔÆÚ·þÎñ¸ü¶àµÄ³¡¾°¡£´ËÍ⣬ÏÖÓзþÎñµ÷ÓÃÍØÆËÍøÂçÊÇ»ùÓÚÀëÏßÊý¾ÝÉú³ÉµÄ£¬ÎÒÃÇÒ²ÆÚÍûδÀ´ÄÜÕÒµ½Ò»Ð©ÔÚÏß´¦ÀíµÄ½â¾ö·½°¸£¬Èç Flink¡¢Spark Streaming µÈ£¬×öµ½ÊµÊ±µÄµ÷ÓùØÏµÍ³¼Æ¡£

 

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

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
´óÊý¾Ýƽ̨ϵÄÊý¾ÝÖÎÀí
ÈçºÎÉè¼ÆÊµÊ±Êý¾Ýƽ̨£¨¼¼Êõƪ£©
´óÊý¾Ý×ʲú¹ÜÀí×ÜÌå¿ò¼Ü¸ÅÊö
Kafka¼Ü¹¹ºÍÔ­Àí
ELK¶àÖּܹ¹¼°ÓÅÁÓ
×îпγÌ
´óÊý¾Ýƽ̨´î½¨Óë¸ßÐÔÄܼÆËã
´óÊý¾Ýƽ̨¼Ü¹¹ÓëÓ¦ÓÃʵս
´óÊý¾ÝϵͳÔËά
´óÊý¾Ý·ÖÎöÓë¹ÜÀí
Python¼°Êý¾Ý·ÖÎö
³É¹¦°¸Àý
ijͨÐÅÉ豸ÆóÒµ PythonÊý¾Ý·ÖÎöÓëÍÚ¾ò
Ä³ÒøÐÐ È˹¤ÖÇÄÜ+Python+´óÊý¾Ý
±±¾© Python¼°Êý¾Ý·ÖÎö
ÉñÁúÆû³µ ´óÊý¾Ý¼¼Êõƽ̨-Hadoop
ÖйúµçÐÅ ´óÊý¾Ýʱ´úÓëÏÖ´úÆóÒµµÄÊý¾Ý»¯ÔËӪʵ¼ù