点击上方蓝色字体,选择“设为星标”
回复”云原生“获取基础架构实践
概览
在很久之前的文章中说过,K8s 作为云原生时代的创造者,下一代云原生的中间利器,从云原生 1.0 到 2.0,作为基石,成就无数服务畅游每一台机器。前面的文章 KiteX 入门篇 介绍了如何简单的开发一个高性能 RPC 微服务,并且我们看到其性能与吞吐还是不错的。但需要中间件 Nacos 来连接服务端与客户端。今天,我们主要从 K8s 角度来看 Kitex 如何接入云原生,甚至后面的 Istio。
实践
服务端
前面文章 KiteX 入门篇,我们介绍了如何创建一个服务端,那我们这次改造下,让其接入 K8s。
这里主要现需要去掉关于 Nacos 的逻辑,然后我们再看下面的代码:
server.WithServiceAddr(&net.TCPAddr{Port: 9000}),
这段代码的含义是通过 Nacos 注册时候,我们把服务注册的端口为 9000,但如果服务是以 K8s 部署的 Pod 形式,则代表的是 Pod 的端口,同时,由于 K8s 这种开源注册中心默认使用 TCP 协议,所以这里支持的是 TCP 协议。这样简单的配置,即可让服务注册到 K8s,被 k8s-api 发现。
完整代码如下:
svr := note.NewServer(
new(api.NoteApi),
//基于svc进行服务注册,9000为svc的port
server.WithServiceAddr(&net.TCPAddr{Port: 9000}),
server.WithMuxTransport(),
server.WithLimit(&limit.Option{MaxConnections: 10000, MaxQPS: 5000}),
server.WithPayloadCodec(thrift.NewThriftCodecWithConfig(thrift.FastRead | thrift.FastWrite)),
//server.WithTracer(prometheus.NewServerTracer(":9092", "/kitexNoteserver")),
server.WithErrorHandler(func(err error) error {
error := errno.ConvertErr(err)
return error
}),
server.WithCodec(codec.NewDefaultCodecWithSizeLimit(1024 * 1024 * 10)),//10M
server.WithMetaHandler(transmeta.ServerTTHeaderHandler), // registry
)
err := svr.Run()
i