前言
本系列将介绍如果从零构建一套分布式系统。同时也是对自己过去工作的一个梳理过程。
本文先整理出构建系统的主要技术选型,以及技术框架。其实在形成如下框架前,我参考了许多资料和结构,也结合中小型公司的时间以及人力等因素综合。
选型
分布式调用框架
可选的有 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层 )