微服务容灾治理微服务容灾治理 1. go-zero稳定性能⼒概览 经过这么多年⼤流量服务端架构设计的沉淀,go-zero在保护服务的稳定性上下⾜了功夫,不管是 CPU密集型还是IO密集型服务,go-zero都能很好的保护服务在如下场景不被拖垮或卡死: • 远超服务容量的突发⼤流量 • CPU打满 • 上下游故障或者超时 • MySQL、MongoDB、Redis等中间件故 障或者超负载(典型的是CPU飙⾼) 如图,我们从三个⽅⾯来保护系统的稳定性: • 服务端⾃适应过载保护 • 服务端⾃适应熔断 • 客⼾端⾃适应熔断 当然,我们还有⾃动适配后端服务能⼒的负载均衡算法,对稳定性进⼀步保驾护航。本⽂主要讲解⾃ 适应过载保护的原理、场景和表现。 2. ⾃适应过载保护压测 ⽤过Windows的同学对这个界⾯应该都不陌⽣,这就是典型CPU打满服务不可⽤的表现。此时,我 HPA的CPU阈值⼤于go-zero 的过载保护CPU阈值,否则可能会抑制HPA的⽣效。 当然整个系统并不是链路上所有服务和中间件都可以⾃动或及时扩容的,这⾥就牵出另⼀个稳定性能 ⼒-⾃适应熔断了。有了⾃适应过载保护和⾃适应熔断的双重加持,流量再⼤(上限是所有CPU都⽤ 在降载熔断等能⼒上),服务也不会挂。后续⽂章我会深度分析⾃适应熔断的场景压测和实现原理。0 码力 | 13 页 | 1.68 MB | 1 年前3
6.从 0 到 1 搭建十亿级包裹 API Versioning产品提供某一领域的解决方案的软件服务,本质是提供订阅服 务。 1.1 SaaS 产品的特点 AfterShip 属于国际 SaaS 的 B2B2C 产品 1.1 SaaS 产品的特点 - 产品定位 - 稳定性影响 - 稳定性承诺 SaaS 2B 和 2C 的差异 国内 SaaS 和国际 SaaS 的技术规划的差异 - 专注和极致 - 规范和标准 - 安全合规 - 全球化 1.2 API 的重要性 API 的稳定性要求避免破坏性的更改。在进行更新或修改时,应 保持对现有功能的支持,以防止影响已部署的应用程序或客户端。 1.3 API 变更面临的挑战 挑战二、新功能缺少调试环境 What Part 2/4 1. 本质 2. 实现效果 2.1 本质 我们以为的 API Versioning v1, v2, v3 就是版本化.. 2.1 本质 向后兼容 - API 的稳定性要求避免破坏性的更改。在进行更新或修改时,应保0 码力 | 28 页 | 2.26 MB | 1 年前3
Golang大规模云原生应用管理实践准可扩展的调度,网络, 存储,容器运行时接口来提供基础设施;通过标准可扩展的声明式资源和控制器来提供运维能力。两层标 准化推进了细化的社会分工,各领域进一步提升规模化和专业化,全面达到成本,效率,稳定性的优化。 4 6 7 2 3 5 1 1 Kubectl plugins 2 Apiserver extension 3 4 5 6 7 Custom resources Scheduler Scheduler extension Custom controller Network plugins Storage plugins 统筹规划, 降低成本 自动化运维, 提升稳定性 非业务逻辑剥离, 提升交付效率 Golang与云原生生态(CNCF) 项目数占比: 214/1512(14.2%) Github star数占比:1265737 / 2458072(51.5%)市值占比: K8s及云原生生态给 开发者提供的是机制 开发者直接使用K8s的失败故事 • 认知成本高:K8s功能强大却没有统一的使用方式,不得不学习复杂的声明字段和各种奇怪的Annotation; • 稳定性不足:没有设置Pod的QoS等级,导致频繁被驱逐,没有设置反亲和性策略,导致节点流量不均; • 扩展效率低:需要负责安装,升级丰富的云原生插件,无法解决插件的依赖,冲突和资源浪费问题; • 运维成本高:Apiserver0 码力 | 23 页 | 7.70 MB | 1 年前3
2.2.2 深入理解BFE• LVS,DPVS,… • 七层负载均衡 • HAProxy,Nginx,Envoy,Traefik, BFE,… BFE为什么基于Go语言 • 研发效率 • 远高于C语言 • 稳定性 • 内存方面错误降低 • 可以捕捉异常 • 安全性 • 缓存区溢出风险降低 • 代码可维护性 • 可读性好 • 易于编写高并发逻辑 • 网络协议栈支持 BFE的短板 • 没有在内存拷贝上做极致优化 代表:Nginx, APISIX Envoy 生态 • 最早用于 Service Mesh • 也可用于网关 • 代表:Envoy Go 生态 • 基于Go语言的生 态积累 • 更好的稳定性和安 全性 • 易于开发扩展功能 • 代表:BFE, Traefik API网关 七层负载均衡 BFE主要设计思想 • 转发模型优化 • 支持多租户 • 引入条件表达式,减少正则表达式使用0 码力 | 26 页 | 1.78 MB | 1 年前3
1.2 基于 Golang 构建高可扩展的云原生 PaaS 平台实现⼤规模交付的部署过程可被验证 PaaS 平台:资源管理,容器编排,基础监控和告警 APM 监控:应⽤诊断,链路追踪,⽇志分析 微服务治理组件 可靠的业务 贴身护航 基础⽀撑 持续保障系统稳定性 只需很少的运维投⼊即可保证系统稳定性 端点⼀站式 PaaS - Erda 第⼆部分 端点 PaaS 发展历程 有状态服务 Job / JobFlow 批计算 流计算 ⽆状态服务 DaemonSet0 码力 | 40 页 | 8.60 MB | 1 年前3
02. Service Mesh落地之后_为sidecar注入灵魂 - 周群力• 被 C 锁定 POD container App container container Dapr • 缺失 Service Mesh 能力 • 运维成本飙升 • 稳定性有待验证 • 稳定性更难保证 MOSN POD container App container container Dapr MOSN 23 Layotto Layotto 架构 240 码力 | 63 页 | 880.85 KB | 1 年前3
GoFrame框架介绍及设计Principle) 不要强迫一个模块依赖它不需要的东西。 模块复用原则竞争关系张力图 模块化设计-单仓包设计 痛点: • 实现相同功能逻辑的模块百花齐放,选择成本过高 • 项目依赖的模块过多,项目整体的稳定性会受到影响 • 项目依赖的模块过多,无从下手是否应当升级模块版本 • 各个模块孤立设计,单独看待每个模块可替换性很高, 开发体系难以建立,开发规范难以统一 模块化设计-模块聚合设计 • 框 D …… Server A Server B Server D Server C …… 痛点: • 实现相同功能逻辑的模块百花齐放,选择成本增加 • 项目依赖的模块过多,项目整体的稳定性会受到影响 • 项目依赖的模块过多,项目无从下手是否应当升级这些模块版本 • 各个模块孤立设计,单独看待每个模块可替换性很高,开发体系难以建 立,开发规范难以统一 改进: • 框架核心维护0 码力 | 37 页 | 8.84 MB | 1 年前3
2.2.5 Go 如何助力企业进行微服务转型• 能够⽀撑的业务规模有限 微服务的优点 • 边界清晰的业务拆分 • 易开发、易理解、易维护 • 技术栈可相对独⽴ • 持续集成、持续部署更容易 • 按需对服务进⾏治理 • 稳定性更容易保障 微服务的缺点 • 增加了系统复杂度 • 数据拆分复杂度 • 难调试、难测试 • 跨服务修改麻烦 • 部署复杂 到底怎么选? • ⾸先看业务 • 其次看团队0 码力 | 25 页 | 4.51 MB | 1 年前3
1.每秒百万数据点 Go 应用监控系统演进vmstorage 没有服务自动发现 ● 兼容性需要关注 ○ MetricsQL 与 PromQL 有差异 总结与展望 第五部分 2023 关键成果 ● 查询性能大幅提升,用户体验好 ● 稳定性大幅提升,几乎没有 OOM ● 资源成本得到降低,至少降低 30% 的成本 2024 优化方向 ● 成本优化 ○ 使用 vmagent 替换 Prometheus ○ 根据实际需求调整指标存储周期0 码力 | 42 页 | 2.32 MB | 1 年前3
Golang在接入层长连接服务中的实践-黄欣每天平均70亿次的推送量 背景—总结 • 业务上核心依赖 • Golang成功的使用案例 目录 • 背景 • 心得 架构 • 整体架构图 架构—接口设计 • 原则 – 扩展性 – 稳定性(最好不用升级) • 解决方法 – Protobuf(golang) – 接口设计分层 • 框架层:模块间通信协议(类似tcp/udp) • 业务层:bytes(类似应用层)留给业务自己定义就好了0 码力 | 31 页 | 1.67 MB | 1 年前3
共 19 条
- 1
- 2













