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


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

    1. 代码解耦程度不够 11
    2. 可变数据的存储 11
    3. 消息推送的弹性设置 11
    4. 分布式数据库 11
      六、心得体会 11

    一、需求分析
    功能需求
    用户系统
    包括普通用户和司机的注册、登录、退出。

    会员积分
    普通用户支持按照打车里程进行积分,并升级为不同的会员等级。

    约车服务
    司机可以设置开始/结束接单,用户可以发起/取消约车请求

    派单服务
    系统向距离用户较近的若干个司机发送约车信息,司机自行选择接单。

    订单服务
    用户上车后形成订单,用户到达目的地,司机提交费用,用户支付后订单结束,订单可查询

    评价服务
    用户可以查看接单司机的评价,在订单完成后可以对接单司机进行评价。

    消息推送服务
    系统向用户推送司机接单消息 系统向司机推送用户约单消息。
    质量需求
    系统规模
    一年内注册用户数可达5000万,日均订单800万,高峰时段每小时200万订单。

    分布式需求
    可以通过扩展部署多台服务器的方式达到预期容量需求

    用户体验
    95%的用户请求响应时间不超过1秒钟
    二、设计
    业务逻辑设计
    数据库实体设计
    实体设计较为简洁,包括顾客,请求订单,订单,司机,司机评价,司机请求订单。 顾客只有一个请求订单,本文转载自http://www.biyezuopin.vip/onews.asp?id=14918 可以有多个订单(订单列表)。 司机可有个司机评价,多个订单,多个请求订单。

    package cn.bupt.driverserver.entity;
    
    import com.fasterxml.jackson.annotation.JsonView;
    import lombok.Data;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.List;
    
    @Data
    @Entity
    public class Driver implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long id;
    
        //    @ManyToMany(fetch = FetchType.EAGER)
    //    @JoinTable(name="driver_rOrder",joinColumns = {@JoinColumn(name = "d_id")},inverseJoinColumns = {@JoinColumn(name = "r_id")})
    //    @ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
    //    private List requestOrderList;
    //    private List requestOrderList = new ArrayList<>();
    
        @OneToMany(cascade = CascadeType.ALL)
        private List<OrderForUser> orderForUserList;
        //    @JoinColumn(name = "driver_id")
        @OneToMany(cascade = CascadeType.ALL)
        private List<RequestOrderForDriver> requestOrderForDriverList;
    
    //    private List orderList = new ArrayList<>();
    
        @OneToMany(cascade = CascadeType.ALL)
        @JoinColumn(name = "driver_id")
        private List<Comment> commentList;
    //    private List commentList = new ArrayList<>();
    
        private int ifLogin;
        //    private Order curOrder;
        private Long curOrderId;
        private String curCustomerName;
    
        @JsonView(Views.Public.class)
        private String driverName;
        @JsonView(Views.Internal.class)
        private String email;
        @JsonView(Views.Public.class)
        private String password;
    
        // 司机完成订单次数 完成订单总里程
        @JsonView(Views.Public.class)
        private int finishCount;
        @JsonView(Views.Public.class)
        private int finishDistance;
    
    
        @JsonView(Views.Public.class)
        private int serviceLevel;
        @JsonView(Views.Public.class)
        private int driverPoint;
        //    @JsonView(Views.Public.class)
    //    private int driverDistance;
        @JsonView(Views.Public.class)
        private int driverLevel;
    
        @JsonView(Views.Public.class)
        private double stars;
        //    private String driverLevel;
    
        @JsonView(Views.Internal.class)
        private int ifBusy;
        @JsonView(Views.Internal.class)
        private int curX;
        @JsonView(Views.Internal.class)
        private int curY;
        @JsonView(Views.Internal.class)
        private int desX;
        @JsonView(Views.Internal.class)
        private int desY;
    
    //    @JsonView(Views.Internal.class)
    //    private double curX;
    //    @JsonView(Views.Internal.class)
    //    private double curY;
    //    @JsonView(Views.Internal.class)
    //    private double desX;
    //    @JsonView(Views.Internal.class)
    //    private double desY;
    
    //    public Driver()
    //    {
    //        this.ifLogin = 0;
    //        this.curCustomerName = "";
    //        this.driverLevel = 0;
    //        this.email = "";
    //        this.password = "";
    //        this.finishCount = 0;
    //        this.finishDistance = 0;
    //        this.serviceLevel = 0;
    //        this.driverPoint =0;
    //        this.driverLevel = 0;
    //        this.stars = 0;
    //        this.ifBusy=  0;
    //        this.curX = 25;
    //        this.curY = 25;
    //        this.desX = 25;
    //        this.desY = 25;
            this.requestOrderList = new ArrayList();
            this.orderList = new ArrayList();
            this.commentList = new ArrayList();
    //    }
    
    
    }
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    Python元组(Tuple)定义和操作示例
    网络原理---拿捏传输层:TCP/UDP协议
    Java学习苦旅(十五)——异常
    卷麻了,00后测试用例写的比我还好,简直无地自容......
    vtk之【vtkPolyData、vtkCell、vtkPoints】
    毕业设计 基于单片机的智能盲人头盔系统 - 导盲杖 stm32
    [附源码]Python计算机毕业设计SSM酒店客户管理系统(程序+LW)
    中科磐云题目——报错注入 解析(flag)
    VR全景拍摄酒店,为用户消除“不透明度”
    【数据集|COCO】COCO格式数据集制作与数据集参数计算
  • 原文地址:https://blog.csdn.net/newlw/article/details/127039644