阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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:214140

评论 1 条评论

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

消息队列存储消息数据的 MySQL 表格

AragornYang

架构训练营 架构实战营

关于OpenHarmony3.1,想随便聊一点

坚果

OpenHarmony 4月月更

Tuxera NTFS Mac2022磁盘读写工具

茶色酒

Tuxera NTFS Mac2022

13W字!2021最新发布互联网大厂高频面试技术点!

爱好编程进阶

Java 面试 后端开发

10个经典场景带你玩转SQL优化

爱好编程进阶

Java 面试 后端开发

在线CSV转多行数据工具

入门小站

工具

学生管理系统详细架构设计文档

哈喽

「架构实战营」

Linux驱动开发-内核定时器

DS小龙哥

4月月更

EasyRecovery15数据恢复软件

茶色酒

EasyRecovery15

设计消息队列存储消息数据的 MySQL 表格

孙强

架构师实战营

HttpClient使用详解与实战一:普通的GET和POST请求

乌龟哥哥

4月月更

为什么选择学习 Sanic 框架

宇宙之一粟

4月月更 sanic

深入解析JVM-Java对象头组成

janyxe

Java JVM Java内存布局 Java对象头 Java对象组成

泛型真的会让程序变慢吗?(Go1.18新特性)

蔡超

golang 编程 编程、 Go 语言

如何从 Java 的 List 中删除第一个元素

HoneyMoose

Android C++系列:C++最佳实践4多重继承与虚继承

轻口味

c++ android 4月月更

残酷春天里的中国科技(三):持续缠绕的科技封锁线

脑极体

【PIMF】OpenHarmony啃论文俱乐部——“六脉神剑”详解

离北况归

OpenHarmony Openharmony啃论文俱乐部 六脉神剑

linux之read命令

入门小站

王者荣耀商城异地多活架构设计

Fingal

架构实战营

一文了解异步编程基础

宇宙之一粟

Python 异步编程 4月月更

下单流程解耦新方案-你知道Spring事件监听机制吗

越长大越悲伤

事件驱动 SpringBoot 2 实战

在线脑图思维导图生成工具

入门小站

工具

AirServer2022苹果mac电脑投屏软件工具

茶色酒

AirServer

15 高可用网站的软件质量保证

爱好编程进阶

Java 面试 后端开发

嵌入式进阶从小白到内核大神学习全攻略(学习路线+学习书籍+练习项目)

简说Linux内核

Linux 驱动开发 嵌入式开发 linux内核、 内核工程师

15 张图 | 深入理解 OpenFeign 远程调用的架构原理

悟空聊架构

Feign 4月日更 悟空聊架构 openfeign 4月月更

残酷春天里的中国科技(二):和全球供应链一起“仰卧起坐”

脑极体

2020年Mybatis常见面试题总结(附答案)

爱好编程进阶

Java 面试 后端开发

Dio —— Flutter 网络请求之王者

岛上码农

flutter 移动端开发 4月月更 跨平台开发 安卓 ios

[Day17]-[动态规划]打家劫舍

方勇(gopher)

LeetCode 数据结构和算法

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