AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

与 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:525508
    用户头像

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

    关注

    评论 1 条评论

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

    PingCAP 与阿里云达成合作 云数据库 TiDB 上线阿里云心选商城

    极客天地

    开发者能力大赏,谁是技术知识达人?

    华为云开发者联盟

    华为云

    InfoQ 极客传媒 15 周年庆征文 | 跨系统数据一致性问题

    架构精进之路

    数据一致性 构架 InfoQ极客传媒15周年庆

    基于宽表的数据建模应用

    百度Geek说

    大数据 数据建模

    华为云发布新伙伴体系,携手伙伴及开发者共建新生态,共创新价值

    郝俸🦁好棒

    华为云 生态

    2022年中国露营市场专题洞察

    易观分析

    露营

    ABAP BDC常见问题-FICO

    桥下本有油菜花

    abap

    java开发技术培训MyBatis的缓存

    @零度

    mybatis JAVA开发

    盲盒APP开发新玩法,盲盒APP需具备的模块

    WDL22119

    盲盒商城 盲盒开发 盲盒APP开发 盲盒源码 盲盒H5开发

    NLP论文领读|合成数据的妙用:低成本构建高质量的大规模平行语料

    澜舟孟子开源社区

    人工智能 自然语言处理 数据挖掘 深度学习 nlp

    大数据培训Flink 运行架构

    @零度

    flink 大数据开发

    OpenHarmony 官网文档有哪些上新?下篇:设备开发文档上新

    OpenHarmony开发者

    Open Harmony

    java培训MyBatis动态SQL

    @零度

    mybatis JAVA开发

    Windows/Linux系统下python的安装与环境配置

    左手の明天

    Python Python库安装 python安装

    解决方案| 快对讲综合调度系统

    anyRTC开发者

    音视频 快对讲 语音对讲 调度系统 视频对讲

    有了钉钉和企业微信,企业还需要专属IM吗?

    BeeWorks

    支持 M3U8 格式播放的方法

    CRMEB

    PingCAP 与阿里云达成合作 云数据库 TiDB 上线阿里云心选商城

    PingCAP

    分布式数据库 TiDB

    十分钟带汝入门大数据开发语言Scala

    百思不得小赵

    scala 大数据 6月月更

    React Suspense 尝鲜,处理前后端IO异步操作

    葡萄城技术团队

    大前端 SpreadJS 表格控件 纯前端表格组件

    自主研发不断突破!索信达AI技术再获国家发明专利授权

    索信达控股

    得物质量度量之“三级指标体系”及其应用实践

    得物技术

    质量保障 指标监控 工程效能 质量指标 效能平台

    墨天轮访谈 | 叶金荣:GreatSQL开源社区——做中国广受欢迎的开源数据库

    墨天轮

    数据库 开源数据库 国产数据库

    【Spring 学习笔记(十一)】基于注解的Spring AOP

    倔强的牛角

    Java spring spring aop Java EE 6月月更

    Vue-11-条件渲染

    Python研究所

    6月月更

    开源等于免费吗?

    源字节1号

    开源

    InfoQ 极客传媒 15 周年庆征文|【Docker最佳实践】Windows上安装Docker及常见问题解决

    迷彩

    Docker 架构 运维 6月月更 InfoQ极客传媒15周年庆

    使用 eBPF 增强监控和可观测性

    观测云

    现场办公VS居家办公——我的2022居家办公经验分享| 社区征文

    No Silver Bullet

    经验分享 居家办公 6月月更 初夏征文

    详解Cache缓存与DB数据库一致性

    分治实践

    数据一致性 缓存Redis

    ABAP BDC的执行模式和更新模式

    桥下本有油菜花

    abap

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