趣头条自研Service Mesh(negri)在趣头条的实践
2020-03-01 529浏览
- 1.⾃自研Service Mesh在趣头条的实践 徐鹏 基础架构部架构师
- 2.⾃自我介绍 INTRODUCTION 徐鹏 在游戏⾏行行业沉浸近10年年,对统⼀一⽹网关层有深⼊入的理理解, ⽬目前在趣头条基础架构部,主要负责边缘⽹网关和Service Mesh的研发和产品化
- 3.⽬目 录 CONTENTS 01 简单介绍Service Mesh 02 ⾃自研Service Mesh(Negri)介绍 03 Negri的研发历程 04 Negri的最佳实践 05 Negri的未来演进⽅方向
- 4.01 简单介绍 Service Mesh
- 5.Service Mesh Sidecar模式 绿⾊色部分代表服务程序 蓝⾊色部分代表Sidecar
- 6.Service Mesh演进历程 Sidecar并⾮非新概念, 早在2014年年Netflix等公司就 开始在公司内部⼤大规模应⽤用。
- 7.最典型的Service Mesh架构 • 这是⼀一个最典型的 Istio+Envoy的 Service Mesh • Istio作为控制平⾯面 • Envoy作为数据平⾯面 • 数据平⾯面并⾮非新概念, 我们最常⽤用的Nginx就 是最典型的数据平⾯面
- 8.什什么是控制平⾯面 控制平⾯面很抽象?NO!这就是⼈人 类控制平⾯面 Service Mesh要演进的控制平⾯面: 1. ⼈人,重⼤大决策,⽐比如服务降级 2. 认证,路路由,负载均衡等配置 3. 资源调度程序,⽐比如k8s,所有的 机器器资源可编程控制 4. 服务注册发现 5. Sidecar数据平⾯面
- 9.02 ⾃自研Service Mesh(Negri)介绍
- 10.why Go 1 2 3 公司技术栈主要基于Go 社区优好,开发迅速 Go语⾔言⾮非常适合开发⽹网络服务
- 11.Why⾃自研Service Mesh 社区⽅方案不不合适⽬目前公司环境 1 Istio等控制平⾯面不不成熟,Envoy c++开发,和公司技术栈不不符合,扩展困难 2 公司的⼊入⼝口 服务 统⼀一管理理 ⾃自研的auth,加解密,abtest,trace等⼊入⼝口服务 适合公司的研发/运维环境 3 在部署和研发维护上更更友好,兼容传统主机和容器器环境
- 12.⾃自研Service Mesh(Negri)介绍 * negri控制平⾯面负责管理理机器器资源 * 通过negri ui提供直观的图形界⾯面 * 屏蔽后端注册中⼼心,对k8s,consul等保持兼容 • Negri控制平⾯面负责管理理机器器资源 • 通过Negri UI提供直观的图形界⾯面 • 屏蔽后端注册中⼼心,对k8s,consul等 保持兼容 • 通过IP的⽅方式获取配置,⽽而不不是服务名
- 13.⾃自研Service Mesh Negri特性 1 语⾔言⽆无关 2 服务注册发现 省去了了slb部署环节,可以⾃自动发现服务节点变化 ⽆无需开发多套不不同语⾔言框架,PHP.Golang,Java,甚 ⾄至Nodejs,Python都可以接⼊入 3 维护成本低 4 重框架维护成本⾮非常⾼高,DRY会引发⼤大⾯面积故障,升级 服务治理理 限流,熔断,降级,trace,metrics,log,错误注⼊入 成本⾼高 5 图形化控制⾯面板 提供了了统⼀一的ui,控制服务治理理的各种配置,展示服务的 metrics,trace,⽇日志,调⽤用关系等 6 ⾃自研业务的⽀支持 abtest,trace,auth,加解密,sign验签等功能的⽀支持
- 14.⾃自研Service Mesh Negri特性 对业务⽆无侵⼊入 1 2 只需要改动两⾏行行代码,便便可以接⼊入 3 5 动态变更更配置 升级业务⽆无感知 通过fork进程,配合systemd,实现平滑重启 4 可控权重灰度发布 通过配置中⼼心 quconf 和微服务控制⾯面板,动态更更新配 通过单独部署低配置机器器和动态修改服务流量量,灰度发 置,实时控制限流熔断降级等中间件 布服务 资源隔离 6 统⼀一的插件编写体系 通过cgroup限制资源(CPU,内存等)使⽤用,不不影响业务 ⽆无需区分client还是server端中间件,统⼀一抽象为server 机器器 端中间件,编写⼀一次,多端运⾏行行
- 15.配置⽂文件-插件模式参考kong
- 16.03 Negri研发历程
- 17.Negri研发历程
- 18.Negri最早作为业务⽹网关开发 • 早期作为业务⽹网关开发 • 开发框架的过程中,发现对于服 务发现和治理理,PHP⼏几乎⽆无能为⼒力力 • 讨论发现Negri可以通过本地代 理理(Sidecar)模式,治理理PHP服务
- 19.Negri⽹网关模式开发过程 1 3 ⼀一周时间 性能超越kong(Nginx) 基于现有的Go脚⼿手架和oxy库(traefik),只⽤用⼀一周时间搭 裸跑100k qps,略略低于kong的12w,但启⽤用中间件后,得 建出原型,并且性能不不错 益于go的异步性能,全⾯面超越kong 问题/持续优化 1. 优化transport锁瓶颈 2. 建⽴立对象池 3. cpu资源占⽤用瓶颈 5 2 所有都是中间件 抽象中间件层,限流,熔断,⽇日志,metrics,都是基于中间件 开发 4 基于net/http库 1. 代码质量量⾼高,官⽅方库,稳定,同时⽀支持http和http2 2. 可以代理理,grpc,websocket,http 3. 直接提供反向代理理模块
- 20.性能优化-榨⼲干CPU全核⼼心性能 1 transport锁瓶颈 4 拆分多个transport,设置核⼼心数相关的连接池数量量 优化metrics 采⽤用counter和hisgram类型,相⽐比gauge和summery 将计算放在proms 2 对象池 http proxy buffer pool 3 路路由缓存 ⽤用了了强⼤大的路路由规则库gorilla/mux,但sidecar模式种路路由 数量量过多的时候性能下降严重,建⽴立路路由缓存解决 5 ⽇日志reopen 通过reopen⽇日志的⽅方式,⼤大⽇日志切分,不不会阻塞进程
- 21.Sidecar模式转变 1 单端⼝口还是多端⼝口 中间件编写过程中,发现单端⼝口,需要重复编写客户端和服务端中间件,多 端⼝口只需要⼀一次 2 配置如何差异化下发 独⽴立出服务私有化配置的概念,通过viper.merge的⽅方式加载 3 从⾼高并发到低延时 sidecar模式相对⽹网关,需要更更关注低延时,⽽而不不是⾼高并发
- 22.04 Negri的最佳实践
- 23.最佳实践-⾦金金币详情服务改造-服务调⽤用关系
- 24.最佳实践-⾃自动接⼊入metrics⾯面板
- 25.最佳实践-实时查看服务状态
- 26.最佳实践-trace调⽤用链
- 27.最佳实践-trace调⽤用关系图
- 28.05 Negri的未来演进⽅方向
- 29.未来规划 1 兼容xds协议 兼容社区xds协议,⽀支持istio作为控制平⾯面 2 ⽀支持更更多协议,代理理更更多服务 ⽀支持redis,mysql,nsq,kafka协议,能够对这些服务做限流熔断,metrics,trace 3 服务授权认证 通过下发服务间调⽤用规则/appsecret,让服务间调⽤用更更安全
- 30.欢迎加微信交流
- 31.