1.单体架构
将所有的业务都集中在一个项目中开发,打成一个包部署
优点:架构简单,部署成本低
缺点:耦合性高(维护困难,升级困难)
2.分布式架构
按照业务功能对系统做拆分,每个业务功能模块作为一个独立项目开发。
优点:耦合性低,易维护,易升级,易拓展
缺点:服务调用关系错综复杂
服务拆分时需要思考:
1.颗粒度如何把控
2.服务之前如何调用
3.服务调用关系如何管理
从而,有了微服务。所以微服务是分布式架构的一种解决方案。
微服务架构特征
1.单一职责:微服务颗粒度更小,每个服务都有自己唯一的业务能力
2.自治:团队独立,技术独立,数据独立,独立部署和交付
3.隔离性强:服务调用做好隔离,容错,降级,避免级联
4.面向服务:拥有统一标准的服务接口,和技术与语言无关
在java领域SpringCloud提供的解决方案最引人注目。
SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,基于SpringBoot实现了组件的自动装配。从而更好的提供了开箱即体验。
常见的组件包括
1.服务注册发现:eureka、nacos、consul
2.服务远程调用:openFeign、Dubbo
3.统一配置管理:SpringCloudConfig、nacos
4.统一网关路由:SpringCloudGateway、Zuul
5.服务链路监控:zipkin、sleuth
6.流控、降级、保护:Hystrix、Sentinel
.
在这里插入图片描述
技术栈对比:
组件 | Dubbo | SpringCloud | SpringCloudAlibaba |
---|---|---|---|
注册中心 | zookeeper、redis | Eureka、consul | Euraka、nacos |
配置中心 | 无 | SpringCloudConfig | SpringCloudConfig、nacos |
远程服务调用 | Dubbo协议 | feign(http协议) | Dubbo、Feign |
服务网关 | 无 | SpringCloudGateway、zuul | SpringCloudGateway、zuul |
服务监控和保护 | Dubbo-admin。功能弱 | Hystrix | Sentinel |
文件参考:https://www.xn2001.com/archives/663.html(很nice的博客)