阿里架构师探讨服务注册和发现

在本文中,我们将探讨服务注册和发现的概念,这种机制使微服务能够在不知道确切位置(通常是URL)的情况下使用其他微服务。

我们为什么需要这个?

如果没有这一点,服务的地点将相互耦合,造成难以维护的系统。基本问题是显而易见的:服务如何知道他们需要使用的服务的IP和端口?在一个简单的架构中,静态配置工作得很好。每项服务都部署在同一地点,并且很少发生变化。但微服务体系结构并非如此。

微服务的目标之一是使开发团队能够独立部署和扩展应用程序。随着更多的服务和实例被添加到系统中,服务位置开始频繁变化:部分原因是手动或自动缩放,部分原因是由于持续交付流程。随着缩放和部署的发生,实例将开始频繁地升降。显然,服务位置的静态配置不是一个可行的解决方案。需要动态配置。

它是如何工作的?

包含可用服务位置的动态配置保存在发现服务中。每个微服务只需要知道发现服务的位置,并将用它来获取其他微服务的位置。在演示应用程序中,发现服务在发现服务器应用程序中实现。

我们以演示应用程序中的两个微服务为例:(admin-application一个Web Vaadin应用程序)和  biz-application (一个Spring Data REST Web服务)。在  admin-application 需要  biz-application 读取和写入数据。下图显示了通信流程:

1. biz-application启动并告诉discovery-server它是可用的。

2. admin-application启动并询问discovery-server该地点的位置biz-application

3. discovery-server查找其内部数据库并返回该数据库的位置biz-application

这个admin-application罐子现在可以直接向这个罐子发出请求biz-application

biz-application添加更多实例时会发生什么?该过程如下图所示:

请注意每个biz-application实例如何注册自己(1和2)以及如何discovery-server将所有可用位置返回到admin-application(4),然后再选择其中一个位置发出请求(5)。通过具有容错功能的客户端负载均衡器来选择哪个实例。本文重点介绍服务注册和发现。

使用Eureka实现发现服务器

有许多适用于服务发现的实现。SmartStackZookeeperEtcdConsulNSQSerfDoozer都是很好的例子。演示应用程序使用Netflix 经过战场验证的Eureka

Spring Cloud通过Spring Cloud Netflix提供与Eureka(通常与Netflix OSS)的完美集成。由于Spring Boot的自动配置功能,使用Eureka实施发现服务非常简单。

使用Spring Initializr创建一个名为discovery-server的新Spring Boot应用程序,并包含Eureka Server和Actuator(可选)依赖项:

确保使用Spring Boot的2.0.0版本(撰写本文时的里程碑版本)。点击生成项目,提取生成的文件,并将Maven项目导入到您最喜欢的IDE中。

打开  DiscoveryServerApplication 课程并用以下注释@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
公共 类 DiscoveryServerApplication {
...
}

删除application.properties文件并application.yml 使用以下内容创建一个  文件:

server.port :7001
spring.application.name :发现服务器
 
尤里卡:
实例:
主机名: localhost
leaseRenewalIntervalInSeconds :2
leaseExpirationDurationInSeconds :2
服务器:
evictionIntervalTimerInMs :1000
response-cache-update-interval-ms :1000
客户:
registerWithEureka :false
fetchRegistry :false

该文件将应用程序配置为使用端口7001和名称discovery-server。它还包含Eureka的配置。注意最后两行。他们需要避免discovery-server注册自己。

其余配置不适用于生产系统。它经过调整仅处理每个微服务的几个实例,并允许您在尝试应用程序时快速查看更改。在生产部署中,您应该根据您的特定要求对其进行调整。有关这方面的更多信息,请参阅Eureka的文档

使用Maven编译和打包应用程序,并使用命令行(或IDE)将其作为标准Java程序运行:

cd发现服务器
mvn包
java -jar target / discovery-server-0.0.1-SNAPSHOT.jar

在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源

猜你喜欢

转载自my.oschina.net/u/3833719/blog/1810789