从零到千亿级实时数据处理
浅谈“流”化你的应用构架
– https://netflix.github.io/
– http://www.oschina.net/project/netflix
链接
•Netflix日处理千亿级数据平台
•大数据技术简短历史
•深潜流构架及技术基础
•为什么你的App也“流”的转!
话题
大家来回忆一下:
如何用最基础的数据结构实现hash table?
Before we start...
大家来想一下:
为什么“有些人”总不让你用全局变量?
Before we start...
● 日处理七千亿条/1+ PB 数据
● 顶峰每秒处理1千万条/20+ GB 信息
● 3000+ Kafka brokers, 12 clusters in 3 regions
● 10,000+ Docker容器部署
We help Produce,
Store,
Process,
Move
Events @ Cloud scale
Netflix Keystone Pipeline
Keystone构架
Stream
Consumers
Samza
Router
EMR
Fronting
Kafka
Consumer
Kafka
Control
Plane
Event
Producer
KSProxy
● 横向可扩展构架
● 完全构架在AWS云端基础设施上
● At-least-once 投递保证
● 容纳back pressure, 容纳云端不稳定基础服务
● Sink level isolation
● 同时支持数据中心内及跨洲际数据中心failover
● High availability, scalability & durability
● Streaming Architecture
Netflix Keystone Pipeline
Big Data History
为什么要用Streaming Architecture?
Big Data History
Big Data History
Big Data History
对流数据的现实需求
● 数据爆炸性增长
对流数据的现实需求
● 数据爆炸性增长
● 数据处理模式的需求变化
如何实现hash table?
教科书说:
如何实现hash table?
如何实现hash table?
如何实现hash table?
如何实现hash table?
Commit log
Commit log 是很多分布式系统中的核心
● Database Replication
● Paxos Consensus
● Kafka
● … …
1. 传统应用构架从零开始
1. 传统应用构架从零开始
2. 传统应用构架 - Scale up DB!
3. 传统应用构架 - Caching!
res = cache.get(key)
if (!res) {
r = db.get(key)
cache.put(key, r)
}
return r;
3. 传统应用构架 - Caching!
缓存分布式系统难题:
● Cache coherence
● Cache Invalidation
● Consistency issue
● Cold start / bootstraping
为什么?
● 分布式系统中网络延迟永远大于零
● Race condition
● Source of truth和客户端看到的永远可能不一致
3. 传统应用构架 - Caching!
4. 传统应用平台构架 - multi-layered!
4. 传统应用构架 - multi-layered!
分层组件之间的Reconciliation 协议
● 最终一直性 (eventual consistency)
● 轮询协议 (polling protocol)
● 物质化视图(materialized view)
?
为什么保存状态的数据库一定要在构架的最底端?
介绍流构架
介绍流构架
流构架特性
● 数据不可变性
● 顺序可能很重要
● Real time & Reactive
● Request / Response ⇒ Subscribe / Notify
● 预先计算好的缓存
● 流构架可以迭代组合
● 同一个数据流可产生不同的物质化视图
● Delivery guarantee
● stream everywhere!
核心实现细节
+
*Samza可由其他streaming processing framework替代。
核心实现细节
为什么Docker和流处理是天生一对?
核心实现细节
Streaming Architecture
Questions?

Streaming architecture zx_dec2015