写点什么

Atlassian 使用边车和高容错设计将可用性提升到 6 个 9 以上

  • 2022-10-18
    北京
  • 本文字数:1311 字

    阅读完需:约 4 分钟

Atlassian使用边车和高容错设计将可用性提升到6个9以上

Atlassian 工程播客最近分享了其租户上下文服务(Tenant Context Service,TCS)如何让可用性超过了99.9999%。Atlassian 通过实现高度自治的客户端边车实现了这种高可用性,能够主动保护自己免受 AWS 区域故障的影响。边车通过并发地查询多个 TCS 服务并确保请求在内部是完全隔离的来实现这一目标。


TCS 是 Atlassian 的一项关键基础设施服务,在大多数 Atlassian 云产品的每个 Web 请求路径中都会被多次调用。它提供了“租户元数据”的高可用性、读优化的视图。2022 年 7 月,TCS 每天处理 320 亿次请求,峰值请求率为每秒 586308 次。总体可用性超过了 99.999%,最高吞吐量的客户端在高峰期的平均响应时间约为 11μs。


为了实现这些指标,Atlassian 的工程师采用CQRS模式设计了 TCS。当“租户元数据”目录发生变化时,TCS 将“租户元数据”的转换视图导入AWS DynamoDB。此外,TCS 广泛使用 L1 内存缓存,以及基于 SNS 的缓存失效广播系统。与客户端应用程序一起部署的边车作为 Web 服务器缓存的远程扩展,并通过与多个 TCS 部署通信来提高可用性。下图描绘了 TCS 的架构。



来源:https://www.atlassian.com/engineering/atlassian-critical-services-above-six-nines-of-availability


由于边车的缓存命中率通常超过 99.5%,无法命中的情况相对较少。因此,TCS 边车会在缓存未命中时抢先发送重复的请求——一个发送给选定的“主”父 TCS,一个发送给随机的辅助 TCS。这种方法的一个好处是,边车将无缝地处理父节点或网络故障。它不需要检测失败的请求,因为“后备”请求已经在进行中。


Atlassian 的主要开发者 David Connard 解释了这种方法的细节。


虽然这种逻辑可以很好地应对快速失败的场景,但还需要为缓慢失败的场景做好计划,这通常是系统要处理的最成问题的故障模式,此时关键要进行一些适当的隔离。对于我们来说,适当的隔离意味着任何单亲 TCS、AWS 服务或整个 AWS 区域的故障都不能影响我们的边车在不同区域运行的能力。


为了实现这种高水平的隔离,Atlassian 工程师使用独立的任务队列和线程池来处理请求,对于每个父 TCS 来说是完全隔离的(甚至连 HTTP 连接池实例都是如此)。他们通过减少请求负载(有选择地丢弃请求)和动态调整线程池(限制延迟较低的 TCS 部署的线程池的大小)来防止因任务排队并消耗额外的资源导致的慢故障场景。


在服务器端,失效广播系统进行跨区域调用,发布失效消息。由于跨区域延迟明显较高,可能会影响失效广播。Connard 解释了工程师如何保护 TCS 免受这个问题的影响。


不能让跨区域停机(例如某个目标区域中的AWS SNS 故障)延迟或阻止从该 TCS 服务器向其他区域发送失效广播。为了实现这种隔离,TCS 服务器失效广播系统将所有失效广播数据和处理线程复制到单独的特定于区域的队列中。然后,隔离的工作线程仅从其中一个队列发布到每个目标区域。向一个目标区域发送广播的速度减慢或完全失败只会减缓该区域的处理速度,不会影响向其他目标区域发布消息。


除了提高系统的可用性外,Atlassian 的工程师还采用了多种方法来伸缩系统,包括使用SNS扇出模式、包含边车网络监控功能的自定义请求负载平衡策略,以及采用 gRPC 作为 HTTP API 的低延迟替代方案。


原文链接

Atlassian Exceeds 99.9999% of Availability Using Sidecars and Highly Fault-Tolerant Design

2022-10-18 09:214266

评论 1 条评论

发布
用户头像
对于专有词汇,直接写 sidecar 可能会更好。"边车"有一些懵
2022-10-20 09:49 · 广东
回复
没有更多了
发现更多内容

“区块链新闻编辑部”: 从“云媒体”到“链媒体”的现实跨越

CECBC

区块链技术

这是阿里技术专家对 SRE 和稳定性保障的理解

阿里巴巴云原生

项目管理 运维 云原生 安全 监控

nodejs的调试debug

程序那些事

debug 调试 nodejs 程序那些事 程序调试

关于垃圾收集器你了解多少?一文总结七大垃圾收集器

Java鱼仔

Java JVM 垃圾收集

进大厂必看!拼多多大佬总结的10万字Springboot经典学习笔记

武哥聊编程

Java springboot 28天写作

记录关于写作的两个小想法

JiangX

28天写作

Flink可靠性的基石-checkpoint机制详细解析

五分钟学大数据

大数据 flink

教你用Java字节码做点有趣的事

比伯

Java 编程 架构 程序人生 计算机

HDFS是如何设计架构的?

大数据老哥

创业失败启示录|雨季后的明媚阳光

阿萌

28天写作 创业失败启示录

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

Java架构之路

Java 程序员 架构 面试 编程语言

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

Java架构之路

Java 程序员 架构 面试 编程语言

5年Java经验不会源码被拒,苦学这些Spring源码笔记后,面试不再慌

Java架构之路

Java 程序员 架构 面试 编程语言

程序员入职新公司,只需8步,直接凸显出个人价值

Java架构师迁哥

WebPack | Loader处理非JavaScript模块机制详解

梁龙先森

JavaScript 大前端 webpack 28天写作

Java基础--2021Java面试题系列教程--大白话解读

JavaPub

Java 面试 javapub

壁纸收藏

小马哥

摄影 七日更

Libra演进与数字货币国际化

CECBC

区块链

开发质量提升系列:问题登记列表(下)

罗小龙

生产事故 28天写作 解决思路

KubeVela:标准化的云原生平台构建引擎

阿里巴巴云原生

容器 云原生 k8s API OAM

Dubbo 3.0 前瞻之对接 Kubernetes 原生服务

阿里巴巴云原生

容器 运维 云原生 k8s dubbo

模块分解 - 微服务架构认识与思考

raox

精彩的封面 | 视频号 28 天(20)

赵新龙

28天写作

“复制”马斯克(一):全世界都会为“自大狂”让路吗?

脑极体

28天瞎写的第二百三十天:DIY 键盘的故事

树上

28天写作 机械键盘 GH60

一文搞懂“技术债”

李忠良

28天写作

原来酸奶是这个味道,真香!「幻想短篇 20/28」

道伟

28天写作

三张图解释静态NAT、动态NAT、PAT

9个REST API设计的基本准则

devpoint

APi设计 RESTf

CSS(六)——用CSS设置图像效果

程序员的时光

程序员 大前端 七日更 28天写作

产品训练营-第五课

Geek_娴子

Atlassian使用边车和高容错设计将可用性提升到6个9以上_软件工程_Eran Stiller_InfoQ精选文章