论文部分内容阅读
随着人们生活节奏的不断加快,乘坐私家车已成为人们非常普遍的一种出行方式。在私家车数量高速增长的同时,停车场数量的增长却略显缓慢,所以,乘车出行首要面临的就是停车难问题。目前已经发布的停车APP大多采用封闭式的信息采集模型,这种模式一方面由于需要专门雇员不断走访线下停车点,使得停车点信息更新不够及时,另一方面需要平台研发或购买专门的硬件设备来提供车位信息服务,使得平台成本增加。为解决上述问题,本文提出了基于众包的停车场信息共享平台,平台内的所有内容都由大众完成,与此同时,也是对平台性能的一种考验。为了提高系统整体吞吐量,本论文基于微服务架构设计Web Server,并采用NIO技术以及Reactor模型设计Push Server。首先,本文在服务前端设计并实现了接收用户请求的网关模块,网关采用Servlet3.1的异步模型进行开发,采用HTTP/2协议与用户通信,并采用RPC技术与微服务通信,大大增加了数据传输效率并且降低了网络延迟。使用ZooKeeper作为微服务配置中心,实现了动态添加服务,并将用户请求映射到相应的微服务上,利用授权中心微服务实现了在前端网关即可拦截大部分非法请求。其次,本文所有功能模块都基于微服务架构进行设计。后端的所有功能模块都独立开发、部署、运行。授权中心微服务将用户Token与用户真实身份做映射缓存于Redis,Token过期强制用户重新登录。在微服务调用时,会使用独立线程池对RPC调用逻辑进行降级、隔离、熔断等操作,降低了服务对整个系统的负面影响。最后,本文实现了实时推送车位信息功能。与Web Server不同,用户并不与Push Server直接产生交互,而是使用Client的Service机制在后台进行交互。Push Server使用NIO作为基础技术并使用Reactor模式进行设计开发,Client鉴权成功后与Push Server建立加密通道并使用Protobuf进行消息序列化传输,采用心跳、断线重连等机制,避免Client异常离线而带来的异常。由于用户车位信息通过Web Server上报,所以Push Server使用MQ与Web Server进行桥接,并使用Redis做缓存,从而实现完整的推送逻辑。