目前所有服务部署在两台4core/8Gb的云主机上, 架构分成四个部分,简单解释一下,分别对应图中的数字标识

moboq tech stack

  1. front-end & web server 目前的front-end和web server放在一起,考虑到流量和成本, 还不需要单独做软负载均衡,前面有cdn挡掉了大部分请求流量。 Web服务器主要用的是高性能的Nginx+Passenger的组合,用来跑Ruby/Rails。 也是目前比较流行的做法,相比Apache,Nginx更轻便灵活,以后scale out方便。

  2. common services 公共服务目前主要是消息队列,邮件服务以及类似comet的推送服务faye。 目前对图片存储需求不高,暂时本地,后面会使用外部云存储以分担流量和cpu计算。 队列是delayed_job,主要起到请求缓冲作用,较慢的请求操作都会丢到队列中,比如,感谢时候发送微博。 邮件服务部分使用了sendgrid付费服务,价格和统计服务都ok。

  3. computing core services 是面包圈核心查找用户,推拉消息以及发送通知的模块, 目前正在迁移一些老的Python代码,以及把微博的API升级到新版本 。 这块主要是受到外部api的限制,本身没有高负载的请求,涉及到一些查询匹配算法,cpu计算会多一点。

  4. database & storage 主要分两块,持久和内存存储, 主要RDBMS存储用的mysql,担不是官方版本,oracle收购后已经表现出无力一面, 面包圈用的是mysql创始人目前维护的maria存储引擎版本,兼容官方并且支持更高的并发和更佳性能。 不用mangodb等nosql是因为没有看到特别亮点地方,唯一scale见长的地方,mysql的sharding操作并非困难, 而且dw/olap做数据分析用RDB会更方便。

网站多处使用了内存缓冲,包含静态文件,rails中的cache等,这块以后会更多使用和总结。