前言
本系列将介绍如果从零构建一套分布式系统。同时也是对自己过去工作的一个梳理过程。
本文先整理出构建系统的主要技术选型,以及技术框架。其实在形成如下框架前,我参考了许多资料和结构,也结合中小型公司的时间以及人力等因素综合。
选型
分布式调用框架
可选的有 dubbox, SpringCloud
dubboX:当当基于dubbo搞的,还在维护可以一用,推荐。
SpringCloud:整合了大量组件,相关文档比较复杂,需要针对性的进行阅读,学习成本还是需要一些。
最后选择:dubbox + zk +Spring Boot
云平台
可选方案:阿里云、腾讯云、百度云、华为云等等
阿里云-华北1A部署方案(按量) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G高速 |
0 |
7191 |
11844 |
12690 |
|
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
7905 |
13020 |
13950 |
|
阿里云 |
华北1 |
Oracle服务器 |
计算型c5 |
8C |
16G |
300G+300G高速 |
0 |
13280.4 |
21873.6 |
23436 |
|
阿里云 |
华北1 |
nginx服务器 |
计算型c5 |
8C |
16G |
200G+300G高速 |
50M 按量¥0.72/GB |
12923.4 |
21285.6 |
22806 |
不含流量费 |
合计 |
|
|
|
|
|
|
|
41299.8 |
68023.2 |
72882 |
不含流量费 |
阿里云-华北1A部署方案(单独) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G高速 |
0 |
7191 |
11844 |
12690 |
|
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
7905 |
13020 |
13950 |
|
阿里云 |
华北1 |
Oracle服务器 |
计算型c5 |
8C |
16G |
300G+300G高速 |
0 |
13280.4 |
21873.6 |
23436 |
|
阿里云 |
华北1 |
nginx服务器 |
计算型c5 |
8C |
16G |
200G+300G SSD |
0 |
12923.4 |
21285.6 |
22806 |
|
阿里云 |
华北1 |
弹性公网IP |
配置费用¥0.02 /小时 流量:¥0.72 /GB |
50M峰值 |
175.2 |
350.4 |
525.6 |
|
|||
合计 |
|
|
|
|
|
|
|
41299.8 |
68023.2 |
72882 |
不含流量费 |
阿里云-华北1C部署方案(固定) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G高速 |
0 |
7191 |
11844 |
12690 |
|
阿里云 |
华北1 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
7905 |
13020 |
13950 |
|
阿里云 |
华北1 |
Oracle服务器 |
计算型c5 |
8C |
16G |
300G+300G高速 |
0 |
13280.4 |
21873.6 |
23436 |
|
阿里云 |
华北1 |
nginx服务器 |
计算型c5 |
8C |
16G |
200G+300G高速 |
50M 固定 |
47118.9 |
89676.6 |
125392.5 |
不含流量费 |
合计 |
|
|
|
|
|
|
|
75495.3 |
136414.2 |
175468.5 |
|
阿里云-华北3部署方案(单独) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北3 |
Web服务器 |
通用型mn4 |
4C |
16G |
300G高速 |
0 |
5663.04 |
9327.36 |
9993.6 |
|
阿里云 |
华北3 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
6234.24 |
10268.16 |
11001.6 |
|
阿里云 |
华北3 |
Oracle服务器 |
计算型n4 |
8C |
16G |
300G+300G高速 |
0 |
8041.17 |
13244.28 |
14190.3 |
|
阿里云 |
华北3 |
nginx服务器 |
计算型n4 |
8C |
16G |
200G+300G高速 |
0 |
7755.57 |
12773.88 |
13686.3 |
|
阿里云 |
华北3 |
弹性公网IP |
配置费用¥0.02 /小时 流量:¥0.80 /GB |
50M |
175.2 |
350.4 |
525.6 |
|
|||
合计 |
|
|
|
|
|
|
|
27869.22 |
45964.08 |
49397.4 |
不含流量费 |
阿里云-华北3部署方案(按量) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北3 |
Web服务器 |
通用型g5 |
4C |
16G |
300G高速 |
0 |
7191 |
11844 |
12690 |
|
阿里云 |
华北3 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
7905 |
13020 |
13950 |
|
阿里云 |
华北3 |
Oracle服务器 |
计算型n4 |
8C |
16G |
300G+300G高速 |
0 |
13280.4 |
21873.6 |
23436 |
|
阿里云 |
华北3 |
nginx服务器 |
计算型n4 |
8C |
16G |
200G+300G高速 |
50M 按量¥0.82/GB |
7755.57 |
12773.88 |
13686.3 |
不含流量费 |
合计 |
|
|
|
|
|
|
|
36131.97 |
59511.48 |
63762.3 |
|
阿里云-华北3部署方案(固定) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
阿里云 |
华北3 |
Web服务器 |
通用型g5 |
4C |
16G |
300G高速 |
0 |
7191 |
11844 |
12690 |
|
阿里云 |
华北3 |
Web服务器 |
通用型g5 |
4C |
16G |
300G+200G高速 |
0 |
7905 |
13020 |
13950 |
|
阿里云 |
华北3 |
Oracle服务器 |
计算型n4 |
8C |
16G |
300G+300G高速 |
0 |
13280.4 |
21873.6 |
23436 |
|
阿里云 |
华北3 |
nginx服务器 |
计算型n4 |
8C |
16G |
200G+300G高速 |
50M 固定 |
45750.57 |
88763.88 |
127671.3 |
|
合计 |
|
|
|
|
|
|
|
74126.97 |
135501.48 |
177747.3 |
|
百度云-华北北京部署方案(固定) |
|||||||||||
服务商 |
地区 |
用途 |
硬件类型 |
CPU |
内存 |
硬盘 |
带宽 |
1年费用 |
2年费用 |
3年费用 |
备注 |
百度云 |
华北-北京 |
Web服务器 |
通用型 |
4C |
16G |
300G |
0 |
8246.88 |
13910.4 |
14904 |
|
百度云 |
华北-北京 |
Web服务器 |
通用型 |
4C |
16G |
500G |
0 |
9840.48 |
16598.4 |
17784 |
|
百度云 |
华北-北京 |
Oracle服务器 |
通用型 |
8C |
16G |
500G |
0 |
11712.96 |
19756.8 |
21168 |
|
百度云 |
华北-北京 |
nginx服务器 |
通用型 |
8C |
16G |
500G |
50M 固定 |
46921.56 |
90174 |
126793.8 |
|
合计 |
|
|
|
|
|
|
|
76721.88 |
140439.6 |
180649.8 |
|
大概就是比较不同平台相同配置价格,以及同一平台下不同区域间的价格等等,最终选择阿里云。
Redis
用来做缓存自建成本有点高,选择使用阿里的redis
负载均衡
可选方案: SLB, Nginx.
SLB要收钱,但是比较便宜,有保证,不会挂。 但是可配置的很少,不能根据域名做ip映射等
最后为了减少维护成本,直接使用SLB【测试环境还是要搭建nginx】
CDN
用来缓存静态文件等,七牛、阿里可选
最终选择七牛,服务好,反应及时【价格也会低一些】
身份认证
可选方案:session+redis、jwt
从扩展性来说确实jwt比较适合,但是有一个小麻烦,就是处理token的失效问题。【其实主要问题是使用token增加了代码复杂度】
最终选择session+redis
扩展:有人会说浏览器可以很好支持cookie但是移动端很难支持,其实移动端支持也不难。iOS端可以从HTTPCookieStorage读取cookie,请求时设置cookie。Android端使用Cookiejar。
权限控制
shiro:一直都在用shiro,也比较简单
数据库
oracle:使用阿里云的话自建oracle还是比较麻烦的
mysql:可以自建也可以用阿里的RDS
最终选择阿里云数据库RDS
部署架构图
附一张阿里的部署架构图供大家参考
完整流程图地址:https://www.processon.com/view/5b4d9b26e4b09a67416e1611
项目调用关系图
项目模块说明
service 为业务层 即服务提供者(包含 service实现及facadeService实现、Dao)
facade为接口层(只定义 接口类 与 实体类)
middle为服务中间层 (通过facade层 调用service层 )可以理解为web层与api层共用的模块
web为服务消费者,包含web页面 (通过facade层 调用service层 )
api为服务消费者,主要为客户端提供api服务 (通过facade层 调用service层 )