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

Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质

目录

前言

正文

API(Application Programming Interface)

RPC(Remote Procedure Call)

API 与 RPC 的关系

分布式部署 API 和 RPC

结语


前言

go-zero 是一个基于 Go 语言的微服务框架,它提供了一套简洁的编程模型来构建和部署微服务应用。在 go-zero 框架中,API 和 RPC 是两种主要的服务交互方式,分别用于构建 HTTP RESTful API 服务和基于 gRPC 的服务。

本文旨在会使用Go Zero框架后,重新回顾Go Zero里这两员重要大将。

正文

API(Application Programming Interface)

  • 本质:API 是应用编程接口的缩写,是一种服务接口,用于定义软件应用程序之间如何进行交互。在 go-zero 中,API 特指通过 HTTP/HTTPS 协议提供的 RESTful 风格的接口,允许客户端和服务器通过简洁的 HTTP 请求进行通信。
  • API 文件:在 go-zero 框架中,API 文件是一种特定的文本文件,使用 .api 扩展名。这个文件定义了 HTTP 服务的接口,包括路由、请求方法、请求参数、响应结构等。go-zero 通过解析这个文件,自动生成服务端代码框架和客户端调用代码,加速开发过程。

RPC(Remote Procedure Call)

  • 本质:RPC 是远程过程调用的缩写,它允许一个程序调用另一个地址空间(通常是另一台机器上)的过程(函数或方法)。在 go-zero 中,RPC 通常指通过 gRPC 协议实现的服务间调用,gRPC 是 Google 开发的一个高性能、通用的开源 RPC 框架,支持多种语言。gRPC 基于 HTTP/2 协议设计,支持双向流、流控、头部压缩等高级特性。
  • Proto 文件:在基于 gRPC 的 RPC 服务中,接口和消息结构是通过 Protocol Buffers(简称 Protobuf)语言描述的,并保存在 .proto 文件中。Protobuf 是 Google 开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。在 go-zero 框架中,通过编写 .proto 文件来定义 RPC 服务的接口和消息格式,然后使用 Protobuf 工具链生成相应语言的数据访问类和服务接口代码。

API 与 RPC 的关系

  • API 定义接口:在 go-zero 中,API 通常指的是对外提供的 HTTP RESTful 接口。这些接口定义了外部客户端(如前端页面、移动应用等)与服务端之间通信的协议,包括 URL 路径、请求方法、请求参数格式、响应数据结构等。API 是面向客户端的服务接口,它们的设计侧重于易用性、可理解性和网络兼容性。

  • RPC 实现服务间通信:RPC 在 go-zero 架构中主要用于服务间的通信。当微服务架构中的一个服务需要调用另一个服务的功能时,可以通过 RPC 来实现。这种方式隐藏了底层的通信细节,使得开发者可以像调用本地函数一样调用远程服务。RPC 侧重于效率和跨语言调用能力,是构建分布式系统的关键技术之一。

分布式部署 API 和 RPC

在微服务架构中,服务通常需要被分布式部署以提高可用性、扩展性和容错性。API 和 RPC 服务的分布式部署也需要考虑到这些因素:

  • API 分布式部署:API 服务作为客户端直接访问的接口,其分布式部署需要关注负载均衡、安全性(如 HTTPS)、接口版本管理等方面。通常,API 服务会部署在多个服务器上,前端通过负载均衡器分发请求,以实现高可用和负载均衡。此外,API 网关在这里也扮演着重要角色,它不仅可以管理流量、处理跨服务调用的认证和授权,还可以提供日志记录、监控和限流等功能。

    • 负载均衡器:在服务前端使用负载均衡器来分发外部请求到不同的服务实例上。

    • 状态共享:如果 API 服务需要维护状态(例如,用户会话),需要考虑如何在多个服务实例之间共享这些状态信息。这可以通过使用外部存储(如 Redis)来实现。

  • RPC 分布式部署:RPC 服务之间的调用通常需要内网通信,其分布式部署重点在于服务发现、服务注册和故障转移。每个 RPC 服务在启动时会向服务注册中心注册自己的地址,当一个服务需要调用另一个服务时,它会查询服务注册中心获得目标服务的地址。服务注册中心还负责监控服务实例的健康状况,实现故障检测和自动故障转移。在 go-zero 等现代微服务框架中,这些功能通常是内置的,或者可以通过集成第三方服务(如 Consul、Etcd 或 ZooKeeper)来实现。

    • 服务注册:在服务启动时,将服务的地址(如 IP 地址和端口号)注册到服务发现组件(如 etcd 或 Consul)中。这样,服务的消费者就可以从服务发现组件中查询到服务提供者的地址。

    • 服务发现:RPC 客户端使用服务发现组件来动态查询服务提供者的地址。go-zero 的客户端库可以自动处理服务发现的逻辑,使得客户端可以透明地调用分布式环境中的服务。

    • 负载均衡:在客户端,go-zero 支持客户端负载均衡。这意味着当服务的消费者发现有多个实例提供相同的服务时,它可以根据负载均衡策略(如轮询、随机等)来选择一个实例进行调用。

结语

API 是定义面向客户端的服务接口,而 RPC 是实现服务间通信的机制。在分布式部署时,API 服务需要关注公网访问的安全性和负载均衡,而 RPC 服务则更侧重于服务的注册、发现和内部通信的效率。

更多可以参考我的这个系列其他文章Go Zero微服务个人探究之路(十五)一步步为微服务集成Grafana监控-CSDN博客

相关文章:

Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质

目录 前言 正文 API(Application Programming Interface) RPC(Remote Procedure Call) API 与 RPC 的关系 分布式部署 API 和 RPC 结语 前言 go-zero 是一个基于 Go 语言的微服务框架,它提供了一套简洁的编程模…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要:开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模型间…...

Spring体系架构

目录 核心容器(Core Container) 数据访问/集成(Data Access/Integration) Web开发(Web)...

【PLC】现场总线和工业以太网汇总

1、 现场总线 1.1 什么是现场总线 1)非专业描述: 如下图:“人机界面”一般通过以太网连接“控制器(PLC)”,“控制器(PLC)”通过 “现场总线”和现场设备连接。 2)专业描述(维基百科) 现场总线…...

【吊打面试官系列】Java虚拟机JVM篇 - 关于JVM分析

大家好,我是锋哥。今天分享关于JVM分析的JVM面试题,希望对大家有帮助; 查看JVM进程号的命令是什么? 可以使用 ps ‐ef 和 jps ‐v 等等。 怎么查看剩余内存? 比如: free ‐m, free ‐h, top 命令等等。 1000道 互联网大厂Jav…...

Mysql锁与MVCC

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 exlpain字段解析ACID的原理日志引擎整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁: 乐观锁(Optimistic Locking):假设并发操作时不会发…...

rancher是什么

Rancher Labs是制作Rancher的公司。Rancher Labs成立于2014年,是一家专注于企业级容器管理软件的公司。它的产品设计旨在简化在分布式环境中部署和管理容器的过程,帮助企业轻松地采用容器技术和Kubernetes。Rancher Labs提供的Rancher平台支持Docker容器…...

阿里云服务器安全狗免费使用多引擎智能查杀引擎

云服务器具有按量付费、降低综合成本等诸多优势,受到很多企业的欢迎。 因此,目前使用的云服务器越来越多。 阿里云是目前云服务器中最具影响力的品牌,因此选择阿里云服务器的用户数量也是最多的。 那么阿里云服务器需要安装杀毒软件吗&#x…...

使用rust实现九九乘法表

rust目前拥有接近c/c的运行速度以及更快的编码支持,所以是很值得学习得一门语言。rust的语法及设计理念与其他的语言也有许多的不同之处。比如其特有的所有权属性。可以让开发者快速的开发出高效的运行程序。对于内存的管理也有极好的管理方案。 在这里使用rust语言…...

突破编程_C++_设计模式(简单工厂模式)

1 简单工厂模式的概念 简单工厂模式(Simple Factory Pattern)是设计模式中的一种创建型模式。它的主要目的是将对象的实例化与使用解耦,使得客户端无需关心对象的创建细节,只需通过工厂类来获取所需的对象。 在简单工厂模式中&a…...

C语言——快速排序

C语言——快速排序 一、 含义二、算法思想三、实现步骤代码实现 一、 含义 快速排序算法是在几种排序算法中效率最高的一个排序算法了,故称为快速排序,它的时间复杂度为:O(nlog2n),相比冒泡排序算法的O(n2)有很大的提升。 二、算…...

FP独立站获客秘籍大揭秘:简单高效,一看就会!

跨境电商的大潮中,越来越多的卖家选择跳出第三方平台的框架,拥抱独立站的自由与机遇。但独立站获客难、成本高的问题,也让不少卖家头疼不已。别担心,今天就来给大家揭秘FP独立站获客的简单高效方法! 首先,…...

英伟达tx2光驱烧录功能支持

今天得到一个任务,是在当前nvidia tx2平台上使能usb cdrom并且调试烧录功能。首先测试给到的信息是不能在平台上使用(废话嘛,能用还用我干嘛) 拿到本地ubuntu机器上看了下,使用brasero等软件可以顺利烧录。 此时捕获了…...

关于stm32(CubeMX+HAL库)的掉电检测以及flash读写

1.掉电检测 CubeMX配置 只需使能PVD中断即可 但是使能了PVD中断后还需要自行配置一些PWR寄存器中的参数,我也通过HAL库进行编写 void PVD_config(void) {//配置PWRPWR_PVDTypeDef sConfigPVD; sConfigPVD.PVDLevel PWR_PVDLEVEL_7; …...

Elastic script_score的使用

script_score介绍 在Elasticsearch中&#xff0c;script_score是在function_score查询中的一种功能强大的方式&#xff0c;允许用户使用内置Painless脚本语言或者其他支持的语言来动态计算每个文档的评分 script_score语法 GET /<索引名>/_search {"query":…...

【Spring Boot 3】获取已注入的Bean

【Spring Boot 3】获取已注入的Bean 背景介绍开发环境开发步骤及源码工程目录结构总结 背景 软件开发是一门实践性科学&#xff0c;对大多数人来说&#xff0c;学习一种新技术不是一开始就去深究其原理&#xff0c;而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历…...

C# 对于点位置的判断

1.判断点是否在一群点内部 要判断一个点是否在一个由多个点围成的多边形内部&#xff08;例如一圈点&#xff09;&#xff0c;可以使用射线法&#xff08;Ray Casting Algorithm&#xff09;来实现。以下是一个简单的 C# 实现示例 using System;public class Point {public d…...

最新CLion + STM32 + CubeMX 开发环境搭建

网上有不少相关教程&#xff0c;但都是基于老版本Clion&#xff0c;新版有一些改变&#xff0c;但整体是简单了。 PS&#xff1a;本教程基于CLion 2023.3.4 安装所需工具参考&#xff1a;Clion搭建stm32开发环境&#xff08;STM32F103C8T6&#xff09;&#xff0c;有这一篇就够…...

【Python3】观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种常见的设计模式&#xff0c;用于定义对象之间的一对多依赖关系&#xff0c;使得一个对象的状态改变能够通知所有依赖于它的对象并自动更新。 在观察者模式中&#xff0c;有两个核心角色&#xff1a; Subject&#xf…...

HTML5 Web Worker之性能优化

描述 由于 JavaScript 是单线程的&#xff0c;当执行比较耗时的任务时&#xff0c;就会阻塞主线程并导致页面无法响应&#xff0c;这就是 Web Workers 发挥作用的地方。它允许在一个单独的线程&#xff08;称为工作线程&#xff09;中执行耗时的任务。这使得 JavaScript 代码可…...

应对恶意IP攻击的有效方法

在当今数字化时代&#xff0c;网络攻击已经成为了互联网安全的重大挑战之一。恶意IP攻击是网络安全领域中的一种常见威胁&#xff0c;它可能导致数据泄露、服务中断、系统瘫痪等严重后果。因此&#xff0c;有效地应对恶意IP攻击至关重要。IP数据云将深入探讨如何应对恶意IP攻击…...

如何使用“Docker registry创建本地仓库,在服务器之间进行文件push和pull”?

1.1、在服务器1&#xff0c;运行registry docker run -d -p 5000:5000 -v ${PWD}/registry:/var/lib/registry --restart always --name registry registry:2.7.11.2、编辑/etc/docker/daemon.json 文件&#xff0c; 192.168.xxx.xxx 换成你自己 registry 服务的地址 sudo na…...

Rocky Linux - Primavera P6 EPPM 安装及分享

引言 继上一期发布的Redhat Linux版环境发布之后&#xff0c;近日我又制作了基于Rocky Enterprise Linux 的P6虚拟机环境&#xff0c;同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primav…...

API 管理调研

当前大部分团队内 API 管理都是依赖 Postman&#xff0c;postman最大的问题是共享问题&#xff0c;如果我要使用另外一个人已经调试好的 API 非常麻烦。因此&#xff0c;能实现协作的 API 管理将极大提升效率。 Yapi https://github.com/YMFE/yapi https://hellosean1025.gi…...

在centOS服务器安装docker,并使用docker配置nacos

遇到安装慢的情况可以优先选择阿里镜像 安装docker 更新yum版本 yum update安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.rep…...

JVM运行时数据区概述以及分别存放的内容

JVM的运行时数据区是JVM在执行Java程序时用于存储数据和状态信息的内存区域。它分为多个部分&#xff0c;每个部分都有其特定的作用和存放的内容。 1. 方法区&#xff08;Method Area&#xff09; 作用&#xff1a;方法区是所有线程共享的内存区域&#xff0c;用于存放已被虚…...

数据体系规范化

基础是标准化、规范化 建立数据仓库,面向主题的、集成的、相对稳定的、反映历史变化的数据集合,以支持管理决策decision making 大数据:大量volumn、多样variety、快速velocity、价值密度低value、准确性veracity、可视化visualization、合法性validity 多源数据、多样数…...

从政府工作报告探计算机行业发展

从政府工作报告中&#xff0c;我们可以深入洞察计算机行业在未来一年的发展趋势和政策导向。报告中明确提出了数字经济创新发展的重要性&#xff0c;以及制造业数字化转型、服务业数字化、智慧城市和数字乡村建设等关键任务&#xff0c;这些都为计算机行业提供了广阔的发展空间…...

【软件工具】网络性能测试工具 Iperf

Iperf 是一款专业的开源网络性能测试工具&#xff0c;它被广泛用于测量网络带宽、延迟、抖动和数据包丢失等网络性能指标&#xff0c;支持 TCP 和 UDP 等&#xff0c;可用于点对点或客户端-服务器等模式的网络测试。 软件获取 官方下载地址&#xff1a;https://iperf.fr/iper…...

Day32:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

目录 JavaEE-HTTP-Servlet&路由&周期 JavaEE-数据库-JDBC&Mybatis&库 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方库使用等. 框架…...