【Spring Cloud】为什么要使用服务发现?

为什么要使用服务发现?

传统的项目而言,服务器端的服务实例的网络地址是相对固定的。而基于云端、现代化的微服务服务实例的网络地址往往是动态更新的。由于服务器端的服务实例扩展、维护、升级,导致服务器端服务实例的IP地址、端口发生变化,从而使得客户端无法获取服务实例新的地址进行正常的调用。
服务发现为解决此类问题的一个解决方案,服务发现实时的获取服务器端服务实例的最新网络地址生成服务注册表,并提供给路由器或客户端服务实例的可用信息。服务注册表可以理解为一个包含所有服务信息的数据库。
服务发现的两种模式:客户端服务发现 、 服务器端服务发现。

客户端服务发现

客户端服务发现指的是客户端直接去服务注册表中查询服务实例信息,并对所有可用的服务实例进行负载均衡算法获得一个最终的服务实例地址,去进行请求。

服务实例在服务启动时向服务注册表注册服务信息,并定期发送心跳来更新服务信息。服务注册表会根据发送来的心跳判断服务是否正常运行,若多次收不到心跳则会剔除对应的服务实例。当然服务实例也可以像服务注册表注销服务信息。
客户端服务发现模式结构图
客户端服务发现的优点:不需要额外配制路由器、负载均衡器,由客户端直接查询注册表并进行负载均衡。
缺点:需要客户端与服务注册绑定,客户端要根据服务端的编程语言和框架 来实现服务发现逻辑。

Eureka、Zookeeper就是客户端服务发现的方式

服务端服务发现

服务端服务发现不由客户端直接去查询服务注册表,客户端正常的请求负载均衡器,由负载均衡器进行与服务注册表的交互,最终通过负载均衡器的负载均衡算法找到可用服务实例并请求。而服务实例在服务注册表的注册与注销等机制 与 客户端服务发现一致。
服务器端服务发现的模式结构图
服务器端服务发现的优点:客户端不需要关注服务发现的实现,只需要正常的向负载均衡器发送请求即可。
这减少了编程语言框架需要完成的发现逻辑
缺点:除非负载均衡器由部署环境提供,否则会成为一个需要配置和管理的高可用系统组件。
consul是服务器端服务发现的典型框架。

服务注册表

服务注册表是服务发现的核心部分,可以理解为一个服务实例信息的数据库。服务注册表提供一组服务发现的Rest API供客户端查询服务实例,服务器端注册、更新、注销服务实例。
POST请求进行服务实例注册
PUT请求进行定时发送更新服务实例信息(心跳)
DELETE请求进行服务实例注销
GET请求进行服务实例查询

服务注册的方式

服务注册方式可以分为由服务实例自己注册,称为自注册模式,也可以由第三方组件进行注册,称为第三方注册模式。

自注册模式的优点是服务实例自己进行注册,无需第三方组件。缺点是服务实例与服务注册表耦合。

第三方注册模式,服务实例则不需要向服务注册表注册;相反,被称为服务注册器的另一个系统模块会处理。服务注册器会通过查询部署环境或订阅事件的方式来跟踪运行实例的更改。一旦侦测到有新的可用服务实例,会向注册表注册此服务。服务管理器也负责注销终止的服务实例。
优点是服务实例与服务注册表解耦,缺点是需要一个高可用的第三方服务管理器组件。

参考:http://blog.daocloud.io/microservices-4/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud Alibaba是一个基于Spring Cloud的开源框架,提供了一系列的组件和工具,用于构建分布式应用程序和微服务体系结构。其中包括服务注册与发现、配置管理、消息总线、负载均衡、熔断器、限流器、分布式事务等。 要使用Spring Cloud Alibaba进行服务注册和发现,需要以下步骤: 1. 添加依赖 在Maven项目中,需要添加以下依赖: ``` <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.0.RELEASE</version> </dependency> ``` 2. 配置Nacos 在配置文件中,需要设置Nacos Server的地址和端口号,以便能够连接到Nacos Server。 ``` spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 ``` 3. 注册服务 在Spring Boot应用程序中,需要添加`@EnableDiscoveryClient`注解,以启用服务发现功能。 ``` @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 然后,在应用程序的配置文件中,需要设置服务的名称和端口号。 ``` spring.application.name=my-service server.port=8080 ``` 4. 发现服务 在另一个应用程序中,需要添加`@EnableDiscoveryClient`注解,以启用服务发现功能。然后,可以使用`DiscoveryClient`类来查询服务列表。 ``` @SpringBootApplication @EnableDiscoveryClient public class Application { @Autowired private DiscoveryClient discoveryClient; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @GetMapping("/services") public List<String> getServices() { return discoveryClient.getServices(); } } ``` 这将返回所有已注册的服务的名称列表。 以上就是使用Spring Cloud Alibaba进行服务注册和发现的基本步骤。需要注意的是,Nacos不仅支持服务注册和发现,还支持配置管理和动态路由等功能。因此,使用Spring Cloud Alibaba和Nacos可以轻松构建高度可用、可扩展和可靠的微服务体系结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值