# spring cloud

spring-cloud 讲解

# 微服务优缺点

1. ##### 分工协作
    
    
    1. **单体**：影响开发效率、发布及迭代性差，项目启动慢，每一个开发者都要对整个项目有个总体的把握
    2. **拆分**：开发效率高，每个开发者专注自己负责的模块，提升了敏捷性，
2. ##### 并发能力
    
    
    1. 单体：整体集群，易造成系统资源浪费；无法准确的预测最大并发量，无法准确的预知服务器扩容数量
    2. 拆分：服务集群，充分利用服务器资源，可以只针对多个或单个服务扩容，容易定位问题或服务并发数量，从而实现更加准确的扩容
3. ##### 业务
    
    
    1. 单体：随着业务的增加，应用慢慢膨胀，难以维护
    2. 差分：根据功能垂直差分，责任更加分明，维护更加精确
4. ##### 容错
    
    
    1. 单体：应用某个地方出现问题，可能会导致整个应用出现问题，从而导致无法对外提供服务
    2. 拆分：单个服务出现问题，可以进行熔断（隔离）不会导致整个应用出现问题
5. ##### 维护
6. ##### 扩展
    
    
    1. 单体：难以进行升级技术更新
    2. 拆分：新的服务可以采用任意新技术
7. ##### 缺点
    
    
    1. 分布式编程比较困难，并且总是面临失败的可能
    2. 最终一致性，保持最终一致性非常困难
    3. 运维较为复杂

# SOA、分布式、微服务有什么关系

1. 分布式架构是指将单体架构的各个部分拆分，然后部署不同的机器或进程中去，soa和微服务基本上都是微服务架构
2. SOA是一个面向服务的架构，系统所有服务都注册在总线上，当调用服务时，从总线上查找信息，然后调用
3. 微服务时一种更彻底的面向服务的架构，将系统中各个功能抽象成一个个小的应用程序，基本保持一个应用对应一个服务架构

# 怎么进行服务拆分

1. 高内聚】低耦合，职责单一，服务粒度适中
2. 以业务模型切入：比如 商品、用户、订单等等
3. 演进式拆分：刚开始不要拆分的太细、可以逐步迭代拆分
4. 微服务1.0 仅使用服务注册发现
5. 微服务2.0 服务注册发现，熔断、降级
6. 微服务3.0 将服务治理作为通用组件

# 常用的微服务组件

<div drawio-diagram="160"><img src="http://wiki.shopqorg.com/uploads/images/drawio/2024-05/drawing-1-1715139782.png" alt=""/></div>

# 注册中心（nacos 核心原理）

<div drawio-diagram="161"><img src="http://wiki.shopqorg.com/uploads/images/drawio/2024-05/drawing-1-1715140700.png" alt=""/></div>

##### 服务注册： 服务启动时，通过rest请求的方式向Nacos Server注册自己的服务

##### 服务心跳：Nacos Client 会维护一个定时心跳通知Nacos Server 默认5s一次，如果超过15s没有收到心跳，会将服务设置为false(拉取服务列表时会把此服务忽略），如果nacos 服务端超过30s 没有收到心跳，则剔除服务。

##### 服务发现：Nacos Client 会有一个定时任务，实时去Nacos Server 拉取健康服务

##### 服务停止：Nacos Client 通过 rest 发送一个注销请求

# 谈谈配置中心

<div drawio-diagram="162"><img src="http://wiki.shopqorg.com/uploads/images/drawio/2024-05/drawing-1-1715141738.png" alt=""/></div>

##### 配置中心原理