EasySwoole 微服务注册中心

目录

EasySwoole 中,使用 Redis 作为服务注册中心

服务注册中心来注册服务

1. 用户登录与注册服务

2. 设备初始化服务

3. 广告与推广服务

以下是一些推荐的微服务监控工具和方法:


EasySwoole 默认的微服务注册中心是通过 UDP 广播加上自定义进程定时刷新自身节点信息的方式来实现服务发现的,这种设计是无主化的,即没有中心节点。在服务正常关闭时,会执行 onShutdown 方法来实现节点下线,而在非正常关闭的情况下,心跳超时也会使得节点被踢出 。

此外,EasySwoole 还支持自定义节点管理器,允许开发者变更服务注册及发现方式。例如,可以使用 Redis 作为节点管理器来实现服务注册中心的功能。这需要先安装 easyswoole/redis-pool 组件,然后基于该组件实现 Redis 节点管理器,示例代码展示了如何使用 Redis 来设置和删除服务节点 。

在微服务架构中,服务注册中心是一个关键组件,它允许服务实例在启动时注册自己的信息,并在需要时发现其他服务实例。EasySwoole 提供了基础的服务发现与注册中心功能,以支持微服务架构的实现 。

总结来说,EasySwoole 的微服务注册中心既可以使用默认的 UDP 广播方式,也可以通过自定义节点管理器,比如基于 Redis 的实现,来满足不同的服务发现和注册需求。

EasySwoole 中,使用 Redis 作为服务注册中心

在 EasySwoole 中,使用 Redis 作为服务注册中心是一种常见的做法。这种方式通过 Redis 的数据结构和持久化特性来管理服务节点的注册和发现。以下是使用 Redis 作为 EasySwoole 微服务注册中心的一些关键步骤和概念:

  1. 安装 Redis 组件: 首先需要安装 EasySwoole 的 Redis 组件。可以通过 Composer 安装:

    bash

    composer require easyswoole/redis-pool
    

  2. 配置 Redis: 在 EasySwoole 的配置文件中配置 Redis 连接信息。例如:

    php

    use EasySwoole\Redis\Config\RedisConfig;
    use EasySwoole\RedisPool\Pool;$redisConfig = new RedisConfig(['host' => '127.0.0.1','port' => 6379,'auth' => 'your_password','db' => 0,
    ]);
    $redisPool = new Pool($redisConfig);

  3. 定义服务节点信息: 在服务启动时,将服务节点信息注册到 Redis 中。通常使用 Redis 的哈希表(Hash)来存储服务节点信息。每个服务节点的信息可以包括服务名、节点 ID、IP 地址和端口等。

    php
    $redisPool = $this->pool;
    /** @var \Redis $redis */
    $redis = $redisPool->getObj();
    try {$serviceName = $serviceNode->getService();$nodeId = $serviceNode->getNodeId();$hashKey = "{$this->redisKey}_{$serviceName}";$redis->hSet($hashKey, $nodeId, json_encode($info));return true;
    } catch (\Throwable $throwable) {// 如果 Redis 断线则销毁$redisPool->unsetObj($redis);
    } finally {$redisPool->recycleObj($redis);
    }

  4. 服务节点的定时刷新: 为了确保服务节点信息的准确性,可以设置定时任务来刷新节点信息。例如:

    php

    /** @var \EasySwoole\Rpc\Config $config */
    $assistConfig = $config->getAssist();
    // 服务定时自刷新到节点管理器
    $assistConfig->setAliveInterval(5000);

  5. 服务节点的删除: 当服务节点停止或需要从注册中心中移除时,可以删除相应的节点信息:

    php

    private function deleteServiceNode($serviceName, $failKey): bool
    {$redisPool = $this->pool;/** @var \Redis $redis */$redis = $redisPool->getObj(15);try {$redis->hDel("{$this->redisKey}_{$serviceName}", $failKey);return true;} catch (\Throwable $throwable) {$redisPool->unsetObj($redis);} finally {$redisPool->recycleObj($redis);}return false;
    }

  6. 服务发现: 其他服务实例可以通过查询 Redis 来发现服务节点。例如,可以通过查询哈希表来获取所有可用的服务节点信息。

  7. 容错和高可用: 使用 Redis 作为注册中心时,可以考虑 Redis 的高可用配置,如使用 Redis 集群或 Sentinel 来提高系统的容错能力。

通过这种方式,EasySwoole 的微服务架构可以有效地利用 Redis 的特性来实现服务的注册和发现,从而构建一个灵活、可靠的微服务系统。

服务注册中心来注册服务

在微服务架构中,每个服务都是独立的,拥有自己的注册和发现机制。以下是使用 EasySwoole 和 Redis 作为服务注册中心来注册三个服务(用户登录与注册、设备初始化、广告与推广)的例子:

1. 用户登录与注册服务

服务名称UserAuthService

注册过程

  1. 服务启动:当用户登录与注册服务启动时,它首先连接到 Redis 服务。
  2. 注册信息:服务将自己的信息以 JSON 格式注册到 Redis 的哈希表中。例如:
     

    json

    { "ip": "192.168.1.100", "port": 8080, "version": "1.0.0" }

  3. 设置键值:使用 Redis 的 HSET 命令,键为 UserService_Auth,字段为服务实例的唯一标识(如 IP:PORT),值为上述 JSON 字符串。
     

    bash

    HSET UserService_Auth 192.168.1.100:8080 {"ip":"192.168.1.100","port":8080,"version":"1.0.0"}

2. 设备初始化服务

服务名称DeviceInitService

注册过程

  1. 服务启动:设备初始化服务在启动时同样连接到 Redis。
  2. 注册信息:将服务的详细信息注册到 Redis 中。例如:
     

    json

    { "ip": "192.168.1.101", "port": 8081, "version": "1.0.1" }

  3. 设置键值:使用 HSET 命令,键为 DeviceService_Init,字段为 192.168.1.101:8081,值为服务信息的 JSON 字符串。
     

    bash

    HSET DeviceService_Init 192.168.1.101:8081 {"ip":"192.168.1.101","port":8081,"version":"1.0.1"}

3. 广告与推广服务

服务名称AdService

注册过程

  1. 服务启动:广告服务在启动时连接到 Redis。
  2. 注册信息:注册服务的配置信息。例如:
     

    json

    { "ip": "192.168.1.102", "port": 8082, "version": "1.0.2" }

  3. 设置键值:使用 HSET 命令,键为 AdService_Push,字段为 192.168.1.102:8082,值为服务信息的 JSON 字符串。
     

    bash

    HSET AdService_Push 192.168.1.102:8082 {"ip":"192.168.1.102","port":8082,"version":"1.0.2"}

服务发现

  • 当其他服务需要与这些服务进行交互时,它们会查询 Redis 中对应的哈希表来获取服务实例的列表和它们的信息。
  • 例如,如果一个服务需要调用用户登录服务,它会查找 UserService_Auth 哈希表来发现可用的用户认证服务实例。

定时刷新

  • 每个服务可以设置一个定时任务,定时向 Redis 发送心跳,以更新其在 Redis 中的 TTL(Time To Live),确保服务实例信息的准确性和可用性。

通过这种方式,每个微服务都可以独立地注册和被发现,同时保持服务之间的解耦和独立性。

使用 Redis 作为微服务注册中心时,可以通过多种工具和方法来实现微服务的监控和可视化。

以下是一些推荐的微服务监控工具和方法:

  1. Prometheus + Grafana

    • Prometheus 是一个开源的系统监控和报警框架,具有多维数据模型、灵活的查询语言 PromQL、本地存储和分布式存储等功能。它通过 HTTP 的 Pull 模型采集时间序列数据,并支持动态服务发现或静态配置发现目标机器11。
    • Grafana 是一个开源的数据可视化和监控工具,支持多种数据源(如 Prometheus、Graphite、InfluxDB、Elasticsearch 等),用户可以通过 Grafana 创建动态、可交互的仪表盘,展示和分析监控数据12。
  2. RedisInsight

    • RedisInsight 是 Redis 官方推出的可视化管理工具,支持设计、开发和优化 Redis 应用。它支持多种数据类型(如 String、Hash、Set、List、JSON 等),并提供深色和浅色两种主题。RedisInsight 还支持远程使用 CLI 功能17。
    • 通过 RedisInsight,可以查看 Redis 的命令执行日志、管理 Redis 数据,并支持 RedisJSON 等新特性17。
  3. ELK Stack

    • ELK Stack(Elasticsearch、Logstash、Kibana)是一套开源的日志分析和管理工具集。Elasticsearch 提供高效的实时搜索和分析能力,Logstash 用于数据收集和处理,Kibana 用于数据可视化12。
    • 通过 ELK Stack,可以收集和分析微服务的日志数据,帮助进行实时搜索、分析和监控。
  4. SkyWalking

    • SkyWalking 是一个开源的应用性能监控(APM)和可观测性分析平台,主要用于监控和分析微服务架构中的性能和健康状况。它支持分布式追踪、性能指标监控和日志管理12。
    • SkyWalking 可以捕获和分析跨越多个微服务的请求路径,提供端到端的调用链视图,帮助识别和优化性能瓶颈。
  5. Zipkin

    • Zipkin 是一个开源的分布式追踪系统,用于帮助开发者和运维人员了解微服务架构中请求的传播路径、性能瓶颈和故障点。它通过收集器接收数据,并将其存储到后台存储中(如 Elasticsearch、Cassandra、MySQL 等),然后提供 Web UI 展示追踪数据的调用链视图12。
  6. Datadog

    • Datadog 是一个基于 SaaS 的监控和分析平台,覆盖基础设施监控、应用性能监控(APM)和日志管理。它提供实时监控和告警功能,整合基础设施和应用数据,并支持数据可视化和分析12。
  7. Redis Assistant

    • Redis Assistant 提供实时监控 Redis 服务状态的仪表盘功能,可视化各种健康指标,包括数据库中键的数量、吞吐量、性能、内存用量等。它还支持丰富的数据格式和慢查询日志,帮助开发和运维人员快速定位系统瓶颈19。

通过这些工具,可以有效地监控和管理基于 Redis 的微服务注册中心,实现服务的可视化管理和监控。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven的常用命令(面试篇之Maven)

我在写项目时,使用Maven的插件的命令来进行打包等,却发现报错误了,虽然解决了, 但借此机会来总结一下Maven的常用命令: 这些插件都有着自己的命令,虽然,我们可以简化的使用一些idea中的方便的按键: 但 , 一个程序员的功力深浅就在这些细节末尾处: 在Maven中,插件是…

形态学操作腐蚀(Erosion)和膨胀(Dilation)

在OpenCV中,腐蚀(Erosion)和膨胀(Dilation)属于形态学(morphological)操作。形态学是一种处理图像中结构的方法,通常用于处理二值图像。腐蚀和膨胀是最基本的形态学操作,…

【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介 在关系型数据库中,关于数据表的设计的基本原则,规则就称为范式。可以理解为,一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 范式的英文名是Normal …

OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结(一)

文章大纲 引言一、状态管理概述二、基本术语三、状态装饰器总览 引言 前面说了ArkTS 是在TypeScript基础上结合ArkUI框架扩展定制的,状态管理中的各种装饰器就是扩展的功能之一,可以让开发者通过声明式UI快速高效实现组件之间的数据同步,至于…

Leetcode之string

目录 前言1. 字符串相加2. 仅仅反转字母3. 字符串中的第一个唯一字符4. 字符串最后一个单词的长度5. 验证回文串6. 反转字符串Ⅱ7. 反转字符串的单词Ⅲ8. 字符串相乘9. 打印日期 前言 本篇整理了一些关于string类题目的练习, 希望能够学以巩固. 博客主页: 酷酷学!!! 点击关注…

转置卷积方法

一、定义 1、卷积神经网络层通常会减少(或保持不变)采样输入图像的空间维度(高和宽),另一种类型的卷积神经网络层,它可以增加上采样中间层特征图的空间维度, 用于逆转下采样导致的空间尺寸减小…

【BES2500x系列 -- RTX5操作系统】系统启动流程 -- boot loader概念讲解 --(九)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

【AI实例之智能分析系统】概览

一、介绍 界面:聊天式 流程架构:自然语言输入,对接大模型,生成查询语句,查询数据库,根据数据生成图表。 用到的技术:大模型,prompt,streamlit,python 还在…

PyTorch 中的一个函数:torch.pow

torch.pow 介绍 torch.pow 是 PyTorch 中的一个函数,用于计算张量(Tensor)的幂次方。这个函数接受两个输入参数:底数(base)和指数(exponent),然后返回底数的指数次幂的结…

.NET 情报 | 分析某云系统添加管理员漏洞

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

【计算机毕业设计】881音乐网站

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py

Megatron-LM默认支持GPT、T5、BERT等多个常见模型的预训练,当下大模型流行,故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口,它通过命令行形式被调用,其精确执行路径位于M…

计算机网络通信基础概念

目录 1、网络通信的本质 2、网络的发展 3、网络协议(TCP\IP协议) 3.1 协议实现通信的原理 3.2 协议的具体概念 3.3 协议的模型 4、数据链路层 5、网络协议栈和操作系统的关系 6、网络协议通信过程 6.1 通信过程的封装与解包 7、以太网通信…

Spring MVC的高级功能——文件上传和下载(一)文件上传

一、文件上传表单的满足条件 大多数文件上传都是通过表单形式提交给后台服务器,因此,要实现文件上传功能,就需要提供一个文件上传的表单,并且该表单必须满足以下3个条件。 • form表单的method属性设置为post。 • form表单…

Ai绘画变现的14种途径 学习Stablediffusion midjourney用途

AIGC,一个在当代社会中不可忽视的词汇,指的是利用人工智能技术生成创作内容。近年来,全球范围内涌现出50个热门的AI工具,其中,以140亿次访问量雄踞榜首的“GBT”,无疑是AI领域的领头羊。在这些工具中&#…

Vue全家桶 - pinia 的理解和学习2(Pinia 核心概念的插件、组件外的 Store 和 服务器渲染(SSR))

Pinia(Vue 的专属状态管理库) Vue全家桶 - pinia 的理解和学习1(Pinia 核心概念的 Store、State、Getter、Action) https://blog.csdn.net/weixin_54092687/article/details/140520675 插件 由于有了底层 API 的支持&#xff0c…

gradle 构建项目添加版本信息

gradle 构建项目添加版本信息 build.gradle 配置文件 bootJar {manifest {attributes(Project-Name: project.name,Project-Version: project.version,"project-Vendor": "XXX Corp","Built-By": "Gradle ${gradle.gradleVersion}",&…

DETR目标检测模型训练自己的数据集

前言 基础环境:ubuntu20.04、python3.8、pytorch:1.10.0、CUDA:11.3 代码地址:https://github.com/facebookresearch/detr 目录 一、训练准备1、预训练模型下载2、txt文件转为coco模式 二、修改训练模型参数三、开始训练四、实现DETR的推理 一、训练准备…

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案

【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案 一, 文章简介二,硬件平台构建2.1 音频源板2.2 音频收发板2.3 双板硬件连接 三,软件方案与软件实现3.1 方案实现3.2 软件代码实现3.2.1 4路I2S接收3.2.2 I2S DMA pingpong配置3.2.3 音频数…

【大数据专题】数据分析

1. 大学内的各年纪人数分别为:一年级200,二年级160,三年级130,四年级110人。则年级属性的众数是 ? A:一年级 B:二年级 C:三年级 D:四年级 A 2. 简述下面哪个属于映射数…