再谈 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 的扩展性最佳实践 的相关文章

  • 为什么我的线程 .Net 应用程序在分配大量内存时不能线性扩展?

    我遇到了一些关于大内存分配对 Net 运行时可扩展性的影响的奇怪问题 在我的测试应用程序中 我在固定循环次数的紧密循环中创建了大量字符串 并给出了每秒循环迭代的速率 当我在多个线程中运行这个循环时 奇怪的事情出现了 速度似乎并没有线性增加
  • 4.OpenResty系列之Nginx负载均衡

    1 负载均衡配置 上篇文章中 代理仅仅指向一个服务器 但是 网站在实际运营过程中 大部分都是以集群的方式运行 这时需要使用负载均衡来分流 nginx 也可以实现简单的负载均衡功能 假设这样一个应用场景 将应用部署在 192 168 1 11
  • 最终 GAE 与 AWS 架构决策

    我知道以前有人以这样或那样的方式问过这个问题 但与 GAE 稳定性有关的大多数主要问题似乎是在 2008 年底 2009 年初左右提出的 或者与大规模游戏没有直接关系 我认为 有兴趣 基本上 我一直在与我的业务合作伙伴反复争论是否使用 GA
  • R 向量大小限制:“.C 中不支持长向量(参数 5)”

    我有一个非常大的矩阵 我试图在有足够内存的服务器上通过 glmnet 运行 即使在达到某一点的非常大的数据集上它也能正常工作 之后我收到以下错误 Error in elnet x long vectors argument 5 are no
  • 如何更改分片键

    我知道不可能更改片键 但是 当我设置了不正确的分片键时 如何更改它 转储您分片的集合 再次导入它 设置新的分片键
  • 用于分配分片索引的 Zookeeper

    我在网上看到过一些关于使用 Zookeeper 在服务器上线时为其分配分片编号的帖子 假设您正在跨集群对数据进行分片 但我一生都找不到如何执行此操作的 Java 代码示例 有人已经可以使用这个了吗 谢谢 跨集群分片数据有很多细节 例如复制和
  • 编写可扩展网站的技术

    我是网站可扩展性领域的新手 您能否向我建议一些使网站可扩展到大量用户的技术 在重负载下测试您的网站 监控所有统计数据 寻找瓶颈 修复瓶颈 返回1 祝你好运
  • PHP 对象数组不是线性缩放的,而全局数组却可以?

    使用对象内数组作为属性与使用全局 php 数组变量相比 存在一个主要的性能问题 为什么 为了对这个问题进行基准测试 我创建了以下基准测试 它存储一个越来越大的数组 并以 stdClass 作为节点 运行了两个测试 一个使用类中的数组属性 另
  • 搜索自然语言句子结构

    存储和搜索自然语言句子结构树数据库的最佳方式是什么 Using OpenNLP 的 http incubator apache org opennlp 英语树库解析器 我可以对任意句子进行相当可靠的句子结构解析 我想做的是创建一个工具 可以
  • 分片数据库的 ID 生成(Azure 联合数据库)

    我一直在寻找一些有关 Azure 联合数据库 id 生成 联合 主键 最佳实践的文章或指南 但没有发现任何引人注目的内容 联合表不支持标识列 因此在我看来唯一实用的 id 类型是 GUID 因为尝试集中创建和使用 BigInt 会在应用程序
  • 无法启动mongos

    我正在尝试设置简单的分片 在没有任何副本集的单个主机上 但是我无法继续下去 因为当我尝试启动 mongos 时会发生这种情况 C gt mongos configdb localhost 27010 port 27011 I get Bad
  • 针对具有大量聚合的大型集群的 ElasticSearch 设置

    背景和当前状态 我们正在将集群从 Cassandra 迁移到完整的 ElasticSearch 集群 我们平均索引文档为每秒约 250 300 个文档 在 ElasticSearch 1 2 0 中 它代表每天约 8Go generic i
  • 可变参数模板的可扩展性

    我正在使用 C 11 开发一个大规模软件基础设施 该基础设施广泛使用了可变参数模板 我的问题如下 这种方法的可扩展性如何 首先 可变参数模板可以采用的参数数量是否有上限 其次 当使用许多参数时 并且 通过扩展 这些参数的许多组合将产生模板化
  • 实体框架和分片数据库

    我有一个 WCF 数据服务在实体框架代码优先 4 1 提供程序之上运行 该数据库相当大 一个关键表有 77 百万条记录 并且每月增长约 10 并且出现了相当大的性能问题 虽然对这么大的数据库进行分片是一件痛苦的事情 但这似乎是不可避免的 我
  • 由 Android 应用程序和网站共享的关系数据库 - 最简单的方法

    我有一个项目 我将开发一个 Android 应用程序和一个网站 他们都应该共享相同的数据库 我正在尝试探索所有选项 但我真的很困惑 这是我的要求 1 我需要一个非常简单且EASY方式 我并不是想学习 我只是想学习 我只是想把事情做好 2 数
  • 对于动态、个性化的 Web 应用程序来说,多长的响应时间才被认为是良好的响应时间? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • 不扩大规模和缩小规模的原因是什么?

    作为一名程序员 我每隔几年就会做出革命性的发现 我在相位上要么领先于曲线 要么落后于曲线约 我学到的一个惨痛的教训是 向外扩展并不总是更好 通常最大的性能提升是在我们重新组合和扩展时 您有哪些理由进行横向扩展或纵向扩展 价格 性能 愿景 预
  • 如何在两个或多个 Heroku dyno 上运行 Meteor 应用程序?

    我有 Meteor 应用程序 它使用 1 dyno 在 Heroku 平台上运行 当我增加测功机数量时 它会停止工作 并在客户端报告一些 XHR 问题 错误 404 有人在两个或更多 Heroku dyno 上成功运行 Meteor 应用程

随机推荐

  • 点云梯度下采样

    点云下采样又称点云精简 均匀网格下采样 均匀网格下采样法是建立在空间包围盒精简算法之上对散乱点云快速简化的一种算法 其基本思想为 根据点云数据的密度确定最小三维网格 体素 的边长为 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 在