目录
[分布式架构 & 微服务架构](#分布式架构 & 微服务架构)
[微服务解决方案 - Spring Cloud](#微服务解决方案 - Spring Cloud)
[Spring Cloud](#Spring Cloud)
[Spring Cloud 版本](#Spring Cloud 版本)
[Spring Cloud 和 Spring Boot 的关系](#Spring Cloud 和 Spring Boot 的关系)
[Spring Cloud 实现方案](#Spring Cloud 实现方案)
认识微服务
服务架构从单体应用向微服务应用的过程

单体架构
单体架构,把业务的所有功能实现都打包在一个 war 包或者 jar 包中。
例如电商系统,将用户管理,物流管理,商品管理,订单管理.... 都写在一个 web 项目中,然后统一部署到一个 web 服务器中。这种开发模式,部署简单,一个项目就包含了所有的功能,省去了多个项目之间的交互和调用消耗

集群和分布式架构
当网站访问量越来越多,需求也会越来越多,会面如下问题:
后端服务器压力越来越大,负载越来越高,甚至出现无法访问的情况。
业务场景逐渐复杂,单个应用也会越来越大,各个业务代码之间的耦合度也会越来越高。任何一个项目,都需要整个项目重新构建,发布~
一个微小的问题,就会使得整个应用瘫痪。
我们可以从两个方面进行优化:
横向:添加服务器,把单台机器变成多台机器的集群。
纵向:把一个应用,按照业务进行拆分,拆分为多个项目。也成为是垂直架构。

垂直架构:以单体结构规模的项目为单位,进行垂直划分,将一个大项目拆分为一个一个单体结构项目。项目和项目之间相对比较独立。
集群和分布式
集群:将一个系统完成的部署到多个服务器上,每个服务器都能提供系统的所有服务,多个服务器通过负载均衡调度完成任务。每个服务器称为集群的节点。
分布式:将一个系统拆分为多个子系统,多个子系统部署在多个服务器中,多个服务器上的子系统,协同合作,完成一个特定任务。
集群和分布式的区别和联系
-
概念上,集群是多个计算机做相同的事情。分布式是多个计算机做不同的事情。
-
功能上,集群的每一个节点的功能都是相同的,并且是互相可以替代的。分布式是由多个节点组成的系统,每个节点所完成的任务是不同的,当某个节点出现问题,那个节点负责的业务就是不可访问的了。
-
关系上,分布式和集群在实际使用过程中,是互相配合使用的。比如分布式的某一个节点,可能是由一个集群来代替实现的。分布式架构大多都是建立在集群上的。在实际的开发中,不会将分布式和集群区分开,而是统一称为:分布式架构。
微服务架构
按照业务进行拆分之后,会有一些功能是重复的。
在分布式架构中,当部署的服务越来越多,重复的代码就会越来越多,服务之间的调用关系也会越来越复杂。我们可以将一些通用的,会被多个上层调用的共享业务,抽象提取称独立的基础服务,组成一个一个微小的服务,这就是微服务。

简单来说,微服务就是很小的服务,小到一个服务只对应一个单一的功能,且这个服务可以单独部署运行。
微服务之间可以采用 REST 和 RPC 协议进行通信。
微服务架构,可以看成分布式架构的一种扩展,这种架构模式中,业务的拆分粒度更小,服务更独立。即,微服务是一种经过良好架构设计的分布式架构方案。
分布式架构 & 微服务架构
分布式:服务拆分,拆了就行
微服务架构:业务拆分粒度更加细小的垂直拆分,通常指不能再拆的事务。
分布式架构更加侧重于压力的分散,强调的是服务的分散化。微服务则更侧重于能力的分散,更强调服务的专业化和精细分工。
从实践角度中,微服务架构通常是分布式服务架构,反之则不一定成立。
所以,选择微服务架构通常意味着需要解决分布式架构的各种问题。
微服务的优势与挑战
优势:
-
易开发和维护。每个微服务负责的业务范围较为清晰,体量小,开发和维护成本低。
-
容错性高。一个服务发生故障,可以使故障隔离在单个服务中,不会使得整体服务发生瘫痪。
-
扩展性好。每个服务都是独立运行的,我们可以结合项目实际进行扩展。
-
技术选型灵活。每个服务都是由不同团队来运维,可以选择合适的技术栈。
挑战:
服务依赖:随着服务数量增多,服务与服务之间的关系也会更加复杂,一个服务发生更改,就需要考虑到修改的服务对其他服务的影响。
运维成本:一个完整业务需要多个微服务共同完成。就会有更多的服务需要编译,部署,运行,甚至是不同的编译语言,不同对应运营环境。。。
开发和测试:一个完整业务设计多个微服务共同完成,服务调用会引入网络延迟,不可靠网络。
服务监控:在单体架构中,很容易实现服务的监控。在微服务架构中,不仅需要对整个链路进行监控,还需要对每一个微服务进行监控。
负载均衡:微服务架构中的服务实例数量可能会极为庞大。因此需要有效的服务发现和复杂均衡机制来管理请求流量。
微服务解决方案 - Spring Cloud
Spring Cloud
Spring Cloud 提供了一些可以让开发人员快速构建分布式服务的工具,比如:配置管理,服务发现,熔断,智能路由等等。
简单来说:Spring Cloud 就是分布式微服务架构的一站式解决方案。是微服务架构落地的多种技术的集合~

注意:
Spring Cloud 并不是 Spring 团队研发的框架。它只是把一些比较优秀的解决微服务架构中常见的开源框架,基于 Spring Cloud 规范进行了整合,并基于 Spring Boot 的风格,对这些组件框架进行封装,将一些复杂的配置和实现原理进行了屏蔽。使得开发者开箱即用微服务~~
这些开源技术的框架是由各个不同的公司来维护的,Spring Cloud 对这些微服务进行了集体的管理~~~
Spring Cloud 版本
Spring Cloud 一个由许多子项目共同组成的大项目。这些子项目是由不同公司进行维护的,发布阶段也是各不相同的。
为了管理主项目和下面的子项目,为了避免和子项目冲突,主项目的版本命名比较不同。


Spring Cloud 和 Spring Boot 的关系
Spring Cloud 中所有的子项目都依赖 SpringBoot,Spring Cloud 和 Spring Boot 之间的版本也有一定的对应关系。

Spring Cloud 实现方案
在 Spring Cloud 的规范下,由很多实现,较为出名的是:
Spring Cloud Netflix
Spring Cloud Alibaba Spring Cloud Alibaba 是什么-阿里云Spring Cloud Alibaba官网

其中标黄的框架,为 Netflix 公司宣布进入维护状态。
