基于Spring Cloud + MyBatis的分布式架构网约车平台(DD 打车)后端原型系统设计与实现
接下来分配出 1 个服务消费者 client,包括乘客端的前端页面和后台接口、司机端的前端页面和后台接口,乘客/司机直接访问的资源都保存在服务消费者中,然后服务消费者 client 调用 3 个服务提供者 account、demand、order 对应的接口完成业务逻辑,并通过 Feign 完成负载均衡,通过 Hystrix 实现服务降级和限速,达到微服务的自我保护能力。查询订单和订单处理;本项目
资源下载地址:https://download.csdn.net/download/sheziqiong/85638879
资源下载地址:https://download.csdn.net/download/sheziqiong/85638879
一、目录
二、课程设计题目
分布式架构网约车平台(DD 打车)后端原型系统设计与实现
三、课程设计目标和要求
设计目标:
某互联网网约车平台(DD 打车)业务快速发展,预计一年内注册用户数可达 5000 万,日均订单 800 万,高峰时段每小时 200 万订单。根据这一需求设计一套分布式可伸缩的网约车平台后端原型系统。
主要功能要求:
- 用户系统:包括普通用户和司机用户的注册、登录、退出等。
- 会员积分:支持按打车里程进行积分,并升级为不同的会员等级。
- 约车服务:司机可以设置开始/结束接单,用户可以发起/取消约车请求。
- 派单服务:系统向距离用户较近的若干司机发送约车信息,司机自行选择接单。(如果实现不了消息推送的话可以简化为前端轮询请求状态更新)
- 订单服务:用户上车后形成订单,用户到达目的地,司机提交费用,用户支付后订单结束,订单信息可查询。
- 评价服务:用户可以查看接单司机的评价,在订单完成后可以对接单司机进行评价。
性能要求:
- 可以通过扩展部署多台服务器的方式达到预期容量需求
- % 的用户请求响应时间不超过 1 秒钟
扩展要求:
- 优化高峰时段车辆不足时的派单策略
- 支持消息推送服务
其它要求:
- 根据设计方案估算出达到预期性能时需要部署的服务器数量及类型,给出测算过程
- 测试环境:不少于两节点(也可以是虚拟机或 docker)部署,模拟用户请求,进行性能测试。
四、开发环境
- 开发平台:Windows 10
- IDE:IDEA 2020.1.1
- 数据库:MySQL 5.7.11
五、需求分析
本项目包含用户登录界面(完成乘客与司机的登录与注册功能),按照的登陆身份的不同,再分为乘客端和司机端两个用户界面。
乘客端:
乘客端包含用户退出登录;查询积分和会员等级;发起约车需求、取消约车、查询正在申请的约车;查询订单和订单处理;查看接单司机的评价,对接单司机进行评价。
司机端:
司机端包含用户退出登录;查询可接单项目、接单或者取消接单。
为了保证该系统是可伸缩的、易部署和易维护的分布式系统,可以采用 Spring Cloud 系列框架。Spring Cloud 利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,还可以将 Spring Boot 的开发风格做到一键启动和部署。
六、设计
6.1 设计方案
- 需求了解完之后,接下来设计系统架构,首先分配出 3 个服务提供者,account、demand、order。
- account 提供账户服务:乘客和司机登陆。
- demand 提供下单服务:用户选择地点、终点形成订单,并按打车里程生成相应的积分
- order 提供订单服务:查询订单、删除订单、处理订单(当司机接单之后 demand 就变成了 order)。
接下来分配出 1 个服务消费者 client,包括乘客端的前端页面和后台接口、司机端的前端页面和后台接口,乘客/司机直接访问的资源都保存在服务消费者中,然后服务消费者 client 调用 3 个服务提供者 account、demand、order 对应的接口完成业务逻辑,并通过 Feign 完成负载均衡,通过 Hystrix 实现服务降级和限速,达到微服务的自我保护能力。
3 个服务提供者和 1 个服务消费者都需要在注册中心 eureka 完成注册,同时注册配置中心,服务提供者和服务消费者的配置信息保存在配置中心 config。
关系如下图所示:
6.2 部署方案
微服务数量众多且相互之间存在复杂的依赖关系,为了使微服务架构能高效、稳定正确运行,可以提炼出些基础组件:
- 服务注册与发现:当有大量的微服务时,需要个独立的组件来管理服务实例
- 服务调:OpenFeign 声明式 REST 调
- 负载均衡与路由网关:请求到来时,确定有哪个节点进行请求响应,还具备访问控制、日志记录、 服务适配、请求管理等
- 功能服务保护:断路器,服务降级和限速,微服务的自我保护能力
本次实验中整体采用 Spring Cloud 的微服务框架搭建,为了部署此 Spring Cloud 生态,我们采取了以下组件:
- Spring Cloud Eureka:Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一个组件,它基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。Eureka 由多个 instance(服务实例)组成,这些服务实例可以分为两种:Eureka Server 和 Eureka Client。为了便于理解,我们将 Eureka client 再分为 Service Provider 和 Service Consumer。
Eureka Server 提供服务注册和发现
Service Provider 服务提供方,将自身服务注册到 Eureka,从而使服务消费方能够找到 Service Consumer 服务消费方,从 Eureka 获取注册服务列表,从而能够消费服务
- Spring Cloud OpenFeign:Spring Cloud OpenFeign 作为 Spring Cloud 的子项目之一,Spring Cloud OpenFeign 以将 OpenFeign 集成到 Spring Boot 应用中的方式,为微服务架构下服务之间的调用提供了解决方案。首先,利用了 OpenFeign 的声明式方式定义 Web 服务客户端;其次还更进一步,通过集成 Ribbon 或 Eureka 实现负载均衡的 HTTP 客户端。
- Spring Cloud Gateway:网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能提供路由请求、鉴权、监控、缓存、限流等功能。它将"1 对 N"问题转换成了"1 对 1”问题。通过服务路由的功能,可以在对外提供服务时,只暴露网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。
gateway 三大核心概念:
- Route(路由):路由是构建网关的基本模块,它由 ID,目标 URI,一系列的断言和过滤器组成,如果断言为 true 则匹配该路由
- Predicate(断言):参考的是 java8 的 java.util.function.Predicate 开发人员可以匹配 HTTP 请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
- Filter(过滤):指的是 Spring 框架中 GatewayFilter 的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
- Spring Cloud Config 将配置信息中央化保存
- Spring Cloud Netflix-Hystrix:Hystrix 是 Netflix 开源的一款容错框架,具有自我保护能力。
Hystrix 设计目标:
- 对来自依赖的延迟和故障进行防护和控制——这些依赖通常都是通过网络访问的
- 阻止故障的连锁反应
- 快速失败并迅速恢复
- 回退并优雅降级
- 提供近实时的监控与告警
Hystrix 遵循的设计原则:
- 防止任何单独的依赖耗尽资源(线程)
- 过载立即切断并快速失败,防止排队
- 尽可能提供回退以保护用户免受故障
- 使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一个依赖的影响
- 通过近实时的指标,监控和告警,确保故障被及时发现
- 通过动态修改配置属性,确保故障及时恢复
- 防止整个依赖客户端执行失败,而不仅仅是网络通信
Hystrix 如何实现这些设计目标?
- 使用命令模式将所有对外部服务(或依赖关系)的调用包装在 HystrixCommand 或 HystrixObservableCommand 对象中,并将该对象放在单独的线程中执行。
- 每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。
- 记录请求成功,失败,超时和线程拒绝。
- 服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。
- 请求失败,被拒绝,超时或熔断时执行降级逻辑。
- 近实时地监控指标和配置的修改。
八、测试报告
8.1 测试环境
- 测试平台:Windows 10
- 测试 IDE:IDEA 2020.1.1
- 数据库:MySQL 8.0
- 压力测试工具:Apache Jmeter 5.4.1
8.2 功能测试情况
- 打开项目路径下的 onlineTaxi.sql 文件,完成数据库的连接与建库建表
- 优先启动 EurekaApplication,再依次启动完剩余的 Application
如图,所有的微服务程序都已启动
- 在浏览器访问 localhost:8761,即可查看在 Eureka 上注册并正在运行的实例
- 访问 localhost:9903 即可进入客户端界面
- 可以选择已乘客身份或者司机身份登录,又或者注册一个账户
数据库中已经存储有相应的账户,可直接测试使用
- 乘客端登录
- 司机端登录
- 开始测试约车
- 乘客端输入目的地开始约车
- 司机端可以收到约车请求,可以进行接单操作。
- 司机确认接单
- 司机接单成功,生成订单信息并按照距离计算费用
- 乘客可以在订单处理页面查看订单,并缴费
- 缴费完成之后会自动切换到评价页面,乘客可以输入司机名称和评价内容
- 查看评价
- 用户右上角可以退出登录和查看当前积分等级
资源下载地址:https://download.csdn.net/download/sheziqiong/85638879
资源下载地址:https://download.csdn.net/download/sheziqiong/85638879
更多推荐
所有评论(0)