专栏首页云原生可观测性Nginx 代理gRPC—为 Skywalking 提供负载均衡

Nginx 代理gRPC—为 Skywalking 提供负载均衡

Apache Skywalking 是一款优秀的分布式链路追踪系统以及 APM 系统,但在社区的实现中,并没有着重考虑客户端负载的问题。因为社区已经有很多对 gRPC 的代理的成熟方案(Skywalking 中 Agent 探针与后端主要通过 gRPC 方式通信)。

因此,如果是虚机或者一般容器(非Kubernetes平台)部署的时候,为了实现 Skywalking OAP 负载均衡,需要自己做一层反向代理。在网上查阅资料之后,发现 Nginx 已经支持 gRPC 代理。在 2018年3月17日,NGINIX官方宣布在nginx 1.13.10中将会支持gRPC,这一宣告表示了NGINX已完成对gRPC的原生支持。众所周知,gRPC 已经是新一代微服务的事实标准 RPC 框架。对于实现来说,可以用服务框架等手段来做到负载均衡,但业界其实还没有非常成熟的针对 gRPC 的反向代理软件。 NGINIX 作为老牌负载均衡软件对 gRPC 进行了支持,之前已经可以代理 gRPC 的 TCP 连接,新版本之后,还可以终止、检查和跟踪 gRPC 的方法调用:

  • 发布 gRPC 服务,然后使用 NGINX 应用 HTTP/2 TLS 加密、速率限制、基于 IP 的访问控制列表和日志记录;
  • 通过单个端点发布多个 gRPC 服务,使用 NGINX 检查并跟踪每个内部服务的调用;
  • 使用 Round Robin, Least Connections 或其他方法在集群分配调用,对 gRPC 服务集群进行负载均衡;

在客户端和服务器应用程序之间插入 NGINX,为服务器应用程序提供了一个稳定可靠的网关。


使用Docker容器搭建NGINX Server

使用 Nginx 官方提供的docker image搭建server:

$ docker pull nginx:1.13.10
1.13.10: Pulling from library/nginx
2a72cbf407d6: Pull complete
fefa2faca81f: Pull complete
080aeede8114: Pull complete
Digest: sha256:c4ee0ecb376636258447e1d8effb56c09c75fe7acf756bf7c13efadf38aa0aca
Status: Downloaded newer image for nginx:1.13.10

Nginx gRPC配置

Nginx 使用 HTTP 服务器监听 gRPC 流量,并使用 grpc_pass 指令代理流量。 为 Nginx 创建以下代理配置,在端口 80 上侦听未加密的 gRPC 流量并将请求转发到端口11800上的服务器。

grpc_proxy.conf 文件:

upstream grpcservers {
    server 10.15.160.1:11800; # Skywalking OAP 后端 11800 地址
}
server {
    listen 80 http2;
    location / {
        grpc_pass grpc://grpcservers;
        error_page 502 = /error502grpc;
}
    location = /error502grpc {
internal;
        default_type application/grpc;
        add_header grpc-status 14;
        add_header grpc-message "unavailable";
        return 204;
}
}

启动 Nginx 容器

docker run --name mynginx4grpc -p 80:80 -v tmp4myworkspace:/etc/nginx/conf.d:ro -d nginx:1.17

其中,上述 Nginx 配置文件位于 tmp4myworkspace 目录下。


参考:

  • Module ngx_http_grpc_module
  • Service Mesh利器:NGINX+gRPC

本文分享自微信公众号 - 一万小时极客(coding-Hub),作者:无糖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小姐姐教你定制一个Logstash Java Filter

    Logstash是用来收集数据,解析处理数据,最终输出数据到存储组件的处理引擎。数据处理流程为:

    Jared.Tan
  • gRPC 简介并实战——文末附源码

    RPC 是什么?在客户端应用里可以像调用本地方法对象一样直接调用另一台不同机器上的服务端应用的方法。同时支持跨语言的异构系统。国内开源的 RPC 框架有阿里Du...

    Jared.Tan
  • 当 OpenResty/Nginx 遇上 Skywalking

    OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能...

    Jared.Tan
  • 分布式高并发中,如何发挥gRPC的威力?来看看它的底层实现原理!

    A high-performance, open-source universal RPC framework

    李明成
  • 分布式高并发中,如何发挥gRPC的威力?来看看它的底层实现原理!

    A high-performance, open-source universal RPC framework

    架构师修行之路
  • 漫谈gRPC

    本文概括性的介绍gRPC,包括gRPC的起源,核心特性,生态体系,以及一些知名开源软件对gRPC的使用,最后总结gRPC与netty、dubbo等框架的区别,目...

    田守枝
  • 进行API开发选gRPC还是HTTP APIs?

    上一篇文章我带着大家体验了一把《ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)》,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可...

    依乐祝
  • 7大维度看国外企业为啥选择gRPC打造高性能微服务

    gRPC是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架。

    Debian社区
  • CNCF案例研究:gRPC如何实现Salesforce的统一互操作性策略

    Salesforce是客户关系管理软件领域的领导者,它的客户成功平台和其它产品支持了超过15万个组织。在幕后,“我们试图建立的一件大事是在整个公司范围内建立统一...

    CNCF
  • 业界 | 美图推出业界最大规模教程类行为数据集 | CVPR 2019

    AI 科技评论按,计算机视觉顶会 CVPR 2019 即将于 6 月在美国长滩召开,今年有超过 5165 篇的大会论文投稿,最终录取 1299 篇。随着会议临近...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券