单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:
缺点:
分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点:
缺点:
分布式架构的要考虑的问题:
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种经过良好架构设计的分布式架构方案 。
微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就是SpringCloud和阿里巴巴的Dubbo。
构建分布式系统不需要复杂和容易出错。Spring Cloud 为最常⻅的分布式系统模式提供了⼀种简单且易于接受的编程模 型,帮助开发⼈员构建有弹性的、可靠的、协调的应⽤程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易 ⼊⼿并快速应⽤于⽣产中。
我所理解的Spring Cloud就是微服务系统架构的⼀站式解决⽅案,在平时我们构建微服务的过程中需要做如服务发现注册、配置 中⼼、消息总线、负载均衡、断路器、数据监控等操作,⽽ Spring Cloud 为我们提供了⼀套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项⽬的构建。
1.将各个组件分开部署,某个组件占一个服务器,互相独立,互相调用,可以将组件的功能发挥强大
2.一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)优点:
1.模块之间独立,各做各的事,便于扩展,复用性高
2.高吞吐量。某个任务需要一个机器运行20个小时,将该任务用10台机器的分布式跑
(将这个任务拆分成10个小任务),可能2个小时就跑完了
springcloud官网
SpringCloud=分布式微服务架构的站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
猜猜SpringCloud这个大集合里有多少种技术?
SpringCloud俨然已成为微服务开发的主流技术栈,在国内开发者社区非常火爆。
“微”力十足,互联网大厂微服务架构案例
京东的:
阿里的:
Spring Cloud技术栈
更详细的版本号对应推荐
通过该地址查看更详细的版本号推荐
Spring Boot 2.5.3 版
Spring Cloud 2020.0.3版
Spring Cloud 的版本号并不是我们通常⻅的数字版本号,⽽是⼀些很奇怪的单词。这些单词均为英国伦敦地铁站的站名。同时根 据字⺟表的顺序来对应版本时间顺序,⽐如:最早 的 Release 版本 Angel,第⼆个 Release 版本 Brixton(英国地名),然后是 Camden、 Dalston、Edgware、Finchley、Greenwich、Hoxton。后来有了2020.0.3等数字版本
官网
中文
spring cloud2020.0.3最大的变化就是移除了spring cloud netflix模块,仅仅包括了eureka模块。
既然把Netflix组件remove掉了,那么需要有替代方案,Spring Cloud团队给我们推荐了用于替代的产品:
Netflix 推荐替代品 说明 Hystrix Resilience4j Hystrix自己也推荐你使用它代替自己 Hystrix Dashboard / Turbine Micrometer + Monitoring System 说白了,监控这件事交给更专业的组件去做 Ribbon Spring Cloud Loadbalancer 忍不住了,Spring终究亲自出手 Zuul 1 Spring Cloud Gateway 忍不住了,Spring终究亲自出手 Archaius 1 Spring Boot外部化配置 + Spring Cloud配置 比Netflix实现的更好、更强大
Spring Cloud Alibaba版本组件
以上替代品中,你可能最陌生、最好奇的是Spring Cloud Loadbalancer,它一度只是Spring Cloud 孵化器里的一个小项目,并且一度搁浅。后再经过重启,发展,现行使其伟大使命,正式用于完全替换 Ribbon,成为Spring Cloud负载均衡器唯一实现。
负载均衡抽象
LoadBalancerClient
接口有两个实现,而到了Spring Cloud 2020.0版本后,BlockingLoadBalancerClient
就是唯一实现了。
接下来开发用到的组件版本
Cloud - 2020.0.3
Boot - 2.5.3
Cloud Alibaba - 2021.1
官网
Java - Java 8
Maven - 3.5及以上
MySQL - 5.7及以上
我们之前常用的一些SpringCloud组件大部分来自于Netflix公司,比如我们熟知的Eureka,Hystrix,Ribbon等等,然而随着Eureka不再维护且闭源,Hystrix不再开发新功能,Zuul的性能一般而2.0又迟迟出不来,Ribbon不支持webFlux的负载均衡等等 ,这些已经限制了SpringCloud的高速发展,于是大家开始把目光转向第二代组合——SpringCloud Alibaba
Spring Cloud Alibaba 于 2018年成为SpringCloud的孵化项目,2018年7月27日 在 Spring Cloud 孵化器仓库提交第一次代码,到 2019年8月1日 在 Alibaba 仓库发布第一个正式版本。
SringCloud 第一代 | SringCloud 第二代 | |
---|---|---|
网关 | Zuul(Netflix) | Gateway (SpringCloud) |
注册中心 | Eureka(Netflix),Consul、ZK | Nacos (阿里) |
配置中心 | SprigCloudConfig | Nacos (阿里),Apollo(携程)等 |
负载均衡 | Ribbon(Netflix) | Loadbalancer (SpringCloud) |
熔断器 | Hystrix(Netflix) | Resilience4J(spring-cloud-r4j),Sentinel (阿里) |
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud 2020.0.1 | 2021.1 | 2.4.2 |
Spring Cloud Hoxton.SR9 | 2.2.6.RELEASE | 2.3.2.RELEASE |
Spring Cloud Greenwich.SR6 | 2.1.4.RELEASE | 2.1.13.RELEASE |
Spring Cloud Hoxton.SR3 | 2.2.1.RELEASE | 2.2.5.RELEASE |
Spring Cloud Hoxton.RELEASE | 2.2.0.RELEASE | 2.2.X.RELEASE |
Spring Cloud Greenwich | 2.1.2.RELEASE | 2.1.X.RELEASE |
Spring Cloud Finchley | 2.0.4.RELEASE(停止维护,建议升级) | 2.0.X.RELEASE |
Spring Cloud Edgware | 1.5.1.RELEASE(停止维护,建议升级) | 1.5.X.RELEASE |
如果需要使用 Spring Cloud 2020 版本,请在 dependencyManagement 中添加如下内容
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2021.1version>
<type>pomtype>
<scope>importscope>
dependency>
X号的表示不再更新去维护了,死翘翘了
× Eureka
√ Zookeeper(公司走保守路线使用这个)
√ Consul
√ Nacos(推荐(公司最多用的))
√ Ribbon
√ LoadBalancer(会慢慢取代Ribbon)
× Feign
√ OpenFeign
× Hystrix
√ resilience4j(国外用的多)
√ sentienl(阿里的,国内用的多)
× Zuul
! Zuul2(估计不会出了,公司内部人员跳槽吵架原因)
√ gateway
× Config
√ Nacos
× Bus
√ Nacos