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

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"embedcomp","attrs":{"type":"video","data":{"id":"378021","name":"Flomesh创始人&CEO 专访","poster":"","url":"https:\/\/media001.geekbang.org\/b090cddd49674409990060c021d2a5d1\/874fd88eed38407986454c6d13b56d7d-dbe5194cf055bb770a226d151371b861-sd.m3u8"}}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作者 | 施尧"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如何精细化管理企业内网流量?来看看 Flomesh 创始人怎么说"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"互联网包罗万象的今天,流量管理无处不在。这一普遍需求,催生了很多流量管理软件。除了Nginx外,具有代表性的既有Apache httpd、Tomcat、untertow、Lighttpd、Microsoft IIS、IBM WebSphere、Oracle Weblogic等老牌web和应用服务器,也有OpenResty,Envoy等专注于流量管理的新力量。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"随着内网微服务等大型分布式系统的发展,技术栈从传统的“内容编程”向“流量编程”演化。这些流量管理软件都有自身擅长的领域,在互联网发展、终端形态不断变化的过程中发挥着重要的作用。与此同时,流量管理从互联网领域快速进入云上和企业内网领域,“内(网)外(网)结合、(云)上(云)下结合、东西(向流量)南北(向流量)结合”的流量管理能力成为云时代的新热点。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Flomesh 成立于 2018年,于今年初开源了Pipy。Pipy 最初为企业内网提供流量管理服务,经过这几年的打磨,Pipy如今已成为“流量编程”领域的新力量,在众多业务场景中可与Nginx和Envoy一较高低,同时在企业内网这块空地上独树一帜。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"为探索 Pipy 的成长之路以及背后的设计思想,以及对“流量编程”领域的前沿思考。近期,小编趁 InfoQ Arch Summit 上海站专访了 Pipy 开发者蔡书。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/a9\/ef\/a9b340736a749d1c696f2b2eef8934ef.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"蔡书,Flomesh联合创始人。开源技术爱好者,先后在IBM、RedHat供职多年。2019年开始创建Flomesh,2021年开源其核心Proxy组件Pipy,静态内容服务和HTTP代理性能全面超越Nginx。目前全职开发和推广Pipy及其商业化产品,在多家股份制商业银行成功上线运行,支撑单一客户日DAU超过一亿。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以下是访谈内容整理,分享给大家,Enjoy~"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"定位于流量编程引擎,Pipy的诞生是为了高效解决流量处理需求"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"主持人:您之前提到过开源的Pipy对标Nginx,而且在性能、扩展性等方面都比Nginx更有优势,那是不是可以认为Pipy就是Nginx的替代品?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"**蔡书:**这个问题非常好,身边好多朋友都问过我这个问题。首先肯定的说我们做Pipy并不是为了替代Nginx,这里面有两层含义,第一是说Nginx本身作为一个非常优秀的堆栈的Web Server,包含反向代理,负载均衡等经典功能,我们没有必要重复造轮子去替代他,无论从市场角度还是从技术角度来讲,这都没有必要。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第二,Pipy尝试解决的一些问题我们称之为“流量编程”,实际上是Nginx甚至整个行业都还没有解决的,从技术角度看,整个行业都还没有一个明确的解决方案,市场也是一片空白。那么什么是“流量编程”呢?对于有编程经验,尤其是了解Java编程的人,我们可以认为Pipy类似netty,是一个高性能、易扩展的框架,基于这个框架可以快速开发出高性能网络服务程序,如web server。就像vertx基于netty,cassandra也基于netty一样。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除了像Netty封装了底层网络API操作外,pipy提供了一个简化的JS runtime,开发者可以使用JS语法开发上层逻辑。作为和netty对比,netty是Java编写的,包含了GC,多线程等特征;而pipy是单线程事件驱动的,同时pipy有自己的内存管理,基于C++的pipy,规避了类似Java和Go等编程语言常见的GC等“深坑”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"回到nginx的话题,我们在开发过程中需要做功能和性能测试,利用HTTP堆栈的各种工具,测出的数据更有参考意义,更容易对比。举个例子,采用Pipy跑1000万请求测试的平均延迟是多少?很多基于HTTP的工具可以使用(wrk, ab, gatling等),也有很多可以对比参考的server实现(nginx, envoy, undertow等),因此我们选择HTTP堆栈进行基准测试。但是实际上除了HTTP,pipy还支持Redis,Dubbo,socks等协议,并且还在继续开发支持其他协议。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"再回到Pipy这个话题,Pipy实际上更像一个底层的发动机模版,在这个模版之上我们可以快速开发适配摩托车的发动机,适配汽车的发动机,甚至适配大卡车、越野车,以及适配轮船的发动机。所以从软件定位上来说,Pipy其实比Nginx要更加底层,是一个全新的领域。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"主持人:您刚刚提到的流量编程概念很新颖,能详细说说她的来龙去脉吗?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"**蔡书:**流量编程是一个非常有趣的话题,其目的是满足流量处理的需求。早期流量处理需求是通过专用的网络硬件设备来解决。而随着云计算的快速发展,很多硬件设施被软件化,我们看到越来越多的底层资源比如网络、存储等被软件定义,软件定义的特征之一就是“可编程”。有一个词叫做InfrastructureAs Code,说的就是基础设施可编程。相应地,我们的流量编程是这个细分领域里的一个子集,为的是更高效地解决流量处理的需求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以此为基础我们可以将\"HTTP流量编程\"这个模式泛化一下,比如我们是不是可以对MySQL的流量做编程,对一个kafka的请求做编程,对一个Redis的请求做编程,对Dubbo的请求做编程?目前这样的需求很旺盛。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Nginx在最开始是一个Web Server,它预留了一些扩展接口借口,可以扩展新的功能,对于HTTP流量编程,Nginx提供了成熟的模型;但是对于非HTTP流量,nginx预留的接口就很简单了,并不适合扩展开发。一方面接口比较晦涩,不那么容易使用;另一方面C语言扩展的编程难度还是挺大的,不利于普及。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今天在Session里我会分享一些Pipy的落地应用。举个例子,我们拦截了Redis请求之后,他访问的是哪一个Redis的实例,或者哪个集群?这实际上可以由中间Proxy的环节来决定,需要有一些If else之类的条件进行分流。这个就是“redis流量可编程“的需求。我们把这种能力叫做流量编程,尤其泛指面向应用层的流量处理能力,包括应用程序本身,比如rest请求;当然,也有一部分面向中间件的。"}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":"源起于定制化修改报文,Pipy要做流量通路上的智能交通系统"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"主持人:您开发Pipy的时候,看到了哪些当时还没有被满足的市场需求,或者说客户的具体需求?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"**蔡书:**这个话题非常好,回到本源来说,这个问题就是所谓的“Pipy从哪里来”这样的经典话题。实际上最开始的时候,我们在编程过程中发现客户有一些需求具有行业共性。举个例子,银行客户常用的定长报纹,需要固定前6个字节作为报头。医疗、电信和泛金融行业也希望类似信息能够被路由,被取样。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一开始,我们去找相应工具比如openresty去解决这个问题,但发现它缺少一个抽象层。于是我们打算从下往上写,自己写一个socket程序,但后来也发现这样开发的应用维护和扩展难度很大。最后我们尝试在应用协议和底层socket之前加入一个抽象层,这个抽象层解决了底层编程的复杂度,同时又提高了现场开发的效率。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那我们就发现存在这样的一些行业性需求未被满足,我们沿着这条路走下去不仅可以解决专属的行业业务问题,还可以解决泛化的技术领域的问题,比如Redis的问题,比如Kafka的问题。于是我们不断地迭代,到现在三年时间,Pipy已经越来越通用,能解决更多需求了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"主持人:Pipy开发的整个蓝图是什么样的,现在进行到哪一步了?接下来有什么样的计划呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"**蔡书:**我们的蓝图可以类比交通系统。城市中的公路网络一样,有环路,有小胡同,各处的交通设备可以管车流量,管traffic。对于我们来说,在一个企业内部网络中,如果规则明确并且遍布足够多的proxy,就像城市里每一个路口设置了足够多的标识符,那么交通流量就可以自动地做智能化调度,类似自动驾驶。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"继续想象道路系统,首先道路上有一些可识别的东西,那么无人驾驶系统就可以自动根据设定的路线行驶。对于我们来说,我们的第一步是铺设所有控制点,这是类似红绿灯的基础设施。Pipy在整个蓝图中是一个开始,它只是一个小组件,负责为流量导航。接下来我们会开发控制体系,也就是基于这些“标识”的“智能交通”体系。这样企业内网的流量就可以高效、可控、安全、智能的自动流动,并且需要更少的人工干预。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下一阶段我们会布置一些控制器(Controller),用来适配K8s,阿里云,AWS等,甚至可以和传统网络设备耦合。最终构建出一个完整的可自动调度流量的控制体系。这是我们的整个蓝图。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"主持人:您觉得未来在流量管理这个领域中,行业集中度会如何发展?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"**蔡书:**首先我们看到这种细粒度的智能流量管理是最近几年才演化出来的,也就是说变革才刚刚开始。很早之前大家靠手工去配置网络,设定流量传输规则;2017年左右随着微服务体系的普及,单一集群节点变多,智能流量管理的需求越来越旺盛,于是很多团队开始尝试解决这类需求,典型的有Nginx,envoy,Linkerd等等。除此外还有客户自己编写工具,典型的有traefik,百度的BFE等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我们认为这个领域在未来几年会是百花齐放的阶段。然后慢慢地,整个领域会收敛;由于产品性能,资源占用率等原因,最后可能只剩2~3个成熟产品。那从终局来看,能同时做到高性能,低延迟,可扩展,可编程而且学习曲线容易被大众接受,这件事并不容易。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"对于我们而言,我们希望在普及度,易用性方面多下功夫,希望这条路能一直走下去,到最后留下的成熟产品中有我们一个。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章