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层 )
Spring Boot分布式系统实践【1】-架构设计的更多相关文章
- Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录
日志注解 前言 spring切面的编程,spring中事物处理.日志记录常常与pointcut相结合 * * Pointcut 是指那些方法需要被执行"AOP",是由"P ...
- Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进
前言 调试之前请先关闭Favicon配置 spring: favicon: enabled: false 不然会发现有2个请求(如果用nginx+ 浏览器调试的话) 序列化工具类[ ...
- Spring Boot分布式系统实践【2】-框架搭建
前言 技术选型已经做完,那就来搭建框架了. 首先基于mvc思想,设计这套框架也是基于此,也会设计Dao层.Service层.Controller层.视图层等,同时也要考虑到dubbo的调用原理. ...
- Spring Cloud Netflix概览和架构设计
Spring Cloud简介 Spring Cloud是基于Spring Boot的一整套实现微服务的框架.他提供了微服务开发所需的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁.决策 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- Spring Boot、微服务架构和大数据
一文读懂 Spring Boot.微服务架构和大数据治理三者之间的故事 https://www.cnblogs.com/ityouknow/p/9034377.html 微服务架构 微服务的诞生并非偶 ...
- Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock
在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...
- Spring Boot 2 实践记录之 使用 ConfigurationProperties 注解将配置属性匹配至配置类的属性
在 Spring Boot 2 实践记录之 条件装配 一文中,曾经使用 Condition 类的 ConditionContext 参数获取了配置文件中的配置属性.但那是因为 Spring 提供了将上 ...
- Spring Boot 2 实践记录之 MyBatis 集成的启动时警告信息问题
按笔者 Spring Boot 2 实践记录之 MySQL + MyBatis 配置 中的方式,如果想正确运行,需要在 Mapper 类上添加 @Mapper 注解. 但是加入此注解之后,启动时会出现 ...
随机推荐
- django 常见错误汇总
File "D:\python\django\mysite\mysite\view.py", line 7 SyntaxError: (unicode error) 'utf-8' ...
- Swagger2教程
Swagger2教程 作用:编写和维护接口文档. 一.Swagger2 + SpringBoot集成 1.依赖 <!--依赖管理 --> <dependencies> < ...
- Spring系列__02IOC模块简介
Spring的两大核心功能就是IOC和AOP,这篇文章主要介绍IOC. 简单来说,在面向对象思想下,A类中有一个B类的属性, 那么我们在创建A类时往往需要同时创建一个B类的对象,以便A类对其进行调用. ...
- sqlzoo:using group by and having
For each continent show the number of countries: SELECT continent, COUNT(name) FROM world GROUP BY c ...
- Hibernate HQL ③
迫切左外连接: - LEFT JOIN FETCH 关键字表示迫切左外连接检索策略 - list()方法返回的集合中存放实体对象的引用,每个 Department 对象关联的 Employee 集合都 ...
- [LeetCode] Buddy Strings 伙计字符串
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- Spring源码学习-容器BeanFactory(五) Bean的创建-探寻Bean的新生之路
写在前面 上面四篇文章讲了Spring是如何将配置文件一步一步转化为BeanDefinition的整个流程,下面就到了正式创建Bean对象实例的环节了,我们一起继续学习吧. 2.初始化Bean对象实例 ...
- Centos7 通配符HTTPS证书申请 实测 笔记
环境: 免费通配符HTTPS证书网址: https://letsencrypt.org/ 1.下载证书申请工具 [root@centos ~]# mkdir /opt/letsencrypt -p [ ...
- ubuntu18.04新体验
虽然ubuntu18.04LST版本早出来了,但自己原来的ubuntu16.04还可以用,就懒得折腾了. 但最近ubuntu崩了,就想尝尝鲜...结果发现还挺好用的,准确地说,ubuntu是越来越好用 ...
- 关于Http协议,你必须要知道的
转自:https://segmentfault.com/a/1190000016751071 引言 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用 ...