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

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

故障隔离泳道的好处已经超越了通过故障隔离提高可用性的想法。因为泳道把客户或者把跨客户共享的功能做了拆分,当出现故障时,可以更快地定位问题来源。从网络服务器到持久层,如果已经对客户沿Z轴做了拆分,影响单个客户的唯一故障将会很快被隔离在那条泳道里的那组客户。你会对要找的缺陷或问题(由数据或操作触发)了然于胸,因为对于游道中的客户它是唯一的。如果已经沿Y轴进行了拆分,而“购物车”泳道出现了问题,你马上就会知道问题是与构成该泳道的代码、数据库或者服务器相关。事件检测与解决以及问题的定位和解决都明显受益于故障隔离。


故障隔离的其他好处还包括更好的可扩展性、更快的上市时间以及更低的成本。因为我们专注于系统分区,开始考虑水平扩展,所以可扩展性提高。如果通过Y轴隔离泳道,那么我们可以把代码库也进行拆分,这样可以更有效地使用工程师。因此,我们获得到了更大的工程吞吐量,每个单位开发的成本也更低。如果吞吐量越来越大,显然产品推向市场的速度加快。最终所有这些好处使我们能够处理“预期但意外之外的事情”:那些知道迟早会发生但不清楚其后果的事情。换句话说,我们知道事情将要发生,只是不知道会发生什么或何时会发生。故障隔离使我们能够更优雅地处理这些故障。


微信图片_20220123183049.jpg


   讨论了为什么应该为产品建立泳道或设置故障隔离,现在我们把注意力转向更重要的问题,如何实现故障隔离。依靠四条原则来定义和帮助我们设计泳道。第一个原则是泳道之间什么都不共享。通常不包括网络组件,如网络入口的边界路由器和一些核心路由器,但包括为故障隔离服务专用的交换机。经常共享一些其他的设备,诸如非常大的存储区域网络或者小网站中的负载均衡器。在任何可能的场合,而且在特定成本范围内,试着尽量不要共享。永远不要共享数据库和服务器。因为泳道的部分定义不共享,所以服务器和数据库共享一直是确定泳道边界所在的起始点。鉴于网络设备和存储子系统的成本问题,有时在系统增长的初期可以考虑跨越不同的泳道。


泳道的第二个原则是在泳道之间不进行同步调用。因为同步调用会捆绑服务,所以被调用服务的失败会蔓延到所有其他以同步和阻塞方式调用的系统。因此,这会违反故障隔离的概念,如果部署在一条泳道里的服务失败可能会导致部署在另一条泳道里的服务失败。


第三条原则限制泳道之间的同步调用。比起同步调用,异步调用失败蔓延到其他泳道的机会很小,但仍然有机会降低系统可用性。突然激增的请求可能使某些系统变慢,例如拒绝服务攻击后发布消息。这些消息铺天盖地阻塞队列,开始占满TCP端口,如果实施不当甚至导致同步请求的数据库处理停滞。因此,我们试图限制跨越泳道界限的事务处理数量。


泳道的最后一个原则是,当绝对必要时如何实现跨越泳道边界的异步传输。简单地说,每次要跨越泳道进行异步通信时,我们需要对事务处理有“不在乎”的能力。在某些情况下,事务处理可能会超时,可以忽略它。我们可能只是“通知”另一条泳道有些行动,并不在乎是否得到回应。在所有情况下,我们应该实现逻辑以实现在手动自动或两者兼有的基础上“断开”或“关闭”通信。监控人员通过系统监控发现故障(手动开关)应该有能力关闭通信,当情况不好时,系统应该能感知并停止(自动开关)通信。


回想一下本书的前言,还记得里克·达尔泽尔提到过亚马逊吗?亚马逊的第一次拆分是把商店功能从订单履行功能中分离出来。如果由于某种原因,亚马逊店面失败,亚马逊可以继续履行已收到的订单。如果订单履行系统出问题,商店可以继续接收订单并把它们放入队列。显然,两个子系统需要互相通信,但从客户角度来看不是“同步”。工作以履行订单的形式从前端传到后端,以订单状态更新的形式从后端传向前端。这种拆分提供了两个好处,故障隔离和更高水平的可扩展性,因为每个子系统都可以独立扩展。


微信图片_20220123183116.jpg


   在我们希望故障隔离,但需要同步通信或访问另一个数据源的情况下怎么办?前一种情况下,可以复制需要的服务,然后把它配置在泳道里。支付网关就是这种方法的一个例子。如果我们沿着Z轴按客户划分泳道,可能不希望每个客户的泳道为了某个服务(如结账)而同步(阻塞)调用单一的支付网关。我们可以简单地实施N个支付网关,其中N是客户细分度或客户游道的数量。


如果有一些共享信息需要访问每个泳道,如登录凭据,应该怎么办?也许我们已经把认证和登录沿Y轴做了拆分,但我们需要在只读基础上从每个客户(Z轴)的泳道上取得相关的凭据。我们经常使用数据库的只读副本来满足这样的要求,把只读副本放在每个泳道中。许多数据库天然提供这种复制技术,甚至允许把数据切成小片,这意味着我们不需要在每个泳道中复制100%的客户数据。有些客户为了只读目的,把相关的信息缓存在相应泳道的分布式对象缓存中。


我们经常遇到的一个问题是如何在虚拟化服务器世界中实施泳道。虚拟化为故障隔离增加了新的维度——除了物理故障之外的逻辑(或虚拟)维度。如果实现虚拟化主要是为了把较大的机器分解成更小的机器,那么应该继续把物理服务器作为泳道的边界。换句话说,不要把来自于不同泳道的虚拟服务器放在同一物理设备上。然而,我们的一些客户常年有各种不同需求特性的产品,他们依靠虚拟化作为横跨所有产品的弹性容量。在这种情况下,我们试图限制混合在虚拟服务器上的泳道数量。理想情况下,把整个物理服务器用在一个游道上,而不是在该服务器上混合几个泳道。


相关文章
|
机器学习/深度学习 人工智能 自然语言处理
四张图片道清AI大模型的发展史(1943-2023)
现在最火的莫过于GPT了,也就是大规模语言模型(LLM)。“LLM” 是 “Large Language Model”(大语言模型)的简称,通常用来指代具有巨大规模参数和复杂架构的自然语言处理模型,例如像 GPT-3(Generative Pre-trained Transformer 3)这样的模型。这些模型在处理文本和语言任务方面表现出色,但其庞大的参数量和计算需求使得它们被称为大模型。当然也有一些自动生成图片的模型,但是影响力就不如GPT这么大了。
5452 0
|
安全 Go 数据安全/隐私保护
免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较
免费升级到 iOS 17 Developer Beta:官方Apple Store升级方案与爱思助手方法比较
1421 0
|
监控 安全 调度
红队视角下的Windows ScheduleTask
红队视角下的Windows ScheduleTask
1113 0
|
19天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32198 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4721 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6821 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4780 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5679 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
4273 0