欢迎来到天天文库
浏览记录
ID:52471901
大小:1.55 MB
页数:38页
时间:2020-03-27
《Yupoo (花瓣网-又拍云) 架构中地消息与任务系统.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、又拍网架构中的消息/任务系统赵钟秋belltoy又拍网程序员2011.10又拍网简介●照片分享社区●2005年建站●500万用户●超过3亿张照片http://www.yupoo.com/又拍图片管家简介●面向企业用户●图片存储、外链、展示服务●2010年上线●超过10亿张图片●图片日访问量超过2亿次http://v.yupoo.com/又拍云简介●通用大规模存储服务文件云存储图片云计算●高度可扩展的API●防盗链●存储+CDN类似AmazonS3+CloudFronthttp://www.upyun.com/花瓣网简介●2011年1
2、1月上线●收集、发现网络上你喜欢的事物●Node.js+又拍云http://huaban.com/后台任务后台任务●由用户或者定时触发●耗时长●异步执行系统架构任务系统的组成消息分发进程管理工作进程RabbitMQ●开源●Erlang实现●高级消息队列协议(AMQP)实现●分布式RabbitMQ组件●交换器(Exchange)directtopicheadersfanout●队列(Queue)●绑定(Binding)RabbitMQ工作方式●WorkQueues●Publish/Subscribe●Routing●Topic
3、s●RPCRabbitMQ工作方式Worker接收消息PHP发送消息基于RabbitMQ的实现一个行为触发多个任务●添加在原来的任务中●发送多个不同的消息●采用Publish/Subscribe方式问题出现●访问量增加,工作进程增加●业务复杂,消息类型增加●不能动态配置任务●代码经常更新,系统频繁启停●可能中断正在执行的任务●大量工作进程驻留在内存我们的需求●使用Publish/Subscribe方式●简单灵活的配置●动态更新代码●方便的进程管理●空闲时,释放资源●RPC基于RabbitMQ的实现RabbitMQ的RPC实现方式基于YPT
4、ask的实现为什么使用Erlang实现●原生的分布式支持●支持代码动态更新●成熟的OTP方案●进程管理方便●我们熟悉Erlang开发YPTask系统内部进程树分布式●Erlang原生的支持●动态增删节点●去中心化●同步各节点的配置消息分发●一种消息类型对应一个消息队列●一个任务可以接收多种消息类型●一个任务可以动态配置工作进程的数量定时器●类似crontab的定时器配置●基于消息●集群中一种定时器只有一个实例●错误处理API●Publisher:JSON-RPC●Subscriber:BERT-RPCRPC●客户端、服务端协议均为RPC●
5、Erlang内部使用Cast/Call●使得更进一步拆分Web成为可能动态配置●把消息转发的配置工作统一到YPTask中只要指定消息的名字和消息内容●动态配置、动态更新修改配置之后只要重新启动相应的工作进程YPTask系统配置界面新的消息收发实例迁移●仍然采用Python实现工作进程●简化消息发布方式,一个事件只发一条消息●统一配置管理,业务代码专注于业务逻辑●再一次做拆分YPTask特点●简单的配置●灵活的消息分发●支持大量的任务●能够动态更新代码,不间断运行●支持异构的后台任务●支持RPCTODO●消息持久化●多种语言支持●多种客
6、户端协议支持●优化配置管理界面●开放源代码一些经验●拆分业务逻辑,让web只处理最少的事情●拆分系统架构,利用已经实现的工具●利用成熟的方案,能够带来高效的实现●让处理业务的代码只处理业务,其它事交给别人去做加入我们job@yupoo-inc.com谢谢
此文档下载收益归作者所有