诗歌社区架构设计
基础架构沿用喵书的用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的静态服务。