诗歌社区架构设计

基础架构沿用喵书的用maven管理的垂直水平相结合的分层架构rest-api后端数据接口+angular-SPA前端应用。

在此基础上,分为以下服务器。

诗歌社区服务器架构

应用服务器

承载了主要的业务逻辑,使用Mysql、Redis作为持久层。

鉴权模块

提供身份验证相关的所有服务:

  • 创建token
  • 删除token
  • 通过token查询用户及权限,用户可能包括网站用户与管理员

将根据token验证身份的暴露为rest api供其他服务器使用。

从MySQL中查询用户及权限信息

利用Redis保存token,设置失效时间,将token值作为key以最快查询

用户消息服务器

技术选型

  • nodejs框架socket.io提供websocket服务
  • redis作为消息数据源
  • request作为http-client与鉴权服务器通信

需求

  • 提供websocket服务接口ws://www.spoem.me/message/live,连接成功后,服务端循环查询redis,一旦出现未处理消息就推送给客户端
  • 所有用户相关接口必须访问鉴权服务器进行身份验证,验证失败则断开连接

MySQL数据库

保存业务数据。

应用服务器、鉴权服务器访问同一个schema,否则会出现犁书项目两个schema之间userid不一致的错误。

可以考虑使用不同的MySQL用户来限制鉴权服务器对数据库的读写操作。

Redis数据库

保存一些缓存性质的数据,如token、手机验证码等。

持久化消息数据,转移消息服务器循环查询消息数据对MySQL的负担,使用前缀+用户名+topic+status作为key来优化查询效率。

ActiveMQ异步消息队列服务器

目的

  • 异步处理业务,加快响应速度,提高吞吐量
  • 消息队列提高访问峰值承载能力
  • 代码解耦,在不是紧耦合的模块之间传递消息来处理支线流程

应用场景

  • 异步化用户点赞、用户阅读时创建数据的流程
  • 发送短信验证码
  • 其他松耦合、异步处理流程

Spring整合JMS

http://elim.iteye.com/blog/1893038

http://www.cnblogs.com/luochengqiuse/p/4685347.html

静态文件服务器

nginx提供html/css/js/media file的静态服务。