主页 产品更新 DigitalOcean应用托管平台支持HTTP/2与gRPC,构建更高效的应用

DigitalOcean 应用托管平台(App Platform)现在支持提供 HTTP/2 以及因此也支持 gRPC 的应用!这为希望构建更快、更高效且高度可扩展的云原生应用的开发者们开启了令人兴奋的可能性。

DigitalOcean 应用托管平台 是一个完全托管的 PaaS 解决方案,非常适合小规模应用开发和部署,或是专注于 Web 应用开发且不熟悉底层部署的开发者。开发者使用 App Platform 时,只需关联 Github 仓库或提前构建的容器镜像,App Platform 将承担管理基础设施、应用程序运行时和依赖项的所有繁重工作,让开发者无需设置底层基础设施,降低了开发的复杂性。App Platform 支持许多流行的语言和框架,如Node.js、Python、Django、Go、PHP、Laravel、React、Ruby、Ruby on Rails、Gatsby、Hugo、静态网站和Docker。

什么是 HTTP/2 和 gRPC?

HTTP/2 是 HTTP 协议的一个修订版,可以实现更快和更高效的网络传输。它引入了多路复用功能,即可以在单个连接上发送多个请求,显著提高了性能并减少了延迟。HTTP/2 特别适合需要同时处理大量请求的网络服务和微服务架构。

gRPC(gRPC 远程过程调用)是一个开源的高性能 RPC 框架,基于 HTTP/2 而来。它让应用程序可以跨不同环境和编程语言以高速度和高效率的方式进行通信。由于其低延迟和实时流能力,gRPC 特别适用于分布式系统和微服务。

为什么要在应用托管平台上运行 gRPC 应用?

gRPC 是开发人员构建高性能分布式系统的首选解决方案。主要原因包括:

  • 高性能:gRPC 充分利用了 HTTP/2 技术,允许多个请求在单个连接上多路复用。这导致了延迟减少和服务间数据传输速度加快。
  • 效率:gRPC 使用 Protocol Buffers(Protobuf)来序列化结构化数据,产生的消息大小紧凑,非常适合带宽有限的环境,如移动设备和物联网设备。
  • 流式传输能力:使用 gRPC,你可以实现在客户端和服务器之间持续不断地传输数据。这意味着它非常适合实时应用,比如视频直播、聊天服务或实时数据更新。
  • 跨编程语言支持:gRPC 被设计用于互操作性,这意味着你可以使用不同的语言(Go、Python、Java 等)构建服务,并使它们无缝通信。在微服务架构中,每个服务可能都用不同的语言编写,这一点尤其有用。

在 DigitalOcean,我们用 gRPC 来构建许多我们自己的内部 API。它的速度、效率以及处理大规模分布式服务的能力,使其完全符合我们的需求。通过在 DigitalOcean 应用平台上采用 gRPC,你将使用到与你日常使用的服务背后相同的技术。

如何开始在应用托管平台上使用 gRPC 和 HTTP/2

要在 DigitalOcean 应用托管平台上运行你的 gRPC 应用,你需要配置应用程序使用 HTTP/2 传输。为此,请将相应服务中的新协议字段设置为 HTTP2。请注意,这是一个针对每个服务设置的字段,因此同一应用中的不同服务可以分别使用 HTTP 或 HTTP2。

name: sample-grpc
services:
- name: sample-grpc
  protocol: HTTP2
  github: 
    repo: your_org/your_repo

该服务需要通过明文(h2c)提供 HTTP/2 支持,这可能需要对代码进行一些特定的设置,而不仅仅是普通的 HTTP/2 设置。

例如,在 Golang 中,你可以像下面这样设置服务器以处理 HTTP/2 和 gRPC 的工作负载:

package main

import (
  "fmt"
  "io"
  "net/http"
  "os"
  "strings"

  "golang.org/x/net/http2"
  "golang.org/x/net/http2/h2c"
  "google.golang.org/grpc"
)

func main() {
  g := grpc.NewServer()
  // gRPC 服务器设置...

  handler := func(w http.ResponseWriter, r *http.Request) {
    if r.ProtoMajor == 2 {
      if strings.HasPrefix(r.Header.Get("Content-Type"), "application/grpc") {
        g.ServeHTTP(w, r)
        return
      }
      io.WriteString(w, "Hello HTTP/2")
      return
    }
    io.WriteString(w, "Hello HTTP/1.1")
  }

  server := &http.Server{
    Addr:    fmt.Sprintf(":%s", os.Getenv("PORT")),
    Handler: h2c.NewHandler(http.HandlerFunc(handler), &http2.Server{}),
  }
  server.ListenAndServe()
}

你现在可以将你的应用部署到 App 平台,它将能够很好地提供基于 HTTP/2 或 gRPC 的 API。

欢迎免费注册尝试

通过在 DigitalOcean 应用托管平台上利用 gRPC 和 HTTP/2,你将能够享受改进的性能、更低的延迟和无缝的扩展能力,适用于你的分布式服务。无论是构建微服务、实时 API 还是跨平台应用,gRPC 都能为构建现代的、云原生系统提供完美的基础。

现在注册 DigitalOcean 账号,即可享受 200 美元免费试用额度。同时,享受比其他云服务更简单易用的云构建过程、更简单且实惠的计费框架,并得到 DigitalOcean 中国区独家战略合作伙伴卓普云提供的中文技术支持。如果你希望进一步了解产品方案,可以直接联系卓普云。

QQ 交流群:611945524
Telegram:aidropletch

最新发布

相关阅读