基于Spring Cloud + MyBatis的分布式架构网约车平台(DD 打车)后端原型系统设计与实现 |
您所在的位置:网站首页 › 打车软件架构 › 基于Spring Cloud + MyBatis的分布式架构网约车平台(DD 打车)后端原型系统设计与实现 |
资源下载地址:https://download.csdn.net/download/sheziqiong/85638879 资源下载地址:https://download.csdn.net/download/sheziqiong/85638879 一、目录 二、课程设计题目分布式架构网约车平台(DD 打车)后端原型系统设计与实现 三、课程设计目标和要求设计目标: 某互联网网约车平台(DD 打车)业务快速发展,预计一年内注册用户数可达 5000 万,日均订单 800 万,高峰时段每小时 200 万订单。根据这一需求设计一套分布式可伸缩的网约车平台后端原型系统。 主要功能要求: 用户系统:包括普通用户和司机用户的注册、登录、退出等。会员积分:支持按打车里程进行积分,并升级为不同的会员等级。约车服务:司机可以设置开始/结束接单,用户可以发起/取消约车请求。派单服务:系统向距离用户较近的若干司机发送约车信息,司机自行选择接单。(如果实现不了消息推送的话可以简化为前端轮询请求状态更新)订单服务:用户上车后形成订单,用户到达目的地,司机提交费用,用户支付后订单结束,订单信息可查询。评价服务:用户可以查看接单司机的评价,在订单完成后可以对接单司机进行评价。性能要求: 可以通过扩展部署多台服务器的方式达到预期容量需求% 的用户请求响应时间不超过 1 秒钟扩展要求: 优化高峰时段车辆不足时的派单策略支持消息推送服务其它要求: 根据设计方案估算出达到预期性能时需要部署的服务器数量及类型,给出测算过程测试环境:不少于两节点(也可以是虚拟机或 docker)部署,模拟用户请求,进行性能测试。 四、开发环境 开发平台:Windows 10IDE: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。 关系如下图所示: 微服务数量众多且相互之间存在复杂的依赖关系,为了使微服务架构能高效、稳定正确运行,可以提炼出些基础组件: 服务注册与发现:当有大量的微服务时,需要个独立的组件来管理服务实例服务调: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 对象中,并将该对象放在单独的线程中执行。每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。记录请求成功,失败,超时和线程拒绝。服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。请求失败,被拒绝,超时或熔断时执行降级逻辑。近实时地监控指标和配置的修改。如图,所有的微服务程序都已启动 数据库中已经存储有相应的账户,可直接测试使用 资源下载地址:https://download.csdn.net/download/sheziqiong/85638879 资源下载地址:https://download.csdn.net/download/sheziqiong/85638879 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |