Reduce Data广告服务网站如何扩展到每天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数据的内部复制方式。

How we scaled: 300K QPS & 3-5B requests a day — Me

如何扩展大规模Web网站的性能?的更多相关文章

  1. WEB网站前端性能分析相关

    现在的网站分析工具,数据源主要有两种,分别是服务器日志(WebServer Log)和采集日志 买 优化要根据具体的业务和场景来分析 埋点:监控用户点击的每一步

  2. Velocity China 2016 Web 性能与运维大会:构建快速、可扩展的弹性网站

    Velocity China 2016 Web 性能与运维大会是一场关于构建快速.可扩展的弹性网站所需要的Web性能.运维及开发运维的训练.大会将于2016年12月1日在北京拉开帷幕,此次大会被众多业 ...

  3. zabbix 监控web网站性能

    一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...

  4. 自学Zabbix4.3 zabbix实战监控Web网站性能

    自学Zabbix4.3 zabbix实战监控Web网站性能 用zabbix如何监控web性能和可用性呢?一般分为四个步骤:打开网站.登陆.登陆验证.退出,看实例. 1. 检测流程 1. 打开网站:如果 ...

  5. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  6. zabbix监控WEB网站性能

    一直在纠结用什么实例来给大家演示呢?想来想去还是官方的好,那我们怎么用zabbix监控web性能和可用性呢?我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 ...

  7. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

  8. 大规模web服务开发技术

    大规模web服务开发技术 总评        这本书是日本一个叫hatena的大型网站的CTO写的,通过hatena网站从小到大的演进来反应一个web系统从小到大过程中的各种系统和技术架构变迁,比较接 ...

  9. 读书笔记--大规模web服务开发技术

    总评        这本书是日本一个叫hatena的大型网站的CTO写的,通过hatena网站从小到大的演进来反应一个web系统从小到大过程中的各种系统和技术架构变迁,比较接地气.      书的内容 ...

随机推荐

  1. sql server经典sql

    1. sql server构造oracle rownum列 select * from ( select row_number() over(order by t.修改时间 desc) rownum, ...

  2. 12_注解04_注解实现Action调用Service,Service调用Dao的过程

    [工程截图] [PersonDao.java] package com.HigginCui.annotation; public interface PersonDao { public void s ...

  3. UVA 10881 Piotr's Ants(等效变换 sort结构体排序)

    Piotr's AntsTime Limit: 2 seconds Piotr likes playing with ants. He has n of them on a horizontal po ...

  4. 每天一水SGU347

    今天本来应该要写校题解报告的,但是CF跪了,一题都没JUDGE出来,最后比赛取消了~郁闷啊! 后来闲的无事,就到处看看contest,随便点进去一个,看到一水题,几分钟写完,马上就WA了!~ 题目的信 ...

  5. jquery中的 .html(),.val().text()

    .html(),.text(),.val(),.html()用为读取和修改元素的HTML标签,包括标签内的内容.text()用来读取或修改元素的纯文本内容,去除 html 标签.val()用来读取或修 ...

  6. vs2005用正则表达式统计有效代码行数

    正则表达式:^:b*[^:b#/]+.*$ 需要注意:#开头和/开头或者空行都不计入代码量. 如果需要只统计代码文件的代码量,可以按住Ctrl+Shift+F之后选择查找文件的类型. Form:htt ...

  7. 初识pngdrive

    初识是第一次认识的意思,类似的词还有初见.初遇.初心.初愿.初恋.初吻……梦里相见如初识,很美好的感觉.同样,今天我们要认识的也是一个比较神奇美妙的东西,至少对于程序员来说. 我曾经尝试过很多文件加密 ...

  8. WPF 得一些问题汇总

    1.CallMethodAction <TextBox Height="30" Name="txtUserName" Width="160&qu ...

  9. Python开发之--前端 HTML基础

    一:HTML介绍 HTML:超文本标记语言,标准通用标记语言下的一个应用.包括"头"部分(英语:Head).和"主体"部分(英语:Body),其中"头 ...

  10. PDF判断打印是A4还是B5

    打印材料通畅就是这样两个规格,之前经常受其困扰,B5规格达成A4会显得字很大,当然本身A4就跟大:如果是A4打成B5字很小的: 其实,判断依据就是Adobe reader里面的,当鼠标滑向左下角的时候 ...