什么是服务发现 | 学习笔记

简介: 快速学习什么是服务发现。

开发者学堂课程【Spring Cloud Alibaba Nacos 详解(下)什么是服务发现】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/725/detail/12932


什么是服务发现


内容介绍

一、什么是服务发现

二、主流服务发现与配置中心对比

三、Nacos 简介

四、Nacos 特性


“服务发现”里的“服务”指的是微服务,我们先要了解从单体架构到微服务架构的一个转变,以及微服务架构是一个具体什么样的过程。针对单体架构到微服务架构的一个演变过程以及微服务架构的讲解,可以参考 Nacos 配置管理当中具体这一章节的内容。

 

一、什么是服务发现

在微服务架构中,整个系统会按职责能力划分为多个服务,通过服务之间协作来实现业务目标。

这样在代码中免不了要进行服务间的远程调用,服务的消费方要调用服务的生产方,为了完成这一请求,消费方需要知道服务生产方的网络位置( IP 地址和端口号)

我们的代码可以通过读取配置文件的方式读取服务生产方网络位置,如下:

图片.png

我们通过 Spring boot 技术很容易实现:

Service B(服务生产者)

Service B 是服务的生产者,暴露/service 服务地址,实现代码如下:

@SpringBootApplication

@RestController

public class SpringRestProviderBootstrap {

public static void main(String[] args) {

SpringApplication.run(SpringRestProviderBootstrap.classargs);

}

@GetMapping(value = "/service")//暴露服务

public string service(){

return "provider invoke";  

}

}

配置文件:

server.port = 56010

Service A(服务消费者)

实现代码:

@SpringBootApplication

@RestController

public class SpringRestConsumerBootstrap{

public static void main(String[] args){

SpringApplication.run(SpringRestConsumerBootstrap.class,args);

}

@Value("${provider.address}")

private String providerAddress;

@GetMapping(value = "/service")

public String service(){

RestTemplate restTemplate = new RestTemplate();

//调用服务

String providerResult = restTemplate.getForObject("http://" + providerAddress + "/service",String.class);

return "consumer invoke |" + providerResult;

}

}

配置文件:

server.port = 56020

# 服务生产方地址

provider.address = 127.0.0.1:56010

访问 http//127.0.0.156020/ service,输出以下内容:

Consumer invoke | provider invoke

仔细考虑一下,此方案对于微服务应用而言行不通。

首先,微服务可能是部署在云环境的,服务实例的网络位置或许是动态分配的。

另外,每一个服务一般会有多个实例来做负载均衡,由于宕机或升级,服务实例网络地址会经常动态改变。

再者,每一个服务也可能应对临时访问压力增加新的服务节点。

正如下图所示:

图片.png 

基于以上的问题,服务之间如何相互感知?服务如何管理?这就是服务发现的问题了。

如下图:

图片.png

上图中服务实例本身并不记录服务生产方的网络地址,所有服务实例内部都会包含服务发现客户端。

1、在每个服务启动时会向服务发现中心上报自己的网络位置。这样,在服务发现中心内部会形成一个服务注册表,服务注册表是服务发现的核心部分,是包含所有服务实例的网络地址的数据库。

2、服务发现客户端会定期从服务发现中心同步服务注册表,并缓存在客户端。

3、当需要对某服务进行请求时,服务实例通过该注册表,定位目标服务网络地址。若目标服务存在多个网络地址,则使用负载均衡算法从多个服务实例中选择出一个,然后发出请求。

总结一下,在微服务环境中,由于服务运行实例的网络地址是不断动态变化的,服务实例数量的动态变化,因此无法使用固定的配置文件来记录服务提供方的网络地址,必须使用动态的服务发现机制用于实现微服务间的相互感知。

各服务实例会上报自己的网络地址,这样服务中心就形成了一个完整的服务注册表,各服务实例会通过服务发现中心来获取访问目标服务的网络地址,从而实现服务发现的机制。

 

二、主流服务发现与配置中心对比

目前市面上用的比较多的服务发现中心有: NacosEurekaConsulZookeeper

Nacos 作为服务发现中心,具备更多的功能支持项,且从长远来看 ,Nacos 在以后的版本会支持 。

Spring  Cloud+Kubernetes 的组合,填补二者的鸿沟,在两套体系下可以采用同一套服务发现和配置管理的解决方案,,这将大大的简化使用和维护的成本。

另外,Nacos 计划实现Service Mesh,也是未来微服务发展的趋势。

 

三、Nacos 简介

Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。

官方介绍是这样的:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。

 

四、Nacos 特性

Nacos 主要提供以下四大功能:

1、服务发现与服务健康检查

Nacos 使服务更容易注册,并通过 DNS HTTP 接口发现其他服务,Nacos 还提供服务的实时健康检查以防止向不健康的主机或服务实例发送请求。

2、动态配置管理

动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos 消除了在更新配置时重新部署应用程序,这使配置的更改更加高效和灵活。

3、动态 DNS 服务

Nacos 提供基于 DNS 协议的服务发现能力,旨在支持异构语言的服务发现,支持将注册在 Nacos 上的服务以域名的方式暴露端点,让三方应用方便的查阅及发现。

4、服务和元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。

这里134说明了服务发现的功能特性

相关文章
|
安全 Go 数据处理
Go语言CSP编程实战:通道通信技术
Go语言CSP编程实战:通道通信技术
272 0
|
3月前
|
XML JSON 算法
京东商品 SKU 信息接口(jingdong.ware.sku.get)技术干货:数据拉取、规格解析与字段治理(附踩坑总结 + 可运行代码)
本文详解京东商品SKU接口对接技术,涵盖核心参数、权限申请、签名生成、规格解析及常见坑点解决方案,结合可运行代码与实战经验,助力开发者高效集成SKU数据,实现库存、价格等关键信息精准获取。
|
4月前
|
JSON 算法 安全
淘宝商品详情API接口系列,json数据返回
淘宝开放平台提供了多种API接口用于获取商品详情信息,主要通过 淘宝开放平台(Taobao Open Platform, TOP) 的 taobao.tbk.item.info.get(淘宝客商品详情)或 taobao.item.get(标准商品API)等接口实现。以下是关键信息及JSON返回示例:
|
4月前
|
前端开发 JavaScript Java
如何开发人事管理系统中的考勤管理板块?(附架构图+流程图+代码参考)
在竞争激烈的企业环境中,员工考勤管理对团队绩效和组织效率至关重要。本文详解人事管理系统(HRMS)中的考勤管理模块,涵盖系统概述、功能架构、业务流程、技术选型、开发技巧及实战代码示例,助你搭建高效可扩展的考勤系统。
|
Java
Java“NullPointerException”解决
Java中的“NullPointerException”是常见的运行时异常,发生在尝试使用null对象实例的方法或字段时。解决方法包括:1. 检查变量是否被正确初始化;2. 使用Optional类避免null值;3. 增加空指针检查逻辑。
2100 2
|
8月前
|
Linux 虚拟化 iOS开发
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
318 29
Windows Server 2008 R2 OVF (2025 年 4 月更新) - VMware 虚拟机模板
|
9月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
《深度揭秘:DeepSeek如何解锁自然语言处理密码》
DeepSeek是基于Transformer架构的自然语言处理(NLP)佼佼者,通过自注意力机制高效捕捉长距离依赖关系,优化语义理解和生成。预训练阶段,DeepSeek利用海量文本数据学习语法、语义等知识,确保多义词的准确理解与翻译。监督微调和强化学习从人类反馈进一步提升模型性能,使其在智能客服、写作辅助、信息检索等领域广泛应用,为AI语言应用开辟新道路。
365 2
|
机器学习/深度学习 数据采集 人工智能
机器学习实战 | 综合项目-电商销量预估进阶方案
本篇内容是Kaggle数据科学竞赛Rossmann store sales解决方案的进阶版本,整体方案包括探索性数据分析、缺失值处理、特征工程、基准模型与评估、XGBoost建模与调优等完整板块。
4481 1
机器学习实战 | 综合项目-电商销量预估进阶方案
|
iOS开发
Flutter - 底部导航详解与案例示范
Flutter - 底部导航详解与案例示范
696 0