0
DAE
PyCon China 2013
About Me
•

洪强宁 / hongqn

•

2002年开始接触Python

•

2004年开始完全使⽤用Python⼯工
作

•

2006年加⼊入⾖豆瓣,现任⾸首席架
构师

•

www.douban.com/peopl...
议程
•

DAE是什么

•

为什么要开发DAE

•

DAE的架构

•

DAE的特点

•

DAE的未来
DAE是什么
Douban
Douban
Adorable
App
Engineers
Engine
PaaS
Platform as a Service (PaaS)
Private
Python
PaaS
Current State
427 apps
126 对外应⽤用
bubbler.labs.douban.com
m.douban.com
douban.fm
movie.douban.com
group.douban.com
code
up
花名册
精灵宝钻
…等等
每天处理 2.4 亿动态请求
5K 峰值 qps
on 32 nodes
为什么要开发DAE
代码拆分
1 big svn repo (17万提交)
4602 git repo (2881 fork)
重⽤用基础设施
Proj A

Proj B

Proj C

Proj D

MySQL, BeansDB, Memcache, MQ …
简化新项⺫⽬目启动
$ dae create
$ dae serve
$ dae deploy
最佳实践对
每个app开箱即⽤用
分级上线
故障报告
持续集成
状态收集
Scale SA

4
DAE的架构
app.yaml
PyPI 镜像
pypi.douban.com

pip-req.txt

$ dae install flask
Instance
•

web
•

•

service
•

•

gunicorn

gunicorn + customized worker

daemon
•

zookeeper
两级结构
Load Balancer (nginx)

Gateway (nginx)
fallback

unix socket

App
(gunicorn)

Node 1

Gateway (nginx)

start

App
Sta...
资源池API
•
•
•
•
•
•
•
•
•
•

mysql
memcache
doubandb, doubanfs
moosefs
beanstalkd
cdn
statsd + graphite
mail
elastic search...
DAE的特点
Low Overhead
•

资源分配 — 进程

•

资源隔离 — UNIX帐号

•

资源限制 — 外部监控
Customizable
•

每个应⽤用从模板⽣生成nginx配置

•

使⽤用 hook point 定制

•

或者只使⽤用⽣生成的 nginx 配置⽚片段
⾃自依赖
•

通过⼀一个应⽤用部署应⽤用

•

通过⼀一个应⽤用管理应⽤用

•

⼀一个应⽤用 scale 所有应⽤用

•

⼀一个应⽤用 serve 跨应⽤用的静态⽂文件

•

DAE 的代码托管在⼀一个 DAE 应⽤用上
greenify 已开源
github.com/douban/greenify

gevent

•

默认启⽤用

•

⽀支持⻓长连接,如 websocket

•

节省内存

•

很多坑
Service 是⼀一等公民

thriftclient 即将开源

•

Thrift

•

在线客户端⽣生成

•

依赖注册

•

升级通知
收集⼤大量状态数据
内置最佳实践

cfgpusher 即将开源

•

错误收集 - sentry

•

Code集成

•

在线 profile ⼯工具

•

打包发布

•

预发布环境

•

服务地址实时推送

•

持续集成

•

分级上线
曹娥已开源
github.com/douban/CaoE

不受限的Python环境

•

可⽤用C扩展

•

可⽤用 fork, subprocess, multiprocessing…
DAE的未来
⾖豆瓣所有应⽤用的平台
cgroups
离线⼤大数据计算
更好的 service 体系
跨 IDC
QoS
公有云服务?
开源?
开源!
谢谢!
Upcoming SlideShare
Loading in...5
×

DAE

3,220

Published on

Talk on PyCon China 2013

Published in: Technology
0 Comments
36 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,220
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
109
Comments
0
Likes
36
Embeds 0
No embeds

No notes for slide

Transcript of "DAE"

  1. 1. DAE PyCon China 2013
  2. 2. About Me • 洪强宁 / hongqn • 2002年开始接触Python • 2004年开始完全使⽤用Python⼯工 作 • 2006年加⼊入⾖豆瓣,现任⾸首席架 构师 • www.douban.com/people/ hongqn/ • hongqn@douban.com
  3. 3. 议程 • DAE是什么 • 为什么要开发DAE • DAE的架构 • DAE的特点 • DAE的未来
  4. 4. DAE是什么
  5. 5. Douban Douban Adorable App Engineers Engine
  6. 6. PaaS
  7. 7. Platform as a Service (PaaS)
  8. 8. Private Python PaaS
  9. 9. Current State
  10. 10. 427 apps 126 对外应⽤用
  11. 11. bubbler.labs.douban.com
  12. 12. m.douban.com
  13. 13. douban.fm
  14. 14. movie.douban.com
  15. 15. group.douban.com
  16. 16. code
  17. 17. up
  18. 18. 花名册
  19. 19. 精灵宝钻
  20. 20. …等等
  21. 21. 每天处理 2.4 亿动态请求 5K 峰值 qps on 32 nodes
  22. 22. 为什么要开发DAE
  23. 23. 代码拆分 1 big svn repo (17万提交) 4602 git repo (2881 fork)
  24. 24. 重⽤用基础设施 Proj A Proj B Proj C Proj D MySQL, BeansDB, Memcache, MQ …
  25. 25. 简化新项⺫⽬目启动 $ dae create $ dae serve $ dae deploy
  26. 26. 最佳实践对 每个app开箱即⽤用 分级上线 故障报告 持续集成 状态收集
  27. 27. Scale SA 4
  28. 28. DAE的架构
  29. 29. app.yaml
  30. 30. PyPI 镜像 pypi.douban.com pip-req.txt $ dae install flask
  31. 31. Instance • web • • service • • gunicorn gunicorn + customized worker daemon • zookeeper
  32. 32. 两级结构 Load Balancer (nginx) Gateway (nginx) fallback unix socket App (gunicorn) Node 1 Gateway (nginx) start App Starter App (gunicorn) Node 2 App Starter
  33. 33. 资源池API • • • • • • • • • • mysql memcache doubandb, doubanfs moosefs beanstalkd cdn statsd + graphite mail elastic search irc waylife 监控API调⽤用
  34. 34. DAE的特点
  35. 35. Low Overhead • 资源分配 — 进程 • 资源隔离 — UNIX帐号 • 资源限制 — 外部监控
  36. 36. Customizable • 每个应⽤用从模板⽣生成nginx配置 • 使⽤用 hook point 定制 • 或者只使⽤用⽣生成的 nginx 配置⽚片段
  37. 37. ⾃自依赖 • 通过⼀一个应⽤用部署应⽤用 • 通过⼀一个应⽤用管理应⽤用 • ⼀一个应⽤用 scale 所有应⽤用 • ⼀一个应⽤用 serve 跨应⽤用的静态⽂文件 • DAE 的代码托管在⼀一个 DAE 应⽤用上
  38. 38. greenify 已开源 github.com/douban/greenify gevent • 默认启⽤用 • ⽀支持⻓长连接,如 websocket • 节省内存 • 很多坑
  39. 39. Service 是⼀一等公民 thriftclient 即将开源 • Thrift • 在线客户端⽣生成 • 依赖注册 • 升级通知
  40. 40. 收集⼤大量状态数据
  41. 41. 内置最佳实践 cfgpusher 即将开源 • 错误收集 - sentry • Code集成 • 在线 profile ⼯工具 • 打包发布 • 预发布环境 • 服务地址实时推送 • 持续集成 • 分级上线
  42. 42. 曹娥已开源 github.com/douban/CaoE 不受限的Python环境 • 可⽤用C扩展 • 可⽤用 fork, subprocess, multiprocessing…
  43. 43. DAE的未来
  44. 44. ⾖豆瓣所有应⽤用的平台
  45. 45. cgroups
  46. 46. 离线⼤大数据计算
  47. 47. 更好的 service 体系
  48. 48. 跨 IDC
  49. 49. QoS
  50. 50. 公有云服务?
  51. 51. 开源? 开源!
  52. 52. 谢谢!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×