类去哪网(机票)的分布式架构网站
登录
、浏览网页
、刷新机票信息
等走日常服务器,刷新订单信息时先拉取缓存,如果不存在则拉取数据库。更新
:由更新服务器定期爬取机票供应商授权的api接口写入主网站的服务器,保证服务可用性。抢票
:- 前端向日常服务器发送创建订单请求,日常服务器初步检查是否有余量,如果有则创建订单(状态:RESERVED),无则返回拒绝。
- 创建成功订单后,前端向银行发送请求支付授权,用户登录银行账户并附带授权扣款金额,银行返回授权token(需验证余额充足,且token有时效性)。
- 获得token成功后,前端将token与订单号交给日常服务器,日常服务器检查订单信息,通过后将订单发送至消息队列,等待订单状态转化为SUCCESS/FAIL(每秒轮询数据库),返回前端订单状态。
- 订单服务器从消息队列中获得订单信息,先向机票供应商确认订单存量信息,若存量不足或服务失效,修改订单状态为FAIL,若存量充足则先担保下单,并使用token向支付提供商要求扣款,若扣款成功则修改订单状态为SUCCESS。
订单状态有:RESERVED / SUCCESS / FAIL
.
├── assets # 各种静态资源
├── docs
│ ├── protocol.js # 前后端交互协议
│ ├── 架构设计.xmind # 架构设计xmind文件
│ └── 项目要求.txt # 老师提出的项目要求
├── Servers
│ ├── daily # 日常服务器源文件
│ ├── flight # 航班供应商服务器源文件
│ ├── order # 订单服务器源文件
│ ├── payment # 支付提供商服务器源文件
│ └── update # 更新服务器源文件
│
├── accounts.js # 各种附件的密码文件(gitignore)
├── staticWeb # 前端网页源文件
├── README.md
└── * # 其他文件
npm run dev-web # 开始开发前端网页
npm run build-web # 编译前端网页
npm run dev-server-daily # 开发日常服务器
npm run dev-server-order # 开发订单服务器
npm run dev-server-flight # 开发航班供应商服务器
npm run dev-server-payment # 开发支付提供商服务器
- 三个角色:
主网站(android APP+server)
:人机界面的显示机票供应商(多家)
:提供某种方式的服务调用接口,供主网站进行调用支付服务提供商(多家)
:提供服务供主网站进行调用
- 功能方面的设计(可以考虑但不限于以下功能)
主页
:用户注册登录、浏览各个代理商的机票价格(可以查询、排序、多个时间段最低票价的搜索。。。)、可以进行订单的管理(下订单、查询删除订单),前段建议采用ajax的方式进行服务调用代理商
:登录自己的服务器进行增加删除修改实时机票信息的管理,可以查询订票的相关信息、提供机票查询、订票的相关服务给主页网站进行调用。银行
:客户账户的管理(增删改),可以进行帐单的查询(银行客户),银行后台管理可以查询统计每一笔交易信息,提供扣款等服务供主页网站调用
- 分布式服务调用的设计
服务的方式
:同步(RPC,WEBSERVIC等),异步(消息队列)服务的治理
:代理商和银行的服务如何注册、查找,服务的可用性如何保证(如服务提供者关机维护、网络掉线等)系统性能
:访问者数量比较高,如何避免主网站变慢、查询时间长、宕机等情况出现服务的有效性
:如果保证7*24不间断的服务
验收方案: 机房现场运行程序 如需报优,直接在教室PPT+运行演示 需要编写实验报告,格式随后发给大家