当前位置: 首页 > news >正文

gRPC服务健康检查(二):gRPC健康检查协议详解

gRPC健康检查协议

健康检查用于检测服务端能否正常处理rpc请求,客户端对服务端的健康检查可以点对点进行,也可以通过某些控制系统(如负载平衡)进行。客户端可以根据服务端返回的状态执行对应的策略。

因为GRPC服务可以用于简单的客户端到服务端场景和其他控制系统(如负载平衡)的健康检查,所以gRPC健康检查协议借助了gRPC服务来实现。使用GRPC服务来实现健康检查有以下好处:

  1. 执行健康检查的格式与普通rpc相同,

  1. 具有丰富的语义,例如每个服务的健康状态,

  1. 能够重用所有现有的计费、配额基础设施等,因此服务器可以完全控制健康检查服务的访问。

gRPC健康检查服务定义

因为gRPC健康检查协议是通过gRPC服务实现的,我们首先看下这个服务的定义:

syntax = "proto3";package grpc.health.v1;message HealthCheckRequest {string service = 1;
}message HealthCheckResponse {enum ServingStatus {UNKNOWN = 0;SERVING = 1;NOT_SERVING = 2;}ServingStatus status = 1;
}service Health {rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
}

客户端可以通过调用Check方法(需要设置截止时)查询服务器的运行状况,客户端可以通过设置服务名称来检查对应服务的健康状况。服务名称的格式建议为package_names.ServiceName,例如grpc.health.v1.Health。

服务端要注册所有服务并设置各个服务的状态,包括空服务名称及其状态。对于接收到的每个请求,如果在配置列表中找到了对应服务,需要根据当前服务情况返回SERVING或NOT_SERVING的状态。如果在配置列表没找到对应服务,则返回NOT_FOUND状态。

服务端应使用空字符串作为整体健康状态的键,以便对特定服务不感兴趣的客户端可以通过空请求查询服务的状态。服务端可以只对服务名称进行精确匹配也可以实现更复杂的匹配方式。

如果一次rpc调用在一段时间后都没有收到响应,可以认为服务端挂了,需要执行应对服务端挂掉情况的策略。

客户端可以调用Watch方法来使用基于stream方式的健康检查。服务器会立即发回一条代表当前服务状态的消息。只要服务的状态发生变化,就会发送一条新消息。

相关文章:

gRPC服务健康检查(二):gRPC健康检查协议详解

gRPC健康检查协议健康检查用于检测服务端能否正常处理rpc请求,客户端对服务端的健康检查可以点对点进行,也可以通过某些控制系统(如负载平衡)进行。客户端可以根据服务端返回的状态执行对应的策略。因为GRPC服务可以用于简单的客户…...

Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述

配套系列教学视频链接:安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本文简单描述一下android init祖先进程启动的基本执行流程,让大家有一个整…...

CSDN 编程竞赛三十二期题解

竞赛总览 CSDN 编程竞赛三十二期:比赛详情 (csdn.net) 竞赛题解 题目1、传奇霸业 传奇霸业,是兄弟就来干。小春(HP为a)遇到了一只黄金哥布林(HP为x)。小春每次能对哥布林造成b点伤害,哥布林…...

Kubernetes 中的 Pod Hook

Pod Hook 我们知道Pod是Kubernetes集群中的最小单元,而 Pod 是有容器组组成的,所以在讨论 Pod 的生命周期的时候我们可以先来讨论下容器的生命周期。 实际上 Kubernetes 为我们的容器提供了生命周期钩子的,就是我们说的Pod Hook&#xff0c…...

Linux操作系统安装MySQL(rpm安装)

Linux操作系统安装MySQL(rpm安装)1 背景2 环境说明3 准备工作3.1 端口查看3.2 检查安装3.3 创建MySQL用户和组4 MySQL安装4.1 下载MySQL4.2 解压安装包4.3 安装MySQL4.4 初始化MySQL4.5 启动MySQL4.6 设置MySQL初始密码4.6.1 查看数据库初始密码4.6.2 更…...

MySQL高级第二讲

目录 二、MySQL高级02 2.1 触发器 2.1.1 触发器介绍 2.1.2 创建触发器 2.2 MySQL的体系结构 2.3 存储引擎 2.3.1 存储引擎概述 2.3.2 各种存储引擎特性 2.3.3 InnoDB 2.3.4 MyISAM 2.3.5 MEMORY 2.3.6 MERGE 2.3.7 存储引擎的选择 2.4 优化sql 2.4.1 查看sql执行…...

凸优化专题1

多变量函数的求导与求梯度/矩阵求导 1. 导数 定义: 设f:Rn→Rm,且x∈intdomf,则f在点x的导数(或称Jacobian)记为矩阵Df(x)∈Rmnf:\R^n \rightarrow \R^m, 且x\in \mathbf{int}\ \mathbf{dom} f, 则f 在点x的导\\数(或称Jacobian)记为矩阵 Df(x) \in \R^{m\times n}f:Rn→Rm,且…...

【蓝桥杯每日一题】递推算法

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...

Unity性能优化: 性能优化之内存篇

前言 本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀 1: Application进程…...

华为OD机试题,用 Java 解【内存资源分配】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...

微服务之Nacos注册与配置

🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 &#x1…...

Android 动画详解

Android动画的分类与使用学习Android必不可少的就是动画的使用了,在Android版本迭代的过程中,出现了很多动画框架,这里做一个总结。Android动画类型分类逐帧动画【Frame Animation】,即顺序播放事先准备的图片。补间动画【Tween A…...

Linux -- 程序 进程 线程 概念引入

程序与进程 :程序 :什么是程序 ???伪官方 : 二进制文件,文件存储在磁盘中,例如 /usr/bin 目录下 。 是静态。 简单讲 :# 我们都学习了语言,比如下面这串代…...

Android ART dex2oat

一、什么是dex2oat Dex2oat (dalvik excutable file to optimized art file) ,是一个对 dex 文件进行编译优化的程序,在我们的 Android 手机中的位置是 /system/bin/dex2oat,对应的源码路径为 android/art/dex2oat/dex2oat.cc,通…...

「RISC-V Arch」RISC-V 规范结构

日期:20230228 规范分类 根据 RISC-V 设计哲学,其规范文档也是高度模块化的: ISA 规范(2 篇) 非特权规范特权规范 非 ISA 规范(6篇) Trace规范ABI 规范外部调试规范PLIC 规范SBI 规范UEFI 协…...

【C】线程控制

创建线程 #include <pthread.h>int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void *(*start_routine)(void*), void * arg);返回值&#xff1a;成功返回0&#xff0c;失败返回错误号。 thread&#xff1a;成功返回后&#xff0c;新创建的线程的…...

Maven工程打jar包的N种方式

Maven工程打jar包 一、IDEA自带打包插件二、maven插件打包2.1 制作瘦包&#xff08;直接打包&#xff0c;不打包依赖包&#xff09;2.2 制作瘦包和依赖包&#xff08;相互分离&#xff09;2.3 制作胖包&#xff08;项目依赖包和项目打为一个包&#xff09;2.4 制作胖包&#xf…...

一文了解GPU并行计算CUDA

了解GPU并行计算CUDA一、CUDA和GPU简介二、GPU工作原理与结构2.1、基础GPU架构2.2、GPU编程模型2.3、软件和硬件的对应关系三、GPU应用领域四、GPUCPU异构计算五、MPI与CUDA的区别一、CUDA和GPU简介 CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xf…...

全网资料最全Java数据结构与算法(1)

一、数据结构和算法概述 1.1什么是数据结构&#xff1f; 官方解释&#xff1a; 数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及他们之间的关系和操作等相关问题的学科。 大白话&#xff1a; 数据结构就是把数据元素按照一定的关系组织起来的集合&a…...

【项目实战】SpringMVC拦截器HandlerInterceptor入门介绍

一、拦截器介绍 拦截器是应用程序级框架中常用的拦截用户请求、实施业务流程控制的模式,它可以将一些公共的、重复发生的业务逻辑从业务处理代码中独立出来,使系统的结构更加清晰,程序的复杂度也减小了。 拦截器是一个常见的特性,它可以实现任何自定义功能,而无需调整业…...

开源作战室框架OpenClaw-Warroom:构建高效事件响应与团队协作平台

1. 项目概述&#xff1a;从“作战室”到开源协作的实战推演如果你在开源社区或者技术团队里待过一段时间&#xff0c;大概率听过“作战室”这个词。它听起来有点军事化&#xff0c;但在现代软件开发和应急响应场景里&#xff0c;它代表的是一个高度聚焦、信息透明、行动同步的虚…...

轻量级负载均衡器Codex-lb:云原生场景下的部署与调优实践

1. 项目概述&#xff1a;一个轻量级的负载均衡解决方案 最近在折腾一些个人项目和小型服务部署时&#xff0c;我遇到了一个挺实际的问题&#xff1a;如何在不引入复杂架构和运维负担的前提下&#xff0c;为多个后端服务实例提供一个统一的、可靠的入口。你可能也遇到过类似场景…...

手把手教你配置i.MX RT1052的BOOT引脚:从HyperFlash到QSPI的启动选择实战

手把手教你配置i.MX RT1052的BOOT引脚&#xff1a;从HyperFlash到QSPI的启动选择实战 在嵌入式系统开发中&#xff0c;启动配置是硬件工程师和开发者面临的第一个关键挑战。i.MX RT1052作为一款高性能跨界处理器&#xff0c;其灵活的启动选项既带来了强大的适应性&#xff0c;也…...

I²C总线协议深度解析:从物理层到实战调试与疑难排查

1. IC总线&#xff1a;从电视遥控器到无处不在的嵌入式神经如果你在过去的二十年里摆弄过任何一块微控制器开发板&#xff0c;或者拆解过一台智能家电&#xff0c;那么你几乎百分之百会碰到两根被拉高的信号线&#xff0c;一根是时钟&#xff08;SCL&#xff09;&#xff0c;一…...

兔子需要通风吗?关键不是风,而是空气路径

养兔子的朋友&#xff0c;大概率都有一个共识&#xff1a;要给兔子控温&#xff0c;夏天防中暑、冬天防受冻。但很多人都忽略了一个和温度同等重要的点——空气流动。 从环境工程的角度来说&#xff0c;兔子的舒适生活环境&#xff0c;离不开三个核心因素&#xff1a;温度、湿度…...

企业真正缺的不是模型,而是“AI 协作系统”

过去两年&#xff0c;大模型的发展速度远远超出了很多人的预期。 模型越来越强&#xff0c;推理成本越来越低&#xff0c;开源生态也越来越成熟。 很多企业因此开始接入 AI&#xff0c;希望通过大模型提升效率。 但真正进入业务阶段后&#xff0c;一个问题开始越来越明显&am…...

AI 术语通俗词典:Logistic 函数

Logistic 函数是数学、统计学、机器学习和人工智能中非常常见的一个术语。它用来描述一种把任意实数平滑映射到 0 和 1 之间的 S 形函数。换句话说&#xff0c;Logistic 函数是在回答&#xff1a;如果一个输入值可以从负无穷到正无穷变化&#xff0c;怎样把它转换成一个具有概率…...

RISC-V开源指令集架构:从设计哲学到商业落地的芯片设计新范式

1. 开源指令集架构的浪潮&#xff1a;从RISC-V研讨会看芯片设计新范式2015年6月底&#xff0c;加州大学伯克利分校的一场研讨会&#xff0c;意外地成为了半导体行业一个微小但意义深远的注脚。这场以RISC-V——一个源自伯克利的开源指令集架构——为主题的会议&#xff0c;不仅…...

解决ClaudeCode频繁封号与Token不足问题转向Taotoken稳定接入

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 解决ClaudeCode频繁封号与Token不足问题转向Taotoken稳定接入 对于依赖Claude Code进行编程辅助的开发者而言&#xff0c;账户访问…...

PyQt5实战:从Designer拖拽到打包exe,手把手打造你的第一个多页面桌面应用

PyQt5实战&#xff1a;从Designer拖拽到打包exe&#xff0c;手把手打造你的第一个多页面桌面应用 在数字化浪潮席卷各行各业的今天&#xff0c;图形用户界面&#xff08;GUI&#xff09;开发已成为程序员必备技能之一。而PyQt5作为Python最强大的GUI框架&#xff0c;凭借其丰富…...