springCloud详情笔记

1.常见问题

1.1springCloud和dubbo的主要区别是什么?

  • 通信机制的不同:dubbo采用的是RPC远程过程调用,springCloud是基于RESTful调用

1.2 springCloud和springBoot的关系

  • SpringBoot专注于快速方便的开发单个个体微服务。
  • SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一 个个单体微服务整合并管理起来,为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
  • SpringBoot可以离开SpringCloud独立使用开发项目;但是SpringCloud离不开SpringBoot,属于依赖的关系
  • SpringBoot专注于快速、方便的开发单个微服务个体, SpringCloud关注全局的服务治理框架。

1.3 ZooKeeper和Eureka的区别

Eureka是基于AP原则设计

传统的ACID分别为

代表技术:RDBMS ( mysql/oracle/ sqlServer)

  • A (Atomicity)原子性传统的ACID分别是什么国
  • C (Consistency)一致性
  • I (Isolation)独立性
  • D (Durability)持久性

CAP分别为(CAP只能三选二,不能同时满足三个)

代表技术:NOSQL (redis/ mongdb)

  • C:Consistency (强一致性):信息的及时性,最新性
  • A:Availability ( 高可用性)
  • P:Partition tolerance ( 分区容错性)

因为eureka分布式项目一般会在不同的服务器上,所以P是一定要选的,zookeeper为CP原则,eureka 为AP原则

Zookeeper保证CP
当向注册中心查询服务列表时,我们可以容忍注册中心返回的几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。 但是zk会出现这样-种情况,当master节 点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s,且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的

** Eureka保证AP**
Eureka看明白了这一点,因此在设计时就优先保证可用性。Eureka各 个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而Eureka的客户端在向某个Eureka注册或时如果发现连接失败,则会自动切换至其它节点,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一 致性)。除此之外,Eureka还有 -种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中
心出现了网络故障,此时会出现以下几种情况:

  • 1 Eureka不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
  • 2 Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
  • 3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

因此,Eureka可以很好的应对因网络故障导致部分节 点失去联系的情况,而不会像zookeeper那样使整 个注册服务瘫痪。

2. 什么是微服务

微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一 个的服务, 彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,甚至拥有自己独立的数据库。最大程度降低耦合度

2.1微服务与微服务架构的区别

  • 微服务: 对外形成一个架构体系 ,它强调的是服务的大小,关注的是某个点 就比如eclipse里面一个个的微服务工程/module
  • 微服务架构: 是一种架构模式,提倡将单一的应用根据业务拆分成一个个的服务,服务之间相互协调,互相配合。每个服务都在其运行的进程中。

2.2微服务的优缺点

优点:

  • 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求开发简单、 开发效率提高, 一个服务可能就是专 一的只干一件事。
  • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。微服务能使用不同的语言开发。
  • 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo。微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。微服务允许你利用融合最新技术。
  • 微服务只是业务逻辑的代码,不会和HTML,CSS或其他界面组件混合。
  • 每个 微服务都有自己的存储能力,可以有自己的数据库。 也可以有统一数据库。

缺点:

  • 开发人员要处理分布式系统的复杂性
  • 多服务运维难度,随着服务的增加,运维的压力也在增大
  • 系统部署依赖、服务间通信成本、数据一致性、系统集成测试、性能监控…

2.3 微服务技术栈有哪些?

在这里插入图片描述在这里插入图片描述

3.为什么选择springCloud 作为微服务架构

  • 因为springCloud拥有完整的微服务框架,像前面的微服务条目中的维度基本都可以实现,无需背靠其它插件或框架。

4. springCloud 入门概述

4.1 dubbo和springCloud对比

在这里插入图片描述

  • 最大区别: SpringCloud拋弃 了Dubbo的RPC通信,采用的是基于HTTP的REST方式。 严格来说,这两种方式各有优劣。虽然从一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更加合适。
  • 品牌机与组装机的区别
    很明显,Spring Cloud的功能比DUBBO更加强大,涵盖面更广,而且作为Spring的拳头项目, 它也能够与Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring项目完美融合,这些对于微服务而言是至关重要的。使用Dubbo构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了, 总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而Spring Cloud就像品牌机,在Spring Source的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。

springCloud项目案列

  • MicroServiceCloud父I程(Project),下面带着3个子模块 (Module)
  • MicroServiceCloud
    • microservicecloud-api (封装的整体entity/接口/公共配置等)

    • microservicecloud- provider-dept- -8001(微服务落地的服务提供者)

    • microservicecloud-consumer-dept-80(微服务调用的客户端使用)

idea构建分布式项目的方法

链接:idea构建分布式项目的方法.

5. 服务注册

5.1Eureka是什么

Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper.

5.2原理讲解

Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务注册和发现(请对比Zookeeper)。Eureka采用了C-S的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(此如Zuul)就可以通过Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

在这里插入图片描述
Eureka包含两个组件: Eureka Server和Eureka Client

  • Eureka Server提供服务注册服务各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到
  • EurekaClient是一个Java客户端, 用于简化Eureka Server的交互,客户端同时也具备一个内置的、 使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

5.3具体搭建

假如我需要引入cloud的一个新技术组件
基本上有两步

  • 1.1
    新增一个相关的maven坐标
    eureka
<!--eureka-server服务端-->
<dependency>
<groupId>org. spr ingframework. cloud</ groupId>
<artifactId>spring-cloud-starter-eureka- -server</artifactId>
</dependency>
  • 1.2
    再主启动类上面,标注的启动该新组件技术的相关注解标签
    @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaService7001_APP 
{
    public static void main( String[] args )
    {
       SpringApplication.run(EurekaService7001_APP.class, args);
    }
}
  • 1.3
    java业务逻辑编码

5.4 将服务注册进eureka中

1.在需要被放入eureka的微服务中加入pom相关依赖

 <!--将微服务注册进eureka-->
     <dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka</artifactId>
		<version>1.4.4.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-config</artifactId>
		 <version>2.1.4.RELEASE</version>
	</dependency>

2.在需要被放入eureka的微服务中加入yml相关配置

eureka :
  client: #客户端注册进eureka服务列表内
    service-url:  
      defaultZone: http://localhost:7001/eureka  # 要去注册的地址,在eureka服务端的yml中有定义

在需要被放入eureka的微服务的主启动类中配置@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient //本服务启动后会自动注册进eureka服务中
public class Dept8001_APP 
{
    public static void main( String[] args )
    {
        SpringApplication.run(Dept8001_APP.class, args);
    }
}

5.5 细节修改

  • 1.修改服务映射地址的名字
    在这里插入图片描述方法:在客户端的yml中配置 instance :
    instance-id: microservicecloud-dept8001
eureka :
  client: #客户端注册进eureka服务列表内
    service-url:  
      defaultZone: http://localhost:7001/eureka  # 要去注册的地址,在eureka服务端的yml中有定义
  instance :
    instance-id: microservicecloud-dept8001 #你想要配置的服务映射地址的名字
  • 2.修改主机IP信息提示

在这里插入图片描述方法:在客户端的yml中配置如下信息

eureka :
  instance :
    prefer-ip-address: true  #访问路径 可以显示IP地址
  • 3.info内容构建

第一步:在客户端的pom中添加依赖

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
		<version>2.1.4.RELEASE</version>
	</dependency>

第二步:在总微服务的pom中添加依赖,作用是可以识别到客户端的yml中$的配置信息

  <build>
	<finalName>microservicecloud</finalName>
		<resources>
			<resource>
			<directory>src/main/resources</directory>
			<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<delimiters>
						<delimiter>$</delimiter>
					</delimiters>
				</configuration>
			</plugin>
		</plugins>
	</build>

第三步:在客户端的yml中配置信息

info:
  app.name: atguigu-microservicec loud
  company.name: WWW.atguigu.com
  build.artifactId: ${project.artifactId}
  build.version: ${project.version}

效果展示

在这里插入图片描述

5.6eureka的自我保护机制

一句话:某时刻某一个微服务不可用 了eureka不会立刻清理,依旧会对该微服务的信息进行保存

默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳, EurekaServer将 会注销该实例(默认90秒) 。但是当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了一因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过” 自我保护模式”来解决这个问题一当EurekaServer节,点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进 入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上
时,该Eureka Server节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能
健康的服务实例。一句话讲解:好死不如赖活着

在Spring Cloud中,在eureka服务端的yml配置中可以使用eureka.server.enable-self-preservation = false禁用自我保护模式。

5.7集群配置

作用是防止某一个eureka不起作用后导致项目死机

  • 第一步:先新创建两个eureka微服务7003和7002
  • 第二步:将最早的eureka7001的主启动类和pom文件拷贝到后建的eureka 中
  • 第三部:修改映射配置

在这里插入图片描述
在这里插入图片描述

  • 第四步:修改yml,三个eureka 的yml都要修改
server:
  port: 7001
  
eureka:
  instance:
    hostname: eureka7001.com  # eureka服 务端的实例名称
  client:
    register-with-eureka: false     # false表示不向注册中心注册自己。
    fetch-registry: false           # false表示自 己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/  # 设置与Eureka Server交 互的地址查询服务和注册服务都需要依赖这个地址
server:
  port: 7002
  
eureka:
  instance:
    hostname: eureka7002.com  # eureka服 务端的实例名称
  client:
    register-with-eureka: false     # false表示不向注册中心注册自己。
    fetch-registry: false           # false表示自 己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/  # 设置与Eureka Server交 互的地址查询服务和注册服务都需要依赖这个地址


server:
  port: 7003
  
eureka:
  instance:
    hostname: eureka7003.com  # eureka服 务端的实例名称
  client:
    register-with-eureka: false     # false表示不向注册中心注册自己。
    fetch-registry: false           # false表示自 己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/  # 设置与Eureka Server交 互的地址查询服务和注册服务都需要依赖这个地址



  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值