当前位置:网站首页>终极套娃 2.0|云原生 PaaS 平台的可观测性实践分享
终极套娃 2.0|云原生 PaaS 平台的可观测性实践分享
2022-04-21 15:27:00 【InfoQ】
- 平台已经提供了服务观测能力,再引入外部平台造成重复建设,对平台使用的资源成本也有增加
- 开发团队日常使用自己的平台来排查故障和性能问题,吃自己的狗粮对产品的提升也有一定的帮助
- 对于可观测性系统的核心组件比如 Kafka 和 数据计算组件,我们通过 SRE 团队的巡检工具来旁路覆盖,并在出问题时触发报警消息
OpenTelemetry 数据接入

- service_node描述服务的节点和实例
- service_call_* 描述服务和接口的调用指标,包括 HTTP、RPC、DB 和 Cache
- service_call_*_error描述服务的异常调用,包括 HTTP、RPC、DB 和 Cache
- service_relation描述服务之间的调用关系
Golang 无侵入的调用拦截
//go:linkname serverHandler net/http.serverHandler
type serverHandler struct {
srv *http.Server
}
//go:linkname serveHTTP net/http.serverHandler.ServeHTTP
//go:noinline
func serveHTTP(s *serverHandler, rw http.ResponseWriter, req *http.Request)
//go:noinline
func originalServeHTTP(s *serverHandler, rw http.ResponseWriter, req *http.Request) {}
var tracedServerHandler = otelhttp.NewHandler(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) {
injectcontext.SetContext(r.Context())
defer injectcontext.ClearContext()
s := getServerHandler(r.Context())
originalServeHTTP(s, rw, r)
}), "", otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string {
u := *r.URL
u.RawQuery = ""
u.ForceQuery = false
return r.Method + " " + u.String()
}))
type _serverHandlerKey int8
const serverHandlerKey _serverHandlerKey = 0
func withServerHandler(ctx context.Context, s *serverHandler) context.Context {
return context.WithValue(ctx, serverHandlerKey, s)
}
func getServerHandler(ctx context.Context) *serverHandler {
return ctx.Value(serverHandlerKey).(*serverHandler)
}
//go:noinline
func wrappedHTTPHandler(s *serverHandler, rw http.ResponseWriter, req *http.Request) {
req = req.WithContext(withServerHandler(req.Context(), s))
tracedServerHandler.ServeHTTP(rw, req)
}
func init() {
hook.Hook(serveHTTP, wrappedHTTPHandler, originalServeHTTP)
}
future1 := parallel.Go(ctx, func(ctx context.Context) (interface{}, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://www.baidu.com/api_1", nil)
if err != nil {
return nil, err
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
byts, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return string(byts), nil
})
future2 := parallel.Go(ctx, func(ctx context.Context) (interface{}, error) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, "http://www.baidu.com/api_2", nil)
if err != nil {
return nil, err
}
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
byts, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return string(byts), nil
}, parallel.WithTimeout(10*time.Second))
body1, err := future1.Get()
if err != nil {
return nil, err
}
body2, err := future2.Get()
if err != nil {
return nil, err
}
return &pb.HelloResponse{
Success: true,
Data: body1.(string) + body2.(string),
}, nil
写在最后




版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/7df0e8d0408ce9f4c4bbc6f9b
边栏推荐
- Jetpack compose uses custom operators to achieve the effect of drawing five pointed stars
- 105 page digital twin city information model CIM platform construction technical scheme
- 企业邮箱怎么登录?企业邮箱登录方法
- JD cloud has launched cloud computing to create an unbounded office experience for the future
- 【二分搜索-中等】540. 有序数组中的单一元素
- [binary search - simple] 374 Guess the size of the number
- 产业园区数字孪生规划方案
- Mysql
- SQL performance optimization and performance test
- Acwing 1775 Lost cattle (simulated)
猜你喜欢
随机推荐
Web.xml文件详解
[binary search - simple] 69 Square root of X
Betterscroll source code, reading and learning typescript
AcWing 1854. 晋升计数(模拟)
Digital twin planning scheme of Industrial Park
别紧张,就是聊聊软考
111页精细化工股份公司数据字转型解决方案
[binary search - simple] 278 First wrong version
What exactly does the distributed core principle analysis that fascinates Alibaba P8? I was surprised after reading it
无常损失简单解释
JUC学习记录
Plug in development practice of a simple annotation Library
Ultimate doll 2.0 | observable practice sharing of cloud native PAAS platform
107页企业数字化转型规划设计
Huawei power PON distribution network solution
Hanoi tower game and recursion
How should businesses establish private domain traffic?
[binary search - simple] 441 Arrange coins
Detailed explanation of basic knowledge of database 5: index and its two engines in mysql, master-slave replication and relational / non relational database
Dry goods | hidden rules for workplace promotion of testers: workplace advice of Senior Test Manager with 15 years of experience









