目录
- 一、认识微服务
-
- [1.1 单体架构](#1.1 单体架构)
- [1.2 集群和分布式](#1.2 集群和分布式)
- 二、微服务架构
- [三、Spring Cloud 介绍](#三、Spring Cloud 介绍)
- [四、SpringCloud 实现⽅案](#四、SpringCloud 实现⽅案)
-
- [4.1 Spring Cloud Netflix](#4.1 Spring Cloud Netflix)
- [4.2 Spring Cloud Alibaba](#4.2 Spring Cloud Alibaba)

一、认识微服务
1.1 单体架构
单体架构:将业务的所有功能实现都打包在一个项目中。
例如电商系统,将所有功能都实现在一个Web项目中,统⼀部署到⼀个Web服务器中属于单体架构:

⽤⼾量越来越⼤,需求也会越来越多,流量也会越来越⼤,单体架构服务可能就会⾯临以下问题:
- 后端服务器的压⼒就会越来越⼤, 负载越来越⾼, 甚⾄出现⽆法访问的情况
- 业务场景逐渐复杂. 为了满⾜⽤⼾的需求, 单体应⽤也会越来越⼤. 各个业务代码之间的耦合度也会越来越⾼. 任何⼀个问题, 都需要整个项⽬重新构建, 发布.
- ⼀个微⼩的问题, 可能会导致整个应⽤挂掉
优化方案:
- 横向: 添加服务器, 把单台机器变成多台机器的集群.
- 纵向: 按照业务进⾏拆分, 把⼀个应⽤, 拆分为多个项⽬. 此架构也称为垂直架构.
将上面的电商系统就优化为:

1.2 集群和分布式
- 集群(cluster):是将⼀个系统完整的部署到多个服务器上, 每个服务器都能提供系统的所有服务, 多个服务器通过负载均衡调度完成任务. 每个服务器称为集群的节点(node)
- 分布式:是将⼀个系统拆分为多个⼦系统,多个⼦系统部署在多个服务器上,多个服务器上的⼦系统协同合作完成⼀个特定任务.
集群与分布式联系与区别:
- 概念:集群是多台计算机做同一件事,分布式是多台计算机做不同的事
- 功能:集群的每⼀个节点功能是相同的 , 并且可以替代的。 分布式也是多个节点组成的系统,但是每个节点完成的业务是不同的, ⼀个节点出现问题, 这个业务就不可访问了。
- 关系:分布式和集群在实践中, 很多时候是互相配合使⽤的. ⽐如分布式的某⼀个节点, 可能由⼀个集群来代替. 分布式架构⼤多是建⽴在集群上的. 所以实际的分布式架构设计中并不会把分布式和集群单独区分, ⽽是统称: 分布式架构.
二、微服务架构
微服务:把⼀些通⽤的, 会被多个上层服务调⽤的共享业务, 提取成独⽴的基础服务, 组成⼀个个微⼩的服务. 这就是微服务. ⼀个服务只对应⼀个单⼀的功能, 只做⼀件事. 这个服务可以单独部署运⾏。
微服务是⼀种经过良好架构设计的分布式架构⽅案。
分布式架构与微服务架构:
- 分布式: 服务拆分, 拆了就⾏。
- 微服务: 指⾮常微⼩的服务, 更细粒度的垂直拆分, 通常指不能再拆的服务。
分布式架构侧重于压⼒的分散, 强调的是服务的分散化.
微服务侧重于能⼒的分散, 更强调服务的专业化和精细分⼯.
微服务优势与挑战

三、Spring Cloud 介绍
Spring Cloud提供了⼀些可以让开发⼈员快速构建分布式服务的⼯具, ⽐如配置管理, 服务发现, 熔断, 智能路由等.他们可以在任何分布式环境中很好的⼯作.


Spring Cloud就是分布式微服务的一站式解决方案。
- Distributed/versioned configuration 分布式版本配置
- Service registration and discovery 服务注册和发现
- Routing 路由
- Service-to-service calls 服务调⽤
- Load balancing 负载均衡
- Circuit Breakers 断路器
- Distributed messaging 分布式消息
Spring Cloud并不是Spring团队研发的框架,它只是把一些比较优秀的解决微服务架构中常见问题的开源框架基于SpringCloud规范进行了整合,并基于SpringBoot的风格,对这些组件进行封装,屏蔽掉了复杂的配置和实现原理.为开发者提供了开箱即用的微服务开发体验。\这些开源技术的框架是由各个公司来维护的.Spring Cloud就是这些微服务的大管家.
版本:我们使用SpringCloud版本,要与SpringBoot版本,组件版本要对应。
- SpringCloud版本与SpringBoot对应版本:

- 对应组件版本概览:

- 最新 SpringCloud版本 与 组件版本对应:

四、SpringCloud 实现⽅案
在Spring Cloud的规范下, 有很多实现, 其中最为出名的是:
- Spring Cloud Netflix
- Spring Cloud Alibaba
4.1 Spring Cloud Netflix
包含的组件及其主要功能⼤致如下:
- Eureka: 服务注册和发现
- Zuul: 服务⽹关
- Ribbon: 负载均衡
- Feign: 服务调⽤组件
- Hystrix: 断路器, 提供服务熔断和限流
- Hystrix Dashboard: 监控⾯板
Netflix公司在2018年前后宣布其核⼼组件Hystrix、Ribbon、Zuul等均进⼊维护状态.
spring-cloud-netflix 并没有从Spring Cloud的依赖中完全删除, 只是从2020.0版本起, 他只管理Eureka.
| Netflix | 推荐替代品 | 说明 |
|---|---|---|
| Hystrix | Resilience4j | Hystrix也推荐⼤家使⽤Resilience4j代替⾃⼰ |
| Hystrix Dashboard / Turbine | Micrometer + Monitoring System | 说⽩了,监控这件事交给更专业的组件去做 |
| Ribbon | Spring Cloud Loadbalancer | 忍不住了,Spring终究亲⾃出⼿ |
| Zuul | Spring Cloud Gateway | 忍不住了,Spring终究亲⾃出⼿ |
| Archaius | Spring Boot外部化配置 + Spring Cloud配置 | ⽐Netflix实现的更好、更强⼤ |
4.2 Spring Cloud Alibaba
| SpringCloud官⽅ | Spring Cloud Netflix | Spring Cloud Alibaba | |
|---|---|---|---|
| 服务注册/发现 | Eureka | Eureka | Nacos |
| 服务调⽤ | OpenFeign | Feign | Dubbo |
| 配置中⼼ | SpringCloudConfig | Archaius | Nacos |
| 服务⽹关 | SpringCloudGateway | Zuul | SpringCloudGateway |
| 负载均衡 | SpringCloud LoadBalance | Ribbon | Dubbo |