资源下载地址: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

基于Spring Cloud + MyBatis的分布式架构网约车平台(DD 打车)后端原型系统设计与实现相关推荐

  1. 分布式架构网约车平台后端原型系统设计与实现

    目录 一.需求分析 1 功能需求 1 质量需求 2 二.设计 2 业务逻辑设计 2 分布式架构设计 4 三.实现 9 业务逻辑实现 9 分布式架构实现 9 四.测试与节点估算 10 五.问题分析 11 ...

  2. 【Spring Cloud 1】分布式架构入门,redis技术笔记

    1.什么是领域/子领域(Domain/Subdomain) 领域是与某个特定问题相关的知识和行为.比如支付平台就属于特定的领域,只要是这个领域,都会有账户.会记.收款.付款.风控等核心环节.所以,同一 ...

  3. 基于Spring Cloud的微服务架构

    关于基于Spring Cloud的微服务应用架构,网上已经有很多文章了,但我还是觉得把自己的架构过程和经验写下来,对自己来说算是知识和技术的梳理,对于误打误撞进来看到这篇文章的读者来说,或许也能起到一 ...

  4. 即插即用!开源项目【云框架】发布“基于Spring cloud的微服务架构”

    开发者面对新技术无非两个场景,一是不懂技术想要学习,二是懂技术想要使用. 前者需要考虑如何快速掌握技术原理并能把技术用起来,而后者需要琢磨如何花费最小代价将技术应用于生产环境. 换句话说,想要获得新技 ...

  5. 手写基于Spring Cloud的TCC分布式事务框架

    如何简单实现TCC分布式事务框架 最近听到很多其他公司的小伙伴谈分布式事务的问题,各种业务场景都有,可能就是这两年很多公司都在往微服务发展,现在各个子系统都拆分.建设的差不多了,实现了模块化开发,但是 ...

  6. (18) 基于时空多图卷积网络的网约车需求预测

    交通预见未来(18): 基于时空多图卷积网络的网约车需求预测 1.文章信息 <Spatiotemporal Multi-Graph Convolution Network for Ride-ha ...

  7. 滴滴宣布升级成立网约车平台和车主服务公司

    2019独角兽企业重金招聘Python工程师标准>>> 滴滴发布员工邮件,宣布组织架构升级.此次升级,滴滴核心业务和多部门都将进行合并.调整,其中专快车事业群合并,成立网约车平台公司 ...

  8. 斑马快跑已获3亿元新一轮融资,已成为全国第五大网约车平台

    10月23日消息,据猎云网消息,斑马快跑已完成3亿元新一轮融资.据悉,此轮融资主要用于市场运营. 北京千佳圆投资基金董事长杨岳表示,投资斑马快跑最主要的原因还是因为牌照.网约车新政颁布后,网约车要实现 ...

  9. 滴滴等8家网约车平台将增设“一键叫车”功能 便利老年人打车

    [TechWeb]12月28日消息,据交通运输部官网披露,日前,交通运输部运输服务司组织召开平台公司座谈会,研究便利老年人打车出行有关工作.曹操出行.滴滴出行.首汽约车.T3出行.高德地图.美团打车. ...

最新文章

  1. mfc 如何判断excel软件是否打开_教你windows如何关闭假死窗口,了解自己使用的电脑。...
  2. java 反射 静态域_java 内存 堆 栈
  3. eos交易同步过程和区块生产过程源码分析
  4. Appium+python的单元测试框架unittest(2)——fixtures(转)
  5. Ubuntu 源列表
  6. me shy是什么歌 抖音make_内含活动福利 | 小红书、抖音爆赞的高颜值的北欧家居神店开到卜蜂中心啦!...
  7. 终端服务器安全层在协议流中检测到错误,终端服务器安全层在协议流中检测到错误,并已取消客户端连接...
  8. sfs2x 连接 mongodb
  9. MyBatis 实现关联表查询
  10. idea怎么拉不同的git分支_idea中git分支、合并与使用
  11. Linux 学习手记(5):使用Vim文本编辑器
  12. 将win8安装在U盘的心得(七步搞定,无需用命令行分区,无需提取镜像)
  13. ubuntu18.04环境系安装指定版本gitlab-ce
  14. Windows Server 2008 R2 远程桌面服务RDS和VDI介绍
  15. java adt eclipse_Eclipse安装ADT插件
  16. pyqt 鼠标离开按钮_小米 Smart Pad 体验:表面它是个鼠标垫,其实还是个鼠标垫...
  17. matter协议的关键特性
  18. 图片去水印工具(Teorex Inpaint) v7.1
  19. 啥?学习微服务,你竟然不知道什么是熔断,降级和限流
  20. 浅谈Nginx转发匹配规则

热门文章

  1. 罗马音平假字复制_罗马音大全可复制app下载-罗马音大全片假名平假名可复制汉字软件 _5577安卓网...
  2. 安卓7.0原生暂不支持压感屏技术
  3. java web特点_Web开发特点
  4. 微博登录记录pythonurllib_定向爬虫 - Python模拟新浪微博登录
  5. SQL.176.(简单)第二高的薪水
  6. 产品经理基础--07用户端产品设计
  7. python创建长度为n的数组_使用numpy库创建N纬数组(ndarray)的四种创建方法
  8. 为什么软件开发论让你觉得糟糕?
  9. TypeError: unhashable type: 'bytearray'
  10. 【夜读】一个人的顶级自律、是坚持这四件事