跨境电商的Go服务治理实践

我们正在将业务从 C# 切换到 Go,计划是全部最终均使⽤ Go 实现。 ✤ 此次分享关注点在于怎么从零打造⼀整套 Go 服务体系 ✤ 所以我们第⼀件事就是从规范开发环境做起
展开查看详情

1. 跨境电商的 Go服务治理实践 陈冶 @ ezbuy

2.⽬录 1. 背景&前⾔ 2. 开发环境构建 New! 3. 微服务选型 Hot! 4. 分布式追踪 New! 5. 跨数据中⼼

3.前⾔&背景 ✤ 我们正在将业务从 C# 切换到 Go,计划是全部最终均使⽤ Go 实现。 ✤ 此次分享关注点在于怎么从零打造⼀整套 Go 服务体系 ✤ 所以我们第⼀件事就是从规范开发环境做起

4.开发环境构建: Goflow ✤ 开发环境统⼀化 ✤ 第三⽅依赖⽅案 ✤ 编译流程⼀体化

5.开发环境构建: Goflow ✤ 设计理念: ✤ 没错,我就是 GOPATH ✤ 与个⼈环境 共存 且 相互独⽴

6.开发环境构建: Goflow ✤ 修改环境变量 GOPATH,PATH 当环境被污染时会打印⼀个Logo ✤ 在所在环境注册⼀些函数 ✤ 负责基础库更新,⼯具链的编译

7.开发环境构建: Goflow - 依赖管理 ✤ 共享依赖! ✤ 内⽹缓存,不⾛⼩⽔管 ✤ 和业务代码分开 ✤ “随意”修改第三⽅包

8.开发环境构建: Goflow - 依赖管理 ✤ 实现⽅案 ✤ 使⽤官⽅的 vendor ⽅案来实现 ✤ 新建⼀个仓库来存放所有依赖包 ✤ 第三⽅包通过 subtree 加⼊到仓库内 ✤ 这个库的名字直接叫 vendor

9.开发环境构建: Goflow - 依赖管理 ✤ 现在全部第三⽅库的体积 ✤ 内⽹下载只要 12 秒 ?!

10.开发环境构建: Goflow - ⼯具链集成 ✤ goflow 是分发平台 ✤ 全部放在vendor⾥⾯ ✤ ⾃我迭代时更新

11.开发环境构建: Goflow - 总结 ✤ 全程⾃动化 - 个⼈环境 ✤ 巧妙管理第三⽅依赖(包括⼯具链) ✤ ⾃我迭代 ✤ (只⽀持命令⾏)

12.开发环境构建: Goflow

13.微服务选型: gRPC ✤ 使⽤pb来描述接⼜ ✤ 扩展代码⽣成 ✤ 使⽤consul⽤于服务发现和负载均衡

14.微服务选型: 接⼜定义 ✤ 包 -> 服务 -> ⽅法 ✤ 可以拥有接⼜级别的配置

15.微服务选型: 接⼜扩展 定义接⼜特征

16.微服务选型: gRPC

17.微服务选型: SDK vs RPC ✤ ⼀个服务提供的内容不仅限于接⼜ gRPC exchange Service exchange Product Service SDK exchange gRPC Service

18.微服务选型: gRPC - 项⽬改造 ✤ 使⽤ internal 来隔离资源/函数

19.微服务选型: gRPC

20.微服务选型: gRPC

21.✤ Consul ✤ 程序内维护地址列表 ✤ polling 获取更新

22.微服务选型: gRPC - 项⽬改造 注册信息

23.微服务选型: 问题 ✤ 阅读体验... 差 ✤ 调⽤远程服务的思考成本 ✤ 调⽤栈⽆法真实还原

24.微服务选型: gRPC + Webapi Webapi⽣成代码

25.微服务选型: gRPC + Webapi ✤ consul-template ⾃动注册路由 ✤ 找出⽀持webapi的接⼜ ✤ 共享⼀个端⼜ (github.com/cockroachdb/cmux)

26.微服务选型: 总结 ✤ 使⽤ gRPC 作为微服务框架,与服务发现深度结合 ✤ 让 远程调⽤ == 本地调⽤ (形式上) ✤ 接⼜路径 == 代码路径 ✤ 通过option定义接⼜特性 ✤ ⽤ goflow 解决依赖的⼯具链(consul)

27.分布式追踪:调⽤栈 ✤ sentry,调⽤栈展⽰

28.分布式追踪:调⽤栈 ✤ sentry, 记录的⼀些上下⽂信息值

29.分布式追踪:调⽤栈 ✤ 跨进程的错误跟踪 服务2;服务4: error 服务1;服务2;服务4: error 服务2 服务4:error 服务1 服务4 error 客户端 API 服务3