• 12306火车售票系统设计方案


    12306火车售票系统设计方案

    简介

    本项目是尝试实现12306的网上售票系统,尽量接近真实的12306系统。在上一篇文章中,我们分析了系统的概念设计与需求分析。下面我将通过给出分解视图、依赖视图、执行视图、实现视图、部署视图和数据库实现来描述项目的完整设计方案。

    分解视图

    ​  项目采用微服务架构,对模块进行垂直拆分并水平扩展,保证系统的高性能。

    不同模块可能放在不同的机器上,通过PRC调用
    TicketServer为购票服务,负责接受前端的请求,生成订单,然后进行处理
    ReTicketServer为退票服务
    StaticSearchServer是静态搜索功能,检索静态数据,如站点等
    UserServer是用户相关的服务
    CandidateServer是候补服务,通过轮询访问票池是否还有余票,或者是退票
    DynamicSearchServer动态数据的查询,负责处理经常变化的数据的查询,例如余票的查询
    PayServer负责支付和退款服务
    TicketPool票池,用来存储和计算余票情况

    依赖视图

    模块之间通过RPC调用,不同服务放在不同机器上,访问频率较高的操作搭建集群。

    依赖视图

      分多个模块,对几个复杂的执行过程做时序图。
    

    支付

    退票

    购票

    实现视图

    12306A/       12306后端A小组

    |------rpc       grpc相关的接口和协议文件

    |   |------pay     pay服务器的rpc代码, 同理如果是user服务应该在该文件夹下建立user文件夹

    |     |------proto  .proto文件存放

    |     |------client  grpc客户端, grpc服务再server中自己实现

    |------server      每个微服务项目

    |   |------candidate  候补服务器

    |      |------controller  控制层,数据的接受的校验

    |      |------service  服务层,业务逻辑

    |      |------model  模型层,与数据库连接

    |      |------redis  缓存连接

    |      |------setting  配置服务

    |      |------config  配置文件存放

    |   |------pay     支付服务器

    |   |------reticket   退票服务器

    |   |------search   搜索

    |     |------dynamic  动态搜索

    |     |------static  静态搜索

    |   |------ticket    购票服务器

    |   |------user     用户服务器

    |------ticketPool     线程池服务,主要是对内提供服务

    部署视图

    数据库

    技术选型说明

    开发方法:
      主要采用面向接口的方式进行开发,尽量解耦合,模块之间通过RPC调用,这样能够很好的保持软件的可维护性和可扩展性。

    保证软件的安全性
    采用JWT技术和gin框架自带的validator对所用的数据进行验证,拒绝非法数据,使用token拒绝过期服务。

    性能要求
    因为票是动态变化的,所以查询与购票需要遍历很多数据,我们尽量减少模块之间的网络通信时间,达到高性能的要求。redis是一个K-V内存数据库,我们使用redis缓存最近的车票信息,减少对外存的访问,而且将余票信息存在在内存中,这样可以快速计算余票。

    开发主要语言:Golang

    开发环境:Windows10,MacOS

    部署环境:Docker+Ubuntu

    开发工具:Goland,VSCode

    测试方案:wrk性能测试,配合前端进行黑盒测试,postman

  • 相关阅读:
    深入理解 Netty-新连接接入
    深入理解 Netty-Channel架构体系
    深入理解 NioEventLoop启动流程
    深入理解 NioEventLoopGroup初始化
    java8-Stream
    WebSocket+Netty构建web聊天程序
    Jpa 笔记
    观察者模式
    一只垂直的小爬虫
    字符集编码全方位解析
  • 原文地址:https://www.cnblogs.com/tomyu123/p/14207646.html
Copyright © 2020-2023  润新知