目录
定义
目的
单体应用存在的问题
微服务的优势
实现原理
微服务架构的主要问题
技术选型
Spring Cloud NetFlix(停止维护)
Apache Dubbo Zookeeper
Spring Cloud Alibaba
Reference
微服务是一种软件开发技术,面向服务的体系结构(SOA)架构样式的一种变体,将应用程序构造为一组松散耦合的服务。
在微服务体系结构中,服务是细粒度的,协议是轻量级的。
解决单体应用带来的问题。
-
-
单体应用存在的问题
- 复杂性逐渐变高:单体应用各个模块之间区别比较模糊,逻辑比较混乱,代码越多复杂性越高,越难解决遇到的问题。
- 部署速度逐渐变慢:单体架构模块非常多,代码量非常庞大,导致部署项目所花费的时间越来越多。
- 阻碍技术创新:由于单体应用各个模块之间有着千丝万缕的联系,代码量大,逻辑不够清楚,如果现在想用新技术来重构旧技术写的项目将是非常困难的,付出的成本将非常大,这就阻碍了技术的创新。
- 无法按需伸缩:有些模块是CPU密集型的模块,有些模块是IO密集型的模块,假如我们要提升IO密集型模块的性能,比如加大内存、增加硬盘,但是由于所有的模块都在一个架构下,因此我们在扩展模块的性能时不得不考虑其它模块的因素,因为我们不能因为扩展某个模块的性能而损害其它模块的性能,从而无法按需进行伸缩。
-
微服务的优势
- 单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。
- 单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。
- 单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。
-
实现原理
API网关
HTTP / RPC通信
服务注册与发现
断路器(熔断机制)
-
-
技术选型
-
Spring Cloud NetFlix(停止维护)
- 一站式解决方案
- api网关:zuul
- 通信:Feign -> HttpClient (Http:同步通信,存在阻塞问题)
- 服务注册与发现:Eureka
- 断路器:Hystrix
-
Apache Dubbo Zookeeper
- 半自动解决方案
- api网关:没有,需要找第三方组件或者自己实现
- 通信:Dubbo(RPC:异步非阻塞)
- 服务注册与发现:Zookeeper(分布式服务框架,是Apache Hadoop 的一个子项目 ,简单来说zookeeper=文件系统+监听通知机制)
- 断路器:没有,需要找第三方组件或者自己实现
-
Spring Cloud Alibaba
- 一站式解决方案
- api网关:Dubbo PROXY
- 通信:Dubbo(RPC:异步非阻塞)
- 服务注册与发现:Nacos
- 断路器:Sentinel
-
Reference
- 一文详解微服务架构
https://www.cnblogs.com/skabyy/p/11396571.html
- 大话微服务:(三)Spring Cloud Netflix 和Spring Cloud alibaba服务技术架构
https://blog.csdn.net/zhongzk69/article/details/105095834/
- 【狂神说Java】SpringCloud最新教程IDEA版
https://www.bilibili.com/video/BV1jJ411S7xr