SpringCloud总结1

1、微服务

什么是微服务

就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务

比如有空调开关模块、温度模块、模式模块,一个模块要调用其他模块,需要储存他们的端口,如果模块足够多会导致端口过多

所以使用微服务来管理这么一些端口

微服务特点

1)可以使用多种语言进行交互

2)微服务的数据库独立,多个模块之间可以不使用相同的数据库

3)自动化部署(CI/CD)(持续集成、持续交付)

4)服务集中化管理

5)可以根据功能划分为独立运行的程序,即服务单元

6)通过http协议进行交互

7)分布式系统

微服务的缺点

微服务的复杂度、

分布式事务问题、

服务的划分(应该按照功能划分还是组件)、

服务部署(不适用自动化部署)

2、SpringCloud

SpringCloud简介

SpringCloud是java的微服务框架,依赖于SpringBoot,提供很多组件来管理微服务

三个相关公司

spring官方、netflix、alibaba

目前开发中常用的落地实现有三种:

​ Dubbo+Zookeeper 半自动化的微服务实现架构 (别的管理没有)

​ SpringCloud Netflix 一站式微服务架构

​ SpringCloud Alibaba 新的一站式微服务架构

SpringCloud、SpringBoot、相关版本的关系

假如你使用alibaba:2021.0.1.0版本,就应该对应的使用SpringBoot:2.6.3版本,以及SpringCloud:2021.0.1

下图是alibabab版本的对应关系(具体使用请上对应官网查看)

常用组件表

注册和发现:三个公司所使用的都不一样,依次是spring官方、netflix、alibaba

3、Eureka

是Netflix公司的服务注册与发现的组件,是给SpringCloud的一个框架

Eureka和Zookeeper的区别

面试一般这么问就是在问CAP原则,指的是一个分布式系统中,

一致性、可用性、分区容错性,这三个要素最多只能实现两点

CAP原则

4、SpringCloud(Eureka)在idea的使用

application.yml的配置(1)
server:
  port: 8761 # eureka的默认端口 6379 8080 3306 8848
spring:
  application:
    name: eureka-server # 一般填写应用名称,建议加入name这个标签
Application的配置
@SpringBootApplication

@EnableEurekaServer // 开启eureka的注册中心功能

public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
应用程序注册到eureka-server(上面写的8761端口)中
server:
  port: 8081
spring:
  application:
    name: eureka-client-b
eureka:
  client:
    service-url: # 指定注册地址
      defaultZone: http://localhost:8761/eureka
复制client

相关事项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbrwBDKS-1681892555565)(C:\Users\卯末\AppData\Roaming\Typora\typora-user-images\image-20230403152633584.png)]

脏读:也就是当B噶了的时候,A不知道,仍然去读取B的数据

application.yml的配置(2)
server:
  port: 8761 # eureka端口名一般是 6379 8080 3306 8848
      
spring:
  application:
    name: eureka-server # 应用名称,建议加入name这个标签
        
eureka: # eureka的配置分为三类 server  client  实例的  eureka-server既是服务端又是客户端
    server:
        eviction-interval-timer-in-ms: 10000 # 服务端间隔多少毫秒做定期删除的操作
        renewal-percent-threshold: 0.85 # 续约百分比 超过85%的应用没有和你续约 那么eureka会保护服务 不会剔除任何一个
    client:
        service-url:
           dafaultZone: ${EUREKA_SERVER_URL:http://localhost:8761/eureka}
        register-with-eureka: ${REGISTER_WITH_EUREKA:true}  # 先将server自己注册自己的开关关掉
        fetch-registry: true
    instance:
        instance-id: # 主机名称 : 应用名称 : 端口号${eureka.instance.hostname}:${spring.application.name}:${server.port} 
        hostname: localhost # 主机名称 或者服务的ip
        prefer-ip-address: true # 以ip的形式显示具体的服务信息
        lease-renewal-interval-in-seconds: 5 # 服务实例的续约时间间隔,单位是秒,必须比上面的定期删除小
去中心化模式集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mO9DCtBg-1681892555565)(C:\Users\卯末\AppData\Roaming\Typora\typora-user-images\image-20230403163301324.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rc12aBbk-1681892555566)(C:\Users\卯末\AppData\Roaming\Typora\typora-user-images\image-20230403163844060.png)]

方案一(建立3个server项目)

每个server中都需要配置其他两个server的service-url

eureka:
    client:
        service-url:
			# 其他两个是12/23
            defaultZone: http://peer1:8761/eureka,http://peer3:8763/eureka
    instance: # 实例的配置
        instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
        hostname: peer2  # 主机名称 或者服务的ip
        prefer-ip-address: true # 以ip的形式显示具体的服务信息
        lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔
方案二(建立一个server项目,之后复制出2个相同的项目)

直接给一个server项目添加3个service-url

eureka:
    client:
        service-url: # 你不写 默认 8761
            defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
    instance: # 实例的配置
        instance-id: ${spring.application.name}:${server.port}   # 主机名称 : 应用名称 : 端口号
#        hostname: peer1  # 主机名称 或者服务的ip
        prefer-ip-address: true # 以ip的形式显示具体的服务信息
        lease-renewal-interval-in-seconds: 5  # 服务实例的续约的时间间隔

而client则是需要配置全部的server

eureka:
    client: # 客户端的相关配置
        service-url: # 指定注册的地址
            defaultZone: http://peer1:8761/eureka,http://peer2:8762/eureka,http://peer3:8763/eureka
        register-with-eureka: true  # 可以不往eureka-server注册
        fetch-registry: true  # 应用是否去拉去服务列表到本地
        registry-fetch-interval-seconds: 10  # 为了缓解服务列表的脏读问题 时间越短脏读越少  性能消耗大
    instance:
        hostname: localhost # 应用的主机名称 最好写主机ip
        instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}
        prefer-ip-address: true # 显示ip
        lease-renewal-interval-in-seconds: 10 # 示例续约的时间
特点

在Eureka的去中心化集群模式下,多个Eureka Server节点形成一个集群,每个节点都可以独立地提供服务注册和发现的功能,并且彼此之间可以互相发现和同步服务信息。

具体来说,每个服务实例都可以向任意一个Eureka Server节点进行注册,并向其汇报自己的元数据信息

这种去中心化集群模式的优点在于,它可以有效地减少单点故障的风险,提高系统的可靠性和可用性。同时,由于各个节点之间是对等的,所以它也可以很好地适应系统的扩展和动态变化,可以随时添加或删除节点,而不会影响整个系统的运行

主从模式集群

少数服从多数的形式进行数据管理

主机的选择

最开始有一个0到300ms的时间,这时候集群里面会有一个先苏醒,这个先苏醒的就是主机,这个过程也叫做选举超时

如果有两个一起苏醒,那么会初始化,重新开始上面的选取步骤

当主机噶了,从机之间会重复上面的步骤,选举出一个主机

服务发现

在两个从机都向主机注册之后,从机A可以通过服务发现来获取从机B的信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lswRljp2-1681892555566)(C:\Users\卯末\AppData\Roaming\Typora\typora-user-images\image-20230417122404776.png)]

@GetMapping("test")
public String doDiscovery(String serviceName){
    // 这就是服务发现  通过服务的应用名 找到服务的具体信息
    List<ServiceInstance> instances = discoveryClient.getInstances(serviceName);
    instances.forEach(System.out::println);
    
    ServiceInstance serviceInstance = instances.get(0);
    String ip = serviceInstance.getHost();
    int port = serviceInstance.getPort();
    System.out.println(ip+":"+port);
    
    // 这里去找b的ip和port
    return instances.get(0).toString();
}

获取到的信息

[EurekaDiscoveryClient.EurekaServiceInstance@101c8dd8
 
instance = InstanceInfo 
 [instanceId = LAPTOP-QTEF5Q30.mshome.net:eureka-client-b:8081,
appName = EUREKA-CLIENT-B, hostName = LAPTOP-QTEF5Q30.mshome.net, status = UP, ipAddr = 192.168.137.1, port = 8081,securePort = 443, dataCenterInfo = com.netflix.appinfo.MyDataCenterInfo@c816ec0]
 
LAPTOP-QTEF5Q30.mshome.net:8081

5、docker

docker是啥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Im5G5eIj-1681892555567)(C:\Users\卯末\AppData\Roaming\Typora\typora-user-images\image-20230417123439725.png)]

docker和springcloud结合使用

docker是一个工具,因为每次使用都需要起一下server,所以在docker上部署服务器,把东西打包之后放在里面,这样就会在服务器里面运行好,不需要自己启动
nfo = com.netflix.appinfo.MyDataCenterInfo@c816ec0]

LAPTOP-QTEF5Q30.mshome.net:8081


## 5、docker

#### docker是啥

[外链图片转存中...(img-Im5G5eIj-1681892555567)]

#### docker和springcloud结合使用

docker是一个工具,因为每次使用都需要起一下server,所以在docker上部署服务器,把东西打包之后放在里面,这样就会在服务器里面运行好,不需要自己启动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring CloudSpring Cloud Alibaba都是基于Spring Boot构建的微服务框架。Spring Cloud是一代的微服务框架,而Spring Cloud Alibaba是二代的微服务框架。 Spring Cloud提供了一套完整的解决方案,包含了服务注册与发现、负载均衡、熔断器、分布式配置等组件,可以帮助开发者更轻松地构建和管理微服务架构。 而Spring Cloud Alibaba则是在Spring Cloud的基础上,集成了阿里巴巴的一些开源组件,如Nacos作为注册中心、Sentinel作为熔断器、RocketMQ作为消息中间件等等。它提供了更多与阿里巴巴生态体系相关的功能和工具,同时也能很好地与Spring Cloud进行整合。 总结来说,Spring Cloud是一代的微服务框架,提供了一套完整的解决方案;而Spring Cloud Alibaba是二代的微服务框架,集成了阿里巴巴的开源组件,提供了更多与阿里巴巴生态体系相关的功能和工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [最详细说明spring cloudSpring Cloud Alibaba的联系和区别](https://blog.csdn.net/qq_41694906/article/details/126648458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值