Reduce Data广告服务网站(http://reducedata.com)如何扩展到每天300K QPS请求?分享经验如下:

1. 为大规模而设计,广告服务平台从一开始增长就很惊人,因此,系统开始就为大规模设计,系统为水平和垂直伸缩扩展。

2.选择CAP定理中的AP(可用性和分区容错性)二不是CA(一致性和可用性),因为广告拍卖与服务平台是追求低延迟和高性能,数据的高一致性不是非常关键。

3.没有锁定专门厂商软件或专利技术的限制使用,积极使用开源软件,开源软件已经达到非常成熟的程度。

4.基于Mechanical Sympathy(顺硬件之势而为)构建系统,一个软件的建立应该是基于理解硬件如何工作以及如何更好利用硬件。

5.云技术的限制使用,他们很早就决定对云技术的有限使用,因为a)EC2和计数部分往往非常昂贵;b)在对EC2早期的测试中发现网络抖动jitter、磁盘虚拟化等会增加延迟。

6. 延迟总是存在,对付它而不是设法消除它。所有查找都应该发生在1ms以下。 利用RocksDB和各种其他解决方案作为主要的缓存/嵌入式数据库。

7.使用SSD固态硬盘降低延迟

8.没有虚拟化硬件,充分利用高配置硬件(256G内存和24核机器)并行化许多计算。

9.磁盘写操作,每N秒定时flush写入大块数据

10.Nginx用于支持keep-alive连接,而Netty优化支持大型并发负载。

11.为了保证广告服务器中关键数据始终是立即可用(访问延迟以微秒计),所有这些数据都是存储内存中库/数据结构中。

12.架构应该使用share nothing,当我们增减服务器时,系统应该是丝毫不受影响,眼睛都不会眨一下。

13.所有关键数据 结果都需要复制。

14.保持每天的原始记录日志拷贝

15.如果数据有点脏,系统发生数据不一致性,这一切也是正常

16.消息系统应该是容错的,它们可以崩溃但是不会丢失数据。

下面是具体设施情况:
跨3个数据中心的40–50节点(primarily US and two nodes in Germany)

其中30台运行高计算 (128–256G RAM, 24 cores, top of the line CPUS and where possible SSDs)

其余机器配置低一些, 32G RAM, Quadcore 机器.

10G 私有网 + 10G 公网

小型 Cassandra, Hbase 和 Spark 集群.

使用关键技术是:

1.HBase 和 Cassandra 用于计数聚合,以及管理用户和账号数据集, Hbase 因为其高性能写操作,能够很好处理计数器,并提供近实时的分析。

2.后端主要语言是 Java. 尽管有C++ 和 Erlang经验,但是Java有更可用的成熟技巧以及过去几年JVM相当成熟。

3.使用Google Protobuf进行数据传输

4. Netty作为主要后端服务器,感谢其简单和高性能特点。

5.RocksDB作为用户配置读写, 它是一个嵌入在每个广告出价人中的嵌入式数据库,用户配置通过Apache
Kafka跨RocksDB同步数据。

6. Kafka作为主要的消息队列,流化数据处理。

7.CQEngine作为主要的基于内存 快速查询系统,使用原子对象存储数据。

8. Nginx作为主要的反向代理.

9. Apache Spark用于为ML机器学习处理而需要的快速数据处理。

10.Jenkins 用户CI持续集成

11. Nagios 和 Newrelic用于监视服务器。

12. Zookeeper用于分布式同步。

13. Dozens of third parties for audience segments, etc.

14. Bittorrent Sync用于跨节点和数据中心同步关键数据。

15. 基于雅虎白皮书的预算控制定制的配额管理。

最后,他们在提高改进部分提到了引入LMax的Disruptor框架进行预先聚合,提高跨RocksDB数据的内部复制方式。

网站性能扩展案例:每天30-50亿请求,300K QPS是如何炼成的的更多相关文章

  1. 网站性能优化——DNS预热与合并HTTP请求

    DNS预热 一次DNS解析耗时20-120ms, 当网页中使用的域名较多时,DNS预热节省的时间还是非常可观的 先看效果 预热的目的: 减少请求次数 提前对DNS预获取 预热的方式 爬虫 APP 网页 ...

  2. input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has

    input屏蔽历史记录   设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处   ;(function($){$.ex ...

  3. 6个原则、50条秘技提高HTML5应用及网站性能

    Jatinder Mann是微软Internet Explorer产品的一名项目经理,在BUILD 2012大会上,他做了题为“提高HTML5应用和网站性能的50条秘技(50 performance ...

  4. 教你50招提升ASP.NET性能(十八):在处理网站性能问题前,首先验证问题是否出在客户端

    (29)Before tackling any website performance issue, first verify the problem isn’t on the client 招数29 ...

  5. 由12306.cn谈谈网站性能技术

    12306.cn网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有 限的经验和了解,所以,如果有什么问题还请大家一起讨论和 ...

  6. 由 12306.cn 谈谈高并发+高负载网站性能技术

    12306.cn 网站挂了,被全国人民骂了.我这两天也在思考这个事,我想以这个事来粗略地和大家讨论一下网站性能的问题.因为仓促,而且完全基于本人有限的经验和了解, 所以,如果有什么问题还请大家一起讨论 ...

  7. 不修改代码优化 ASP.NET 网站性能的一些方法

    本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 配置OutputCach ...

  8. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  9. 在线学习体验大PK 云智慧发布在线教育网站性能监测报告

    互联网不但改变了我们的生活.娱乐和消费方式,也推动各行各业进行着快速变革,越来越多的职场人士必须通过不断的学习.充电才能跟上行业发展的步伐,获得职业的提升,而这也引发了国内教育市场的爆炸式发展.据统计 ...

随机推荐

  1. JavaScript 建立简单的图片库

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. word添加页码

    问:在Word里面,分两栏插入页码,怎么使两栏都有页码? 可以通过插入域来实现分两栏后两栏都有页码.左边一栏页码为 当前页页码×2-1 :右边一栏页码为 当前页页码×2.在页眉页脚视图中,分别在左右两 ...

  3. The remote SSH server rejected X11 forwarding request

    两台相同的虚拟机,一台没有错误,一个经常出现警告,内容如下所示: The remote SSH server rejected X11 forwarding request 找了很多方法,最后发现是安 ...

  4. ubuntu 下安装sh 文件

    1. cd 到 指定文件夹 如: cd /home/ddy/下载 2. sudo chmod +x *.sh 3. sudo ./*.sh ok 了 (1)数据预处理    可以用下载好的数据集,也可 ...

  5. Python filter()删除1-100内素数

    用filter()删除1-100内的素数: #!/usr/bin/env python #coding:utf-8 import math def fil(n): #定义fil函数 flag = 0 ...

  6. MVC linq To SQL更新数据库操作

    首先在视图中提交数据,使用Html.BeginForm() @using(Html.BeginForm()) { @Html.EditorForModel() //编辑模板.控制器中传过来的数据 &l ...

  7. Module compiled with Swift 3.0 cannot be imported in Swift 3.0.1

    Cartfile:github "SwiftyJSON/SwiftyJSON"got error:Module compiled with Swift 3.0 cannot be ...

  8. git 和 svn的区别(转)

    英文原文:5 Fundamental differences between GIT & SVN,编译:外刊IT评论 如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机 ...

  9. POJ 3347 Kadj Squares

    Kadj Squares Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2132   Accepted: 843 Descr ...

  10. 串口 COM口 USB-TTL RS-232 RS-485 不同标准 区别 释疑

    http://blog.sina.com.cn/s/blog_6566538d0100r7p8.html Point (所有要点都在这,请仔细阅读): 1.串口.COM口是指的物理接口形式(硬件).而 ...