再谈 eBay 的扩展性最佳实践

2023-11-01

 

很多人都觉得 eBay 在 QCon (北京) 上的技术讲座不错,但对我来说,其实冲击力没那么大了。eBay 一两年前就是这个 PPT 。不过还是比 Amazon 的 Jeff Barr 强了很多,以后要是开个什么会,你把 Jeff Barr 请来还讲那个销售文档,估计自己都不好意思。

不过,eBay 这次的PPT 总算还是有点更新的。

1)数据分片(Partition Everything)

说是分区(Partition),这里不能简单等同于 Oracle 的分区,理解成分片(Sharding)就好啦。可以参考一下我以前写的科普小文:开源数据库 Sharding 技术 (Share Nothing)。这里要强调一下的是,分片是在数据量的确有规模的时候才适合进行,如果单节点足以应付,那么还是不要冒进。

从分片的模式上,eBay 主要根据功能切分(Functional Segmentation)和水平分割(负载均衡考虑),作为推论,所有会话都是无状态性的。

2)异步处理(Asynchrony Everywhere)

其实对于任何网站来说,过度追求"同步"化设计还是比较糟糕的做法。以用户能观察到的数据为视角进行设计,中间可以最大限度用异步来完成。

eBay 的举例的模式有两个,一个是事件队列(Event Queue),另一个是信息分发(Message Multicast)。前者基本上是个生产者--消费者的模型。后者主要用在搜索的架构上。

eBay_message_multicast.png

注意到图中的消息总线,这才是 eBay 整个架构中的动脉,估计轻易不会批露技术细节

3)自动化(Automate Everything)

这里的自动化举了两个例子,一个是针对运维方面的,另外举了关于机器学习的东西,这是演讲者 Randy Shoup 的强项所在。

eBay 的自动化,在一年前的另一篇文章里可以窥测一点东西。只是这篇文章当初没有被更多人重视,参见:eclipse at eBay。可以看到 eBay 能在自动化方面做得这么好(起码敢出来讲)不是一朝一夕之功。

4)故障检测与回溯(Remember Everything Fails)

更好的失败检测机制: 监控每天超过 2TB 的日志,根据日志中的相关事件得出判断或者预警。这个看起来简单,但实现起来还是需要一点技巧和策略的,重要的是,需要不断根据结果的反馈去改进。

完美回滚: 任何服务都通过服务配置中的标记来识别,无痛回滚。(个人感觉这个非常有难度,尤其是升级的时候)

优雅降级(Graceful Degradation):能够相对容易的对应用标记"Marks down(下线)"

5)拥抱不一致性(Embrace Inconsistency)

举了 CAP 原则,程立将其形象描述为帽子戏法,非常准确。说起一致性,自从 Amazon CTO Werner Vogels的 Eventually Consistent 一出,基本上不需要我废话了,这就是事务处理的九阴真经,大家回家慢慢参详好了。

eBay 也有自己的绝对准则: 绝对没有分布式事务(两阶段提交), 通过状态机与操作顺序最小化不一致性,通过异步事件(消息总线?)达到最终一致性。

--EOF--

另外小道消息:Amazon CTO Werner Vogels 可能会参加六月份在杭州举办的侠客行大会。

以前的老帖子:eBay 的Scalability最佳实践

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

再谈 eBay 的扩展性最佳实践 的相关文章

  • 如何让 RabbitMQ 具有可扩展性?

    我尝试测试RabbitMQ 但发现rabbitmq存在一些问题 如果我创建了一个包含 3 个节点的集群 我无法发布 交付超过 6000 s 另一方面 如果我使用一个节点 我可以发布 交付直到 25000 s 这意味着 添加的节点越多 性能就
  • 自动完成的算法?

    我指的是当用户在 Google 中输入搜索词时用于提供查询建议的算法 我主要感兴趣的是 1 最重要的结果 最有可能的查询而不是任何匹配的结果 2 匹配子串 3 模糊匹配 我知道你可以使用 Trie 或广义 trie 来查找匹配项 但它不能满
  • AWS EC2 中的 MySQL - 它如何扩展?

    当您不再只使用一个数据库实例时 使用 EC2 时的最佳实践是什么 如果第一个实例是主实例并且您正在启动从属实例 那么它们需要扫描事务日志并在从属实例可用之前使自己保持最新状态 对吗 如果主人跑了一段时间很忙 这可能会花很长时间 对吗 在 E
  • Web 应用程序的可扩展性和性能、方法?

    您使用了哪些方法和技术来成功解决网站的可扩展性和性能问题 我是一名 ASP NET Web 开发人员 正在探索使用 WCF 和 SQL 集群进行 NET 远程处理 并且很好奇存在哪些其他方法 例如 云 在哪种情况下 您会应用各种方法 例如
  • 为什么 MongoDB 配置服务器必须只有一个或三个?

    在阅读了 MongoDB 分片架构的官方文档后 我还没有找到为什么需要一到三个配置服务器 而不是其他数量 The 有关配置服务器的 MongoDB 文档 https docs mongodb org v3 0 core sharded cl
  • 如何将聚合数据添加到 Apache Spark 中的原始数据集中?

    我试图弄清楚如何聚合数据集中的数据 然后使用 Apache Spark 将结果添加到原始数据集 我已经尝试了 2 个我不满意的解决方案 我想知道是否有一个我没有看到的更具可扩展性和更高效的解决方案 以下是输入和预期输出数据的非常简化的示例
  • Azure 中的 SignalR 横向扩展适用于高频场景

    根据我对 Azure 中 SignalR 横向扩展的阅读 推荐的方法是使用 Azure ServiceBus 作为背板 但同时使用背板进行高频消息传递也存在限制 就限制章节而言SignalR 中的横向扩展 http www asp net
  • 编写可扩展网站的技术

    我是网站可扩展性领域的新手 您能否向我建议一些使网站可扩展到大量用户的技术 在重负载下测试您的网站 监控所有统计数据 寻找瓶颈 修复瓶颈 返回1 祝你好运
  • Web 服务超时的最佳实践[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否有任何文章 书籍定义了 WS 超时的设计上限 您是否在服务器上超时或也建议客户端特定超时 是否有一个常见的最佳实践 例如 永远不要
  • 服务器端处理与客户端处理+ajax?

    寻找一些一般性建议和 或想法 我正在创建一个我认为更像是一个网络应用程序而不是网页的东西 因为我想让它像一个 Gmail 应用程序 您可以让页面整天打开 同时将更新 推送 到页面 对于有兴趣我正在使用彗星编程技术 我以前从未创建过如此丰富的
  • 使用 Hadoop,我可以在未运行数据节点的计算机上创建任务跟踪器吗?

    所以这是我的情况 我有一个使用 HBase 的 MapReduce 作业 我的映射器接受一行文本输入并更新 HBase 我没有减速器 并且我没有将任何输出写入光盘 我希望能够在预期利用率激增时向集群添加更多处理能力 然后在利用率下降时缩减处
  • 无法启动mongos

    我正在尝试设置简单的分片 在没有任何副本集的单个主机上 但是我无法继续下去 因为当我尝试启动 mongos 时会发生这种情况 C gt mongos configdb localhost 27010 port 27011 I get Bad
  • 将可扩展性设计到应用程序中

    这句话是什么意思 将可扩展性设计到应用程序中 是否存在可以使应用程序更具可扩展性的设计模式 这个问题主要针对 Web 应用程序或基于 SOA 中间件的应用程序 当我想到 大规模应用程序 时 我想到了三个截然不同的事情 将在大型横向扩展集群
  • 真正的缩放是什么?

    我听说人们说他们已经制作了一个可扩展的 Web 应用程序 真正的缩放是什么 开发人员可以采取哪些措施来使其应用程序具有可扩展性 开发人员在扩展过程中会考虑哪些因素 有关使用 ASP NET 和 SQL Server 扩展 Web 应用程序的
  • Solrcloud 多核配置

    我有一个独立的Solr具有 4 个不同内核的实例使用嵌入式 Jetty 服务器运行良好 我为 v4 10 3 配置了核心 但自从我迁移到 v5 1 后 一切似乎都工作正常 无需任何更改 在投入生产之前 我需要将其设置为Solrcloud 安
  • 如何在ArangoDB中设置集群和分片?

    我想在arangoDB中使用分片 我已经制作了协调器 DBServers 如文档2 8 5中所述 但仍然有人可以详细解释它 以及我如何能够在分片之后和之前检查查询的性能 可以测试您的应用程序对于本地集群 所有实例都在一台机器上运行吗 htt
  • 我如何了解有关网站分片用户数据的更多信息?

    我有兴趣在多个服务器上分割我的网站用户数据 例如 用户将从同一位置登录 但登录脚本需要弄清楚用户数据驻留在哪个服务器上 因此 登录脚本将在主注册表中查询该用户名 并且可能会返回该用户名位于服务器 B 上 然后 登录脚本将连接到服务器 B 并
  • 本地 SQLite 与远程 MongoDB

    我正在设计一个新的 Web 项目 在研究了一些旨在可扩展性的选项后 我提出了两个数据库解决方案 为可扩展方式精心设计的本地 SQLite 文件 每个 X 用户一个新的数据库文件 因为写入将取决于用户内容 不存在跨用户数据依赖性 远程 Mon
  • 为什么 NoSQL 比 RDBMS 更擅长“横向扩展”?

    我在a中读过以下文字技术博客 http tekedia com 12083 nosql database advantages and disadvantages 讨论NoSQL的优缺点 多年来 为了提高数据库服务器的性能 数据库管理员不得
  • JSON 解析器从大型 JSON 文件中逐条读取

    我有一个巨大的 JSON 文件 1GB 它基本上是以下格式的对象数组 x y p q x1 y1 p1 q1 我想解析这个文件 这样所有的数据都不会加载到内存中 基本上我想获取例如 数组中的前 1000 个对象进行内存处理 然后将接下来的

随机推荐

  • 点云梯度下采样

    点云下采样又称点云精简 均匀网格下采样 均匀网格下采样法是建立在空间包围盒精简算法之上对散乱点云快速简化的一种算法 其基本思想为 根据点云数据的密度确定最小三维网格 体素 的边长为 a b c a b c a b c 计
  • 2022春招前端最新面试题分享(途牛旅游网)

    途牛旅游网 公司及岗位信息 公司 途牛旅游网 岗位 前端校招 地点 南京 薪资 16k 14薪 面试结果 通过 一面 2022 04 26 自我介绍 介绍一下实习做过的项目 难点 收获 体会 TCP和UDP的区别 TCP如何保持可靠 TCP
  • Java多线程中join()方法和sleep()方法的区别

    这里写目录标题 Java多线程中join 方法和sleep 方法的区别 结论 Java多线程中join 方法和sleep 方法的区别 1 先声明MyThread子类继承Thread类 public class MyThread extend
  • K近邻算法&计算距离&scikit-learn数据集获取——机器学习

    一 K近邻算法 1 什么是K近邻算法 k Nearest Neighbours KNN 简介 最近邻算法是一种分类算法 1968年由Cover和Hart提出 应用场景有字符识别 文本分类 图像识别等领域 该算法的思想 一个样本与数据集中的k
  • java读取文件内容

    直接上代码 两个类 一个工具类 一个测试类 工具类代码 package org example study util import lombok extern slf4j Slf4j import org apache commons la
  • oVirt engine安装手册

    oVirt Engine安装需求 硬件需求 Resource Minimum Recommended CPU 双核CPU 四核或者多个双核CPU 内存 4G内存 不安装warehouse并且内存不被其他程序使用 16G 硬盘 25G可用空间
  • selenium 下载webdriver浏览器驱动

    自动化测试要自动调用浏览器时需要用到selenium模块 官网上的定义为 Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化 Webdriver 是一个 API 和协议 它定义了一个语言中立的接口 用于控制 w
  • Redis实战篇(二)查询缓存

    一 什么是缓存 缓存就是数据交换的缓冲区 是存贮数据的临时地方 一般读写性能较高 1 缓存的作用 降低后端负载 提高读写效率 降低响应时间 2 缓存的成本 数据一致性成本 代码维护成本 运维成本 二 添加Redis缓存 Resource p
  • 定时任务——@Scheduled注解做定时任务

    一 这是springboot中配置静态定时任务的注解 1 在启动类上面加上 EnableScheduling 注解开启定时任务 import org springframework boot SpringApplication import
  • 淘宝准点秒杀脚本

    阿里云服务器 云小站 专享特惠 云产品推荐 阿里云 推荐一个薅羊毛教程地址 程序工厂 脚本技术交流群 212796668 开始教程 准备软件 下载地址 python脚本运行环境 zip python脚本执行未安装库 Python工具类资源
  • 一种多级缓存的系统架构

    一种多级缓存的系统架构 下面这个也是比较常用的多级缓存的系统架构图 整体流程如上图所示 1 首先接入Nginx将请求负载均衡到应用Nginx 此处常用的负载均衡算法是轮询或者一致性哈希 轮询可以使服务器的请求更加均衡 而一致性哈希可以提升应
  • torch.autograd.detect_anomaly() 工具的使用(记录)

    先放上使用方法 import torch 正向传播时 开启自动求导的异常侦测 torch autograd set detect anomaly True 反向传播时 在求导时开启侦测 with torch autograd detect
  • 蓝牙BLE信道频率

    蓝牙信道规定在物理层 有以下几个特点 调制方式 GFSK 工作在2 4GHz ISM频段 频率范围 2 400 2 4835GHz ISM频段 Industrial Scientific Medical Band 主要开放给工业 科学和医用
  • 自动售货机(java版)

    SaleMachine java package tu public class SaleMachine private int countofBeer countofJuice countofCola countofFivecent co
  • 【脚本语言系列】关于Python统计分析statsmodel,你需要知道的事

    如何使用statsmodel 安装statsmodel 使用easy install或pip安装statsmodels easy install U statsmodels pip install U statsmodels 使用源代码安装
  • cocos2dx之Lua调用C++

    现在cocos2dx3 8自己封装了以前的toLua 比以前更好用了 先来看一下整体步骤 1 编写一个 ini文件 2 修改genbindings py脚本 3 执行genbindings py脚本 4 将生成的桥接文件加入工程 5 修改l
  • stream(流) iterator之一个例子

    The following two simple programs sort all strings read from the standard input and print them without duplicates by usi
  • Typora的简单入门使用教程

    安装篇 https typora io 下拉到最底处下载 下载完之后安装 一路next 使用篇 新建一个文本文档 将后缀名改为md 打开 注意 如果新建一个文本文档的后缀名被隐藏 可执行如下步骤以显示后缀名 1 使用快捷键windows e
  • Java兔子生兔子问题(递归法)

    Java兔子生兔子问题 递归法 该问题与上楼梯的问题一样 是从反方向思考推导递归公式 生兔子问题 问题描述 新诞生的兔子三个月后会每个月都会产小兔子 即 1 1 2 3 5 8 13 time 2022 05 19 param args p
  • 再谈 eBay 的扩展性最佳实践

    再谈 eBay 的扩展性最佳实践 网址 http www dbanotes net arch best practices for scaling websites lessons from ebay html 很多人都觉得 eBay 在