[关闭]
@yanglfyangl 2018-08-03T07:02:50.000000Z 字数 1504 阅读 618

写设计文档的示例

设计的重点

  1. 新功能的数据流是怎么样的
  2. 有没有异步处理部分,如何工作
  3. 如何使用缓存,如何使用库。
  4. 解决方案新增或更改了多少模块,各模块的作用是什么
  5. 为什么你的解决方案能达到一定的并发和稳定性要求。

需求分析:

主要需求包括如下几点

  • 支持按城市,按类型,按XXX设置广告。
  • XXX
  • XXX
  • XXX

(列举出主要的需求点、需要特别关注的点)

非功能性需求会考虑如下的点

  • 性能要求高。
  • 会通过定时job刷新缓存。
  • XXX

设计要点

  • 所有的访问不能打数据库,用于保证性能。
  • 通过job来更新缓存,供前端调用。
  • XXX

主要流程图

(根据业务可选)

Created with Raphaël 2.1.2开始缓存中读广告Yes or No?完成报错yesno

调用序列图示例

Created with Raphaël 2.1.2用户用户ControllerControllerServiceA(s)ServiceA(s)DBDBCacheCacheQueueQueueBackendServiceA(s)BackendServiceA(s)JobServiceA(s)JobServiceA(s)写数据写数据写库完成完成写缓存入队列读队列逻辑处理写库写缓存定时处理相关逻辑结果写缓存结果写DB读数据读数据读缓存如果缓存中存在返回否则,读库写缓存返回

主要接口定义

注:为了保证文档尽可能合理大小
1. 不是让大家把所有的API全列出来,需要列出来的是本功能需要的主要接口
2. 入参出参也不需要特别完整,但重点部分需要列举出来
1. 退出圈子

  1. /*
  2. para {
  3. ...
  4. userID:
  5. }
  6. return:{
  7. }
  8. */
  9. @RequestMapping(value = "quite", method = RequestMethod.POST)
  10. public ReturnData quiteCircle(@RequestBody Map<String, Object> jsonPara) throws Exception {
  11. ...
  12. //重要逻辑是:
  13. // 1. aaa
  14. // 2. bbb
  15. }
  1. 加入圈子
  1. /*
  2. */
  3. @RequestMapping(value = "add", method = RequestMethod.POST)
  4. public ReturnData addCircle(@RequestBody Map<String, Object> jsonPara) throws Exception {
  5. }

数据库定义

不需要把所有字段全列举出来,主要列举的是与逻辑非常相关的部分。以及描述与性能相关的部分。
1. 库A
主要作用是:保存用户关系的信息

字段 是否索引 描述
usrID 存储用户的ID,用于XXX
friendID 用户好友的ID
... ... ...

2. 库B
主要作用是:保存大V用户关系

字段 是否索引 描述
usrID 存储用户的ID,用于XXX
fansgroupID 粉丝群的ID
... ... ...

主要的查询关系

1 获取用户粉丝列表

  1. select * from A where ...

2 获得粉丝数

  1. select * from A where ...

缓存定义

Key 类型 描述
fans_{circle}_{usrID} List 存储某个用户在某个圈子里的粉丝数
... ... ...

ES设计

暂无

队列定义及格式

1 加入圈子到搜索

  1. "topic":"shensou"
  2. "format":{
  3. "type":"joinToCircle"
  4. "data":{
  5. "usrID":"加上字段描述"
  6. "..."
  7. }
  8. }

有哪些接口测试

为了测试上面功能,我们做了如下的测试

用例名 描述 测试缓存? 测试数据库? 测试ES? 测试图引擎?
test_ad_XXX 测试广告读取 不需要 不需要
test_bc_XXX 测试广告读取 不需要 不需要
... ... ... ... ... ...
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注