新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的( 四 )


关于单台Server,如果跨机器识别,传输链路ID如何传输?
新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的


如上图所示,基于PHP实现大部分都是Web开发的,在HTTP中追踪一个ID,可以实现多台机器之间。假设同样是一个Login请求,一个请求的传递,基于以上的实现,我们就可以实现到类似于第一块,最开始Curl是一个扩展,我们开启了新扩展,任何一个PHP语言只需要打开一个新的扩展包,并植入到PHP中就可以实现链路跟踪了。
实现本身是接入到一个开源软件,我们实现的过程中做了一些更改,更多的是函数支持,那这是什么意思?最开始讲到实现原理的核心是做一个函数替换。我们会在测试过程中发现,如果没有函数,我们可以增加更多自己的函数,类似于Curl Post参数抓取,增加了这个功能。我们基于链路跟踪获取到数据码,再进行V2格式进行输出,最后修复bug。
接下来我们看一下真实的基于链路跟踪输出的详细数据。
新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的


上图所示,左边是一个常规的PHP代码,右边是链路输出的数据,我们详细分析一下PHP代码,这一串链路追踪最终核心截取了一个函数细节,函数的耗时时间、函数的参数,我们基于最开始的函数替换原理实现到的是,任何一个PHP函数,它在运行时可以将输入参数、返回值和调用时间,获取到这一串代码整个执行的链路。
当然,因为做了数据替换,所以会出现性能损耗,我们需要通过采样率规避这个问题,根据实际业务做到一个测试数据。关于以上内容都是作为单机处理的,那么,如何实现扩展到几百台或几千台规模机器?
新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的

首先,对PHP做一个扩展,再做函数替换,实现基于Zipkin-V2数据写入到文件,数据平台有一个数据日志,将日志写到平台中。用到Vipkin-V2协议将隔离转化格式后,再做数据转换,如果只是用来查询,它是非常简单的Web页面,HTML的页面进行重写插入到平台里面。在实现过程中,有几个细节需要注意,第一块Logstash配置,需要做一个重命名操作,第二块ElasticSearch搜索,一般不进行索引,我们可以进行字符串查询,查询到指定的API或指定的数据类型链路跟踪。
当加了链路跟踪后,最终解决什么业务问题?
第一块是性能统计,我们通过函数替换可以知道输入、输出的时间,和MySQL、API接口访问时间。虽然数据可以在第三方系统查到,但也可以在MySQL集群或是自己的系统、API性能分析中查到,如果能查到链路跟踪,这是非常贴合业务的。
新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的

第二块是应用拓扑,如上图所示,我们可以非常清晰的看到,在通过链路跟踪的时候,我们可以知道语言目的地,并把拓扑画出来,如果仅仅只是基于链路跟踪画拓扑图,是不适合现实情况的。
一个8001Web端口,MySQL有50提机器,仅仅基于链路跟踪画出来的数据图,50个Web介点连接MySQL,在运维层面属于集群的概念,但只是链路跟踪的话,画出来的拓扑图可能不适合运维层面。MySQL比较简单,基于链路跟踪的数据看到的ID只是VIP,架构图对于运维制造,是想了解真实访问到哪个集群了,基于这样的实现,我们之前详细介绍到CMDB,VIP数据和MySQL是有关联的。关于这两个数据的结合,可以非常轻松的知道运维的构架图。
新浪、百度、淘宝以及其他的一些大型互联网系统,在出现故障之后,一般的处理思路、流程和方法是怎么样的


推荐阅读