
¶ÔÓÚÏ£Íû¼àÊÓ¸´ÔÓµÄ΢·þÎñ¼Ü¹¹ÏµÍ³µÄ×éÖ¯£¬·Ö²¼Ê½×·×ÙÕýÔÚ¿ìËÙ³ÉΪһÖÖ²»¿É»òȱµÄ¹¤¾ß¡£Uber¹¤³ÌÍŶӵĿªÔ´·Ö²¼Ê½×·×ÙϵͳJaeger×Ô2016ÄêÆð£¬ÔÚ¹«Ë¾ÄÚ²¿ÊµÏÖÁË´ó·¶Î§µÄÔËÓã¬ÒѾ¼¯³ÉÓÚÊý°Ù¸ö΢·þÎñÖУ¬Ä¿Ç°Ã¿ÃëÖÓÒѾ¿ÉÒԼǼÊýǧÌõ×·×ÙÊý¾Ý¡£ÐÂÄêÒÁʼ£¬ÎÒÃÇÏëÏò´ó¼Ò½éÉÜÒ»ÏÂÕâÒ»ÇÐÊÇÈçºÎʵÏֵ쬴ÓÎÒÃÇ×ʼʹÓÃÏֳɵĽâ¾ö·½°¸£¬ÈçZipkin£¬µ½ÎÒÃÇ´ÓÀȡת»»ÎªÍÆËͼܹ¹µÄÔÒò£¬ÒÔ¼°2017ÄêÓйطֲ¼Ê½×·×ٵķ¢Õ¹¼Æ»®¡£
´ÓÕûÌåʽµ½Î¢·þÎñ¼Ü¹¹
Ëæ×ÅUberµÄÒµÎñ·ÉËÙÔö³¤£¬Èí¼þ¼Ü¹¹µÄ¸´ÔÓ¶ÈÒ²ÓëÈÕ¾ãÔö¡£´ó¸ÅÒ»Äê¶àǰ£¬2015ÄêÇï¼¾£¬ÎÒÃÇÓдóÔ¼500¸ö΢·þÎñ£¬2017Äê³õÕâÒ»ÊýÁ¿ÒÑÔö³¤ÖÁ³¬¹ý2000¸ö¡£ÕâÑùµÄÔö·ù²¿·ÖÊÇÓÉÓÚÒµÎñ¸Ã¹¦ÄܵÄÔö¼Ó£¬ÀýÈçÃæÏòÓû§µÄUberEATSºÍUberRUSHµÈ¹¦ÄÜ£¬ÒÔ¼°ÀàËÆÆÛÕ©¼ì²â¡¢Êý¾ÝÍÚ¾ò¡¢µØÍ¼´¦ÀíµÈÄÚ²¿¹¦ÄܵÄÔö¼Ó¡£´ËÍâËæ×ÅÎÒÃÇ´Ó´ó¹æÄ£ÕûÌåʽӦÓóÌÐòÏò×Å·Ö²¼Ê½Î¢·þÎñ¼Ü¹¹Ç¨ÒÆ£¬Ò²Ôì³ÉÁ˸´ÔӶȵÄÔö¼Ó¡£
Ç¨ÒÆµ½Î¢·þÎñÉú̬×ÜÊÇ»áÓöµ½¶ÀÌØµÄÌôÕ½¡£ÀýÈçɥʧ¶ÔϵͳµÄÄܼû¶È£¬·þÎñÖ®¼ä¿ªÊ¼²úÉú¸´ÔӵĽ»»¥µÈ¡£Uber¹¤³ÌÍŶӺÜÇå³þ£¬ÎÒÃǵļ¼Êõ»á¶Ô´ó¼ÒµÄÉú»î²úÉúÖ±½ÓÓ°Ï죬ϵͳµÄ¿É¿¿ÐÔÖÁ¹ØÖØÒª£¬µ«ÕâÒ»Çж¼Àë²»¿ª¡°¿É¹Û²âÐÔ¡±ÕâһǰÌá¡£´«Í³µÄ¼àÊÓ¹¤¾ß£¬ÀýÈç¶ÈÁ¿ÖµºÍ·Ö²¼Ê½ÈÕÖ¾ÒÀÈ»·¢»Ó×Å×Ô¼ºµÄ×÷Ó㬵«ÕâÀ๤¾ßÍùÍùÎÞ·¨Ìṩ¿çÔ½²»Í¬·þÎñµÄÄܼû¶È¡£·Ö²¼Ê½×·×ÙÓ¦Ô˶øÉú¡£
Uber×î³õµÄ×·×Ùϵͳ
Uber×î³õ¹ã·ºÊ¹ÓõÄ×·×Ùϵͳ½Ð×öMerckx£¬ÕâÒ»Ãû³ÆÔ´×ÔÈ«ÇòËÙ¶È×î¿ìµÄ×ÔÐгµÆïÐÐÑ¡ÊÖ¡£MerckxºÜ¿ì¾Í°ïÖúÎÒÃÇÁ˽âÁËÓйØUber»ùÓÚPythonµÄÕûÌåʽºó¶ËµÄºÜ¶àÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔ²éѯÖîÈç¡°²éÕÒÒѵǼÓû§µÄÇëÇ󣬲¢ÇÒÇëÇóµÄ´¦Àíʱ¼ä³¬¹ý2ÃëÖÓ£¬²¢ÇÒʹÓÃÁËijһÊý¾Ý¿âÀ´´¦Àí£¬²¢ÇÒÊÂÎñά³Ö´ò¿ª×´Ì¬µÄʱ¼ä³¬¹ý500ms¡±ÕâÑùµÄÎÊÌâ¡£ËùÓдý²éѯµÄÊý¾Ý±»×éÖ¯³ÉÊ÷×´¿é£¬Ã¿¸ö¿é´ú±íijһ²Ù×÷»òij¸öÔ¶³Ìµ÷Óã¬ÕâÖÖ×éÖ¯·½Ê½ÀàËÆÓÚOpenTracing
APIÖС°Span¡±Õâ¸ö¸ÅÄî¡£Óû§¿ÉÒÔÔÚKafkaÖÐʹÓÃÃüÁîÐй¤¾ßÕë¶ÔÊý¾ÝÁ÷Ö´Ðм´Ï¯²éѯ£¬Ò²¿ÉÒÔʹÓÃWeb½çÃæ²é¿´Ô¤¶¨ÒåµÄÕªÒª£¬ÕâЩÐÅÏ¢¾ù´ÓAPI¶ËµãµÄ¸ß¼¶±ðÐÐΪºÍCeleryÈÎÎñÖÐÕªÒª»ã×ܶøÀ´¡£

MerckxʹÓÃÁËÒ»ÖÖÀàËÆÓÚÊ÷×´¿éµÄµ÷ÓÃͼ£¬Ã¿¸ö¿é´ú±íÓ¦ÓóÌÐòÖеÄÒ»¸ö²Ù×÷£¬ÀýÈçÊý¾Ý¿âµ÷Óá¢RPC£¬ÉõÖÁ¿âº¯Êý£¬ÀýÈç½âÎöJSON¡£
MerckxµÄ±àÅŵ÷¶È¿É×Ô¶¯Ó¦ÓÃÓÚʹÓÃPython±àдµÄһϵÁлù´¡¼Ü¹¹¿â£¬°üÀ¨HTTP¿Í»§¶ËºÍ·þÎñÆ÷¡¢SQL²éѯ¡¢Redisµ÷Óã¬ÉõÖÁJSONµÄÐòÁл¯¡£ÕâЩ±àÅŵ÷¶È¿É¼Ç¼ÓйØÃ¿´Î²Ù×÷µÄijЩÐÔÄܶÈÁ¿ÖµºÍÔªÊý¾Ý£¬ÀýÈçHTTPµ÷ÓõÄURL£¬»òÊý¾Ý¿âµ÷ÓõÄSQL²éѯ¡£´ËÍ⻹ÄܼǼÆäËûÐÅÏ¢£¬ÀýÈçÊý¾Ý¿âÊÂÎñά³Ö´ò¿ª×´Ì¬µÄʱ³¤£¬·ÃÎÊÁËÄÄЩÊý¾Ý¿âShardºÍ¸±±¾¡£

Merckx¼Ü¹¹Ê¹ÓÃÁËÀȡģʽ£¬¿É´ÓKafkaµÄÖ¸ÁîÊý¾ÝÖÐÀÈ¡Êý¾ÝÁ÷¡£
Merckx×î´óµÄ²»×ãÔÚÓÚÆäÉè¼ÆÖ÷ÒªÃæÏòUberʹÓÃÕûÌåʽAPIµÄÄê´ú¡£Merckxȱ·¦·Ö²¼Ê½ÉÏÏÂÎÄ´«²¥µÄ¸ÅÄËäÈ»¿ÉÒԼǼSQL²éѯ¡¢Redisµ÷Óã¬ÉõÖÁ¶ÔÆäËû·þÎñµÄµ÷Ó㬵«ÎÞ·¨½øÒ»²½ÉîÈë¡£Merckx»¹ÓÐÁíÒ»¸öÓÐȤµÄ¾ÖÏÞ£ºÒòΪMerckxÊý¾Ý´æ´¢ÔÚÒ»¸öÈ«¾ÖÏ̱߳¾µØ´æ´¢ÖУ¬ÖîÈçÊý¾Ý¿âÊÂÎñ×·×ٵȴóÁ¿¸ß¼¶¹¦ÄÜÖ»ÄÜÔÚuWSGIÏÂʹÓá£Ëæ×ÅUber¿ªÊ¼Ê¹ÓÃTornado£¨Ò»ÖÖÊÊÓÃÓÚPython·þÎñµÄÒì²½Ó¦ÓóÌÐò¿ò¼Ü£©£¬Ï̱߳¾µØ´æ´¢ÎÞ·¨ÌåÏÖTornadoµÄIOLoopÖÐͬһ¸öÏß³ÌÄÚÔËÐеĴ󲿷ֲ¢·¢ÇëÇó¡£ÎÒÃÇ¿ªÊ¼Òâʶµ½²»½èÖúÈ«¾Ö±äÁ¿»òÈ«¾Ö״̬£¬×ªÎªÍ¨¹ýijÖÖ·½Ê½±£´æÇëÇó״̬£¬²¢½øÐÐÇ¡µ±µÄ´«²¥µÄÖØÒªÐÔ¡£
Ëæºó£¬Ê¹ÓÃTChannel½øÐÐ×·×Ù
2015Äê³õ£¬ÎÒÃÇ¿ªÊ¼¿ª·¢TChannel£¬ÕâÊÇÒ»ÖÖÊÊÓÃÓÚRPCµÄÍøÂç¶à·¸´ÓúͿò¼ÜÐÒé¡£¸ÃÐÒéµÄÉè¼ÆÄ¿±êÖ®Ò»Êǽ«ÀàËÆÓÚDapperµÄ·Ö²¼Ê½×·×ÙÄÜÁ¦ÈÚÈëÐÒéÖУ¬²¢ÎªÆäÌṩ×îÓÅÐãµÄÖ§³Ö¡£ÎªÁËʵÏÖÕâһĿ±ê£¬TChannelÐÒ鹿·¶½«×·×Ù×Ö¶ÎÖ±½Ó¶¨Òåµ½Á˶þ½øÖƸñʽÖС£
spanid:8 parentid:8 traceid:8 traceflags:1 |

×·×Ù×Ö¶Î×÷Ϊ¶þ½øÖƸñʽµÄÒ»²¿·ÖÒѰüº¬ÔÚTChannelÐÒ鹿·¶ÖС£
³ýÁËÐÒ鹿·¶£¬ÎÒÃÇ»¹·¢²¼Á˶à¸ö¿ªÔ´¿Í»§¶Ë¿â£¬ÓÃÓÚÒÔ²»Í¬ÓïÑÔʵÏÖ¸ÃÐÒé¡£ÕâЩ¿âµÄÉè¼ÆÔÔòÖ®Ò»ÊÇÈÃÓ¦ÓóÌÐòÐèÒªÓõ½µÄÇëÇóÉÏÏÂÎÄÕâÒ»¸ÅÄîÄܹ»´Ó·þÎñÆ÷¶Ëµã¹á´©ÖÁÏÂÓεĵ÷ÓÃÕ¾µã¡£ÀýÈçÔÚtchannel-goÖУ¬ÈóöÕ¾µ÷ÓÃʹÓÃJSON½øÐбàÂëµÄÇ©ÃûÐèҪͨ¹ýµÚÒ»¸ö²ÎÊýÌṩÉÏÏÂÎÄ£º
func (c *Client) Call(ctx Context, method string, arg, resp interface{}) error {..}
|
Tchannel¿âʹµÃÓ¦ÓóÌÐò¿ª·¢ÕßÔÚ±àд×Ô¼ºµÄ´úÂëʱʼÖÕ½«·Ö²¼Ê½ÉÏÏÂÎÄ´«²¥ÕâÒ»¸ÅÄîÃú¼ÇÓÚÐÄ¡£
ͨ¹ý½«Ëù´«ÊäÄÚÈÝÒÔ¼°ÄÚ´æÖеÄÉÏÏÂÎĶÔÏóÖ®¼äµÄ×·×ÙÉÏÏÂÎĽøÐа²ÅÅ£¬²¢Î§ÈÆ·þÎñ´¦Àí³ÌÐòºÍ³öÕ¾µ÷Óô´½¨×·×ÙSpan£¬¿Í»§¶Ë¿âÄÚ½¨Á˶Էֲ¼Ê½×·×ÙµÄÖ§³Ö¡£´ÓÄÚ²¿À´¿´£¬ÕâЩSpanÔÚ¸ñʽÉÏÓëZipkin×·×Ùϵͳ¼¸ºõÍêÈ«Ïàͬ£¬Ò²Ê¹ÓÃÁËZipkinËù¶¨ÒåµÄ×¢ÊÍ£¬ÀýÈç¡°cs¡±£¨Client
Send£©ºÍ¡°cr¡±£¨Client Receive£©¡£TchannelʹÓÃ×·×Ù±¨¸æ³ÌÐò£¨Reporter£©½Ó¿Ú½«ÊÕ¼¯µ½µÄ½ø³ÌÍâ×·×ÙSpan·¢ËÍÖÁ×·×ÙϵͳµÄºó¶Ë¡£¸Ã¼¼Êõ×Ô´øµÄ¿âĬÈϰüº¬Ò»¸öʹÓÃTchannel±¾ÉíºÍHyperbahnʵÏֵı¨¸æ³ÌÐòÒÔ¼°·¢ÏֺͷÓɲ㣬½è´Ë½«Thrift¸ñʽµÄSpan·¢ËÍÖÁÊÕ¼¯Æ÷Ⱥ¼¯¡£
Tchannel¿Í»§¶Ë¿âÒѾ±È½Ï½üËÆÓÚÎÒÃÇËùÐèÒªµÄ·Ö²¼Ê½×·×Ùϵͳ£¬¸Ã¿Í»§¶Ë¿âÌṩÁËÏÂÁй¹½¨¿é£º
1¡¢×·×ÙÉÏÏÂÎĵĽø³Ì¼ä´«²¥ÒÔ¼°´øÄÚÇëÇó
2¡¢Í¨¹ý±àÅÅAPI¼Ç¼׷×ÙSpan
3¡¢×·×ÙÉÏÏÂÎĵĽø³ÌÄÚ´«²¥
4¡¢½«½ø³ÌÍâ×·×ÙÊý¾Ý±¨¸æÖÁ×·×Ùºó¶ËËùÐèµÄ¸ñʽºÍ»úÖÆ
¸ÃϵͳΨ¶ÀȱÉÙÁË×·×Ùºó¶Ë±¾Éí¡£×·×ÙÉÏÏÂÎĵĴ«Êä¸ñʽºÍ±¨±í³ÌÐòʹÓõÄĬÈÏThrift¸ñʽÔÚÉè¼ÆÉ϶¼¿ÉÒԷdz£¼òµ¥Ö±½ÓµØ½«TchannelÓëZipkinºó¶Ë¼¯³É£¬È»¶øµ±Ê±Ö»ÄÜͨ¹ýScribe½«Span·¢ËÍÖÁZipkin£¬¶øZipkinÖ»Ö§³ÖʹÓÃCassandra¸ñʽµÄÊý¾Ý´æ´¢¡£´ËÍ⵱ʱÎÒÃǶÔÕâЩ¼¼Êõûʲô¾Ñ飬Òò´ËÎÒÃÇ¿ª·¢ÁËÒ»Ì׺ó¶ËÔÐÍϵͳ£¬²¢½áºÏZipkin
UIµÄһЩ×Ô¶¨Òå×é¼þ¹¹½¨ÁËÒ»¸öÍêÕûµÄ×·×Ùϵͳ¡£

ºó¶ËÔÐÍϵͳ¼Ü¹¹£ºTchannelÉú³ÉµÄ×·×Ù¼ÇÂ¼ÍÆË͸ø×Ô¶¨ÒåÊÕ¼¯Æ÷¡¢×Ô¶¨Òå´æ´¢£¬ÒÔ¼°¿ªÔ´µÄZipkin
UI¡£
·Ö²¼Ê½×·×ÙϵͳÔڹȸèºÍTwitterµÈÖ÷Òª¼¼Êõ¹«Ë¾»ñµÃµÄ³É¹¦Òâζ×ÅÕâЩ¹«Ë¾Öй㷺ʹÓõÄRPC¿ò¼Ü¡¢StubbyºÍFinagleÊÇÐÐÖ®ÓÐЧµÄ¡£
ͬÀí£¬Tchannel×Ô´øµÄ×·×ÙÄÜÁ¦Ò²ÊÇÒ»¸öÖØ´óµÄ·ÉÔ¾¡£ÎÒÃDz¿ÊðµÄºó¶ËÔÐÍϵͳÒѾ¿ªÊ¼´ÓÊýÊ®ÖÖ·þÎñÖÐÊÕ¼¯×·×ÙÐÅÏ¢¡£ËæºóÎÒÃÇʹÓÃTchannel¹¹½¨Á˸ü¶à·þÎñ£¬µ«ÔÚÉú²ú»·¾³ÖÐÈ«ÃæÍÆ¹ãºÍ¹ã·ºÊ¹ÓÃÒÀÈ»ÓÐЩÀ§ÄÑ¡£¸Ãºó¶ËÔÐÍÒÔ¼°ËùʹÓõÄRiak/Solr´æ´¢ÏµÍ³ÎÞ·¨Í×ÉÆËõ·ÅÒÔÊÊÓ¦UberµÄÁ÷Á¿£¬Í¬Ê±ºÜ¶à²éѯ¹¦ÄÜÒÀÈ»ÎÞ·¨ÓëZipkin
UIʵÏÖ×ã¹»ºÃµÄ»¥²Ù×÷¡£¾¡¹Üй¹½¨µÄ·þÎñ´óÁ¿Ê¹ÓÃÁËTchannel£¬UberÒÀÈ»ÓдóÁ¿·þÎñÉÐδÔÚRPC¹ý³ÌÖÐʹÓÃTchannel£¬Êµ¼ÊÉϳе£ºËÐÄÒµÎñµÄ´ó²¿·Ö·þÎñ¶¼Ã»ÓÐʹÓÃTchannel¡£ÕâЩ·þÎñÖ÷ÒªÊÇͨ¹ýËÄ´ó±à³ÌÓïÑÔ£¨Node.js¡¢Python¡¢GoºÍJava£©ÊµÏֵģ¬ÔÚ½ø³Ì¼äͨÐÅ·½ÃæÊ¹ÓÃÁ˶àÖÖ²»Í¬µÄ¿ò¼Ü¡£ÕâÖÖÒì¹¹µÄ¼¼Êõ»·¾³Ê¹µÃUberÔÚ·Ö²¼Ê½×·×ÙϵͳµÄ¹¹½¨·½Ãæ»áÃæÁٱȹȸèºÍTwitter¸üÑϾþµÄÌôÕ½¡£
ÔÚŦԼÊй¹½¨µÄJaeger
UberŦԼ¹¤³Ì×é֯ʼ½¨ÓÚ2015ÄêÉϰëÄ꣬Ö÷Òª°üº¬Á½¸öÍŶӣº»ù´¡¼Ü¹¹¶ËµÄObservabilityÒÔ¼°²úÆ·£¨°üÀ¨UberEATSºÍUberRUSH£©¶ËµÄUber
Everything¡£¿¼Âǵ½·Ö²¼Ê½×·×Ùʵ¼ÊÉÏÊÇÒ»ÖÖÐÎʽµÄÉú²ú»·¾³¼àÊÓ£¬Òò´Ë¸üÊʺϽ»ÓÉObservabilityÍŶӸºÔð¡£
ÎÒÃÇ×齨ÁË·Ö²¼Ê½×·×ÙÍŶӣ¬¸ÃÍŶÓÓÉÁ½¸ö¹¤³Ìʦ×é³É£¬Ä¿±êÒ²ÓÐÁ½¸ö£º½«ÏÖÓеÄÔÐÍϵͳת»»ÎªÒ»ÖÖ¿ÉÒÔÈ«¾ÖÔËÓõÄÉú²úϵͳ£¬È÷ֲ¼Ê½×·×Ù¹¦ÄÜ¿ÉÒÔÊÊÓò¢ÊÊÓ¦UberµÄ΢·þÎñ¡£ÎÒÃÇ»¹ÐèҪΪÕâ¸öÏîÄ¿ÆðÒ»¸ö¿ª·¢´úºÅ¡£ÎªÐÂÊÂÎïÃüÃûʵ¼ÊÉÏÊǼÆËã»ú¿ÆÑ§½çÁ½´óÀÏ´óÄÑÎÊÌâÖ®Ò»£¬ÎÒÃÇ»¨Á˼¸ÖÜʱ¼ä¼¯Ë¼¹ãÒæ£¬¿¼ÂÇÁË×·×Ù¡¢Ì½²â¡¢²¶»ñµÈÖ÷Ì⣬×îÖÕ¾ö¶¨ÃüÃûΪJaeger£¨?y¨¡-g?r£©£¬ÔÚµÂÓïÖÐÕâ¸ö´Ê´ú±íÁÔÊÖ»òÕßá÷ÁÔ¹ý³ÌÖеİïÊÖ¡£
ŦԼÍŶÓÔÚCassandraȺ¼¯·½ÃæÒѾ¾ß±¸ÔËά¾Ñ飬¸ÃÊý¾Ý¿âÖ±½ÓΪZipkinºó¶ËÌṩ×ÅÖ§³Ö£¬Òò´ËÎÒÃǾö¶¨ÆúÓûùÓÚRiak/SolrµÄÔÐÍ¡£ÎªÁ˽ÓÊÜTChannelÁ÷Á¿²¢½«Êý¾ÝÒÔ¼æÈÝZipkinµÄ¶þ½øÖƸñʽ´æ´¢ÔÚCassandraÖУ¬ÎÒÃÇÓÃGoÓïÑÔÖØÐÂʵÏÖÁËÊÕ¼¯Æ÷¡£ÕâÑùÎÒÃǾͿÉÒÔÎÞÐè¸Ä¶¯£¬Ö±½ÓʹÓÃZipkinµÄWebºÍ²éѯ·þÎñ£¬²¢Í¨¹ý×Ô¶¨Òå±êÇ©»ñµÃÁËÔ±¾²»¾ß±¸µÄ×·×ټǼËÑË÷¹¦ÄÜ¡£ÎÒÃÇ»¹ÎªÃ¿¸öÊÕ¼¯Æ÷¹¹½¨ÁËÒ»Ì׿ɶ¯Ì¬ÅäÖõı¶ÔöϵÊý£¨Multiplication
factor£©£¬½è´Ë½«ÈëÕ¾Á÷Á¿±¶Ôön´Î£¬ÕâÖ÷ÒªÊÇΪÁËͨ¹ýÉú²úÊý¾Ý¶Ôºó¶Ëϵͳ½øÐÐѹÁ¦²âÊÔ¡£

JaegerµÄÔçÆÚ¼Ü¹¹ÒÀÈ»ÒÀÀµZipkin UIºÍZipkin´æ´¢¸ñʽ¡£
µÚ¶þ¸öÒµÎñÐèÇóÏ£ÍûÈÃ×·×Ù¹¦ÄÜ¿ÉÒÔÊÊÓÃÓÚδʹÓÃTChannel½øÐÐRPCµÄËùÓÐÏÖÓзþÎñ¡£Ëæºó¼¸¸öÔÂÎÒÃÇʹÓÃGo¡¢Java¡¢PythonºÍNode.js¹¹½¨Á˿ͻ§¶Ë¿â£¬½è´Ëδ°üÀ¨HTTP·þÎñÔÚÄÚ¸÷Àà·þÎñµÄ±àÅÅÌṩ֧³Ö¡£¾¡¹ÜZipkinºó¶Ë·Ç³£ÖøÃû²¢ÇÒÁ÷ÐУ¬µ«ÒÀȻȱ·¦×ã¹»ÍêÉÆµÄ±àÅÅÄÜÁ¦£¬ÓÈÆäÊÇÔÚJava/ScalaÉú̬ϵͳ֮ÍâµÄ±àÅÅÄÜÁ¦¡£ÎÒÃÇ¿¼Âǹý¸÷ÖÖ¿ªÔ´µÄ±àÅſ⣬µ«ÕâЩ¿âÊÇÓɲ»Í¬µÄÈËά»¤µÄ£¬ÎÞ·¨È·±£»¥²Ù×÷ÐÔ£¬²¢ÇÒͨ³£»¹Ê¹ÓÃÁËÍêÈ«²»Í¬µÄAPI£¬´ó²¿·Ö»¹ÐèҪʹÓÃScribe»òKafka×÷Ϊ±¨±íSpanµÄ´«Êä»úÖÆ¡£Òò´ËÎÒÃÇ×îÖÕ¾ö¶¨×ÔÐбàд¿â£¬ÕâÑù¿ÉÒÔͨ¹ý¼¯³É²âÊÔ¸üºÃµØ±£ÕÏ»¥²Ù×÷ÐÔ£¬¿ÉÒÔÖ§³ÖÎÒÃÇÐèÒªµÄ´«Êä»úÖÆ£¬¸üÖØÒªµÄÊÇ£¬¿ÉÒÔÓò»Í¬µÄÓïÑÔÌṩһÖµıàÅÅAPI¡£ÎÒÃǵÄËùÓпͻ§¶Ë¿â´ÓÒ»¿ªÊ¼¶¼¿ÉÖ§³ÖOpenTracing
API¡£
ÔÚµÚÒ»°æ¿Í»§¶Ë¿âÖУ¬ÎÒÃÇ»¹Ôö¼ÓÁËÁíÒ»¸öÐÂÓ±µÄ¹¦ÄÜ£º¿ÉÒÔ´Ó×·×Ùºó¶ËÂÖѯ²ÉÑù²ßÂÔ¡£µ±Ä³¸ö·þÎñÊÕµ½²»°üº¬×·×ÙÔªÊý¾ÝµÄÇëÇóºó£¬Ëù±àÅŵÄ×·×Ù¹¦ÄÜͨ³£»áΪ¸ÃÇëÇóÆô¶¯Ò»¸öеÄ×·×Ù£¬²¢Éú³ÉеÄËæ»ú×·×ÙID¡£È»¶ø´ó²¿·ÖÉú²ú×·×Ùϵͳ£¬ÓÈÆäÊÇÓëUberµÄËõ·ÅÄÜÁ¦ÓйصÄϵͳÎÞ·¨¶Ôÿ¸ö×·×Ù½øÐС°Ãè»æ¡±£¨Profile£©»ò½«Æä¼Ç¼ÔÚ×Ô¼ºµÄ´æ´¢ÖС£ÕâÑù×ö»áÔÚ·þÎñÓëºó¶Ëϵͳ֮¼ä²úÉúÄÑÒÔÕмܵĴóÁ÷Á¿£¬ÉõÖÁ»á±È·þÎñËù´¦ÀíµÄʵ¼ÊÒµÎñÁ÷Á¿´ó³öºÃ¼¸¸öÊýÁ¿¼¶¡£ÎÒÃǸÄΪÈô󲿷Ö×·×Ùϵͳֻ¶ÔС±ÈÀýµÄ×·×Ù½øÐвÉÑù£¬²¢Ö»¶Ô²ÉÑùµÄ×·×Ù½øÐС°Ãè»æ¡±ºÍ¼Ç¼¡£ÓÃÓÚ½øÐвÉÑù¾ö²ßµÄËã·¨±»ÎÒÃdzÆÖ®Îª¡°²ÉÑù²ßÂÔ¡±¡£²ÉÑù²ßÂÔµÄÀý×Ó°üÀ¨£º
²ÉÑùÒ»ÇС£Ö÷ÒªÓÃÓÚ²âÊÔÓÃ;£¬µ«Éú²ú»·¾³ÖÐʹÓûáÔì³ÉÄÑÒÔ³ÐÊܵĿªÏú£¡
»ùÓÚ¸ÅÂʵIJÉÑù£¬°´Õչ̶¨¸ÅÂʶÔÌØ¶¨×·×Ù½øÐÐËæ»ú²ÉÑù¡£
ÏÞËÙ²ÉÑù£¬Ã¿¸öʱ¼äµ¥Î»¶ÔX¸ö×·×Ù½øÐвÉÑù¡£ÀýÈç¿ÉÄÜ»áʹÓéͰ£¨Leaky bucket£©Ëã·¨µÄ±äÌå¡£
´ó²¿·Ö¼æÈÝZipkinµÄÏÖÓбàÅÅ¿â¿ÉÖ§³Ö»ùÓÚ¸ÅÂʵIJÉÑù£¬µ«ÐèÒªÔÚ³õʼ»¯¹ý³ÌÖжԲÉÑùËÙÂʽøÐÐÅäÖá£ÒÔÎÒÃǵĹæÄ££¬ÕâÖÖ·½Ê½»áÔì³ÉһЩÑÏÖØµÄÎÊÌ⣺
ÿ¸ö·þÎñ¶Ô²»Í¬²ÉÑùËÙÂʶÔ×·×Ùºó¶ËϵͳÕûÌåÁ÷Á¿µÄÓ°ÏìÖªÖ®ÉõÉÙ¡£ÀýÈ磬¾ÍËã·þÎñ±¾ÉíʹÓÃÁËÊʶȵÄÿÃë²éѯÊý£¨QPS£©ËÙÂÊ£¬Ò²¿ÉÄܵ÷ÓÃÉȳö£¨Fanout£©ÒòËØ·Ç³£¸ßµÄÆäËûÏÂÓηþÎñ£¬»òÓÉÓÚÃܼ¯±àÅŵ¼Ö²úÉú´óÁ¿×·×ÙSpan¡£
¶ÔÓÚUberÀ´Ëµ£¬Ã¿Ì첻ͬʱ¶ÎµÄÒµÎñÁ÷Á¿ÓÐ×ÅÃ÷ÏÔ¹æÂÉ£¬·åֵʱÆÚ³Ë¿Í¸ü¶à¡£¹Ì¶¨²»±äµÄ²ÉÑù¸ÅÂʶԷǷåֵʱ¿Ì¿ÉÄÜÏԵùýµÍ£¬µ«¶Ô·åֵʱ¿Ì¿ÉÄÜÏԵùý¸ß¡£
Jaeger¿Í»§¶Ë¿âµÄÂÖѯ¹¦Äܰ´ÕÕÉè¼Æ¿ÉÒÔ½â¾öÕâЩÎÊÌ⡣ͨ¹ý½«ÓйØ×îÇ¡µ±²ÉÑù²ßÂԵľö²ßת½»¸ø×·×Ùºó¶Ëϵͳ£¬·þÎñµÄ¿ª·¢Õß²»ÔÙÐèÒª²Â²â×îÊʺϵIJÉÑùËÙÂÊ¡£¶øºó¶Ë¿ÉÒÔ°´ÕÕÁ÷Á¿Ä£Ê½µÄ±ä»¯¶¯Ì¬µØµ÷Õû²ÉÑùËÙÂÊ¡£Ï·½µÄʾÒâͼÏÔʾÁË´ÓÊÕ¼¯Æ÷µ½¿Í»§¶Ë¿âµÄ·´À¡»·Â·¡£
µÚÒ»°æ¿Í»§¶Ë¿âÒÀȻʹÓÃTChannel·¢Ëͽø³ÌÍâ×·×ÙSpan£¬»á½«ÆäÖ±½ÓÌá½»¸øÊÕ¼¯Æ÷£¬Òò´ËÕâЩ¿âÐèÒªÒÀÀµHyperbahn½øÐз¢ÏֺͷÓÉ¡£¶ÔÓÚÏ£ÍûÔÚ×Ô¼ºµÄ·þÎñÖÐÔËÓÃ×·×ÙÄÜÁ¦µÄ¹¤³Ìʦ£¬ÕâÖÖÒÀÀµÐÔÔì³ÉÁ˲»±ØÒªµÄĦ²Á£¬ÕâÑùµÄĦ²Á´æÔÚÓÚ»ù´¡¼Ü¹¹²ãÃæ£¬ÒÔ¼°ÐèÒªÔÚ·þÎñÖжîÍâ°üº¬µÄ¿âµÈ·½Ã棬½ø¶ø¿ÉÄܵ¼ÖÂÒÀÀµÐÔµØÓò¡£
ΪÁ˽â¾öÕâÖÖÎÊÌ⣬ÎÒÃÇʵÏÖÁËÒ»ÖÖjaeger-agent±ß³µ£¨Sidecar£©½ø³Ì£¬²¢½«Æä×÷Ϊ»ù´¡¼Ü¹¹×é¼þ£¬Ó븺ÔðÊÕ¼¯¶ÈÁ¿ÖµµÄ´úÀíÒ»Æð²¿Êðµ½ËùÓÐËÞÖ÷»úÉÏ¡£ËùÓÐÓë·Óɺͷ¢ÏÖÓйصÄÒÀÀµÏî¶¼·â×°ÔÚÕâ¸öjaeger-agentÖУ¬´ËÍâÎÒÃÇ»¹ÖØÐÂÉè¼ÆÁ˿ͻ§¶Ë¿â£¬¿É½«×·×ÙSpan±¨¸æ¸ø±¾µØUDP¶Ë¿Ú£¬²¢ÄÜÂÖѯ±¾µØ»Ø»·½Ó¿ÚÉϵĴúÀí»ñÈ¡²ÉÑù²ßÂÔ¡£ÐµĿͻ§¶ËÖ»ÐèÒª×î»ù±¾µÄÍøÂç¿â¡£¼Ü¹¹ÉϵÄÕâÖֱ仯Ïò×ÅÎÒÃÇÏÈ×·×Ùºó²ÉÑùµÄÔ¸¾°Âõ³öÁËÒ»´ó²½£¬ÎÒÃÇ¿ÉÒÔÔÚ´úÀíµÄÄÚ´æÖжÔ×·×ټǼ½øÐлº³å¡£

ĿǰµÄJaeger¼Ü¹¹£ººó¶Ë×é¼þʹÓÃGoÓïÑÔʵÏÖ£¬¿Í»§¶Ë¿âʹÓÃÁËËÄÖÖÖ§³ÖOpenTracing±ê×¼µÄÓïÑÔ£¬Ò»¸ö»ùÓÚReactµÄWebǰ¶Ë£¬ÒÔ¼°Ò»¸ö»ùÓÚApache
SparkµÄºó´¦ÀíºÍ¾ÛºÏÊý¾Ý¹ÜµÀ¡£
ͳ°üʽ·Ö²¼Ê½×·×Ù
Zipkin UIÊÇÎÒÃÇÔÚJaegerÖÐʹÓõÄ×îºóÒ»¸öµÚÈý·½Èí¼þ¡£ÓÉÓÚÒª½«SpanÒÔZipkin
Thrift¸ñʽ´æ´¢ÔÚCassandraÖв¢ÓëUI¼æÈÝ£¬Õâ¶ÔÎÒÃǵĺó¶ËºÍÊý¾ÝÄ£ÐͲúÉúÁËÒ»¶¨µÄÏÞÖÆ¡£ÓÈÆäÊÇZipkinÄ£ÐͲ»Ö§³ÖOpenTracing±ê×¼ºÍÎÒÃǵĿͻ§¶Ë¿âÖÐÁ½¸ö·Ç³£ÖØÒªµÄ¹¦ÄÜ£º¼ü-ÖµÈÕÖ¾API£¬ÒÔ¼°ÓøüΪͨÓõÄÓÐÏòÎÞ»·Í¼£¨Directed
acyclic graph£©¶ø·ÇSpanÊ÷Ëù´ú±íµÄ×·×Ù¡£Òò´ËÎÒÃÇÒãÈ»¾ö¶¨³¹µ×¸ïкó¶ËËùÓõÄÊý¾ÝÄ£ÐÍ£¬²¢±àдеÄUI¡£ÈçÏÂͼËùʾ£¬ÐµÄÊý¾ÝÄ£ÐÍ¿ÉÔÉúÖ§³Ö¼ü-ÖµÈÕÖ¾ºÍSpanµÄÒýÓ㬴ËÍ⻹¶Ô·¢Ë͵½½ø³ÌÍâµÄÊý¾ÝÁ¿½øÐÐÁËÓÅ»¯£¬±ÜÃâ½ø³Ì±êÇ©ÔÚÿ¸öSpanÉÏÖØ¸´£º

JaegerÊý¾ÝÄ£ÐÍ¿ÉÔÉúÖ§³Ö¼ü-ÖµÈÕÖ¾ºÍSpanÒýÓá£
ĿǰÎÒÃÇÕýÔÚ½«ºó¶Ë¹ÜµÀÈ«ÃæÉý¼¶µ½ÐµÄÊý¾ÝÄ£ÐÍ£¬ÒÔ¼°È«Ðµģ¬¸üΪÓÅ»¯µÄCassandra¼Ü¹¹¡£ÎªÁ˳ä·ÖÀûÓÃеÄÊý¾ÝÄ£ÐÍ£¬ÎÒÃÇ»¹ÓÃGoÓïÑÔʵÏÖÁËÒ»¸öȫеÄJaeger²éѯ·þÎñ£¬²¢ÓÃReactʵÏÖÁËÒ»Ì×ȫеÄWeb
UI¡£×î³õ°æ±¾µÄUIÖ÷ÒªÖØÏÖÁËZipkin UIµÄÔÓй¦ÄÜ£¬µ«ÔÚÉè¼ÆÉϸüÒ×ÓÚͨ¹ýÀ©Õ¹ÌṩÐµĹ¦ÄܺÍ×é¼þ£¬²¢ÄÜ×÷ΪReact×é¼þǶÈëµ½ÆäËûUI¡£ÀýÈ磬Óû§¿ÉÒÔÑ¡ÔñÓöàÖÖ²»Í¬ÊÓͼ¶Ô×·×Ù½á¹û½øÐпÉÊÓ»¯£¬ÀýÈç×·×Ùʱ¶ÎÄÚµÄÖ±·½Í¼£¬»ò·þÎñÔÚ×·×Ù¹ý³ÌÖеÄÀÛ»ýʱ¼ä£º

Jaeger UIÏÔʾµÄ×·×ÙÐÅÏ¢ËÑË÷½á¹û¡£ÓÒÉϽÇÏÔʾµÄʱ¿ÌºÍ³ÖÐøÊ±¼äÉ¢µãͼÓÿÉÊÓ»¯·½Ê½³ÊÏÖÁ˽á¹û£¬²¢ÌṩÁËÏòÏÂÍÚ¾òÄÜÁ¦¡£
ÁíÒ»¸öÀý×Ó£¬¿ÉÒÔ¸ù¾Ý²»Í¬ÓÃÀý²é¿´Í¬Ò»Ìõ×·×ټǼ¡£³ýÁËʹÓÃĬÈϵÄʱÐòäÖȾ·½Ê½£¬»¹¿ÉÒÔͨ¹ýÆäËûÊÓͼäÖȾΪÓÐÏòÎÞ»·Í¼»ò¹Ø¼ü·¾¶Í¼£º

Jaeger UIÏÔʾÁËÒ»Ìõ×·×ټǼµÄÏêÇé¡£½çÃæ¶¥²¿ÊÇÒ»Ìõ×·×ټǼµÄÃÔÄãµØÍ¼Ê¾Òâͼ£¬½è´Ë¿ÉÔÚ¸ü´ó¹æÄ£µÄ×·×ټǼÖнøÐиüÇáËɵĵ¼º½¡£
ͨ¹ý½«¼Ü¹¹ÖÐÊ£ÓàµÄZipkin×é¼þÌæ´úΪJaeger×Ô¼ºµÄ×é¼þ£¬ÎÒÃǽ«Jaeger³¹µ×±äΪһÖÖͳ°üʽµÄ¶Ëµ½¶Ë·Ö²¼Ê½×·×Ùϵͳ¡£
ÎÒÃÇÈÏΪ±àÅÅ¿âÊÇJaeger¹ÌÓеÄÒ»²¿·Ö£¬ÕâÑù¿ÉÒÔÈ·±£ÓëJaegerºó¶ËµÄ¼æÈÝÐÔ£¬ÒÔ¼°Í¨¹ý³ÖÐø¼¯³É²âÊÔ±£ÕÏÏ໥֮¼äµÄ»¥²Ù×÷ÐÔ¡££¨ZipkinÉú̬ϵͳ×ö²»µ½ÕâЩ¡££©ÓÈÆäÊÇ¿çÔ½ËùÓпÉÖ§³ÖÓïÑÔ£¨Ä¿Ç°Ö§³ÖGo¡¢Java¡¢PythonºÍNode.js£©ºÍ¿ÉÖ§³ÖµÄ´«Ê䷽ʽ£¨Ä¿Ç°Ö§³ÖHTTPºÍTChannel£©ÊµÏֵĻ¥²Ù×÷ÐÔ»áÔÚÿ¸öPullÇëÇóÖвâÊÔ£¬²¢Óõ½ÁËUber¹¤³Ì²¿ÃÅRPCÍŶÓËù¿ª·¢µÄCrossdock¿ò¼Ü¡£Jaeger¿Í»§¶Ë¼¯³É²âÊÔµÄÏêϸÐÅÏ¢Çë²ÎÔÄjaeger-client-go
crossdock´úÂë¿â¡£Ä¿Ç°ËùÓÐJaeger¿Í»§¶Ë¿â¶¼ÒÑ¿ªÔ´£º
Go
Java
Node.js
Python
ÎÒÃÇÕýÔÚ½«ºó¶ËºÍUI´úÂëÇ¨ÒÆÖÁGitHub£¬²¢¼Æ»®¾¡¿ì½«JaegerµÄÔ´´úÂëÈ«²¿¹«¿ª¡£Èç¹ûÄã¶ÔÕâ¸ö¹ý³Ì¸ÐÐËȤ£¬¿ÉÒÔ¹Ø×¢Ö÷´úÂë¿â¡£ÎÒÃÇ»¶Ó´ó¼ÒΪ´Ë×ö¹±Ï×£¬Ò²ºÜÀÖÓÚ¿´µ½¸ü¶àÈ˳¢ÊÔʹÓÃJaeger¡£ËäÈ»ÎÒÃǶÔĿǰµÄ½øÕ¹ºÜÂúÒ⣬µ«UberµÄ·Ö²¼Ê½×·×Ù¹¤×÷»¹Óкܳ¤µÄ·Ҫ×ß¡£ |