SpringCloud01

SpringCloud01

一、认识微服务

一、单体架构

1、简介
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
2、优点
1、架构简单
2、部署成本低
3、缺点
耦合度高
4、单体架构特点
简单方便、高度耦合、扩展性差,适合小型项目。

二、分布式架构

1、简介
分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
2、优点
1、降低服务耦合
2、有利于服务升级扩展
3、服务治理

分布式架构要考虑的问题

1、服务拆分的粒度如何?
2、服务集群地址如何管理?
3、服务之间如何实现远程调用?
4、服务健康状态如何感知?
4、分布式架构特点
松耦合、扩展性好、但架构复杂、难度大。适合大型互联网项目。

三、微服务

1、简介

2、微服务架构特征
1、单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。
2、面向业务:微服务对外暴露业务接口。
3、自治:团队独立、技术独立、数据独立、部署独立。
4、隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题。
3、优点
拆分粒度更小,服务更独立、耦合度更小。
4、缺点
架构非常复杂、运维、监控、部署难度提高。
5、微服务结构
1、使用的技术
国内最知名的是SpringCloud和阿里巴巴的Dubbo
2、结构
1、注册中心
2、配置中心
3、服务网关
3、微服务技术对比
		    Dubbo            SpringCloud             SpringCloudAlibaba
注册中心     zookeeper、Redis  EurekaConsul           NacosEureka
服务远程调用  Dubbo协议         Feign(http协议)          DubboFegin
配置中心     无                SpringCloudConfig       SpringCloudConfigNacos
服务网关     无                SpringCloudGatewayZuul SpringCloudGatewayZuul
服务监控和保护 dubbo-admin、     Hystix                Sentinel
			功能弱
4、SpringCloud
1SrpingCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了
  良好的开箱即用体验。
2、开箱即用(out of the box) 使用:spring cloud xxx 导入依赖,坐标 就可以使用。
3SpringCloudSpringBoot的版本要兼容,即版本要一致。

二、服务拆分及远程调用

1、服务拆分注意事项
1、单一职责:不同微服务,不要重复开发相同业务。
2、数据独立:不要访问其他微服务的数据库。
3、面向服务:将自己的业务暴露为接口,提供其他服务调用。
2、微服务调用方式
1、基于RestTemplate组件发起的http请求实现远程调用。
2、http请求做远程调用与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。
3RestTemplate在web起步依赖中。
1、在启动类上加上restTemplate方法
	@Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
3、提供者与消费者
1、服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
2、服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)
4、服务调用关系
1、提供者与消费者角色其实是相对的。
2、一个服务可以同时是服务提供者和服务消费者。

三、Eureka注册中心

一、eureka的作用

1、消费组该如何获取服务提供者具体信息
1、服务提供者启动时间向eureka注册自己的信息
2、eureka保存这些信息
3、消费者根据服务名称向eureka拉取提供者信息
2、如果多个服务提供值,消费者该如何选择
服务消费者利用负载均衡算法,从服务列表中挑选一个
3、消费者如何感知服务提供者健康状态
1、服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
2、eureka会更新记录服务列表信息,心跳不正常会被剔除
3、消费者就可以拉取到最新的信息
4、总结 – 在Eureka架构中,微服务角色有两类
1EurekaServer: 服务端,注册中心
	1. 记录服务信息
	2. 心跳监控
2EurekaClient: 客户端
	1. Provider: 服务提供者
		1.1 注册自己的信息到EurekaServer
		1.2 每隔30秒向EurekaServer发送心跳
	2. Consumer: 服务消费者
		2.1 根据服务名称从EurekaServer拉取服务列表
		2.2 基于服务列表做负载均衡,选中一个微服务之后发送远程调用

二、Eureka的搭建

1、创建eureka-server服务工程
2、引入eureka依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3、编写启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

4、编写配置文件

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka
5、启动服务
http://127.0.0.1:10086

三、服务注册

1、在user-service的pom文件中,引入下面的eureka-client依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、在user-service中配置application.yml文件,添加服务名称,eureka地址
spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

四、服务发现

1、在order-service的pom文件中配置,引入eureka-client依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、在order-service中配置application.yml文件,添加服务名称,eureka地址
spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
3、服务拉取和负载均衡
@LoadBalanced: 实现负载均衡
在order-service的启动类上,给RestTemplate这个Bean添加一个@LoadBalanced注解
4、总结
1、搭建EurekaServer
1、引入eureka-server依赖
2、添加@EnableEureaServer注解 --> 启动eureka-server服务
3、在application.yml中配置eureka地址
2、服务注册
1、引入eureka-client依赖
2、在application.yml中配置eureka地址
3、服务发现
1、引入eureka-client依赖
2、在appliaction.yml中配置eureka地址
3、给RestTemplate添加@LoadBalanenced注解 --> 实现负载均衡
4、用服务提供者的服务名称远程调用

五、Ribbon负载均衡

1、负载均衡原理

负载均衡流程
在这里插入图片描述
在这里插入图片描述

2、负载均衡策略
Ribbon的负载均衡规则是一个叫IRule的接口来定义的,每一个子接口都是一种规则。
1、不同的规则
1RoundRobinRule --->	简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
2ZoneAvoidanceRule(默认实现) ---> 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
3AvailabilityFilteringRule --->  对以下两种服务器进行忽略: (1)在默认情况下,这台
   服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次
   连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。
   如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。
   并发连接数的上限,可以由客户端的ActiveConnectionsLimit属性进行配置。
4WeightedResponseTimeRule --->  为每一个服务器赋予一个权重值。服务器响应时间越长,
  这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
5BestAvailableRule--->  忽略那些短路的服务器,并选择并发数较低的服务器。
6RandomRule---> 随机选择一个可用的服务器。
7RetryRule---> 重试机制的选择逻辑
2、自定义负载均衡策略方式
1、代码方式 在order-service的启动类中,定义一个新的IRule:
@Bean
public IRule randomRule(){
    return new RandomRule();
}
2、配置文件方式 在order-service的application.yml文件中添加配置
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
2、饥饿加载
  Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长,而饥饿
加载则会在项目启动时创建,降低第一次访问的耗时。
1、开启饥饿加载配置
ribbon:
  eager-load:
    enabled: true
    clients: userservice
3、总结
1、Ribbon负载均衡规则
1、规则接口是IRule
2、默认实现的是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询。

四、Nacos注册中心

1、Nacos是阿里巴巴的产品

一、服务注册到nacos

1、Nacos和Eureka区别
1NacosEureka对于微服务来说,没有太大的区别。
2、主要差异:
	1. 以来不同
	2. 服务地址不同
2、在父工程的pom文件中加入SpringCloudAlibaba的依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
3、在子工程user-service和user-order的pom文件中加入依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
4、在子工程user-service和user-order的yml文件中配置nacos地址
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
5、Nacos服务分级存储模型
1、一级是服务  --> 列如:userservice
2、二级是集群  --> 如杭州多台服务器组成的集群
3、三级是实例 --> 某台部署userservice的服务器
6、服务跨集群调用问题
1、服务调用尽可能选择本地集群的服务,跨集群调用延迟较高。
2、本地集群不可访问时,再去访问其他集群。
7、根据权重负载均衡
1Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
2、权重设置为0则完全不会被访问。
8、环境隔离
1Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

在order-service的application.yml添加namespace

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
        ephemeral: false # 设置为非临时实例

临时实列宕机时,会从nacos的服务列表中剔除,而非临时实列则不会。

9、Nacos与eureka的共同点
1、都支持服务注册和服务拉取
2、都支持服务提供者心跳方式做健康检测
10、Nacos与Eureka的区别
1Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
2、临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值