每天数十亿次请求的应用经验分享,值得参考!

简介: 印度最大电商公司Snapdeal介绍了其Snapdeal Ads系统支持每天5B请求的经验分享。对于只有不到10个工程师的团队构建一个可伸缩的大型Web系统(web-scale)是困难的,使用正确的技术也许比你的团队成员数量多少更加重要。

作者:banq https://www.jdon.com/47776 2019-08-26 09:21:00


印度最大电商公司Snapdeal介绍了其Snapdeal Ads系统支持每天5B请求的经验分享。


对于只有不到10个工程师的团队构建一个可伸缩的大型Web系统(web-scale)是困难的,使用正确的技术也许比你的团队成员数量多少更加重要。


关键战略:


1. 从水平和垂直两个方面扩展


2.CAP定理中选择可用性和分区容错性(AP),而不是一致性和可用性组合(CA)。因为初始目标是需要一个低延迟 高性能的拍卖服务平台。


3.没有厂商锁定保护或因为专利限制使用的情况,开源软件以前达到毫无疑问的稳定和易用程度,且低费用。因此决定不再使用软件供应厂商的专有软件。


4.基于机器同情Mechanical Sympathy法则建立系统,软件建立在深刻理解硬件工作机理上,通过软件最大发挥硬件潜能。


5.云技术的限制使用,因为亚马逊EC2比较昂贵,其次是网络不确定和磁盘虚拟化会提高延迟时间。


6.如果延迟存在就必须处理它,再试图消除它,所有的查询应该限制在1ms以下,使用RocksDB和各种其他解决方案作为初始缓存/嵌入式数据库。


7.尽可能使用SSD,也是为了降低延迟。


8.不虚拟化硬件,利用大规模硬件优点(256GB RAM, 24 core)并行化很多计算。


9.磁盘写操作,如果可能进行计时然后每隔几秒将一串数据flush写到到磁盘。


10.Nginx微调到支持keep-alive连接,Netty优化到支持大量并发负载支持模型。


11.关键数据对于广告服务器总是立即可用(微妙级),所有数据都是存储在内存in-memory的库或数据结构中。


12.架构应该总是share nothing,至少广告服务器和外部拍卖系统应该是share nothing,当我们拔掉广告服务器时,整个系统都不会眨眼受到影响。


13.所有关键数据结果必须是可复制的。


14.保持几天的原始记录备份。


15.如果数据有点过时和系统不一致,没有关系。


16.消息系统应该是失败容错,可以崩溃但是不能丢失数据。


当前基础设施:


1.跨3个数据中心的40–50节点。


2.其中是30台用于高计算(128–256G RAM, 24 cores, 当前顶级CPU,尽可能SSD)


3.其余小于32G RAM, Quadcore机器.


4.10G私有网络 + 10G 公共网络


5.小型 Cassandra, Hbase 和 Spark 集群.


关键性需求:


1.系统支持多个拍卖者发送基于HTTP(REST端口)的RTB 2.0请求。


2.系统应当能在拍卖中推出Yes/No 价格与广告的响应。


3.系统应当能处理每天数亿的事件,响应几百上千的QPS。


4.数据应该尽可能被处理,至少关键点是这样。


使用的关键技术:


1.HBase和Cassandra用于计数据和和管理用户或账户的传统数据集,选择HBase是因为高写入性能,能够几乎实时处理计数。


2.后端主要语言是Java,尽管过去有C++和Erlang经验,Java有成熟的应用技能,JVM也相当成熟。


3.Google Protobuf 用于数据传输


4.Netty作为后端主要服务器,简单高性能。


5.RocksDB作为用户资料读写服务,它是嵌入式数据库,使用Apache Kafka能够跨RocksDB同步数据。


6.Kafka是用于消息队列,流化数据处理


7.CQEngine用于主要的内存in-memory快速查询。


8.Nginx是主要的反向代理


9.Apache Spark是用户ML处理


10 Jenkins用于CI


11.Nagio和Newrelic 监视服务器


12.Zookeeper用于分布式同步


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


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


15.ustom built quota manger based on Yahoo white paper for budget control.


系统设计与结果:


ad服务器是使用简单非堵塞的netty构建,处理每个进来的HTTP请求,在内存的很多存储中寻找一个活动进行展示,这是使用CQ Engine查询,这种查询并不引发任何网络延迟,计算时间或堵塞过程比如磁盘写,将会整个在内存中运行,所有计算会发生在节点内存中,几乎是in process。


ad服务器和其他系统没有分享,共同组件是通过异步通讯。


ad服务器以5-15ms延迟的高性能传递结果,原始数据异步写入到Kafka处理。


原始数据被Hbase中多个Java过程消费,预算和活动状态在Cassandra集群中更新。


一些原始数据发往spark集群用于adhoc处理。


相关文章
|
2月前
|
人工智能 自然语言处理 前端开发
魔搭社区模型速递(8.30-9.06)
🙋魔搭ModelScope本期社区进展:3361个模型,313个数据集,73个创新应用, 8篇内容
380 1
|
Cloud Native Java C++
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
文章介绍如何在Spring Boot 3中利用GraalVM将Java应用程序编译成独立的本机二进制文件,从而提高启动速度、减少内存占用,并实现不依赖JVM运行。
1653 1
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
|
11月前
|
人工智能 Serverless 开发者
最佳实践 | 轻松部署,即刻触达 Qwen2.5 的飞一般的体验
通过阿里云函数计算(FC)部署Ollama和Open WebUI,实现Qwen2.5模型的托管与交互。
|
11月前
|
人工智能 Serverless API
10 分钟打造你的专属 AI 客服
在这个数字化时代,提供卓越的客户服务已成为企业脱颖而出的关键。为了满足这一需求,越来越多的企业开始探索人工智能(AI)助手的应用,以实现全天候(7x24)的客户咨询响应,全面提升用户体验和业务竞争力。本解决方案通过函数计算FC 和大模型服务平台百炼,为您提供一个高效便捷构建 AI 助手思路。
894 43
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
1687 122
|
11月前
|
人工智能 弹性计算 大数据
函数计算 FC 诚邀您参加【Cloud Up 挑战赛】赢取丰厚奖品!
亲爱的开发者们,函数计算 FC 团队向你们发出诚挚邀请,加入【Cloud Up 挑战赛】,这不仅是一场技术盛宴,更是一次展示才华与创新的机会。从互联网应用开发到 AI、大数据,再到现代化应用开发,本次赛事覆盖了所有你渴望掌握的技能点,旨在为你提供一个实践平台,将理论知识转化为解决实际业务问题的能力。
|
jenkins 应用服务中间件 持续交付
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
775 8
|
编解码 测试技术 API
模拟手机设备:使用 Playwright 实现移动端自动化测试
本文介绍了使用Python的Playwright库进行移动设备模拟和自动化测试的方法。通过Playwright,开发者能模拟不同设备的硬件和软件特性,如屏幕尺寸、用户代理,以确保网站在移动设备上的表现。示例代码展示了如何模拟iPhone X并访问网站,之后可在此基础上编写测试代码以检验响应式布局和交互功能。Playwright的设备参数注册表支持多种设备,简化了移动端自动化测试的流程。
|
安全 Swift Android开发
构建移动应用:Swift vs Kotlin —— 两大主流语言的对决
【5月更文挑战第11天】Swift与Kotlin在移动应用开发中各有优势。Swift是iOS开发的首选,以其简洁语法、高性能和类型安全著称;而Kotlin是Android的官方推荐语言,以其与Java的无缝互操作、空安全特性和简洁代码受到青睐。两者在语法简洁性、性能和社区支持上表现优秀,但平台兼容性不同。开发者应根据项目需求和目标平台选择合适的语言。
1178 1
|
应用服务中间件 nginx Docker
深入理解Dockerfile:构建镜像的详细解释与常用命令(上)
Docker 是一种流行的容器化平台,可将应用程序和其依赖项打包到一个独立的、可移植的容器中。Dockerfile 是构建 Docker 镜像的文本文件,它包含了一系列的指令和配置,用于定义镜像的构建过程。本文将深入解释 Dockerfile 的工作原理,并介绍常用的 Dockerfile 指令和构建命令,以帮助读者更好地理解和使用 Docker。
2305 0