Spring Boot版本:2.1.4.RELEASE

Spring Cloud版本:Greenwich.SR1

前述:

​ 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册于发现。为什么我们在微服务架构中那么需要服务治理模块呢?微服务系统没有它会有什么不好的地方吗?

​ 在最初构建微服务系统的时候可能服务并不多,我们可以通过做一些静态的配置来实现服务的调用。比如有两个服务A和B,其中服务A需要调用服务B来完成一个业务操作时,为了失效服务B的高可用,不论采用服务端负载均衡还是客户端负载均衡,都需要手工维护服务B的实例清单。但是随着业务的发展,系统的功能越来越复杂,相应的微服务应用也不断增加,我们的静态配置就会变得越来越难以维护。并且面对不断发展的业务,我们的集群规模,服务位置,服务的命名都可能发生变化。同时对这类静态内容的维护也必将消耗大量的人力。

​ 为了解决微服务架构中的服务实例维护的问题,产生了大量的服务治理的框架跟产品。这些框架跟产品的实现都围绕着服务注册与服务发现机制来完成对服务应用实例的自动化管理

服务注册:

​ 在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号,通信协议等一些附加信息告知注册中心。注册中心按服务名分类组织服务清单。比如我们有两个提供服务A的进程分别允许与192.168.0.100:8080和192.168.0.101:8080位置上,另外还有三个提供服务B的进程分别运行于192.168.0.100:9000,192.168.0.101:9000,192.168.0.102:9000,这些进程均向注册中心注册自己的服务之后,注册中心就会维护类似下面的一个服务清单。另外,服务注册中心还需要以心跳的方式去检查清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果

服务名 位置
服务A 192.168.0.100:8080,192.168.0.101:8080
服务B 192.168.0.100:9000,192.168.0.101:9000,192.168.0.102:9000
服务发现:

​ 由于在服务治理的框架下运作,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务发起请求调用实现。所以,服务调用方在调用服务提供方接口的时候,并不知道具体的服务实例的位置。因此,调用方需向服务注册中心咨询服务,并获取所有服务的注册清单,以实现对具体服务实例的访问。比如,现有服务C希望调用服务A,服务C就需要向注册中心发起咨询服务请求,服务注册中心就会将服务A的位置清单返回给服务C,如按上例服务A的情况,服务C就获得了服务A的两个可用位置192.168.0.100:8080,192.168.0.101:8080。当服务C要发起调用的时候,便从该清单中以某种轮询的策略取出一个位置来进行服务调用,这就是后续我们会介绍的客户端负载均衡。这里我们只是列举了一种简单的服务治理逻辑,以方便理解服务治理框架的基本运行思路。实际的框架为了性能等因素,不会采用每次都向服务注册中心获取服务的方式,并且不同的应用场景在缓存和服务剔除等机制上也会有一些不同的实现策略。

Eureka:

​ Spring Cloud Eureka,使用了Netflix Eureka来实现服务注册与发现,它既包含了服务端组件也包含客户端组件,并且服务端组件跟客户端组件都采用Java编写,所以Eureka主要适用于通过Java实现的分布式系统,或是与JVM兼容语言构建系统。但是,由于Eurka服务端的服务治理机制提供了完备的RESTful API,所以它也支持将非Java语言构建的微服务应用纳入Eureka的服务治理体系中来。

​ Eureka服务端,我们也称之为服务注册中心。它同其他服务注册中心一样,支持高可用配置。它依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。如果Eureka以集群的模式部署,当集群中有分片故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现跟注册。

​ Eureka客户端,主要处理服务的注册跟发现。客户端服务通过注解和参数配置的方式,嵌入在客户端应用程序的代码中,在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性地发送心跳来更新它的服务租约。同时,它也能从服务端查询当前注册的服务信息并将他们缓存到本地并周期性地刷新服务状态

Spring Cloud 学习 之 Spring Cloud Eureka(概述)的更多相关文章

  1. Spring Cloud 学习 之 Spring Cloud Eureka(搭建)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 文章目录 搭建服务注册中心: 注册服务提供者: 高可用注册中心: 搭建服务注册中心: ...

  2. Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)

    Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...

  3. Spring Cloud学习笔记--Spring Boot初次搭建

    1. Spring Boot简介 初次接触Spring的时候,我感觉这是一个很难接触的框架,因为其庞杂的配置文件,我最不喜欢的就是xml文件,这种文件的可读性很不好.所以很久以来我的Spring学习都 ...

  4. spring cloud学习(六)Spring Cloud Config

    Spring Cloud Config 参考个人项目 参考个人项目 : (希望大家能给个star~) https://github.com/FunriLy/springcloud-study/tree ...

  5. Spring Cloud 学习 (九) Spring Security, OAuth2

    Spring Security Spring Security 是 Spring Resource 社区的一个安全组件.在安全方面,有两个主要的领域,一是"认证",即你是谁:二是& ...

  6. Spring框架学习03——Spring Bean 的详解

    1.Bean 的配置 Spring可以看做一个大型工厂,用于生产和管理Spring容器中的Bean,Spring框架支持XML和Properties两种格式的配置文件,在实际开发中常用XML格式的配置 ...

  7. Spring框架学习02——Spring IOC 详解

    1.Spring IOC的基本概念 IOC(Inverse of Control)反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理.当某个Java对象(调用者)需要调用 ...

  8. Spring Boot学习笔记——Spring Boot与MyBatis的集成(项目示例)

    1.准备数据库环境 # 创建数据库 CREATE DATABASE IF NOT EXISTS zifeiydb DEFAULT CHARSET utf8 COLLATE utf8_general_c ...

  9. Spring 框架学习(1)--Spring、Spring MVC扫盲

    纸上得来终觉浅,绝知此事要躬行 文章大纲 什么是spring 传统Java web应用架构 更强的Java Web应用架构--MVC框架 Spring--粘合式框架 spring的内涵 spring核 ...

随机推荐

  1. IKAnalyzer修改支持lucene8.0

    源码已经上传GitHub. 如果直接使用jar:IKAnalyzer-5.0.2. 在这我只是在原有代码结构上做了微调,让代码支持lucene8.0.

  2. Python程序设计实验报告一:熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩_____           日期     2020.3.8     指导老师  ...

  3. shiro:注解配置(五)

    基于[shiro集成spring]项目改造 引入相关依赖环境 <!--AOP的jar包--> <dependency> <groupId>org.aspectj&l ...

  4. Flutter 步骤进度组件

    ​老孟导读:最近文章更新拖后腿了,一直忙着网站改版的事情,今天总算落地了,全新的Flutter网站即将上线,敬请期待.网站目前收集197个组件的详细用法,还有150多个组件待整理. Stepper S ...

  5. 感受python之美,python简单易懂的小例子

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 简洁之美 通过一行代码,体会Python语言简洁之美 2 Python ...

  6. Spring基于注解@Required配置

    基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...

  7. c++<ctime>中常用函数

    先说一下c++标准库并没有提供所谓的日期类型,而是继承了c的日期类型 <cmath>里面有些常用的函数,比如计时函数clock().获取系统时间的函数time(),下面就具体的介绍一下 1 ...

  8. JVM原理以及深度调优(二)

    JVM内存分配 内存分配其实真正来讲是有三种的.但对于JVM来说只有两种 栈内存分配: 大家在调优的过程中会发现有个参数是-Xss 默认是1m,这个内存是栈内存分配, 在工作中会发现栈OutOfMem ...

  9. 从GC的SuppressFinalize方法带你深刻认识Finalize底层运行机制

    如果你经常看开源项目的源码,你会发现很多Dispose方法中都有这么一句代码: GC.SuppressFinalize(this); ,看过一两次可能无所谓,看多了就来了兴趣,这篇就跟大家聊一聊. 一 ...

  10. 日日算法:Dijkstra算法

    介绍 Dijistra算法作为一种最短路径算法,可以用来计算一个节点到图上其他节点的最短距离. 主要是通过启发式的思想,由中心节点层层向外拓展,直到找到中点. 适用于无向图和有向图. 算法思想 假设我 ...