需求描述
为了帮助学生在课间快速转移教室,校方决定推出免费的电子滑板共享服务。学生可以使用学生证号码锁定/解锁(只能在校园内使用滑板)。校方希望收集和记录滑板的使用数据(路线/小时/用户)。让我们为这项服务设计一个DCS网络系统。注:本项目不允许使用微信、支付宝API
解决方案
总体架构
主服务服务器群集Main Service Server Clusters:使用代理服务器处理核心服务功能(详见Tolerance Archi 2)
每辆滑板车具有连接蓝牙和wifi的功能:
- 用蓝牙规范‘区域限定 / 地理围栏’,不允许滑板车出校门。
- 用wifi进行命令传输,供同学‘锁定/解说’滑板。
通用软件层模型
容错架构模型
这副结构图列举出了分布式系统可能发生的错误 (服务器崩溃,数据传输遗漏,数据传输超时,无法解释的Byzantine错误)
这些错误生成了异常信息,这些信息被传递给 ‘软件’ 和 ‘管理员’ 进行故障诊断。
如果检测结果为 ‘ 组件异常 ’ ,则(箭头向下) 系统自动恢复 或 人工修复系统
如果检测结果为 ‘ 工作量影响 ’ ,则(箭头向右) 通过‘负载平衡’技术,尽量给每个服务器分配平均的工作量,提升系统表现。
LVS用于将外部请求平均分配给后端的所有服务器。
Nginx作为反向代理服务器,将请求分配给具有相应功能的服务器
在这个系统中,我们让每一个服务器承担特定的功能。‘lock’,‘find’,‘search’ 都是根据其功能命名的服务器。在这里,由于search的请求较多,我们安排了两个服务器处理search请求。
使用redis维护数据的一致性。
备份数据库以提高系统容错性。