SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
又拍网架构中的消息 / 任务系统

      赵钟秋 belltoy
       又拍网程序员
        2011.10
又拍网简介
●   照片分享社区
●   2005 年建站
●   500 万用户
●   超过 3 亿张照片




                  http://www.yupoo.com/
又拍图片管家简介
●   面向企业用户
●   图片存储、外链、展示服务
●   2010 年上线
●   超过 10 亿张图片
●   图片日访问量超过 2 亿次




                    http://v.yupoo.com/
又拍云简介
●   通用大规模存储服务
       文件云存储
       图片云计算
●   高度可扩展的 API
●   防盗链
●   存储+ CDN
       类似 Amazon S3+CloudFront


                          http://www.upyun.com/
花瓣网简介
●   2011 年 11 月上线
●   收集、发现网络上你
    喜欢的事物
●   Node.js + 又拍云




                    http://huaban.com/
后台任务
后台任务
●   由用户或者定时触发
●   耗时长
●   异步执行
系统架构
任务系统的组成
   消息分发
   进程管理
   工作进程
RabbitMQ
●   开源
●   Erlang 实现
●   高级消息队列协议 (AMQP) 实现
●   分布式
RabbitMQ 组件
●   交换器 (Exchange)
       direct
       topic
       headers
       fanout
●   队列 (Queue)
●   绑定 (Binding)
RabbitMQ 工作方式
●   Work Queues
●   Publish/Subscribe
●   Routing
●   Topics
●   RPC
RabbitMQ 工作方式
Worker 接收消息
PHP 发送消息
基于 RabbitMQ 的实现
一个行为触发多个任务
●   添加在原来的任务中
●   发送多个不同的消息
●   采用 Publish/Subscribe 方式
问题出现
●   访问量增加,工作进程增加
●   业务复杂,消息类型增加
●   不能动态配置任务
●   代码经常更新,系统频繁启停
●   可能中断正在执行的任务
●   大量工作进程驻留在内存
我们的需求
●   使用 Publish/Subscribe 方式
●   简单灵活的配置
●   动态更新代码
●   方便的进程管理
●   空闲时,释放资源
●   RPC
基于 RabbitMQ 的实现
RabbitMQ 的 RPC 实现方式
基于 YPTask 的实现
为什么使用 Erlang 实现
●   原生的分布式支持
●   支持代码动态更新
●   成熟的 OTP 方案
●   进程管理方便
●   我们熟悉 Erlang 开发
YPTask 系统内部进程树
分布式
●   Erlang 原生的支持
●   动态增删节点
●   去中心化
●   同步各节点的配置
消息分发
●   一种消息类型对应一个消息队列
●   一个任务可以接收多种消息类型
●   一个任务可以动态配置工作进程的数量
定时器
●   类似 crontab 的定时器配置
●   基于消息
●   集群中一种定时器只有一个实例
●   错误处理
API
●   Publisher: JSON-RPC
●   Subscriber: BERT-RPC
RPC
●   客户端、服务端协议均为 RPC
●   Erlang 内部使用 Cast/Call
●   使得更进一步拆分 Web 成为可能
动态配置
●   把消息转发的配置工作统一到 YPTask 中
       只要指定消息的名字和消息内容
●   动态配置、动态更新
       修改配置之后只要重新启动相应的工作进程
YPTask 系统配置界面
新的消息收发实例
迁移
●   仍然采用 Python 实现工作进程
●   简化消息发布方式,一个事件只发一条消息
●   统一配置管理,业务代码专注于业务逻辑
●   再一次做拆分
YPTask 特点
●   简单的配置
●   灵活的消息分发
●   支持大量的任务
●   能够动态更新代码,不间断运行
●   支持异构的后台任务
●   支持 RPC
TODO
●   消息持久化
●   多种语言支持
●   多种客户端协议支持
●   优化配置管理界面
●   开放源代码
一些经验
●   拆分业务逻辑,让 web 只处理最少的事情
●   拆分系统架构,利用已经实现的工具
●   利用成熟的方案,能够带来高效的实现
●   让处理业务的代码只处理业务,其它事交给别人
    去做
加入我们

job@yupoo-inc.com
谢谢

Weitere ähnliche Inhalte

Was ist angesagt?

新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构Cosey Lee
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性Xuefeng Zhang
 
张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析Leechael
 
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Tim Y
 
了解集群
了解集群了解集群
了解集群Feng Yu
 
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践Xupeng Yun
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&LockLixun Peng
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面Tianwei Liu
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构HonestQiao
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题XiaoJun Hong
 

Was ist angesagt? (19)

新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
 
张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析张铁安:Feed系统架构浅析
张铁安:Feed系统架构浅析
 
Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010Build scalable microblog qcon beijing 2010
Build scalable microblog qcon beijing 2010
 
java title
java titlejava title
java title
 
A
AA
A
 
了解集群
了解集群了解集群
了解集群
 
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践
 
Database.Cache&Buffer&Lock
Database.Cache&Buffer&LockDatabase.Cache&Buffer&Lock
Database.Cache&Buffer&Lock
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题Feed服务架构-新浪微博新员工培训议题
Feed服务架构-新浪微博新员工培训议题
 
MassTransit
MassTransitMassTransit
MassTransit
 

Andere mochten auch

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统airsex
 
微博架构与平台安全
微博架构与平台安全微博架构与平台安全
微博架构与平台安全Tim Y
 
周爱民 关于架构之我的观点
周爱民 关于架构之我的观点周爱民 关于架构之我的观点
周爱民 关于架构之我的观点George Ang
 
艺龙旅行网架构案例分享-Qcon2011
艺龙旅行网架构案例分享-Qcon2011艺龙旅行网架构案例分享-Qcon2011
艺龙旅行网架构案例分享-Qcon2011Yiwei Ma
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCCal Henderson
 
High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011Tim Y
 
Qcon 2011:Beansdb 的设计与实现
Qcon 2011:Beansdb 的设计与实现Qcon 2011:Beansdb 的设计与实现
Qcon 2011:Beansdb 的设计与实现Davies Liu
 

Andere mochten auch (7)

构建可扩展的微博系统
构建可扩展的微博系统构建可扩展的微博系统
构建可扩展的微博系统
 
微博架构与平台安全
微博架构与平台安全微博架构与平台安全
微博架构与平台安全
 
周爱民 关于架构之我的观点
周爱民 关于架构之我的观点周爱民 关于架构之我的观点
周爱民 关于架构之我的观点
 
艺龙旅行网架构案例分享-Qcon2011
艺龙旅行网架构案例分享-Qcon2011艺龙旅行网架构案例分享-Qcon2011
艺龙旅行网架构案例分享-Qcon2011
 
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYCScalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
Scalable Web Architectures: Common Patterns and Approaches - Web 2.0 Expo NYC
 
High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011High Performance Weibo QCon Beijing 2011
High Performance Weibo QCon Beijing 2011
 
Qcon 2011:Beansdb 的设计与实现
Qcon 2011:Beansdb 的设计与实现Qcon 2011:Beansdb 的设计与实现
Qcon 2011:Beansdb 的设计与实现
 

Ähnlich wie Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统

基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践ZY Zhang
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlightssunng87
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构wenny yuan
 
電商微服務架構設計與執行
電商微服務架構設計與執行電商微服務架構設計與執行
電商微服務架構設計與執行YC Liang
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制Liu Yuan
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构n716
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用Leo Zhou
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡Cary Yang
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡guest2d0fe3
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理frankwsj
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserverDin Dindin
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版pigso
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統Hsu Ping Feng
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum锐 张
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)FLASH开发者交流会
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】inwin stack
 

Ähnlich wie Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统 (20)

基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践基于Tornado后端系统架构暨最佳实践
基于Tornado后端系统架构暨最佳实践
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlights
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构
 
電商微服務架構設計與執行
電商微服務架構設計與執行電商微服務架構設計與執行
電商微服務架構設計與執行
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
新浪微博平台与安全架构
新浪微博平台与安全架构新浪微博平台与安全架构
新浪微博平台与安全架构
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用1.2 刘奇 go在分布式数据库中的应用
1.2 刘奇 go在分布式数据库中的应用
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
自动化运维管理
自动化运维管理自动化运维管理
自动化运维管理
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserver
 
使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版使用Nginx轻松实现开源负载均衡——对外版
使用Nginx轻松实现开源负载均衡——对外版
 
使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統使用Javascript及HTML5打造協同運作系統
使用Javascript及HTML5打造協同運作系統
 
新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum新时代的分析型云数据库 Greenplum
新时代的分析型云数据库 Greenplum
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】
 

Mehr von Dahui Feng

垂直互联网站点的技术改造
垂直互联网站点的技术改造垂直互联网站点的技术改造
垂直互联网站点的技术改造Dahui Feng
 
The Rules of Scalable database
The Rules of Scalable databaseThe Rules of Scalable database
The Rules of Scalable databaseDahui Feng
 
垂直社区的产品改造
垂直社区的产品改造垂直社区的产品改造
垂直社区的产品改造Dahui Feng
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101Dahui Feng
 
产品设计与用户体验(据说是马化腾用来做培训的PPT)
产品设计与用户体验(据说是马化腾用来做培训的PPT)产品设计与用户体验(据说是马化腾用来做培训的PPT)
产品设计与用户体验(据说是马化腾用来做培训的PPT)Dahui Feng
 
丁香园用药助手产品经验 「极客公园创新大会」版
丁香园用药助手产品经验 「极客公园创新大会」版丁香园用药助手产品经验 「极客公园创新大会」版
丁香园用药助手产品经验 「极客公园创新大会」版Dahui Feng
 
据说是新浪内部对腾讯公司的深度解析
据说是新浪内部对腾讯公司的深度解析据说是新浪内部对腾讯公司的深度解析
据说是新浪内部对腾讯公司的深度解析Dahui Feng
 
深入浅出复合事件处理(CEP)
深入浅出复合事件处理(CEP)深入浅出复合事件处理(CEP)
深入浅出复合事件处理(CEP)Dahui Feng
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Dahui Feng
 
Database And User Experience for Web Apps
Database And User Experience for Web AppsDatabase And User Experience for Web Apps
Database And User Experience for Web AppsDahui Feng
 
Wind Computing
Wind ComputingWind Computing
Wind ComputingDahui Feng
 
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)Dahui Feng
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立Dahui Feng
 
手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享Dahui Feng
 
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)Dahui Feng
 
可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计Dahui Feng
 
可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)Dahui Feng
 

Mehr von Dahui Feng (17)

垂直互联网站点的技术改造
垂直互联网站点的技术改造垂直互联网站点的技术改造
垂直互联网站点的技术改造
 
The Rules of Scalable database
The Rules of Scalable databaseThe Rules of Scalable database
The Rules of Scalable database
 
垂直社区的产品改造
垂直社区的产品改造垂直社区的产品改造
垂直社区的产品改造
 
Oracle Security 101
Oracle Security 101Oracle Security 101
Oracle Security 101
 
产品设计与用户体验(据说是马化腾用来做培训的PPT)
产品设计与用户体验(据说是马化腾用来做培训的PPT)产品设计与用户体验(据说是马化腾用来做培训的PPT)
产品设计与用户体验(据说是马化腾用来做培训的PPT)
 
丁香园用药助手产品经验 「极客公园创新大会」版
丁香园用药助手产品经验 「极客公园创新大会」版丁香园用药助手产品经验 「极客公园创新大会」版
丁香园用药助手产品经验 「极客公园创新大会」版
 
据说是新浪内部对腾讯公司的深度解析
据说是新浪内部对腾讯公司的深度解析据说是新浪内部对腾讯公司的深度解析
据说是新浪内部对腾讯公司的深度解析
 
深入浅出复合事件处理(CEP)
深入浅出复合事件处理(CEP)深入浅出复合事件处理(CEP)
深入浅出复合事件处理(CEP)
 
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
 
Database And User Experience for Web Apps
Database And User Experience for Web AppsDatabase And User Experience for Web Apps
Database And User Experience for Web Apps
 
Wind Computing
Wind ComputingWind Computing
Wind Computing
 
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
尼古丁加咖啡因,不瞌睡的简报設計模式 (Caffeine+Nicotine)
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立
 
手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享手机之家新系统介绍及架构分享
手机之家新系统介绍及架构分享
 
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
 
可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计
 
可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)可扩展网站架构(for 网志年会)
可扩展网站架构(for 网志年会)
 

Yupoo! (花瓣网/又拍云) 架构中的消息与任务系统

  • 1. 又拍网架构中的消息 / 任务系统 赵钟秋 belltoy 又拍网程序员 2011.10
  • 2. 又拍网简介 ● 照片分享社区 ● 2005 年建站 ● 500 万用户 ● 超过 3 亿张照片 http://www.yupoo.com/
  • 3. 又拍图片管家简介 ● 面向企业用户 ● 图片存储、外链、展示服务 ● 2010 年上线 ● 超过 10 亿张图片 ● 图片日访问量超过 2 亿次 http://v.yupoo.com/
  • 4. 又拍云简介 ● 通用大规模存储服务  文件云存储  图片云计算 ● 高度可扩展的 API ● 防盗链 ● 存储+ CDN  类似 Amazon S3+CloudFront http://www.upyun.com/
  • 5. 花瓣网简介 ● 2011 年 11 月上线 ● 收集、发现网络上你 喜欢的事物 ● Node.js + 又拍云 http://huaban.com/
  • 7. 后台任务 ● 由用户或者定时触发 ● 耗时长 ● 异步执行
  • 9. 任务系统的组成  消息分发  进程管理  工作进程
  • 10. RabbitMQ ● 开源 ● Erlang 实现 ● 高级消息队列协议 (AMQP) 实现 ● 分布式
  • 11. RabbitMQ 组件 ● 交换器 (Exchange)  direct  topic  headers  fanout ● 队列 (Queue) ● 绑定 (Binding)
  • 12. RabbitMQ 工作方式 ● Work Queues ● Publish/Subscribe ● Routing ● Topics ● RPC
  • 17. 一个行为触发多个任务 ● 添加在原来的任务中 ● 发送多个不同的消息 ● 采用 Publish/Subscribe 方式
  • 18. 问题出现 ● 访问量增加,工作进程增加 ● 业务复杂,消息类型增加 ● 不能动态配置任务 ● 代码经常更新,系统频繁启停 ● 可能中断正在执行的任务 ● 大量工作进程驻留在内存
  • 19. 我们的需求 ● 使用 Publish/Subscribe 方式 ● 简单灵活的配置 ● 动态更新代码 ● 方便的进程管理 ● 空闲时,释放资源 ● RPC
  • 21. RabbitMQ 的 RPC 实现方式
  • 23. 为什么使用 Erlang 实现 ● 原生的分布式支持 ● 支持代码动态更新 ● 成熟的 OTP 方案 ● 进程管理方便 ● 我们熟悉 Erlang 开发
  • 25. 分布式 ● Erlang 原生的支持 ● 动态增删节点 ● 去中心化 ● 同步各节点的配置
  • 26. 消息分发 ● 一种消息类型对应一个消息队列 ● 一个任务可以接收多种消息类型 ● 一个任务可以动态配置工作进程的数量
  • 27. 定时器 ● 类似 crontab 的定时器配置 ● 基于消息 ● 集群中一种定时器只有一个实例 ● 错误处理
  • 28. API ● Publisher: JSON-RPC ● Subscriber: BERT-RPC
  • 29. RPC ● 客户端、服务端协议均为 RPC ● Erlang 内部使用 Cast/Call ● 使得更进一步拆分 Web 成为可能
  • 30. 动态配置 ● 把消息转发的配置工作统一到 YPTask 中  只要指定消息的名字和消息内容 ● 动态配置、动态更新  修改配置之后只要重新启动相应的工作进程
  • 33. 迁移 ● 仍然采用 Python 实现工作进程 ● 简化消息发布方式,一个事件只发一条消息 ● 统一配置管理,业务代码专注于业务逻辑 ● 再一次做拆分
  • 34. YPTask 特点 ● 简单的配置 ● 灵活的消息分发 ● 支持大量的任务 ● 能够动态更新代码,不间断运行 ● 支持异构的后台任务 ● 支持 RPC
  • 35. TODO ● 消息持久化 ● 多种语言支持 ● 多种客户端协议支持 ● 优化配置管理界面 ● 开放源代码
  • 36. 一些经验 ● 拆分业务逻辑,让 web 只处理最少的事情 ● 拆分系统架构,利用已经实现的工具 ● 利用成熟的方案,能够带来高效的实现 ● 让处理业务的代码只处理业务,其它事交给别人 去做