高并发系统微服务治理实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 高并发系统微服务治理实践 万俊峰Kevin
2. 关于我 • go-zero 作者 • 阿里云 MVP • 腾讯云 TVP • ArchSummit 明星讲师 • GopherChina 主持人 & 金牌讲师 • QCon+ Go 语言出品人兼讲师 • 腾讯云开发者大会讲师
3. TOC • • • • 微服务项目如何设计 微服务拆分方法 微服务如何保障高并发高可用 go-zero工程化实践
4. 微服务系统如何设计
5.
6.
7. 大型微服务系统全览
8. 微服务系统请求链路
9. 重定向故障案例
10. Kubernetes or ECS? • Kubernetes的本质 • 运维工具 • Kubernetes的好处 • 自动调度 • 服务自我恢复 • 分发的是最终状态 • 负载均衡,水平伸缩 • 资源更充分利用 • 系统更可靠
11. 持续集成 • 持续集成方案选择 • 自建gitlab • GitHub • 好处 • 代码规范检测 • 单元测试 • 集成测试 • 文档同步 • 所有能自动化的事情都应该集成到CI里
12. 微服务如何拆分
13. 微服务数据库拆分 • 数据不能乱,规则先确定 • 定义数据边界,避免数据冗余 • 数据库互相隔离,避免故障传递 • No join, no pain! 用户 商品 订单 物流
14. 接口聚类收敛 • 按功能聚类接口 • 避免微服务过微 • 避免调用链路过深
15. 高内聚、低耦合 • 面向对象设计方法论 • 按业务领域拆分 • 按功能和能力拆分(中台) • 按重要程度拆分(减少更新、保障稳定)
16. 正交拆分原则 • 易设计、测试、上线 • 提高开发效率,降低⻛险
17. 避免微服务过微 • 避免一个API一个微服务 • 服务粒度适中,渐进式拆分 • 定义好调用深度底限 • 团队足够轻量
18. 避免环形依赖 • 环形依赖升级、维护困难 • 重新思考如何设计解耦 • 消息中间件
19. 考虑接口幂等性 • 牵涉到库存、支付等 • 自动重试要谨慎
20. 数据结构独立性 • 每个API、RPC都有自己的数据结构 • 避免透传 • 避免传染
21. 拒绝联表查询 • 避免数据耦合 • 不易扩展、难独立部署 • 性能问题 • No join, no pain!
22. 微服务框架的设计与实现
23.
24. api gateway层 ● 流控 ● 请求鉴权 ● 请求参数校验 ● 业务聚合 ● 支持自定义中间件
25. 请求鉴权 ● Json Web Token ● 鉴权中间件 ● 自动续期
26. 中间件设计 ● 默认中间件 ● 限流 ● 熔断 ● 降级 ● 链路追踪 ● 超时控制 ● 日志 ● 支持自定义中间件 ● svr.Use(…)
27. RPC 服务层 - zRPC ● 协议选择 - gRPC ● 多种服务发现方式 ● 负载均衡 - p2c ewma ● 支持自定义中间件
28. 服务注册与发现 service registry ● 直连方式 ● ETCD服务发现 watch发现 注册上报 ● Kubernetes服务发现 ● consul, nacos等扩展支持 service1 rpc call service2
29. go-zero 服务发现示例 ● API Gateway 发现 RPC ● RPC 发现 RPC ● ETCD ● Endpoints
30. ETCD服务发现 ● 维护ETCD集群 ● 不依赖Kubernetes
31. Kubernetes服务发现 ● 本身也是ETCD ● 配置ServiceAccount ● 更易运维 ● k8s://myns/mysvc:3456
32. 应对故障
33. Power of Two Choices ● 默认算法 ● 当前请求数 ● 处理时⻓ ● 指数加权移动平均 参考自Nginx & Envoy & Finagle & Linkerd: • https://www.nginx.com/blog/nginx-power-of-two-choices- load-balancing-algorithm/ • https://linkerd.io/2016/03/16/beyond-round-robin-load- balancing-for-latency/
34. 中间件设计 ● 默认中间件 ● 限流 ● 熔断 ● 降级 ● 链路追踪 ● 超时控制 ● 日志 ● 支持自定义中间件 ● svr.Use(…)
35. 自适应熔断 ● Google SRE算法 ● 放弃了Net ix Hystrix算法 ● 基于滑动窗口(10秒/40窗口) ● 支持自定义触发条件 ● 支持自定义fallback ● http/rpc框架内建 ● 自动触发,自动恢复
36. 自适应降载 ● K8S的HPA 80%触发 ● CPU>90%开始拒绝低优先级请求 ● CPU>95%开始拒绝高优先级请求 ● 基于滑动窗口,防止毛刺 ● 有冷却时间,防止抖动 ● 实践检验,配合K8S弹性伸缩 ● http/rpc框架内建
37. 更多治理考虑 ● 超时 ● 级联调用 ● 跟客户端超时配合 ● 重试 ● 指数退避 ● 流量quota ● 超时相关性
38. 多重防护,保障高可用 并发控制 自适应降载 自适应熔断 Rpc Call Requests 限流 K8S弹性伸缩 负载均衡
39. 微服务可观测性 ● OpenTelemetry ● jaeger ● zipkin
40. 微服务可观测性
41. 微服务可观测性
42. goctl 效率工具
43. https://github.com/zeromicro/go-zero https://go-zero.dev 欢迎 star, fork, issue, PR! ?
44. https://github.com/zeromicro/go-zero

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 18:37
浙ICP备14020137号-1 $Map of visitor$