写点什么

与 Nginx 同行,Pipy 究竟有何能耐?

  • 2021-05-25
  • 本文字数:3462 字

    阅读完需:约 11 分钟

与 Nginx 同行,Pipy究竟有何能耐?

作者 | 施尧


如何精细化管理企业内网流量?来看看 Flomesh 创始人怎么说


互联网包罗万象的今天,流量管理无处不在。这一普遍需求,催生了很多流量管理软件。除了 Nginx 外,具有代表性的既有 Apache httpd、Tomcat、untertow、Lighttpd、Microsoft IIS、IBM WebSphere、Oracle Weblogic 等老牌 web 和应用服务器,也有 OpenResty,Envoy 等专注于流量管理的新力量。


随着内网微服务等大型分布式系统的发展,技术栈从传统的“内容编程”向“流量编程”演化。这些流量管理软件都有自身擅长的领域,在互联网发展、终端形态不断变化的过程中发挥着重要的作用。与此同时,流量管理从互联网领域快速进入云上和企业内网领域,“内(网)外(网)结合、(云)上(云)下结合、东西(向流量)南北(向流量)结合”的流量管理能力成为云时代的新热点。


00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    Flomesh 成立于 2018 年,于今年初开源了 Pipy。Pipy 最初为企业内网提供流量管理服务,经过这几年的打磨,Pipy 如今已成为“流量编程”领域的新力量,在众多业务场景中可与 Nginx 和 Envoy 一较高低,同时在企业内网这块空地上独树一帜。


    为探索 Pipy 的成长之路以及背后的设计思想,以及对“流量编程”领域的前沿思考。近期,小编趁 InfoQ Arch Summit 上海站专访了 Pipy 开发者蔡书。


    蔡书,Flomesh 联合创始人。开源技术爱好者,先后在 IBM、RedHat 供职多年。2019 年开始创建 Flomesh,2021 年开源其核心 Proxy 组件 Pipy,静态内容服务和 HTTP 代理性能全面超越 Nginx。目前全职开发和推广 Pipy 及其商业化产品,在多家股份制商业银行成功上线运行,支撑单一客户日 DAU 超过一亿。


    以下是访谈内容整理,分享给大家,Enjoy~


    定位于流量编程引擎,Pipy 的诞生是为了高效解决流量处理需求


    主持人:您之前提到过开源的 Pipy 对标 Nginx,而且在性能、扩展性等方面都比 Nginx 更有优势,那是不是可以认为 Pipy 就是 Nginx 的替代品?


    蔡书:这个问题非常好,身边好多朋友都问过我这个问题。首先肯定的说我们做 Pipy 并不是为了替代 Nginx,这里面有两层含义,第一是说 Nginx 本身作为一个非常优秀的堆栈的 Web Server,包含反向代理,负载均衡等经典功能,我们没有必要重复造轮子去替代他,无论从市场角度还是从技术角度来讲,这都没有必要。


    第二,Pipy 尝试解决的一些问题我们称之为“流量编程”,实际上是 Nginx 甚至整个行业都还没有解决的,从技术角度看,整个行业都还没有一个明确的解决方案,市场也是一片空白。那么什么是“流量编程”呢?对于有编程经验,尤其是了解 Java 编程的人,我们可以认为 Pipy 类似 netty,是一个高性能、易扩展的框架,基于这个框架可以快速开发出高性能网络服务程序,如 web server。就像 vertx 基于 netty,cassandra 也基于 netty 一样。


    除了像 Netty 封装了底层网络 API 操作外,pipy 提供了一个简化的 JS runtime,开发者可以使用 JS 语法开发上层逻辑。作为和 netty 对比,netty 是 Java 编写的,包含了 GC,多线程等特征;而 pipy 是单线程事件驱动的,同时 pipy 有自己的内存管理,基于 C++的 pipy,规避了类似 Java 和 Go 等编程语言常见的 GC 等“深坑”。


    回到 nginx 的话题,我们在开发过程中需要做功能和性能测试,利用 HTTP 堆栈的各种工具,测出的数据更有参考意义,更容易对比。举个例子,采用 Pipy 跑 1000 万请求测试的平均延迟是多少?很多基于 HTTP 的工具可以使用(wrk, ab, gatling 等),也有很多可以对比参考的 server 实现(nginx, envoy, undertow 等),因此我们选择 HTTP 堆栈进行基准测试。但是实际上除了 HTTP,pipy 还支持 Redis,Dubbo,socks 等协议,并且还在继续开发支持其他协议。


    再回到 Pipy 这个话题,Pipy 实际上更像一个底层的发动机模版,在这个模版之上我们可以快速开发适配摩托车的发动机,适配汽车的发动机,甚至适配大卡车、越野车,以及适配轮船的发动机。所以从软件定位上来说,Pipy 其实比 Nginx 要更加底层,是一个全新的领域。


    主持人:您刚刚提到的流量编程概念很新颖,能详细说说她的来龙去脉吗?


    蔡书:流量编程是一个非常有趣的话题,其目的是满足流量处理的需求。早期流量处理需求是通过专用的网络硬件设备来解决。而随着云计算的快速发展,很多硬件设施被软件化,我们看到越来越多的底层资源比如网络、存储等被软件定义,软件定义的特征之一就是“可编程”。有一个词叫做 InfrastructureAs Code,说的就是基础设施可编程。相应地,我们的流量编程是这个细分领域里的一个子集,为的是更高效地解决流量处理的需求。


    以此为基础我们可以将"HTTP 流量编程"这个模式泛化一下,比如我们是不是可以对 MySQL 的流量做编程,对一个 kafka 的请求做编程,对一个 Redis 的请求做编程,对 Dubbo 的请求做编程?目前这样的需求很旺盛。


    Nginx 在最开始是一个 Web Server,它预留了一些扩展接口借口,可以扩展新的功能,对于 HTTP 流量编程,Nginx 提供了成熟的模型;但是对于非 HTTP 流量,nginx 预留的接口就很简单了,并不适合扩展开发。一方面接口比较晦涩,不那么容易使用;另一方面 C 语言扩展的编程难度还是挺大的,不利于普及。


    今天在 Session 里我会分享一些 Pipy 的落地应用。举个例子,我们拦截了 Redis 请求之后,他访问的是哪一个 Redis 的实例,或者哪个集群?这实际上可以由中间 Proxy 的环节来决定,需要有一些 If else 之类的条件进行分流。这个就是“redis 流量可编程“的需求。我们把这种能力叫做流量编程,尤其泛指面向应用层的流量处理能力,包括应用程序本身,比如 rest 请求;当然,也有一部分面向中间件的。

    源起于定制化修改报文,Pipy 要做流量通路上的智能交通系统


    主持人:您开发 Pipy 的时候,看到了哪些当时还没有被满足的市场需求,或者说客户的具体需求?


    蔡书:这个话题非常好,回到本源来说,这个问题就是所谓的“Pipy 从哪里来”这样的经典话题。实际上最开始的时候,我们在编程过程中发现客户有一些需求具有行业共性。举个例子,银行客户常用的定长报纹,需要固定前 6 个字节作为报头。医疗、电信和泛金融行业也希望类似信息能够被路由,被取样。


    一开始,我们去找相应工具比如 openresty 去解决这个问题,但发现它缺少一个抽象层。于是我们打算从下往上写,自己写一个 socket 程序,但后来也发现这样开发的应用维护和扩展难度很大。最后我们尝试在应用协议和底层 socket 之前加入一个抽象层,这个抽象层解决了底层编程的复杂度,同时又提高了现场开发的效率。


    那我们就发现存在这样的一些行业性需求未被满足,我们沿着这条路走下去不仅可以解决专属的行业业务问题,还可以解决泛化的技术领域的问题,比如 Redis 的问题,比如 Kafka 的问题。于是我们不断地迭代,到现在三年时间,Pipy 已经越来越通用,能解决更多需求了。


    主持人:Pipy 开发的整个蓝图是什么样的,现在进行到哪一步了?接下来有什么样的计划呢?


    蔡书:我们的蓝图可以类比交通系统。城市中的公路网络一样,有环路,有小胡同,各处的交通设备可以管车流量,管 traffic。对于我们来说,在一个企业内部网络中,如果规则明确并且遍布足够多的 proxy,就像城市里每一个路口设置了足够多的标识符,那么交通流量就可以自动地做智能化调度,类似自动驾驶。


    继续想象道路系统,首先道路上有一些可识别的东西,那么无人驾驶系统就可以自动根据设定的路线行驶。对于我们来说,我们的第一步是铺设所有控制点,这是类似红绿灯的基础设施。Pipy 在整个蓝图中是一个开始,它只是一个小组件,负责为流量导航。接下来我们会开发控制体系,也就是基于这些“标识”的“智能交通”体系。这样企业内网的流量就可以高效、可控、安全、智能的自动流动,并且需要更少的人工干预。


    下一阶段我们会布置一些控制器(Controller),用来适配 K8s,阿里云,AWS 等,甚至可以和传统网络设备耦合。最终构建出一个完整的可自动调度流量的控制体系。这是我们的整个蓝图。


    主持人:您觉得未来在流量管理这个领域中,行业集中度会如何发展?


    蔡书:首先我们看到这种细粒度的智能流量管理是最近几年才演化出来的,也就是说变革才刚刚开始。很早之前大家靠手工去配置网络,设定流量传输规则;2017 年左右随着微服务体系的普及,单一集群节点变多,智能流量管理的需求越来越旺盛,于是很多团队开始尝试解决这类需求,典型的有 Nginx,envoy,Linkerd 等等。除此外还有客户自己编写工具,典型的有 traefik,百度的 BFE 等。


    我们认为这个领域在未来几年会是百花齐放的阶段。然后慢慢地,整个领域会收敛;由于产品性能,资源占用率等原因,最后可能只剩 2~3 个成熟产品。那从终局来看,能同时做到高性能,低延迟,可扩展,可编程而且学习曲线容易被大众接受,这件事并不容易。


    对于我们而言,我们希望在普及度,易用性方面多下功夫,希望这条路能一直走下去,到最后留下的成熟产品中有我们一个。

    2021-05-25 15:525429
    用户头像

    发布了 74 篇内容, 共 29.0 次阅读, 收获喜欢 83 次。

    关注

    评论 1 条评论

    发布
    用户头像
    1.名字起得不是很好,很难搜。
    2.不过产品想法到是很不错,做得对,大力推社区,毕竟是想要针对流量编程,用户使用成本更大,如果没有足够多的人和企业参与,产品标准无法稳定,就不会有人去使用,并且很容易就失去了生命力。而且大陆企业开源产品的后续维护口碑不好,这是环境决定的。
    相比之下现在的sevice mesh里用的sidecar应该属于配置流量,例如istio的envoy,这种方式已经可满足基本上所有的中小企业了。
    2021-05-30 09:09
    回复
    没有更多了
    发现更多内容

    户外LED广告屏如何才能保养好?

    Dylan

    LED显示屏 led显示屏厂家

    pod(一):Kubernetes(k8s)创建pod的两种方式

    Java-fenn

    Java

    Java程序员:为了跳槽刷完1000道真题,没想到老板直接给我升职了!

    收到请回复

    Java 云计算 开源 架构 编程语言

    继GitHub的Copilot收费后,亚马逊推出了 CodeWhisperer,感觉不错哟!

    Python猫

    Python

    阿里前端常见面试题总结

    loveX001

    JavaScript 前端

    算法、算力、数据,AI落地现在还需要AI工程化

    Java-fenn

    Java

    Plato Labs推出的SeedX,公测15天570万美金净利润

    鳄鱼视界

    Kubernetes 网络排查骨灰级

    CTO技术共享

    MySQL 如何查找删除重复行

    CTO技术共享

    Java 多线程:并发编程的三大特性

    Java快了!

    Java多线程

    SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?

    Java快了!

    数据库 spring-boot

    担心今年的金九银十收不到满意的offer?这份18位阿里架构师耗时60天整合的面试总结太香了!

    收到请回复

    Java 云计算 开源 架构 编程语言

    向量数据库入坑:入门向量数据库 Milvus 的 Docker 工具镜像

    Java-fenn

    Java

    终于懂了,RPC和OpenApi的区别

    知识浅谈

    RPC OpenAPI 9月月更

    从 ABAP Netweaver 到 ABAP Platform,我们一直在努力

    汪子熙

    SAP abap Netweaver 企业级应用 9月月更

    MyBatis-Plus(三、增删改查)

    MySQL MyBatisPlus 9月月更

    Cryptocell-712安全引擎概述

    Java-fenn

    Java

    Java进阶(二十三)java中long类型转换为int类型

    No Silver Bullet

    Java 类型转换 9月月更

    npm,pnpm,yarn,npx的那些事儿

    Java-fenn

    Java

    整理的5种Linux 安装包管理工具

    CTO技术共享

    基于.NET6的简单三层管理系统

    Java-fenn

    Java

    一个不错的开源项目风控引擎(Radar)

    Java-fenn

    Java

    羊了个羊”通关修改思路

    Java-fenn

    Java

    Elasticsearch聚合学习之四:结果排序

    程序员欣宸

    elasticsearch 9月月更

    【Vue3】 评论列表(简易)-- 思路与实现分析

    Sam9029

    JavaScript Vue Vue3 9月月更

    只要32天就能拿下Offer?框架+性能优化+微服务+分布式,Java程序员必备!

    收到请回复

    Java 云计算 开源 架构 编程语言

    C++学习---cstdio的源码学习分析02-文件删除函数remove

    桑榆

    c++ 源码阅读 9月月更

    COSI:使用 Kubernetes API 管理对象存储

    Java-fenn

    Java

    腾讯云数据库自研内核全新升级 新架构比原先性能提升20%

    Java-fenn

    Java

    跟着卷卷龙一起学Camera--CameraService

    卷卷龙

    ISP 9月月更

    与 Nginx 同行,Pipy究竟有何能耐?_HarmonyOS_施尧_InfoQ精选文章