ebay增强可用性的4个原则(1)

简介: ebay增强可用性的4个原则(1)

你可能听说过英国《卫报》。有可能从诸如爱德华·斯诺登泄密事件或者2011年与罗伯特·默多克的国际新闻相关的电话窃听丑闻中听说过它。你所不知道的是它的在线和技术团队获得过数个奖项,被许多圈子视为英国最好的产品团队。


2008年的情况有些奇怪,《卫报》运营在一套企业级软件系统上,这套复杂的代码又分成数个服务,这些服务与一个单体数据库耦合在一起。系统运行了相当长的一段时间并且平安无事,但是随着互联网的增长,你永远都不知道未来会发生什么事情。如果我们推出一篇确实重磅的文章,流量就可能达到一天内以前峰值的一倍以上。问题是当有些部分出现问题时,所有的其他部分都开始出故障。这好像整个产品共享一个巨大的熔丝——当熔丝熔断时,整个系统都会因此失败。

“坦尼娅·科德里向其eBay的前同事们求助,作为增长咨询公司AKF Partners公司,他们现在帮助那些需要这方面指导的客户。在AKF的帮助下,我们开始重新设计网站,增加故障隔离区或泳道。基本上,相当于把熔丝盒中的单根熔丝变成了多根。在任何时候,如果网站的一部分出现问题,只有那个部分会出故障。这种故障隔离办法让软件和数据库子系统部署在独立的泳道里,每个泳道都完全独立于其他的泳道。网站的不同内容区域由不同的泳道提供服务。如果一个泳道失败,比如天气版面,我们可以继续提供时效性强的新闻。更近一步,我们可以在每个不同泳道的可用性方面投入不同的时间和精力。像新闻之类的泳道可以有比其他重要性低的(如天气)泳道显著不同的冗余解决方案。在过去的解决方案中,每个部分都有同样的可用性以及相同的成本;现在我们可以让新闻有更高的可用性而不必大幅度提高成本。


格兰特说道,“回想2008年,你会看到责任编辑总在关注网站是否能应对大流量新闻。而今,刚刚有1400万唯一的读者阅读了201511月恐怖分子袭击巴黎的报道。现在的责任编辑再也不顾虑在线系统,他们知道该系统有这个能力。”


“受到这种关注的并不仅仅是网站。当在互联网上使用一款产品时,要依靠一定数量的工具以及独特的基础设施。”格兰特总结说,“现在,我们把相同的概念应用到监控和代码发布等地方。每个关键业务都应该有自己的泳道,这样某个工具的故障就不会导致其他工具和监控的故障”。


对故障隔离和故障控制的需求并不局限于格兰特与《卫报》。根据我们的经验,大多数的技术团队都非常擅长,并且非常专注于交付能正常工作的系统。此外,大多数工程师都明白不可能研发出完美无缺的解决方案,因此,不可能构建永远不会故障的系统。即使考虑到了这一点,几乎没有工程师愿意花费大量时间来勾勒和圈定任何给定故障的“爆炸半径”。


在我们的业务中,可用性和可扩展性具有同等重要性。可用性不高的产品确实不需要扩展,当需求来临时不能扩展的网站也不会是高可用的。因为系统故障无法避免,所以我们不得不花时间来控制故障对系统的影响。本章提供了几种限制故障影响的方法,总之,减少故障的频率,提高产品的整体可用性。


微信图片_20220123182919.jpg

规则1——用“泳道”隔离故障

内容:在设计中实现故障隔离区或泳道。

场景:为可扩展性开始拆分持久层(例如数据库)或服务时。

用法:沿Y或Z轴拆分持久层和服务,禁止故障隔离的服务和数据间同步通信或访问。

原因:提高可用性和可扩展性。减少发现和解决故障的时间。缩短上市时间和成本。

要点:故障隔离包括根除故障隔离域间的同步请求,限制异步调用和处理同步调用失败,以及避免泳道之间的服务和数据共享。

 

在拆分服务和数据方面的术语丰富而混乱,而且有时候相互矛盾。不同组织经常使用一些词,如豆荚(pod)、池(pool)、集群(cluster)和分片(shard)。在同一组织内这些术语经常交替使用加剧了这种困惑。在某个场景,团队可以使用分片来确定服务和数据的分组,而在另一场景下,它仅意味着在数据库中分割数据。鉴于现有术语的混淆和差异,在实践中我们创造了泳道一词,尝试打造故障隔离的重要概念。一些客户开始采用这个词来表示为实现故障隔离而在生产中按照服务或客户拆分,它最重要的贡献是在设计领域。表9-1是常用术语的列表,它包括对这些术语最普通的描述以及何时及如何在实践中交替使用的说明。


微信图片_20220123182939.jpg


在我们看来,这些术语中最重要的区别是大多数都集中在分工或事务上,但只有一个聚焦在控制故障传播上。而池、分片、集群和豆荚指的是如何在生产环境中实施或如何拆分或扩展客户或者服务,游道是围绕设立故障隔离域提出的架构概念。故障隔离域是这样的一个域,当物理或逻辑服务因故障无法正常工作时,无论该故障是响应缓慢还是根本无法响应,唯一受到影响的是那些在故障域中的服务。泳道通过故障域把分片和豆荚的概念拓展到了服务的前门——数据中心的入口。在极端情况下,它意味着按照功能提供独立的网络、应用和数据库服务器(或叫故障隔离区)。在本质上,泳道旨在提高可扩展性和可用性,而不仅仅是一个可以扩展事务处理的机制。


我们借用CSMA/CD(带有冲突检测的载波侦听多路存取,通常称为以太网)中的概念,其中故障隔离域相当于冲突域。在全双工交换机之前,为了抵消碰撞的影响,以太网段控制碰撞以确保所有连接的系统感觉不到影响。我们觉得用“泳道”这个术语来描述故障隔离是一个非常好的比喻,泳道是在游泳池中设置的隔离线,有助于游泳选手在游泳过程中避免相互干扰。与此类似,不同组别的客户或者功能之间存在隔离带,不允许跨越不同组别进行同步事务处理,有助于确保一条泳道上的故障不会对其他泳道上的用户操作产生不利的影响。


image.png

相关文章
|
5月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
394 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
11月前
|
人工智能 自然语言处理 测试技术
在PyCharm中提升编程效率:通义灵码(DeepSeek)助手全攻略(新版)
最近小栈在PyCharm中使用了阿里的 通义灵码 插件还不错,本次就再分享一个好用的AI代码助手,让编码过程更加方便!
4269 17
|
12月前
|
Web App开发 安全 Linux
【独家揭秘2025】VMware Workstation Pro虚拟机:免费安装教程大放送,一键解锁操作系统模拟神器!
VMware Workstation Pro 是由威睿(VMware)公司开发的一款功能强大的桌面虚拟化软件,允许用户在同一台物理计算机上同时运行多个操作系统,如Windows、..
1272 2
【独家揭秘2025】VMware Workstation Pro虚拟机:免费安装教程大放送,一键解锁操作系统模拟神器!
|
消息中间件 大数据 Kafka
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
本文深入探讨了消息队列的核心概念、应用场景及Kafka、RocketMQ、RabbitMQ的优劣势比较,大厂面试高频,必知必会,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka、RocketMQ、RabbitMQ 的优劣势比较
|
存储 Ubuntu 安全
ROS2教程02 ROS2的安装、配置和测试
本文是关于ROS2(机器人操作系统2)的安装、配置和测试的教程。内容包括使用一键安装脚本快速安装ROS2 Humble版,手动安装步骤,设置语言环境、添加软件源、更新软件包、安装ROS2桌面版和开发工具,配置ROS2环境,创建工作空间,配置ROS2领域以避免网络冲突,以及如何删除ROS2。此外,还包括了测试ROS2是否安装成功的两个案例:基本的Topic通信测试和使用Turtlesim演示程序。适用于Ubuntu 22.04操作系统。
3699 1
ROS2教程02 ROS2的安装、配置和测试
|
机器学习/深度学习 数据可视化 前端开发
使用Stream实现Web应用,使用YOLOv8模型对图像进行目标检测为例。
使用Stream实现Web应用,使用YOLOv8模型对图像进行目标检测为例。
469 1
vscode 生成项目目录结构 directory-tree 实用教程
vscode 生成项目目录结构 directory-tree 实用教程
2154 2
|
SQL 存储 关系型数据库
【最佳实践】使用 Elasticsearch SQL 实现数据查询
如何使用 Elasticsearch SQL 来对我们的数据进行查询。
6730 0
【最佳实践】使用 Elasticsearch SQL 实现数据查询
QT 5.14.2版本 MAC环境安装部署流程
QT 5.14.2版本 MAC环境安装部署流程
1425 0