一、认识微服务
1、单体架构
很多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项目, 这就是单体架构.
业务的所有功能实现都打包在⼀个war包或者Jar包中, 这种⽅式就称为单体架构
单体架构开发和部署都比较简单,一个项目包含了所有的功能,省去了多个项目之间的交互和调用消耗,直接部署在一个服务器即可。
2、集群和分布式架构
单体架构可能会出现的问题:
1、后端服务器的压力越来越大,负载越来越高,甚至出现无法访问的情况
2、业务场景逐渐复杂,为了满足用户的需求,单体应用会越来越大,业务代码之间的耦合度也越来越高,任何一个问题都需要整个项目重新构建、发布
3、一个微小的问题可能会导致整个应用挂掉
如何解决单体架构的问题:
我们可以从横向和纵向两个角度来解决问题
横向:假如目前只有一台机器,用户却越来越多了,此时我们可以通过添加服务器来进行解决
纵向:业务需求越来越大了,代码之间耦合度越来越搞,此时我们可以把一整块业务划分成不通风的模块
假设我们最开始有一台机器,这一台机器可以承担 1000 个用户,后来发展成了 10000 个用户
横向:扩容机器,将一台机器扩容成 10 台机器,每个机器负责 10 个用户【集群】
纵向:按照功能进行划分,将一个大的项目拆分成多个小项目之后,项目与项目之间通过接口进行交互 【分布式】
集群:是将⼀个系统完整的部署到多个服务器上, 每个服务器都能提供系统的所有服务, 多个
服务器通过负载均衡调度完成任务. 每个服务器称为集群的节点(node)
分布式:是将⼀个系统拆分为多个子系统,多个子系统部署在多个服务器上,多个服务器上的子系统协同合作完成⼀个特定任务.
例如:有一个餐馆,刚开业的时候只有一个厨师,该厨师只负责做饭相关的工作
当餐馆生意变好之后,一名厨师便忙不过来了
横向:招聘一个厨师,这两个厨师都可以独立做饭
纵向:将厨师的工作分为多个细小的工作,如:切菜,洗菜,炒菜。再招聘助理,将细小的工作分配给助理完成。
集群和分布式之间的区别与联系:
从概念上. 集群是多个计算机做同样的事, 分布式是多个计算机做不同的事(集群中的计算机可以相互替代,而分布式中的计算机不能相互替代)
从功能上. 集群的每一个节点功能是相同的, 并且可以替代的. 分布式也是多个节点组成的系统, 但是每个节点完成的业务是不同的, ⼀个节点出现问题, 这个业务就不可访问了.
从关系上. 分布式和集群在实践中, 很多时候是互相配合使用的. 比如分布式的某一个节点, 可能由一个集群来代替. 分布式架构大多是建立在集群上的. 所以实际的分布式架构设计中并不会把分布式和集群单独区分, 而是统称: 分布式架构.
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 Alibaba 是什么 | https://sca.aliyun.com
如果说Spring Cloud Netflix 是 Spring Cloud 的第一代实现, 那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata 等组件组成.
黄色:进入维护状态的主键
版权归原作者 馒头警告 所有, 如有侵权,请联系我们删除。