Software Architecture Document
架构问题
鉴权
由于系统需要控制用户的访问权限,以保证对用户、组织及其任务的对应访问权限,因此需要对API进行鉴权。即将顾客端API不允许餐厅端调用,餐厅端API也不允许顾客端调用。此外,还有部分API是允许未登录用户调用,而部分API必须登录用户才能调用。
- 因素:系统需要区分用户的访问权限。
- 度量和质量场景:当权限正确时返回/修改/创建/删除对应资源。当权限错误时返回403错误码。
- 可变性:根据用例图预定义的内容进行区分。
- 该因素对涉众、架构以及其他因素的影响:保护用户数据安全、避免系统被 DDOS 攻击
- 对于成功的优先级 :中
- 困难或风险:中
可扩展的结构
服务端需要一个可扩展的结构对服务进行分层,从而兼顾开发效率和运行效率。
- 因素:系统需要可扩展的结构对服务进行分层。
- 度量和质量场景:讲后端结构拆分为功能单一的模块,增强可读性。
- 可变性:根据引入不同的功能在该层增加中间件。
- 该因素对涉众、架构以及其他因素的影响:降低各部分耦合、提高开发效率
- 对于成功的优先级 :高
- 困难或风险:中
可靠性和可恢复性
在出现一台服务器宕机时,服务应当能转移到其他冗余上运行;在出现全部服务器宕机时,原先的服务应当可恢复。
- 因素:使用过程中出现访问服务端中断问题并进行恢复。
- 度量和质量场景:当前端访问服务端中断时,前端会在一段时间后重新发起请求,如果服务器上线,则服务将继续运行。
- 可变性:在能够重新建立连接之前,可以在前端进行等待提示。
- 该因素对涉众、架构以及其他因素的影响:数据传递可能丢失,而没有重新请求的机制保证重传
- 对于成功的优先级 :高
- 困难或风险:中等
可支持性和可适用性
- 因素:支持多种可变的第三方服务(支付系统等)
- 度量和质量场景:当前端访问第三方系统时可正常建立连接
- 可变性:对于不同的第三方服务需要可连接的接口
- 该因素对涉众、架构以及其他因素的影响 :提高系统的可扩展性
- 对于成功的优先级 :中等
- 困难或风险:中等
解决方案说明
鉴权
服务端在路由层通过对 JWT 的判断将 API 权限分为以下3类:
- onlyOwner:只有用户是对应的资源拥有者时才可以调用
- onlyLogin:只有用于已登录时才可以调用
- 无鉴权层:任何人都可以调用
可扩展的结构
- Router:路由层,根据API路由到不同Controller
- Authorize:鉴权层,提供API鉴权服务
- Controller:控制层,处理HTTP请求,收集参数,检查参数类型和合法性
- Service:服务层,处理业务逻辑
- Model:数据层,与数据库交互
如何提高服务器性能
- 增加服务器内存
- 限制同时服务的最多用户数,避免服务器负载超荷
- 将动态数据存储到静态文件中,前端直接调用,而不必再访问数据库
- 利用 web-cache 减少查询的开销
- 优化数据库的查询SQL,避免使用代价高昂的查询,每次查询只返回自己需要的结果
- 数据库适当建立索引
逻辑视图

物理视图
