前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务介绍及Eureka服务注册与发现

微服务介绍及Eureka服务注册与发现

作者头像
IT架构圈
发布于 2021-10-21 06:27:00
发布于 2021-10-21 06:27:00
6150
举报
文章被收录于专栏:IT架构圈IT架构圈

正式开始springcloud,之前说的springboot很简单,为什么只说使用不讲原理,真的springboot没啥好讲的。说到springcloud首先得说微服务。

传统单体架构介绍及优缺点(一)

在传统的项目,在10年之前陈奕迅【十年】,会有一个tomcat,这个tomcat里面就放一个war包,war包中包括多个模块【商品,订单,用户,库存,支付】所有的都放在一个项目中,这就是单体架构。而且所有的模块都访问一个DB。慢慢的数据库会变成读写分离,但是垂直方向都是单一的。读和写都有一个,没有从模块角度进行拆分,这个优缺点之前也说过。

一个项目包(war包,归档包)包含了应用的所有功能, 在没有出现微服务概念之前,基本上都是这种架构形式存在, 我们一般把程序打包成一个文件后,扔到tomcat或者jetty, jboss等应用服务器中。

  • ① 特点
  1. 部署很简单,符合我们的思维
  2. 项目臃肿(从一行变成了百万行,修改代码需要重启服务,重启服务就需要断业务。)
  3. 技术债务(一个项目跑多年,经历了多个程序员,前面的需求代码都没有注释。新来的开发人员对业务不熟悉,代码也没注释,所以新入职的程序员都愿意进去新项目组,新的项目都是新业务,这就是经常跳槽和不经常跳槽的人可以避免这些坑)
  4. 部署频率低(项目庞大,该bug的时间可能还没项目发布的时间长,一两个bug,不允许更新的,更新的东西太少了。迭代多个需求和很多个bug后,找个黄道吉日去更新,你的更新频率就低了)
  5. 扩展性差(改一个模块牵扯整个项目,举个例子:项目都用到缓存了,缓存和项目在一起的,如果修改缓存整个项目都有问题。)
  6. 阻碍技术创新(传统项目单体架构整个项目只有一个包,这个包里面所有的模块都使用同一套技术,如果发现市面上某个框架和技术非常nice,至少可以解决某一块的性能问题,根本问题,想引入发现非常的困难。举个例子:原来用struts,感觉spring mvc很好,整个全部都改,肯定不敢去改)
单体架构到微服务架构的改造及优缺点(二)

把每个独立的模块单独抽出来作为一个独立运行的服务,服务之间采用轻量级Rest方式调用。

  • ① 微服务特点
  1. 每个小组专注于一个微型服务,致力于该服务的稳定性,可用性,服务性能,以及业务的迭代开发。
  2. 每个微服务可以独立运行(独立一个进程运行) 。
  3. 多个微服务或者说一系列微服务组合起来就构建了一个或者多个独立的系统 。
  4. 每个微服务只针对独立的业务开发基础的服务,也就是说一个微服务只关注某个特定的功能。
  5. 每个微服务可以使用不同的技术实现,以及每个微服务有自己独立的数据库。
  6. 每个微服务之间通过一些轻量的通讯机制进行通讯,例如REST API 更加容易部署,而且可以全自动部署。
  1. 运维要求高(原来1个war包发布很容易一个war包丢进去就可以了,现在拆成了N个war包,部署的时候需要部署多个,查看日志的时候也需要链路查询比较麻烦)
  2. 分布式固有的复杂性
  3. 接口调用成本高
微服务设计原则(三)
  1. 单一职责。
  2. 服务自治。
  3. 轻量级通讯原则。
  4. 接口明确原则。
  5. 微服务粒度(服务层原则,服务给谁)。
  6. 服务依赖(不要形成回环)。
微服务与SOA联系及区别 (四)
  1. SOA(面向服务架构)是集成多个较大组件(一般是应用)的一种机制,它们将整体构成一个彼此协作的套件,是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯。
  2. 微服务架构中,业务逻辑被拆分成一系列小而松散耦合的分布式组件,共同构成了较大的应用,每个组件都被称为微服务。
基于Springboot的微服务架构的改造(五)

用户微服务 订单微服务 调用流程:客户端>订单微服务>用户微服务

  • ① 当用户微服务有多台实例提供高可用服务或者负载均衡服务的时候,订单微服务怎么来调用用户微服务呢?同时怎么支持服务动态水平增加或者减少呢? 1.Nginx

2.服务发现

服务注册与发现组件Eureka架构介绍(六)

Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此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那样使整个注册服务瘫痪。

  • ④ 基本原理
  • 处于不同节点的eureka通过Replicate进行数据同步
  • Application Service为服务提供者
  • Application Client为服务消费者
  • Make Remote Call完成一次服务调用

服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次再调用时,则直接从本地缓存中取,完成一次调用。

当服务注册中心Eureka Server检测到服务提供者因为宕机、网络原因不可用时,则在服务注册中心将服务置为DOWN状态,并把当前服务提供者状态向订阅者发布,订阅过的服务消费者更新本地缓存。

服务提供者在启动后,周期性(默认30秒)向Eureka Server发送心跳,以证明当前服务是可用状态。Eureka Server在一定的时间(默认90秒)未收到客户端的心跳,则认为服务宕机,注销该实例。

PS:就说到这里下次说下Eureka配置。

点击👆卡片,共同学习共同进步,我的坚持你的收获。

在看点这里

好文分享给更多人↓↓

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT架构圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
IT大咖说
2019/12/24
8.7K0
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/05/27
9890
ZooKeeper、Eureka、Consul 、Nacos,微服务注册中心怎么选?
微服务常见面试题
微服务通信机制 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。 围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的去集中化控制。
用户7353950
2022/05/11
5780
微服务常见面试题
四个方面对比微服务注册中心产品
微服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
二哥聊运营工具
2022/07/11
5160
四个方面对比微服务注册中心产品
【SpringCloud】三、Eureka
传统RPC远程调用框架中,服务之间依赖关系复杂,不便于管理。所以产生了服务治理,实现服务的注册与发现。
Yuyy
2022/06/28
3620
【SpringCloud】三、Eureka
Java面试——微服务
就目前而言,对于微服务业界并没有一个统一的,标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
Java架构师必看
2021/04/25
1.1K0
微服务注册中心技术选型:5种主流注册中心,哪个最香?
对于注册中心,在写这篇文章前,我其实只对ETCD有比较深入的了解,但是对于Zookeeper和其它的注册中心了解甚少,甚至都没有考虑过ETCD和Zookeeper是否适合作为注册中心。
猫头虎
2024/04/08
3.8K0
微服务注册中心技术选型:5种主流注册中心,哪个最香?
【Spring Cloud】004-Eureka服务注册与发现
Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper;
訾博ZiBo
2025/01/06
1360
【Spring Cloud】004-Eureka服务注册与发现
SpringBoot+SpringCloud面试题整理
什么是SpringBoot? 1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件) 2、创建独立的spring引用程序main方法运行 3、嵌入Tomcat无需部署war包,直接打成jar包nohup java -jar – & 启动就好 4、简化了maven的配置 4、自动配置spring添加对应的starter自动化配置 SpringBoot常用的starter: 1、spring-boot-starter-web(嵌入Tomcat和web开发需要的servlet和jsp支持) 2、spring-boot-starter-data-jpa(数据库支持) 3、spring-boot-starter-data-Redis(Redis支持) 4、spring-boot-starter-data-solr(solr搜索应用框架支持) 5、mybatis-spring-boot-starter(第三方mybatis集成starter) SpringBoot自动配置原理: 1、@EnableAutoConfiguration这个注解会”猜”你将如何配置spring,前提是你已经添加了jar依赖项,如果spring-boot-starter-web已经添加Tomcat和SpringMVC,这个注释就会自动假设您在开发一个web应用程序并添加相应的spring配置,会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中bean 2、在main方法中加上@SpringBootApplication和@EnableAutoConfiguration SpringBoot starter工作原理: 1、SpringBoot在启动时扫描项目依赖的jar包,寻找包含spring.factories文件的jar 2、根据spring.factories配置加载AutoConfigure 3、根据@Conditional注解的条件,进行自动配置并将bean注入到Spring Context SpringBoot的优点: 1、减少开发、测试时间和努力 2、使用JavaConfig有助于避免使用XML 3、避免大量的maven导入和各种版本冲突 4、提供意见发展方法 5、通过提供默认值快速开始开发 6、没有单独的web服务器需要,这就意味着不再需要启动Tomcat、Glassfish或其他任何东西 7、需要更少的配置,因为没有web.xml文件。只需添加用@Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。甚至可以将@Autowired添加到bean方法中,以使用Spring自动装入需要的依赖关系中 Springcloud解决那些问题: 配置管理、(注册中心eureka、zk)、服务发现、服务注册、断路器、路由策略、全局锁、分布式会话、客户端调用、接口网关(zuul)、服务管理系统 SpringBoot与Springcloud: 1>、SpringBoot简化了xml配置,快速整合框架 2>、Springcloud是一套微服务解决方案—RPC远程调用 3>、关系Springcloud依赖与SpringBoot(web组件用的SpringMVC),为什么Springcloud会依赖与SpringBoot?因为Springcloud写接口就是SpringMVC接口 4>、SpringBootproperties和yml中可以使用${random}设置一些随机值 服务的调用: rest、feign(均使用httpclient技术),负载均衡ribbon 服务调用的原理: 服务首先注册到注册中心eureka中(注册一个名字通过名字调用) 负载均衡 ribbon,先去注册中心取到对应的服务,然后交给我ribbon 配置详解: 1>、eureka.client.register-with-eureka:是否向注册中心注册自己,注册为true反之为false 2>、eureka.client.fetch-registry: 是否需要去检索服务,检索为true反之为false 3>、eureka.client.serviceUrl.defaultZone : 指定服务注册中心的地址 Eureka: 1>、eureka可分为三个角色:服务发现者、服务注册者、注册发现中心,但是这三个角色并不和实际部署的模型是一对一的关系 2>、所有的网络通信都是基于http(s)协议的 3>、Eureka和AWS是紧密结合的,无论是配置还是源码,比如Region、zone…,Region可以通过
全栈程序员站长
2022/09/07
2800
微服务架构 基本概念概述
首先看看什么是单体架构 一个工程对应一个归档包(war),这个war包 包含了该工程的所有功 能。我们成为这种应用为单体应用,也就是我们常说的单体架构(一个 war包打天下)。 具体描述: 就是在我们的一个war包种,聚集了各种功能以及资源,比 如JSP JS,CSS等。而业务种包含了我们的用户模块,订单模块,支付模块等 。
大龄老码农-昊然
2021/03/31
9990
微服务 面试
1、什么是微服务?     就目前而言,对于微服务业界并没有一个统一的,标准的定义。
庞小明
2018/08/01
5890
面试官:ZooKeeper、Eureka、Consul、Nacos各自的区别是什么?
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
业余草
2021/12/06
3.7K0
面试官:ZooKeeper、Eureka、Consul、Nacos各自的区别是什么?
gRPC注册中心,常用的注册中心你懂了吗?AP还是CP
gRPC是一个跨语言的微服务框架,但gRPC本身不支持微服务框架生态圈的一些功能,比如注册中心,限流,熔断等,今天我们就看看如何利用gRPC提供的接口实现简单的注册中心,文章将介绍什么是注册中心、注册中心方案,常用的注册中心实现方式,优劣,以及为gRPC-go实现一个注册中心。
阿伟
2019/10/08
9K0
gRPC注册中心,常用的注册中心你懂了吗?AP还是CP
微服务注册中心 Eureka解析
随着时代的发展,应用服务的架构也随之进行不停的变迁,从单一的架构到面向服务的SOA、以及正在流行的微服务架构,甚至正在火热的服务网格,无论何种架构,适合于技术的需要以及业务的发展才是最重要的。因此,无论是以Spring Cloud和Dubbo第一代的微服务框还是以Service Mesh下一代的微服务框架,对于服务的治理仍然是微服务架构中最核心、最重要的一部分,服务治理最基础的组件是注册中心。
Luga Lee
2021/12/09
6300
微服务注册中心 Eureka解析
微服务架构中的服务注册与发现有哪些?Zookeeper、Eureka、Nacos、Consul 都有什么区别,实现原理是什么?
随着单体应用的拆分,我们面临的首要问题就是采用哪种方式实现服务间的调用,像之前单体应用可能直接在配置或数据库保存调用方的域名 IP 信息等。
码哥字节
2025/01/09
2490
微服务架构中的服务注册与发现有哪些?Zookeeper、Eureka、Nacos、Consul 都有什么区别,实现原理是什么?
【知识总结】6.服务注册发现框架比较(Consul/Zookeeper/etcd/Eureka)
服务发现就是服务提供者将自己提供的地址post或者update到服务中介,服务消费者从服务中介那里get自己想要的服务的地址。
辉哥
2021/03/11
2.2K0
【知识总结】6.服务注册发现框架比较(Consul/Zookeeper/etcd/Eureka)
什么是微服务
在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。
前朝楚水
2018/07/26
9960
eureka手动注册服务_istio服务注册与发现
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
全栈程序员站长
2022/09/24
2.8K0
eureka手动注册服务_istio服务注册与发现
微服务架构中你必须了解的 CAP 原理
一句话概括 CAP:在分布式系统中,网络故障,服务瘫痪,整个系统的数据仍然保持一致性。
IT技术小咖
2020/02/20
6500
微服务架构中你必须了解的 CAP 原理
微服务注册中心如何选型?这几个维度告诉你!
那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今天陈某就带大家深入了解一下这四类注册中心以及如何选型的问题。
码猿技术专栏
2023/08/10
6580
微服务注册中心如何选型?这几个维度告诉你!
推荐阅读
相关推荐
ZooKeeper、Eureka、Consul 、Nacos微服务注册中心对比
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档