springcloud简单理解

目录

springcloud

微服务

微服务架构

常规步骤

euraka C_S架构

Eureka

两个组件:Eurieka service 和Eureka client

自我保护机制

一次完整的HTTP网络请求过程

Ribbon

负载均衡

IRule与自定义负载均衡策略

Feign

Hystrix断路器

服务熔断

服务降级

Hystrix Dashboard 服务监控类似durid的日志监控

SpringCloud Config


springcloud

        微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务相互独立,相互协调。

服务之间通信机制相互沟常是RESTful API,RPC远程过程调用。

每个服务都为照着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境。

每一个微服务提供单个业务功能的服务,一个服务做一件事,小而独立的处理过程,能够自行单独启动或销毁,拥有自己独立的数据库。

基础工程RestTemplate

Eureka 集群配置(CAP原则)

netflix的五大神兽

Rebbin 做负载均衡,核心接口:IRule 自定义负载均衡算法

feign 通过接口实现负载均衡

Hystrix 断路器 熔断、降级和dashboard(监控)

zuul 路由网关,拦截和过滤

分布式的配置spring cloud config一个服务器,一个客户端,通过客户端去访问服务器(C——>S——>git)

微服务

强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题提供落地对应服务的一个服务应用.

狭义的看,可以看作是IDEA中的一个个微服务工程,或者Moudel。IDEA 工具里面使用Maven开发的一个个独立的小Moudel,它具体是使用SpringBoot开发的一个小模块,专业的事情交给专业的模块来做,一个模块就做着一件事情。强调的是一个个的个体,每个个体完成一个具体的任务或者功能。

微服务架构

微服务架构是一种架构模式,它体长将单一应用程序划分成一组小的服务,服务之间相互协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制(如HTTP)互相协作,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具(如Maven)对其进行构建。

常规步骤

导入依赖,编写配置,开启@EnableXXX注解

euraka C_S架构

导入依赖,编写配置文件,开启功能(Enable),配置类

告诉自己是谁

类加载器:

自己是服务端,eureka注册中心,搭建集群注册的时候加/erueka/

 EurekaServer服务器端启动类,接受其它微服务注册进来客户端

客户端的东西自动注册到服务端中,先启动注册中心 7001

8001 服务提供者

导入依赖,开启客户端自动注册

80 服务消费者

自我保护机制:不会立即清理,连接之间是心跳;一种熔断机制

服务,临时盲目保存全部服务,也不注销

提供者8001

搭建集群:erurka3个注册中心,如何关联,

单机配置就行,集群需要互关其他注册中心

做域名映射.修改hosts的文件

CAP原则

强一致性、可用性、分区容错行

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

Eureka

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

采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,

它是服务注册中心,而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

两个组件:Eurieka service 和Eureka client

供服务注册服务,各个节点启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到

客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

三个角色:

        注册中心(多个注册中心称为集群,)

        服务提供者(多个服务提供者为负载均衡提供前提)

        服务消费者(ribin、feign的方式实现负载均衡)

服务提供者将自身服务注册到Eureka,从而使服务消费方能够找;

服务消费方从Eureka获取注册服务列表,从而能够消费服务;

注册进来的微服务,获取信息

自我保护机制

EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据;

宁愿无脑保存也不删除;

一次完整的HTTP网络请求过程

1)浏览器会首先搜索浏览器自身的DNS缓存,浏览器自身的DNS缓存有效期比较短,且容纳有限,大概是1000条。如果自身的缓存中存在blog.csdn.net 对应的IP地址并且没有过期,则解析成功。

(2)如果(1)中未找到,那么浏览器会搜索操作系统自身的DNS缓存(可以在命令行下使用 ipconfig /displaydns 查看)。如果找到且没有过期则成功。

(3)如果(2)中未找到,那么尝试读取位于C:\Windows\System32\drivers\etc下的hosts文件,如果找到对应的IP地址则解析成功。

(4)如果(3)中未找到,浏览器首先会找TCP/IP参数中设置的本地DNS服务器,如果要查询的域名包含在本地配置的区域资源中,则完成域名解析,否则根据本地DNS服务器会请求根DNS服务器。

(5)本地DNS会把请求发至DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP,本地DNS服务器使用该IP信息联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,会返回.net域的下一级DNS服务器地址给本地DNS服务器。以此类推,直至找到

Ribbon

客户端 负载均衡 的工具。它的主要功能是提供客户端的软件负载均衡算法

利用RestTemplate对http请求的封装处理,形成了一套模版化的调用;

一个请求如果被Ribbon代理之后会,

Ribbon通过一个@LoadBalanced注解就实现了RestTemplate请求的负载均衡RestTemplate在发送请求的时候会被ClientHttpRequestInterceptor拦截,LoadBalancerInterceptor是ClientHttpRequestInterceptor的实现类,它的作用就是用于RestTemplate的负载均衡,LoadBalancerInterceptor将负载均衡的核心逻辑交给了loadBalancer;

负载均衡

将用户的请求分摊到服务上;

IRule与自定义负载均衡策略

Feign

接口+注解的形式实现负载均衡;

Feign集成了Ribbon,Feign只需要定义服务绑定接口且以声明式的方法;

Hystrix断路器

当某个服务单元发生故障之后,向调用方返回一个符合可处理的备选响应(FallBack) ,

好处:线程不会被长时间、不必要地占用;

服务熔断

当某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回响应信息。

当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现。

服务降级

当线程堵塞,自动将某些服务先关掉,再开启回来。

服务降级处理时,仅在客户端。

Hystrix Dashboard 服务监控类似durid的日志监控

会持续地记录所有通过Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用 户,包括每秒执行多少请求多少成功,多少失败等。对监控内容转化成可视化界面。

Zuul

路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器。负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础。

Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务,治理下的应用,同时从

Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得;

网关将所有服务的API接口统一聚合,统一对外暴露;保护了内部微服务单元的API接口;网关可以做用户身份认证和权限认证,防止非法请求操作API接口

SpringCloud Config

主要实现配置和代码解耦,为各个不同微服务应用的所有环境提供了一个中心化的外部配置。分为服务端和客户端两部分。

集中管理配置文件、不同环境不同配置,动态化的配置更新,分环境部署。

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并未客户端提供获取配置信息,加密/解密信息等访问接口。

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。

配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

基础功能

服务治理: Spring Cloud Eureka客户端负载均衡: Spring Cloud Ribbon服务容错保护: Spring Cloud Hystrix声明式服务调用: Spring Cloud FeignAPI网关服务:Spring Cloud Zuul分布式配置中心:Spring Cloud Config

结束才是开始,展望:框架源码、设计模式

注解总结:

@Controller 控制层,里面有多个连接

@Service 业务层,一般对于接口和实现

@Repository 一般的dao层

@Autowired 自动注入依赖

@Resource bean的注入,同Autowired 有相同的功能。

        说明: 共同点:@Resource和@Autowired都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。 不同点: @Resource是Java自己的注解,

@Resource有两个属性是比较重要的,分别是name和type;Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。 @Autowired是spring的注解,Autowired只根据type进行注入,不会去匹配name。如果涉及到type无法辨别注入对象时,那需要依赖@Qualifier或@Primary注解一起来修饰。

@Qualifier 如果一个接口有多个实现,那么注入时候加上唯一标示

@Component定义其它组件(比如访问外部服务的组件)

@RequestMapping (value=’’,method={RequestMethod.GET或者POSt})绑定url

@RequestParam (value=’’ required=false)绑定参数,将客户端请求中的参数值映射到相应方法的参数上;

@ModelAttribute 一般用于controller层,被注解的方法会在所以mapping执行之前执行,并且可以绑定参数到Model model里面。

@Transactional (readOnly=true)注解式事务@TransactionalEventListener用于配置事务的回调方法,可以在事务提交前、提交后、完成后以及回滚后几个阶段接受回调事件。@Value(“${}”)可以注入properties里面的配置项@SringBootApplication相当于@configuration,@EnableAutoConfiguation @ComponentScan三个注解合用。

@EnableDiscoveryclient 注册应用为Eureka客户端应用,以获得服务发现的能力@EnableEurekaClient配置本应用将使用服务注册和服务发现,注册和发现用这个注解。

@EnableEurekaServer 启动一个服务注册中心

@EnableHystrix表示启动断路器,断路器依赖于服务注册和发现。

@HystrixCommand方法失败后,将西东切换到fallbackMethod方法执行。指定回调@EnableAutoConfiguration spring boot自动配置,尝试根据你添加的jar依赖自动配置你的spring应用。

@ComponentScan 表示将该类自动发现并注册bean 可以自动收集所有的spring组件@Configuration 相当于传统的xml配置文件

@Import 导入其他配置类@ImportResource用来 加载xml配置文件

@RestController 返回json字符串的数据,直接可以编写RestFul的接口;

@CrossOrigin 可以处理跨域请求,让你能访问不是一个域的文件;

@SpringBootApplication 申明让spring boot自动给程序进行必要的配置,等价于以默认属性使用@Configuration,

@EnableAutoConfiguration和@ComponentScan;@FeignClient springboot调用外部接口:声明接口之后,在代码中通过@Resource注入之后即可使用。

@FeignClient标签的常用属性如下:name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现,fallbank属性指定回调类;url: url一般用于调试,可以手动指定@FeignClient调用的地址decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignExceptionconfiguration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contractfallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码path: 定义当前FeignClient的统一前缀

@EnableFeignClients 开启Spring Cloud Feign的支持@EnableCircuitBreaker 开启断路器功能@LoadBalanced 开启客户端负载均衡@WebAppConfiguration 开启Web 应用的配置,用于模拟ServletContext

@RibbonClient,这个注解用来为负载均衡客户端做一些自定义的配置,可以进一步配置或自定义从哪里获取服务端列表、负载均衡策略、Ping也就是服务鉴活策略等等@PathVariable 获取路径参数。

@JsonBackReference 解决嵌套外链问题,解决无线循环递归

类加载器:

(1): 引导类加载器(Bootstrap类加载器)加载一些重要的类,它加载(%JAVA_HOME%\jre\lib),如rt.jar(runtime)、i18n.jar等,这些是Java的核心类。并不继承自 java.lang.ClassLoader。(2): 扩展类加载器(Extension类加载器)它主要加载扩展目录下的jar包。(3): 系统类加载器(System类加载器)主要加载我们应用程序中的类,单元测试或者用到的第三方包,如jdbc驱动包等。这里的父类加载器与类中继承概念要区分,它们在class定义上是没有父子关系的。

常用配置参数:

eureka常用参数:

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

自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:

1、Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。

2、Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用。

3、当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中。

因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况。

eureka

eureka.server.enable-self-preservation关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭服务注册中心将不可用的实例正确剔除false
eureka.instance.prefer-ip-address不使用主机名来定义注册中心的地址,而使用IP地址的形式,如果设置了eureka.instance.ip-address 属性,则使用该属性配置的IP,否则自动获取除环路IP外的第一个IP地址
eureka.instance.ip-addressIP地址
eureka.instance.hostname设置当前实例的主机名称
eureka.instance.lease-renewal-interval-in-seconds定义服务续约任务(心跳)的调用间隔,单位:秒30
eureka.instance.lease-expiration-duration-in-seconds定义服务失效的时间,单位:秒90
eureka.instance.status-page-url-path状态页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置/info
eureka.instance.status-page-url状态页面的URL,绝对路径
eureka.instance.health-check-url-path健康检查页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置/health
eureka.client.service-url指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔如果服务注册中心加入了安全验证,这里配置的地址格式为: http://:@localhost:8761/eureka 其中 为安全校验的用户名; 为该用户的密码。eurika的默认访问端口是8761;http://localhost:8761/eureka

遇到错误及其解决办法:遇事不决上百度,哈哈

springboot和springcloud版本不一致或者jar包冲突问题;

属性找不到 、不能加载上下文。

自定义的restful接口找不到。@Value里的内容不存在;

检查版本,配置文件,检查bean是否注入,主启动类上是否有相应的注解,远程端配置文件问题。

查看jar包的maven插件:Maven Helper,快速查找jar包,Maven search;

OSI七层协议

应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等

会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话

传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层:建立、维护、断开物理连接。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个基于Spring框架开发的分布式系统开发工具集合,它提供了一系列的工具和框架,用于简化分布式系统中常见的开发任务和解决方案。 Spring Cloud的主要目标是简化分布式系统的开发和部署,提供一致性、可靠性和高性能的分布式系统解决方案。它提供了以下核心功能和组件: 1. 服务注册与发现:通过Spring Cloud Netflix Eureka或Consul等组件,实现服务的注册与发现,使得服务之间可以方便地进行通信和调用。 2. 负载均衡:通过Spring Cloud Netflix Ribbon等组件,实现负载均衡功能,将请求分发到多个服务实例中,提高系统的可靠性和性能。 3. 服务调用:通过Spring Cloud Netflix Feign等组件,简化服务之间的调用,支持声明式的服务调用方式,使得服务之间的调用更加简单和灵活。 4. 配置管理:通过Spring Cloud Config组件,实现分布式系统的配置管理,可以将配置集中存储,并动态地加载和刷新配置。 5. 断路器:通过Spring Cloud Netflix Hystrix等组件,实现断路器模式,保护系统免受雪崩效应的影响。 6. 分布式消息传递:通过Spring Cloud Stream或Spring Cloud Bus等组件,实现分布式系统中的消息传递和事件驱动。 7. 分布式追踪:通过Spring Cloud Sleuth和Zipkin等组件,实现分布式系统的请求追踪和调试。 总而言之,Spring Cloud提供了一套完整的工具和框架,用于构建和管理分布式系统。它使得开发人员可以更加专注于业务逻辑的实现,而无需过多关注分布式系统的复杂性和细节。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值