热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务服务注册与发现

1.服务注册与发现基础架构注册中心:接受服务提供者的注册、存储服务提供者的服务信息,比如ip端口号服务名这些信息;并且与微服务保持心跳,如果心跳不能保持则注销该实例。所以注册中心主

1.服务注册与发现基础架构

微服务-服务注册与发现

注册中心:
接受服务提供者的注册、存储服务提供者的服务信息 ,比如ip 端口号 服务名这些信息;
并且与微服务保持心跳,如果心跳不能保持则注销该实例。
所以注册中心主要提供服务提供者信息的存储,另外与服务提供者保持心跳以监控服务提供者的存活。
服务提供者:
向注册中心提供服务信息,以及一些健康状态。
服务消费者:
定期向注册中心发送查询请求,以获取服务提供者的信息,获取信息之后就向服务提供者发起服务调用。
当服务提供者向注册中心 ,注册或者注销时,它可以接收到来自注册中心的变更通知。通过变更通知,服务消费者可以实时获得服务提供者的信息。
 
2.Eureka的简介
微服务-服务注册与发现
Eureka分为Eureka server和Eureka client ,Eureka server可以部署在不同的区域当中,他们可以进行两两注册,他们之间保持服务注册表数据之间的同步,以达到数据的最终一致性。Eureka client嵌入到各个应用当中,服务提供者借助Eureka client实现注册、续约、注销的操作。
续约就是持续发送心跳。
服务消费者通过获取服务的注册信息,通过get register,来发起远程调用。
有三点要注意:
  1).Eureka server支持跨机房的高可用,不同区域的Eureka server可以同步注册,同一区域也可以两两注册来达到高可用。
  2).Eureka server数据一致性的级别是最终一致性,它相比强一致性的区别在于,最终一致性会保证未来的某一时刻数据保持一致
  3).Eureka client会对注册表进行缓存,从而减轻了server的压力,即使服务宕机也可以从缓存中获取服务信息,这种方式进一步增强了Eureka的高可用
 
3.服务治理的机制
微服务-服务注册与发现
Eureka Server集群:
有两个Eureka Server互相进行注册,每个Eureka Server都有一个服务注册表,是来自于服务提供者的一些实例信息。
evitTimer每隔一段时间都会扫描服务注册表,去扫描所有的服务是否持续发送心跳,如果没有持续发送心跳,就会从服务注册表中移除服务。
自我保护的模式开关:当服务的存活实例低于默认的85%就会开启自我保护开关,就会影响剔除任务,evictTimer就会停止服务,导致所有的服务不再进行注销操作。
 
服务提供者:
向Eureka Serve提供三个操作:register/renew/cancel
register:在开启服务的时候会将服务的实例信息同步给Eureka Server,EurekaServer.instance的信息,比如续约心跳的间隔时间和过期时间。
renew:定期发一个renew,也就是续约操作
cancel:服务关闭时会发送注销操作
heartbeat:定时发送续约心跳
instanceReplicate:同步instance信息
 
服务消费者的服务注册表包括Eureka Server所有的服务信息
服务注册表会缓存,当Eureka Server不可用时,会取缓存当中的信息(同样保证了高可用)
 
4.搭建一个Eureka服务架构的步骤
  1)创建一个Eureka server(服务注册中心)
    微服务-服务注册与发现
  2)创建服务提供者
  微服务-服务注册与发现
  3)创建服务消费者
  微服务-服务注册与发现
 
接下来我们做一个Eureka自我保护欧式的实验:
启动注册中心和和服务提供者,然后ctl+C,关闭服务

 微服务-服务注册与发现

这时服务提供者会向注册中心发送一个注销的请求。

 微服务-服务注册与发现

instance就会消失。
 
再次重启用户,执行kill -9  进程号  命令,强制关闭服务实例,这时不会触发shutdown钩子。
这时发现服务实例还在,说明注册中心没有及时发现服务实例已经下线,现在我们等待十秒中。
微服务-服务注册与发现
我们得出以下几个结论:
1.当我们进程平滑停止时,服务会向注册中心发送注销请求,  服务注册中心收到注销请求后会将关联的实例注册状态置位down
2.当我们执行kill -9的时候不会触发注销操作,这就模拟了断电和进程突然退出的情况。
之前我们说过,服务注册到Eureka Server之后,会维护一个心跳连接,告诉Eureka Server自己还活着。
Eureka在运行期间会统计心跳失败的比例低于我们设定的阈值的时候,它将进入保护模式,而不注销任何服务实例。
但是,在这段期间内实例若出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败的情况,所以客户端必须要有容错机制,比如可以使用请求重试、断路器等。
 
5.高可用的注册中心
Eureka的服务治理设计中,所有的节点既是服务提供方,也是服务消费方,服务注册中心也不例外。
Eureka Server的高可用实际上就是将自己所为服务向其他注册中心注册自己,这样就可以形成一组相互注册的服务注册中心,以实现服务清单的互相同步,达到高可用的目的。
实现的方法就是配置两个服务实例文件(在实际生产中开启两个项目,只是配置文件不同),——application-peer1.properties  application-peer2.properties  
server.port=8777
spring.application.name=eureka-server
eureka.instance.hostname=peer1

#留存的服务实例低于多少比例进入保护模式,保护模式。服务提供者和服务注册中心保持心跳,如果发现无法提供服务,就注销该实例。
#当进入保护模式的情况下,注册中心不会注销服务,以兼容分区故障
eureka.server.renewal-percent-threshold=0.5

#是否开启保护模式
eureka.server.enable-self-preservation=true

#是否注册eureka,高可用的清况下使用
eureka.client.register-with-eureka=true
#是否启用获取服务注册信息
eureka.client.fetch-registry=true
#注册和查询都需要依赖该地址,多个以逗号分隔
eureka.client.serviceUrl.defaultZone=http://peer2:8666/eureka/
View Code
server.port=8666
spring.application.name=eureka-server
eureka.instance.hostname=peer2

#留存的服务实例低于多少比例进入保护模式,保护模式。服务提供者和服务注册中心保持心跳,如果发现无法提供服务,就注销该实例。
#当进入保护模式的情况下,注册中心不会注销服务,以兼容分区故障
eureka.server.renewal-percent-threshold=0.5

#是否开启保护模式
eureka.server.enable-self-preservation=true

#是否注册eureka,高可用的清况下使用
eureka.client.register-with-eureka=true
#是否启用获取服务注册信息
eureka.client.fetch-registry=true
#注册和查询都需要依赖该地址,多个以逗号分隔
eureka.client.serviceUrl.defaultZone=http://peer1:8777/eureka/
View Code

 

6.Eureka的核心特性
 1)通过相互注册与复制支持高可用
 2)支持用户认证
 3)支持注册表缓存(容错机制)
 4)保护模式(解决网络分区故障)
 5)服务提供方上报健康检查
 6)支持Restful API
 
 

推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Firefox火狐浏览器关闭到http://detectportal.firefox.com的流量问题解决办法
    本文介绍了使用Firefox火狐浏览器时出现关闭到http://detectportal.firefox.com的流量问题,并提供了解决办法。问题的本质是因为火狐默认开启了Captive portal技术,当连接需要认证的WiFi时,火狐会跳出认证界面。通过修改about:config中的network.captive-portal-service.en的值为false,可以解决该问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
author-avatar
狂风
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有