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

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

印度最大电商公司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处理。

目录
相关文章
|
存储 数据采集 监控
信息系统架构开发方法ADM
信息系统架构开发方法ADM
990 5
|
1月前
|
人工智能 数据可视化 测试技术
提升测试效率5倍!Dify驱动的可视化工作流实现自动化测试“开箱即用”
本文介绍如何利用Dify可视化工作流快速构建自动化测试体系,涵盖用例生成、API测试和UI测试等核心场景。通过拖拽式设计降低技术门槛,显著提升测试效率与覆盖率,助力团队实现质量保障的智能化转型。
|
7月前
|
人工智能 供应链 安全
MCP Server的五种主流架构与Nacos的选择
本文深入探讨了Model Context Protocol (MCP) 在企业级环境中的部署与管理挑战,详细解析了五种主流MCP架构模式(直连远程、代理连接远程、直连本地、本地代理连接本地、混合模式)的优缺点及适用场景,并结合Nacos服务治理框架,提供了实用的企业级MCP部署指南。通过Nacos MCP Router,实现MCP服务的统一管理和智能路由,助力金融、互联网、制造等行业根据数据安全、性能需求和扩展性要求选择合适架构。文章还展望了MCP在企业落地的关键方向,包括中心化注册、软件供应链控制和安全访问等完整解决方案。
3297 154
MCP Server的五种主流架构与Nacos的选择
|
缓存 JavaScript Cloud Native
阿里云发布 Spring Boot 新脚手架,真香
本文,围绕 spring initializr 框架,以 start.spring.io 为例,全面的给大家介绍如何使用和扩展这个框架,以及背后的运行原理。
58472 1
阿里云发布 Spring Boot 新脚手架,真香
|
8月前
|
消息中间件 Java Kafka
Spring Boot整合kafka
本文简要记录了Spring Boot与Kafka的整合过程。首先通过Docker搭建Kafka环境,包括Zookeeper和Kafka服务的配置文件。接着引入Spring Kafka依赖,并在`application.properties`中配置生产者和消费者参数。随后创建Kafka配置类,定义Topic及重试机制。最后实现生产者发送消息和消费者监听消息的功能,支持手动ACK确认。此方案适用于快速构建基于Spring Boot的Kafka消息系统。
1502 7
|
缓存 JSON Java
那些年,我们写过的无效单元测试
在这篇文章里,作者通过日常的单元测试实践,系统地总结出一套避免编写无效单元测试用例的方法和原则。
558 71
那些年,我们写过的无效单元测试
|
10月前
|
测试技术 API 开发者
通义千问Qwen2.5-Max登上大模型盲测榜单全球前十,数学及编程能力夺冠
通义千问Qwen2.5-Max登上大模型盲测榜单全球前十,数学及编程能力夺冠
|
人工智能 自然语言处理 搜索推荐
ECCV 2024:一眼临摹:瞥一眼就能模仿笔迹的AI
 【10月更文挑战第10天】在人工智能领域,手写文本生成技术迎来新突破。最新研究提出“一眼临摹”AI技术,仅需一个手写样本文即可模仿任意书法风格。该技术核心为One-DM模型,结合扩散模型与风格增强模块,实现高效、多样且高质量的手写文本生成,广泛应用于数字签名、个性化信件及艺术创作等领域。
828 2
|
网络协议 安全 容灾
哪些 DNS 服务器的响应速度快且稳定可靠?
哪些 DNS 服务器的响应速度快且稳定可靠?
24240 4
|
Java 数据安全/隐私保护
SpringBoot 自定义初始化任务 Runner
SpringBoot 自定义初始化任务 Runner
207 0