微服务容灾治理## 微服务容灾治理 ### 1. go-zero 稳定性能力概览 经过这么多年大流量服务端架构设计的沉淀,go-zero 在保护服务的稳定性上下足了功夫,不管是 CPU 密集型还是 IO 密集型服务,go-zero 都能很好的保护服务在如下场景不被拖垮或卡死: 远超服务容量的突发大流量 CPU 打满 • 上下游故障或者超时 • MySQL、MongoDB、Redis 等中间件故障或者超负载(典型的是 6113db2ae442f78/p1_1.jpg) 如图,我们从三个方面来保护系统的稳定性: 服务端自适应过载保护 服务端自适应熔断 • 客户端自适应熔断 当然,我们还有自动适配后端服务能力的负载均衡算法,对稳定性进一步保驾护航。本文主要讲解自适应过载保护的原理、场景和表现。 ### 2. 自适应过载保护压测 用过 Windows 的同学对这个界面应该都不陌生,这就是典型 CPU 打 这个模拟 CPU 的代码本身不重要,就不做介绍了。 ### 2.2 压测场景 #### 2.2.1 场景一(不开启过载保护) Timeout: 1000 Middlewares: Breaker: false Shedding: false 服务跑在两核的容器内 - 不开启过载保护 超时1s loops 2 hey -c 200 -z 60m "http://localhost:8888/ping"0 码力 | 13 页 | 1.68 MB | 2 年前3
字节跳动云原生微服务架构原理与开源实践 CloudWeGo 技术白皮书 2024的微服务形态称为蜕变期。 2018年,微服务最基本的东西都有了,但各个方面不成熟,一些综合能力在快速发展。这一时期开启了服务网格的自研,很大程度上推进了微服务的现代化。在服务网格的加持下,诸如动态过载保护、染色调度等能力快速实现并推广,到2020年实现了各项功能的大发展。我们将2018~2020年的微服务形态称为发展期。 2021年后,想要构建一个全新的治理功能不是很容易了,更多的工作是放在了如 具备了白名单、服务身份鉴定的能力 构造了染色调度、就近调度、分片调度等高级能力,解决业务自定义路由、大服务调度需求 构建了动态负载均衡、动态过载保护等自适应稳定性保障,以解决实例能力差异、雪崩等问题 复杂的日志收集判定自动的巡检能力 成熟 细化与推广阶段 构建了条件化调度能力,深度解决业务自定义路由需求 构建自适应限流等能力,提升服务存活率 工程化归因多租户 1.5.1 萌芽期 此阶段的微服务体系并不成型,没有安全、 。请求方在发出请求的时候,按照要求对请求签名,带上验签发送出去。而在服务方收到请求的时候,对验签进行解析,从而判定请求是否来自于合法的请求方。有了严格授权和服务鉴定两个能力,微服务的安全就从服务层面保护起来了。 随着字节体量的增长,底层的机房拓扑逻辑实际上是非常复杂的。为了屏蔽这个复杂性,我们会把相近的AZ在逻辑上打平成同一个DC。但跨AZ毕竟是有成本的,还会带来一些额外的延迟。因为有了服务网格的0 码力 | 68 页 | 24.07 MB | 4 月前3
从高并发到极端并发:百度 Feed 与春晚红包的高可用实践-吴永巍s/7/a/4/9/7a49fd8b2d598618d8439fe3a7db198e/p12_1.jpg) ✓多级异常容忍能力,自适应,层级化自治 · 动态参数,自适应 • 预测,online结合nearline召回 能屈能伸: ✓高效简化版本,实现过载兜底 ✓周边极致优化,无短板 Best Effort模式  动态取舍 多级模型降级 流量调度+cache 过载部分简化兜底 ## Feed信息流:能屈能伸,动态参数自适应 - 不变的: ✓可用机器资源有上限 ✓稳定性不可打折 - 可变的: ✓推荐效果尽可能好(Best Effort) ✓流量、并发等外部因素 - 自动参数调整 全局信息 • 智能监控 • 分布式Trace · 避免误报 • Root cause定位 • 实时处理 • 事件关联 • 自动选择预案 • 止损第一 · 风险最小原则 · 动态自适应策略 • 隔离+多集群调度 · 柔性处理不雪崩 • 架构设计权衡的艺术:自愈 不等于 100% 全自动,可结合人工辅助 ## 除了基本的设计与实现,还有哪些关键工程实践? • 弹性资源供给和动态调度0 码力 | 28 页 | 58.98 MB | 2 年前3
2022年美团技术年货 合辑技术也以模型视角来理解,同样存在模型复杂度越高越容易过拟合的问题,迭代中的一个关键问题不是评估效果的好坏,而是方案是否存在不必要的超参数等信息,能否不断地简化 AutoML 的建模,不断地自动化,自适应适配各类问题。 最后,也特別感謝 Convolution Team、Nomo Team、Getmax Team、Aister Team 等队伍的队友们。 ## 总结 本文基于笔者7次算法比赛的 在所属子图中的贡献度。 · 考虑到 POI 子图是由 Session 构建的,用户的行为序列存在差异,相应地 POI 信息表达在不同用户序列中也存在差异,POI 子图信息应该在不同行为上下文序列中自适应表达。 - 为了捕捉这种差异性,在子图卷积的过程中,我们将中心节点与当前行为序列中其他节点做聚合,从而建模行为上下文场景关联性。 中心节点不仅受到序列和子图影响,也受到当前候选 POI 的影响。 ing),通过距离相似度衡量用户对候选广告的潜在兴趣。在图神经网络的选型上,我们使用带 Attention 结构的 GAT $ ^{[5]} $ ,使得邻居信息的贡献度可以根据其对源节 点的重要性自适应调节,抑制误点击等带来的噪声;使用 Jumping Knowledge Network $ ^{[11]} $ ,根据节点的连接性自助调整其聚合网络范围,避免热门节点由于其广泛的连接性聚合范围过大损失了个性化信息。0 码力 | 1356 页 | 45.90 MB | 2 年前3
美团点评2018技术年货a/35ea1e7659ba76c4ea2f0c80ce7a723a/p23_3.jpg) LruCache 达预设上限,添加数据 线程安全的LruCache在读写操作中,全部使用锁做临界区保护,确保缓存使用是线程安全的。 ## LruCache在美团DSP系统的应用场景 在美团DSP系统中广泛应用键值存储数据库,例如使用Redis存储广告信息,服务可以通过广告ID获取广告信息。每次请 6c4ea2f0c80ce7a723a/p78_2.jpg) 自旋锁在JDK1.4.2中引入,使用-XX:+UseSpinning来开启。JDK 6中变为默认开启,并且引入了自适应的自旋锁(适应性自旋锁)。 自适应意味着自旋的时间(次数)不再固定,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机 在,网络延迟、丢包现象非常严重。 ### 3. 代码及应用 开发语言瓶颈、代码质量及系统架构等都会影响系统性能,常见的代码及应用问题有: - 架构不合理。业务发展超越架构支撑能力而导致系统负荷过载,进而导致出现系统奔溃、响应超时等现象。另外不合理的架构如:单点、无cache、应用混部署、没有考虑分布式、集群化等也都会影响性能。 研发功底和经验不足。开发的App、Server效率和性能较低、不稳定也是常见的事情。0 码力 | 229 页 | 61.61 MB | 2 年前3
领域驱动设计&中台/用状态机封装领域逻辑加微信时烦告知尊姓大名 ## 作用 ➢都以为自己在做正常的事情, 系统却出问题了 ➢ 强制封装保护信息完整性 条件语句?泛化?不重要了 对象  状态保护 逻辑内移 ## 作用 专家原则、可视原则 减少get/set Open 接口变简单0 码力 | 30 页 | 1.75 MB | 2 年前3
TiDB v7.1 中文手册减少网络流量,提升 MPP 查 询性能。 更多信息,请参考用户文档。 • 支持自适应副本读取缓解读热点 #14151 @sticnarf @you06 在读热点场景中,热点 TiKV 无法及时处理读请求,导致读请求排队。但是,此时并非所有 TiKV 资源都已 耗尽。为了降低延迟,TiDB v7.1.0 引入了负载自适应副本读取功能,允许从其他有可用资源的 TiKV 节点 读取副本,而无需在热点 TiKV 4.13.3.6 典型场景 本节以查询规则为例,介绍集成 TiDB 与 ProxySQL 能带来的一些优势。 459 4.13.3.6.1 查询规则 数据库可能会因为高流量、错误代码或恶意攻击而过载。因此,审核 SQL 是必要的。使用 ProxySQL 的查询规 则,你可以有效地应对这些问题,例如通过重路由、改写 SQL 或者拒绝查询等方式。 图 34: proxysql-client-side-rules , 将结果填写至上一步的配置模板中。 • TiKV 进行配置优化 – readpool 线程池自适应,配置 readpool.unified.max-thread-count 参数可以使 readpool.storage 和 readpool.coprocessor 共用统一线程池,同时要分别设置自适应开关。 * 开启 readpool.storage 和 readpool.coprocessor:0 码力 | 4369 页 | 98.92 MB | 2 年前3
Hello 算法 1.0.0b5 JavaScript版哈希表的实用性越高。 · 均匀分布:哈希算法应使得键值对平均分布在哈希表中。分布越平均,哈希冲突的概率就越低。 实际上,哈希算法除了可以用于实现哈希表,还广泛应用于其他领域中。 密码存储:为了保护用户密码的安全,系统通常不会直接存储用户的明文密码,而是存储密码的哈希值。当用户输入密码时,系统会对输入的密码计算哈希值,然后与存储的哈希值进行比较。如果两者匹配,那么密码就被视为正确。 数据完整 暴力搜索的优点是简单且通用性好,无须对数据做预处理和借助额外的数据结构。 然而,此类算法的时间复杂度为 $ O(n) $ ,其中n为元素数量,因此在数据量较大的情况下性能较差。 #### 10.5.2 自适应搜索 自适应搜索利用数据的特有属性(例如有序性)来优化搜索过程,从而更高效地定位目标元素。 · “二分查找” 利用数据的有序性实现高效查找,仅适用于数组。 · “哈希查找”利用哈希表将搜索数据和目标 需要额外的时间和空间开支。  自适应搜索算法常被称为查找算法,主要关注在特定数据结构中快速检索目标元素。 #### 10.5.3 搜索方法选取 给定大小为 n 的一组数据,我们可以使用线性搜索、二分查找、树查找、哈希查找等多种方法0 码力 | 375 页 | 30.68 MB | 2 年前3
Hello 算法 1.0.0b5 Swift版哈希表的实用性越高。 · 均匀分布:哈希算法应使得键值对平均分布在哈希表中。分布越平均,哈希冲突的概率就越低。 实际上,哈希算法除了可以用于实现哈希表,还广泛应用于其他领域中。 密码存储:为了保护用户密码的安全,系统通常不会直接存储用户的明文密码,而是存储密码的哈希值。当用户输入密码时,系统会对输入的密码计算哈希值,然后与存储的哈希值进行比较。如果两者匹配,那么密码就被视为正确。 数据完整 暴力搜索的优点是简单且通用性好,无须对数据做预处理和借助额外的数据结构。 然而,此类算法的时间复杂度为 $ O(n) $ ,其中n为元素数量,因此在数据量较大的情况下性能较差。 #### 10.5.2 自适应搜索 自适应搜索利用数据的特有属性(例如有序性)来优化搜索过程,从而更高效地定位目标元素。 · “二分查找” 利用数据的有序性实现高效查找,仅适用于数组。 · “哈希查找”利用哈希表将搜索数据和目标数据建立为键值对映射,从而实现查询操作。 需要额外的时间和空间开支。  自适应搜索算法常被称为查找算法,主要关注在特定数据结构中快速检索目标元素。 #### 10.5.3 搜索方法选取 给定大小为 n 的一组数据,我们可以使用线性搜索、二分查找、树查找、哈希查找等多种方法0 码力 | 376 页 | 30.70 MB | 2 年前3
Hello 算法 1.0.0b5 Python版哈希表的实用性越高。 · 均匀分布:哈希算法应使得键值对平均分布在哈希表中。分布越平均,哈希冲突的概率就越低。 实际上,哈希算法除了可以用于实现哈希表,还广泛应用于其他领域中。 密码存储:为了保护用户密码的安全,系统通常不会直接存储用户的明文密码,而是存储密码的哈希值。当用户输入密码时,系统会对输入的密码计算哈希值,然后与存储的哈希值进行比较。如果两者匹配,那么密码就被视为正确。 数据完整 暴力搜索的优点是简单且通用性好,无须对数据做预处理和借助额外的数据结构。 然而,此类算法的时间复杂度为 $ O(n) $ ,其中n为元素数量,因此在数据量较大的情况下性能较差。 #### 10.5.2 自适应搜索 自适应搜索利用数据的特有属性(例如有序性)来优化搜索过程,从而更高效地定位目标元素。 · “二分查找” 利用数据的有序性实现高效查找,仅适用于数组。 · “哈希查找” 利用哈希表将搜索数据和目 需要额外的时间和空间开支。  自适应搜索算法常被称为查找算法,主要关注在特定数据结构中快速检索目标元素。 #### 10.5.3 搜索方法选取 给定大小为 n 的一组数据,我们可以使用线性搜索、二分查找、树查找、哈希查找等多种方法0 码力 | 361 页 | 30.64 MB | 2 年前3
共 562 条
- 1
- 2
- 3
- 4
- 5
- 6
- 57













