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

目录
一、需求分析 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<RequestOrder> requestOrderList;
//    private List<RequestOrder> 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<Order> orderList = new ArrayList<>();

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "driver_id")
    private List<Comment> commentList;
//    private List<Comment> 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<RequestOrder>();
        this.orderList = new ArrayList<Order>();
        this.commentList = new ArrayList<Comment>();
//    }


}

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>