注册中心—高并发场景微服务实战(九)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 你好,我是程序员Alan.我在《白话服务治理—高并发场景微服务实战(八)》中,简单介绍了微服务常见组件功能,从本篇开始我将进一步讲解各个组件的内容和应用。

你好,我是程序员Alan.

在《白话服务治理—高并发场景微服务实战(八)》中,简单介绍了微服务常见组件功能,从本篇开始我将进一步讲解各个组件的内容和应用。

服务调用的问题

在《需求分析—高并发常见微服务实战(二)》分析业务需求时,其中有个简单的功能点:订票服务可以请求不同的航空公司查询机票信息,订购指定航空公司航班机票。这里就涉及到两个或多个服务间的调用问题。

服务调用可以简单的分为单实例情况和多实例情况。

单实例情况

可以采用 IP + Port + 接口的形式,采用点对点的HTTP直接调用。这种情况有个明显的缺点就是如果服务增多,将会形成蜘蛛网的形式,非常不利于开发维护。

多实例情况

在实际生产场景中,我们通常会采用多实例集群部署,来应对服务的压力。但多实例部署后,直接面临一个问题,即调用方如何知晓调用哪个实例,当实例运行失败后,如何转移到别的实例上去处理请求?此时我们可能会选择Nginx负载均衡,但往往是静态的,在服务不可用时,如何动态的更新负载均衡列表,保证调用者的正常调用呢?

面对以上两种情况,我们需要将所有的服务统一的、动态的管理起来,此时注册中心就应运而生。

服务注册中心

服务注册中心作分布式服务框架的核心模块,要实现的功能是服务的注册、订 阅、注销、通知 。

所有的服务都与注册中心发生连接,由注册中心统一配置管理,不再由实例自身直接调用。服务管理过程大致过程如下图所示:

从图中,可以看到一个完整的,服务注册和发现的过程:

1.服务提供者启动时,将服务提供者的信息主动提交到服务注册中心进行服务注册。

2.服务调用者启动时,将服务提供者信息从注册中心下载到调用者本地,调用者从本地的 服务提供者列表中,基于某种负载均衡策略选择一台服务实例发起远程调用,这是一个点到点调用的方式。

3.服务注册中心能够感知服务提供者某个实例下线,同时将该实例服务提供者信息从注册中心清除,并通知服务调用者集群中的每一个实例,告知服务调用者不再调用本实例,以免调用失败。

从这个过程中可以看出,有了注册中心之后,服务节点的增加和减少对于客户端就是透明的。这样,除了可以实现不重启客户端,就能动态地变更服务节点以外,还可以实现优雅关闭的功能。  

Nacos应用

目前业界有很多可供你来选择的注册中心组件,例如 ZooKeeper,阿里的微服务注册中心 Nacos,Spring Cloud 的 Eureka 等等。 我个人比较常用的组件是Nacos,它的定位是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

安装Nacos

Nacos官网地址:https://nacos.io/en-us/,本文采用Nacos 1.1.4 版本。

下载后解压,使用对应命令启动。

startup.cmd -m standalone

(standalone代表着单机模式运行,非集群模式)

启动日志如下:

启动成功后,打开http://127.0.0.1:8848/nacos,输入默认的用户名 nacos、密码 nacos,就可以看到如下界面。

可以看到Nacos左侧菜单栏看到Nacos提供的主要功能,本次我们只用到Nacos服务管理功能,其他功能后面章节再讲。

服务中应用Nacos

本文演示如何在Sping Boot项目中启动Nacos的服务发现功能。

1.添加依赖

<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactId><version>0.2.7</version></dependency>

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

2. 在application.yml中配置Nacos server的地址

nacos:
discovery:
server-addr: 127.0.0.1:88483.使用@NacosInjected注入NacosNamingServerice实例@Controller@RequestMapping("discovery")
publicclassDiscoveryController {
@NacosInjectedprivateNamingServicenamingService;
@RequestMapping(value="/get", method=GET)
@ResponseBodypublicList<Instance>get(@RequestParamStringserviceName) throwsNacosException {
returnnamingService.getAllInstances(serviceName);
    }
}
@SpringBootApplicationpublicclassNacosDiscoveryApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(NacosDiscoveryApplication.class, args);
    }
}

4.启动NacosDiscoveryApplicationcurl http://localhost:8080/discovery/get?serviceName=example,此时返回为空 JSON 数组[]。

5.通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example 服务

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'

6.再次访问 curl http://localhost:8080/discovery/get?serviceName=example,此时返回内容为

[
  {
"instanceId": "127.0.0.1-8080-DEFAULT-example",
"ip": "127.0.0.1",
"port": 8080,
"weight": 1.0,
"healthy": true,
"cluster": {
"serviceName": null,
"name": "",
"healthChecker": {
"type": "TCP"      },
"defaultPort": 80,
"defaultCheckPort": 80,
"useIPPort4Check": true,
"metadata": {}
    },
"service": null,
"metadata": {}
  }
]

站在巨人的肩膀上

  • Nacos文档
  • SpringCloud微服务实战—码闻强
相关文章
|
24天前
|
消息中间件 人工智能 供应链
go-zero 微服务实战系列(二、服务拆分)
go-zero 微服务实战系列(二、服务拆分)
|
17天前
|
Dubbo Java 应用服务中间件
微服务框架Dubbo环境部署实战
微服务框架Dubbo环境部署的实战指南,涵盖了Dubbo的概述、服务部署、以及Dubbo web管理页面的部署,旨在指导读者如何搭建和使用Dubbo框架。
68 17
微服务框架Dubbo环境部署实战
|
22天前
|
NoSQL 关系型数据库 MySQL
排行榜系统设计:高并发场景下的最佳实践
本文由技术分享者小米带来,详细介绍了如何设计一个高效、稳定且易扩展的排行榜系统。内容涵盖项目背景、技术选型、数据结构设计、基本操作实现、分页显示、持久化与数据恢复,以及高并发下的性能优化策略。通过Redis与MySQL的结合,确保了排行榜的实时性和可靠性。适合对排行榜设计感兴趣的技术人员参考学习。
46 7
排行榜系统设计:高并发场景下的最佳实践
|
3天前
|
缓存 分布式计算 Hadoop
HBase在高并发场景下的性能分析
HBase在高并发场景下的性能受到多方面因素的影响,包括数据模型设计、集群配置、读写策略及性能调优等。合理的设计和配置可以显著提高HBase在高并发环境下的性能。不过,需要注意的是,由于项目和业务需求的不同,性能优化并没有一劳永逸的解决方案,需要根据实际情况进行针对性的调整和优化。
22 8
|
14天前
|
自然语言处理 Java 网络架构
解锁跨平台微服务新纪元:Micronaut与Kotlin联袂打造的多语言兼容服务——代码、教程、实战一次打包奉送!
【9月更文挑战第6天】Micronaut是一款轻量级、高性能的Java框架,适用于微服务开发。它支持Java、Groovy和Kotlin等多种语言,提供灵活的多语言开发环境。本文通过创建一个简单的多语言兼容服务,展示如何使用Micronaut及其注解驱动特性实现REST接口,并引入国际化支持。无论是个人项目还是企业应用,Micronaut都能提供高效、一致的开发体验,成为跨平台开发的利器。通过简单的配置和代码编写,即可实现多语言支持,展现其强大的跨平台优势。
28 2
|
15天前
|
运维 监控 持续交付
深入浅出:微服务架构的设计与实战
微服务,一个在软件开发领域如雷贯耳的名词,它代表着一种现代软件架构的风格。本文将通过浅显易懂的语言,带领读者从零开始了解微服务的概念、设计原则及其在实际项目中的运用。我们将一起探讨如何将一个庞大的单体应用拆分为灵活、独立、可扩展的微服务,并分享一些实践中的经验和技巧。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和深入的理解。
43 3
|
22天前
|
存储 缓存 监控
函数计算产品使用问题之调用sd生图时,怎么保证高并发场景正常运行
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
22天前
|
弹性计算 监控 Serverless
函数计算产品使用问题之如何处理银行转账场景遇到的高并发问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
24天前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
24天前
|
缓存 NoSQL Redis
go-zero微服务实战系列(七、请求量这么高该如何优化)
go-zero微服务实战系列(七、请求量这么高该如何优化)