nfvo通过调用哪个接口实现对vnf生命周期的管理_4.1运维那些事之调用链业界标准Opentracing...

调用链业界洞察

一项技术得到认可并快速普及,各大厂商会纷纷推广自己的方案和实现,快速抢占市场;这时候标准组织就联合大厂建立技术标准,为使用者提供便利。调用链技术也不例外,下面看看调用链相关的标准Opentracing、OpenCensus、OpenTelemetry。

OpenTracing标准

Opentracing是CNCF(Cloud Native Computing Foundation)的成员项目,由UBER、苹果、Yelp等各大厂商开发,通过提供平台无关、厂商无关的API,同时支持Zipkin、Jeager等多种分布式跟踪系统,使得开发人员能够方便的添加(或更换)追踪系统的实现。其正在为全球的分布式追踪提供统一的概念和数据标准。Opentracing技术原理:

0766c3cf76e80ae007cf4fe1e2a2d611.png

Opentracing API

• 提供9中语言API接口定义包括:Go,JavaScript,Java,Python,Ruby,PHP,Objective-C,C++,C#

Instrumentation

• 利用消息中间件Filter、Decorator、Dnterceptor等机制拦截Request和Response并完成上下文传递和埋点

• 存储request context或request到span的映射关系

• 利用Inject/Extract语法完成spanContext传递

• Span生命周期管理

• Tracer配置管理

• 提供业务Annotation接口

Tracer

• 用于对接满足Opentracing标准的不同分布式追踪系统,如Zipkin、Jeager等

Inject/Extract

• 序列化和反序列化spanContext到业务调用请求

• Opentracing仅提供接口和语法标准,不提供实现

Opentracing提供语言无关的数据模型和API接口,对于数据模型常用Span Tags和log fields给出标准命名规范和应用场景,对于API接口并且提供Go,JavaScript,Java,Python,Ruby,PHP,Objective-C,C++,C#等9中语言的开源实现

81343acdc878100c2e2ece30fbf22613.png

OpenTracing提供两个标准

1. OpenTracing数据模型

Traces:一个Trace可以认为是多个span的有向无环图(DAG)。

Spans封装了以下信息:

l Operation Names:可读字符串表达Span工作统计上有意义

l Start Timestamp : span开始时间

l Finish Timestamp :span结束时间

l Span Tags:Key-ValueKey必须StringValue是基本数据类型

l Span Logs:Key-Value + Timestamp

l References : spans之间的引用关系

l SpanContext封装以下信息:

l 需要跨越进程边界传递的信息<traceidparentedspanidsamplerate>

l Baggage Items:Key-Value跨进程边界全局传送透明数据

Reference between spans:描述父子节点之间的直接因果关系

l ChildOf:父Span某种程度上依赖子Span

l FollowsFrom:父节点不以任何方式依赖他们子节点的执行结果

b3806e7d6df8de26682c96c63f764b4c.png

PS:Jaeger支持OpenTracing数据格式

2. OpenTracing API

Tracer接口创建Span并了解如何通过InjectExtract穿越进程边界

l StartSpan(operationName string, opts ...StartSpanOption) Span

启动一个新的Span

l  Inject(sm SpanContext, format interface{}, carrier interface{}) error

序列化SpanContext到carrier

l  Extract(format interface{}, carrier interface{}) (SpanContext, error)

反序列化SpanContext到carrier

Span

l  Context() SpanContext

利用Span获取SpanContext

l  SetOperationName(operationName string) Span

重置操作名称

l  Finish()  结束一个Span
SetTag(key string, value interface{}) Span

设置获取一个标签透明数据

l  LogFields(fields ...log.Field)

记录结构化数据日志

SpanContext

强制spanContext实例不可变更多是一个概念和数据接口

l  ForeachBaggageItem(handler func(k, v string) bool)

遍历所有透明数据(Baggage)

No-op Tracer

无操作的Tracer,用于打桩测试和Opentracing的标记控制

具体参考:

https://opentracing.io/

https://github.com/opentracing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值