Spring Boot分布式系统实践【1】架构设计

前言

【第一次尝试去写一个系列,肯定会有想不到的地方,欢迎大家留言指正】

本系列将介绍如果从零构建一套分布式系统。同时也是对自己过去工作的一个梳理过程。

本文先整理出构建系统的主要技术选型,以及技术框架。其实在形成如下框架前,我参考了许多资料和结构,也结合中小型公司的时间以及人力等因素综合。

选型

分布式调用框架

可选的有  dubbox, SpringCloud

dubboX:当当基于dubbo搞的,还在维护可以一用,推荐。

SpringCloud:整合了大量组件,相关文档比较复杂,需要针对性的进行阅读,学习成本还是需要一些。

最后选择:dubbox + zk +Spring Boot

云平台

可选方案:阿里云、腾讯云、百度云、华为云等等

大概就是比较不同平台相同配置价格,以及同一平台下不同区域间的价格等等,最终选择阿里云。

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

持久层框架

常用Mybatis,那就继续用吧

部署架构图

 

附一张阿里的部署架构图供大家参考

 

完整流程图地址:https://www.processon.com/view/5b4d9b26e4b09a67416e1611

项目调用关系图

 

项目模块说明

service 为业务层 即服务提供者(包含 service实现及facadeService实现、Dao)

facade为接口层(只定义 接口类 与 实体类)

middle为服务中间层 (通过facade层 调用service层 )可以理解为web层与api层共用的模块

web为服务消费者,包含web页面 (通过facade层 调用service层 )

api为服务消费者,主要为客户端提供api服务 (通过facade层 调用service层 )

 

原文地址:https://www.cnblogs.com/Halburt/p/10442538.html