云原生应用开发之 gRPC 入门(上)

简介: gRPC 由谷歌开发的,是一种语言中立、平台中立、开源的远程调用过程。

什么是 gRPC

gRPC 由谷歌开发的,是一种语言中立、平台中立、开源的远程调用过程。


什么是远程调用过程?简单理解就是公开本地应用给其他应用程序调用的方法。gRPC 是一项进程间通信技术,可以用来连接、调用、操作和调式分布式异构应用程序。也像 RPC 应用程序的特点一样:像调用本地函数一样。


网络异常,图片无法展示
|

特点


  • gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
  • 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。
  • gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制,它的作用与 XML、json 类似,但它是二进制格式,性能好、效率高(缺点:可读性差)。


gRPC 和 REST 区别


它类似于 REST API 通信,通过它,您可以有效地将应用程序中的功能公开给使用 HTTP 连接作为通信媒介的其他应用程序。


虽然 REST 和 gRPC 有点相似,但您应该注意它们的工作方式存在区别:

  • gRPC 使用 HTTP/2 协议,而 REST 使用 HTTP 1.1
  • gRPC 使用协议缓冲区数据格式,而不是通常在 REST API 中使用的标准 JSON 数据格式
  • 使用 gRPC,您可以根据需要利用 HTTP/2 功能,例如服务器端流式传输、客户端流式传输甚至双向流式传输。


Go 建立一个 gRPC 服务器


我们从在 Go 中定义一个非常简单的 gRPC 服务器开始。一旦我们有一个简单的服务器启动并运行,我们就可以着手创建一个能够与之交互的 gRPC 客户端。


gRPC 可以实现微服务,将大的项目拆分为多个小且独立的业务模块,也就是服务,各服务间使用高效的 protobuf 协议进行 RPC 调用,gRPC 默认使用 protocol buffers ,这是 google 开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如 JSON )。可以用 proto files 创建 gRPC 服务,用 message 类型来定义方法参数和返回类型


  1. 安装 golang 的 proto 工具包:


go get -u github.com/golang/protobuf/proto


  1. 在开始建立 gRPC 之前,确保已安装 Protocol Buffers v3:

go get -u github.com/golang/protobuf/protoc-gen-go


  1. 在 Go  中安装 gRPC:

go get google.golang.org/grpc


然后写一个服务器,通过监听 TCP 连接的端口。如下的 main 函数:

package main
import (
  "log"
  "net"
)
func main() {
  lis, err := net.Listen("tcp", ":8000")
  if err != nil {
    log.Fatalf("Fail to listen: %v", err)
  }
}


接下来,我们要从 golang.org 导入官方的 gRPC 包,以便我们可以创建一个新的 gRPC 服务器,然后注册我们想要公开的端点,然后通过我们上面定义的现有 TCP 连接提供服务:

package main
import (
  "log"
  "net"
  "google.golang.org/grpc"
)
func main() {
  lis, err := net.Listen("tcp", ":8000")
  if err != nil {
    log.Fatalf("Fail to listen: %v", err)
  }
  grpcServer := grpc.NewServer()
  if err := grpcServer.Serve(lis); err != nil {
    log.Fatalf("Fail to serve: %v", err)
  }
}

这是用 go 编写的最基础 gRPC 服务器,现在的功能还很有限。


相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
583 2
|
4月前
|
Cloud Native 算法 区块链
站在巨人的肩膀上:gRPC通过HTTP/2构建云原生时代的通信标准
gRPC是云原生时代高效通信标准,基于HTTP/2实现,支持四种服务方法。通过.proto文件定义接口,生成多语言Stub,实现跨语言调用。其请求响应结构清晰,结合Headers、Data帧与Trailers,保障高性能与可扩展性,广泛应用于微服务架构中。
252 0
|
3月前
|
前端开发 JavaScript 物联网
全栈开发:从LAMP到云原生的技术革命
🌟蒋星熠Jaxonic,全栈探索者。从Web到AI、IoT、区块链,深耕垂直领域,践行“T型人才”理念。分享技术演进与实战经验,助你在代码星河中找到属于自己的航向。
全栈开发:从LAMP到云原生的技术革命
|
11月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
运维 Kubernetes Cloud Native
云原生技术入门及实践
【10月更文挑战第39天】在数字化浪潮的推动下,云原生技术应运而生,它不仅仅是一种技术趋势,更是企业数字化转型的关键。本文将带你走进云原生的世界,从基础概念到实际操作,一步步揭示云原生的魅力和价值。通过实例分析,我们将深入探讨如何利用云原生技术提升业务灵活性、降低成本并加速创新。无论你是云原生技术的初学者还是希望深化理解的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
Kubernetes Cloud Native 开发者
通义灵码对云原生应用开发的支持
通义灵码是阿里巴巴云推出的一款强大的云原生应用开发工具,支持容器化、编排技术等,提供从Dockerfile生成、容器镜像构建与推送,到Kubernetes配置文件生成及与Kubernetes集群集成的全方位支持,极大简化了云原生应用开发流程,提升了开发效率和应用质量。
通义灵码对云原生应用开发的支持
|
存储 NoSQL Cloud Native
MongoDB云原生化:为企业开发注入高效动力
MongoDB云原生化为企业开发注入高效动力,分为三部分:1. 介绍阿里云和MongoDB的服务;2. 阿里云MongoDB解决自建模型痛点的功能,包括隔离性、海量数据处理、弹性能力及运维操作优化;3. 客户案例展示。通过云原生架构,MongoDB实现了灵活的扩展、高效的备份恢复和快速的回档能力,显著提升了企业的业务迭代速度和数据管理效率。典型客户如吉比特、莉莉丝、掌阅等受益于这些功能,实现了更稳定和高效的数据库服务。
|
Kubernetes Cloud Native API
云原生入门:从理论到实践的探索之旅
本文旨在为初学者提供一个关于云原生技术的全面介绍,包括其定义、核心原则、关键技术组件以及如何将这些概念应用于实际项目中。我们将通过一个简易的代码示例,展示如何在云原生环境下部署一个简单的应用,从而帮助读者更好地理解云原生技术的实践意义和应用价值。
|
运维 Cloud Native 开发者
云原生技术入门与实践
在云计算的浪潮中,云原生技术以其独特的优势和魅力吸引了越来越多的开发者和企业。本文将从云原生技术的基本概念、核心组件以及实际应用三个方面进行详细介绍,帮助读者更好地理解和掌握这一新兴技术。同时,文章还将分享一些实际案例和经验教训,让读者能够更深入地了解云原生技术的应用场景和发展趋势。
248 5
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。

热门文章

最新文章