目录
编辑一、认识微服务
1、单体架构
2、集群和分布式架构
3、微服务架构
二、Spring Cloud
1、什么是 Spring Cloud
2、Spring Cloud 版本
3、Spring Cloud 的实现方案
Spring Cloud Netflix
编辑Spring Cloud Alibaba
一、认识微服务
1、单体架构
单体架构开发和部署都比较简单,一个项目包含了所有的功能,省去了多个项目之间的交互和调用消耗,直接部署在一个服务器即可。
2、集群和分布式架构
单体架构可能会出现的问题:
1、后端服务器的压力越来越大,负载越来越高,甚至出现无法访问的情况
2、业务场景逐渐复杂,为了满足用户的需求,单体应用会越来越大,业务代码之间的耦合度也越来越高,任何一个问题都需要整个项目重新构建、发布
3、一个微小的问题可能会导致整个应用挂掉
如何解决单体架构的问题:
我们可以从横向和纵向两个角度来解决问题
横向:假如目前只有一台机器,用户却越来越多了,此时我们可以通过添加服务器来进行解决
纵向:业务需求越来越大了,代码之间耦合度越来越搞,此时我们可以把一整块业务划分成不通风的模块
假设我们最开始有一台机器,这一台机器可以承担 1000 个用户,后来发展成了 10000 个用户
横向:扩容机器,将一台机器扩容成 10 台机器,每个机器负责 10 个用户【集群】
纵向:按照功能进行划分,将一个大的项目拆分成多个小项目之后,项目与项目之间通过接口进行交互 【分布式】
集群:是将⼀个系统完整的部署到多个服务器上, 每个服务器都能提供系统的所有服务, 多个
服务器通过负载均衡调度完成任务. 每个服务器称为集群的节点(node)
分布式:是将⼀个系统拆分为多个子系统,多个子系统部署在多个服务器上,多个服务器上的子系统协同合作完成⼀个特定任务.
例如:有一个餐馆,刚开业的时候只有一个厨师,该厨师只负责做饭相关的工作
当餐馆生意变好之后,一名厨师便忙不过来了
横向:招聘一个厨师,这两个厨师都可以独立做饭
纵向:将厨师的工作分为多个细小的工作,如:切菜,洗菜,炒菜。再招聘助理,将细小的工作分配给助理完成。
集群和分布式之间的区别与联系:
1. 从概念上. 集群是多个计算机做同样的事, 分布式是多个计算机做不同的事(集群中的计算机可以相互替代,而分布式中的计算机不能相互替代)
2. 从功能上. 集群的每一个节点功能是相同的, 并且可以替代的. 分布式也是多个节点组成的系统, 但是每个节点完成的业务是不同的, ⼀个节点出现问题, 这个业务就不可访问了.
3. 从关系上. 分布式和集群在实践中, 很多时候是互相配合使用的. 比如分布式的某一个节点, 可能由一个集群来代替. 分布式架构大多是建立在集群上的. 所以实际的分布式架构设计中并不会把分布式和集群单独区分, 而是统称: 分布式架构.
4、分布式的节点可能是集群
3、微服务架构
按照业务对项目进行拆分之后,会有一些重复的功能开发。
在分布式结构下,当部署的服务越来越多,重复的代码就会越来越多,服务之间的调用关系越来越复杂。
微服务就是将一些通用的,会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微小的服务
微服务是没有明确的边界的
但是我们通常认为:一个服务只对应一个单一的功能,只做一件事情,且这个服务可以单独部署的服务是微服务
微服务之间使用 REST 和 RPC 协议进行通信
微服务架构其实就是分布式架构的扩展,微服务架构下拆分粒度更小,服务更独立。
分布式架构侧重于压力的分散, 强调的是服务的分散化. 微服务侧重于能力的分散, 更强调服务的专业化和精细分工.
从实践的角度来看, 微服务架构通常是分布式服务架构, 反之则未必成立.
例如,在工作中会将岗位进行划分:前端,后端,运维等
分布式:划分了就可以了
微服务:不仅仅划分,还拆分的很细,比如后端开发还可以细分为:系统开发,数据开发等等
所以,微服务通常意味着需要解决分布式架构的各种难题
架构的发展:
那么实际开发中,应该采用哪种架构模式呢
所有的架构都是为了更好的服务产品,所以只需要选择最合适的即可
微服务的优势:
易开发和维护. 每个微服务负责的业务比较清晰, 体量小, 开发和维护成本降低.
容错性高. ⼀个服务发生故障, 可以使故障隔离在单个服务中, 不影响整体服务故障.
扩展性好. 每个服务都是独立运行的, 我们可以结合项目实际情况进行扩展, 按需伸缩.
技术选型灵活. 每个微服务都是单独的团队来运维, 可以根据业务特点和团队特点, 选择适合的技术
栈.
相应的,微服务也会面临一些挑战:
二、Spring Cloud
1、什么是 Spring Cloud
Spring Cloud 的官网: spring.io
Spring Cloud 包含了很多的工具,这些工具能够让我们在分布式系统中进行比较快速的开发,Spring Cloud 提供的这些工具,也可以帮助我们解决在分布式微服务中的一系列问题。
简单来说, Spring Cloud 就是分布式微服务架构的⼀站式解决方案, 是微服务架构落地的多种技术的集合.
2、Spring Cloud 版本
我们可以在官网上查看 SpringBoot 版本对应的 SpringCloud 版本
假设我们有一个项目,Spring Boot 的版本是 2.7.x,那么我们 Spring Cloud 版本应该使用 2021.0.x
3、Spring Cloud 的实现方案
Spring Cloud Netflix
Spring Cloud Netflix 是 Netflix OSS(Netflix Open Source Software)在 Spring Cloud 规范下的实现.
包含的组件及其主要功能⼤致如下:
Spring Cloud Alibaba
Spring Cloud Alibaba 是阿⾥巴巴集团下的开源组件和云产品在Spring Cloud规范下的实现
如果说Spring Cloud Netflix 是 Spring Cloud 的第一代实现, 那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata 等组件组成.
黄色:进入维护状态的主键