2019独角兽企业重金招聘Python工程师标准>>>

OpenResty 是把 Nginx 和 Lua 有机融合在一起的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。在第52期【OSC源创会】珠海站上,奇虎360技术开源委员会委员、OpenResty 软件基金会主席温铭,对 OpenResty的技术链、近一年以来的新增特性、社区的发展以及未来的规划进了分享。

完整演讲内容如下:

大家好,首先简单做个自我介绍,我是温铭,在珠海呆了快十年,前面四五年在金山做个人软件,后面四五年在360做企业软件。

先说一下,由于只有半小时左右的演讲时间,所以不会涉及到很深入的东西。我希望大家通过我这次演讲,之前没有接触过 OpenResty 的,听完后会觉得还有点意思,有兴趣去搜索了解一下,去自己电脑上跑个“Hello World”, 在后面做技术选型的时候有新的一个选择,那我就觉得这个演讲的目的已经达到了。

OpenResty 最近曝光最多的是在去年锤子的发布会上获得了锤子一百万的捐赠,其他时间的曝光率并不是特别高。接下来我会大概跟大家说一下 OpenResty 还有 OpenResty 社区的特性和发展。

其实不仅是 OpenResty 社区,对任何一个开源社区来说,未来的发展在我看来都取决于两个方面,一个是它的技术,是不是能解决一些真实的环境、公司业务里面遇到的问题,还有一个就是它的社区和社区的发展,你的社区做的怎么样,很大的情况下会决定你的开源软件未来会是怎样的发展。

下图是去年10月份 OpenResty 在北京举行的第一次大会,这些都是当时的一些讲师,最中间的是 OpenResty 的作者章亦春,其他的大部分来自于 CDN 行业和云厂商。但其实 OpenResty 的用户不止于 CDN 公司和云厂商,只不过在这些公司和厂商的服务端上,OpenResty 应用非常广泛,在 CDN 行业 OpenResty 已经是事实上的一个标准。京东是我们在国内最大的一个 OpenResty 用户,你在京东上看到的所有商品详情页的调用都是基于 OpenResty 做的。还有新浪财经、新浪股票和新浪体育所有的后端,包括360搜索页面的跳转,同样都是基于 OpenResty。在国外大家比较常用的 Github、CloudFlare 也都有用 OpenResty 做一些服务。

那么,OpenResty 是一个什么东西呢?简单来说,它不像 Golang 一样,是凭空从零搭建的,而是把 Nginx 和 Lua 有机融合在一起,站在两位巨人肩膀上诞生的。特别有意思的是,我们平常用到的绝大部分的互联网技术都是基于欧美的,但是这三个技术,Nginx 是俄罗斯的,Lua 的作者是巴西的,OpenResty 的作者是中国的。

OpenResty 的好处是什么呢?说白了就是可以用脚本语言,用 Lua 来控制 Nginx 的行为。就比如说刚才魅族的于讲师有讲到他们用C++去做控制,要自己实现协程,但是在 OpenResty 里面,它像 Golang 一样天生就有协程。还有一个好处是,OpenResty 所有的参数和行为都可以在程序里面动态的去做,完全不用重启和reload,因为它是基于 Nginx 之上的,性能非常高。所以如果你有一个高性能的场景,除了 Golang 之外,OpenResty 也是很好的选择。

在说到 OpenResty 时,更多人可能听说过的是 ngx_lua。这其实也是有历史原因的,因为有很多项目是在原生的 Nginx 版本里面嵌入了 ngx_lua 这个模块,来做到刚才说的动态控制。但事实上,ngx_lua 只是 OpenResty 里面的一小部分。OpenResty 这个开源项目下面有50多个小项目,都是和OpenResty、Nginx、Lua相关的。

我大概列了其中的十几个项目。首先,我们知道测试在开源项目里面是特别重要的,但我们其实是很难做到类似于测试驱动开发、测试代码覆盖率、自动化测试、CI等等,这种东西听起来很美好,但做起来难度很高。OpenResty 是我见过在开源项目里面测试这一块做的最好的,后面会单独来讲一下这块。此外,OpenResty 做的比较好的还有动态跟踪,我们可以不做侵入性的修改,就能发现问题所在。还有像是客户端文档、二进制包、docker 包等等。

前段时间我在公司内部给新员工做培训时有说这样一句话,测试是区别程序员和程序猿的一个标准。你是机械的在工作,还是会经常思考怎么样提高生产力的在工作,区别就是在测试这一块。

测试其实是很多程序员不愿意做的事,但测试又确实特别重要,用章亦春春哥的话说就是,你如果没有做测试,那你晚上会睡不着觉,因为不知道发版本的时候程序能不能跑起来;但是如果你做了测试,那你发版本的时候就可以很安心的睡觉,因为程序肯定可以跑得起来。当然,前提是测试的设计要好,要有科学的方法,这其实也是一门艺术。这个网址 https://qa.openresty.org 会显示OpenResty下面各个项目的测试运行情况,有需要的可以去看看。

测试这一块还值得一提的是 Test::Nginx,它会给每一个测试案例起一个 Nginx 实例,在里面把一些测试按钮跑完后,Nginx 的环境就会自动清掉;当下一次进行测试时,再重新起一个Nginx 实例。它是用自己定义的一套语法来描述测试案例要怎么跑、预期的结果会是怎样、你需要预备一些什么数据等等。另外就是mock,在Nginx、OpenResty 测试中也是较常使用的,比如说你访问的 redis 返回一个错误码,而你在正常的测试环境是很难遇到的。再比如 mockeagain,这个开源项目其实是比较适用很特殊的情况,比如模拟网络非常缓慢的时候。

说完测试来聊聊动态追踪,这个是 OpenResty 里面非常有特色的一个点。动态追踪是指我们在线上跑一个服务,当出现问题时,动态追踪可以不改一行代码、甚至在不知道别人代码如何实现的情况下,找到问题所在。它可以帮助软件工程师以非常低的成本,在非常短的时间内,跟踪程序的运行情况,并给出直观的图表,从而更快速地排查和解决问题。下图是一个动态追踪的火焰图,图中的颜色深浅其实是没有意义的,它就是对程序占用 CPU 做了一次采样,再进行绘制。正常情况是左边的驼峰形状,当出现图中右边的情况则说明了这是问题所在,可以直接看到是哪个函数占了 CPU 资源。

现在的调试工具是很乱、很不统一的,像是有 DTrace、SystemTap、ePBF/BCC、GDB、LLDB 这些。我们希望做到的是能有一种语言将所有调试相关的东西,包括静态和动态,都能解决掉。这个语言我们称为Y语言,其实就是英文的“WHY”谐音。前面说到的所有调试相关的东西,春哥写了一篇文章, https://openresty.org/posts/dynamic-tracing,有兴趣的可以去看看。

那说完调试,来说说标准库。下图所列的都是 OpenResty 中自带的标准库,包括字符串的处理、上游的处理,还有一些缓存和其它常见的处理。

再有是 web 框架,在OpenResty里面,你要写一个框架非常简单,有大概20个开源项目都是做这种 web 框架的。

至于数据库和存储相关的第三方就更多了,都可以直接用 OpenResty 调用,不用自己写。

汇总链接如下:https://github.com/bungle/awesome-resty

OpenResty 和其他语言相比有很不一样的特点,就是可以深入到业务当中去。举几个栗子: 
openresty.org 这个网站的 DNS 原本用的是dnspod,但 dnspod 在国外的服务不稳定,导致社区的用户对其不太满意,因此 OpenResty 自己写了一套 DNS。

还有 WAF,其实目前好的 WAF 都没有开源,现在开源的 WAF 并没有一个特别好的环境去做到特别牛。OpenResty 社区也会去开发、开源一套比所有商业项目更好的一套 WAF。还有正则引擎,我们知道 WAF 的规则都是基于正则来做的,比如说,一个 WAF 有一万条规则,当一个请求进来,难道要匹配一万次?这明显是不能容忍的,但事实上很多开发者都是这么做的,我们希望做的是能够合并掉规则,到 WAF 运行的时候可能只有几条规则进行匹配。所以我们需要一个更好的正则引擎,这个引擎目前也在 OpenResty 的开源项目里。这个正则引擎的效率比目前已知的引擎效率要高,但是还需要测试。

再有就是 DSL,就像之前说的 Y 语言,OpenResty 社区受创始人的影响,比较偏爱小语言。比如说当要用 Lua 写 OpenResty 代码,但很多人又不愿意学 Lua,那么就可以其他语言来做,再用 DSL 引擎将其底层变成 Lua 代码,实现代码的高度优化。

这个是我们年初的时候发的roadmap,其中的第一个和第二个其实就是为了实现推送功能,都已经打包在最新的 OpenResty 稳定版中。第三个和第四个就是刚才说的 WAF,最后一个就是 DSL。

前面讲了这么多,其实我们可以看到,贯穿 OpenResty 核心开发的就是合适你业务的小语言。你觉得哪个语言好,都可以将其特色挪过来,兼容并包。所以在 OpenResty 社区里面从来没有语言方面的冲突。

说到社区,在我看来,OpenResty 的社区是这样的:

首先,社区受创始人章亦春的影响非常大。之前有开玩笑说过,一个社区发展有没有前途,是看社区的创始人能活多少岁。对于社区来讲,创始人可以非常民主,也可以非常专治,而春哥则是“仁慈的君主”。当有小白用户在社区提问,他会很详细的列出1、2、3、4……进行解答,每天都在回复,一直坚持了五六年。

社区目前主要是在邮件列表和微信群进行沟通,一般解答流程是先由委员会成员来回复,如果提问后2-3天没有收到委员会的回复或者回复错误,春哥会亲自回复,以保证所有的问题都能得到及时解答。另外也有 QQ 群,基本上国内所有的 OpenResty 开发者都在里面。

当然,我们也有更长远的发展规划,我们一直在做 NPO,希望能永远的运营下去,脱离于单个人的影响。现在的 NPO 是以 OpenResty 软件基金会为主体,我们需要这个一个合法的机制来保证社区的长久运营。

春哥正在写一本叫做 programming OpenResty 的书,到现在已经写了几个月,在写测试这块。另外,基金会也会赞助 OpenResty 本身以及更多相关技术的发展。

谢谢!

PPT下载地址:http://www.oschina.net/doc/44254

>>>第52期、53期【OSC 源创会】将于10月15日、16日分别于成都和重庆举行,期待您的参与。

一、10月15日成都站主题(持续更新中):

1.大规模MySQL自动化运维平台介绍 —— 腾讯高级工程师 祝海强

2.新系统,新推送,一起玩转iOS10推送 —— 极光推送华西地区技术支持负责 施文婷

3.Docker在UCloud Serverless架构中的实践 —— UCloud计算增值研发部经理 叶理灯

4.前端Flux架构演进史 —— 《WebApp防坑手册》作者 覃俊文

报名地址:https://city.oschina.net/chengdu/event/2195606

二、10月16日重庆站主题(持续更新中):

1.TXSQL: 腾讯CDB内核优化实践分享 —— 腾讯云数据库架构师 简怀兵

2.新系统,新推送,一起玩转iOS10推送 —— 极光推送华西地区技术支持负责 施文婷

报名地址:https://city.oschina.net/chongqing/event/2196534

>>>同时,一年一度的【OSC 源创会】年度盛典也将于2016年12月4日和OSCER相约北京国际会议中心,目前报名已启动,名额有限,错过等一年!!!

报名地址:http://www.oschina.net/2016-beijing-ceremony

转载于:https://my.oschina.net/mrtudou/blog/747786

奇虎360温铭:OpenResty的未来相关推荐

  1. 奇虎360:5年前赴美上市到今私有化退市,未来路在何方?

    2015年6月,奇虎360宣布私有化.2016年7月16日凌晨,奇虎360对外宣布私有化交易完成.今日,奇虎360的股票也已停止在美国纽交所公开交易.原本预计私有化交易于2016年8月中旬前完成,如今 ...

  2. 深圳惠程澄清与奇虎360公司重组传闻

    深圳惠程公告,近期,有媒体刊登了<奇虎看上的是深圳惠程?>一文.文章推测,信中利集团收购深圳惠程目的是为其客户奇虎360公司借壳深圳惠程做准备.在各路网络媒体.股吧和投资者互动平台中大量流 ...

  3. 搅局者奇虎360:特供机背后的周式隐忧

    摘要:从未涉足制造,将来也"绝不参与制造"的360,却声称要进军智能手机. 从未涉足制造,将来也"绝不参与制造"的360,却声称要进军智能手机. 5月4日晚间, ...

  4. 奇虎360大战腾讯QQ 高潮迭起用户受伤

    原文地址:奇虎360大战腾讯QQ 高潮迭起用户受伤 虽然我也是不可避免的QQ用户,但是自从360开始揭露腾讯QQ涉及扫描用户隐私引发的这场高潮迭起的比拼谁更淫荡谁更无耻的战争中,我心中的一碗水一直端的 ...

  5. [转]奇虎360黑匣子之谜:暗藏后门盗取用户隐私

    每经记者 秦俑 昨日(2月25日),正是奇虎360所有APP产品被苹果全面下架一个月的日子. 就在此前,360的CFO亲赴美国"负荆请罪",但360相关产品并未重新上架. 知情人士 ...

  6. 奇虎360发财报,搜索发展如何?

    奇虎360今天发布了Q3财报,营收和利润同比分别增长100.3%和29.7%,数据表现良好,股价出现回弹,截止发稿时市值已超过90亿美元. 记得在奇虎8月发布Q2财报之后曾破纪录地进入100亿美金俱乐 ...

  7. 奇虎360退出美国股市 12月再曝拟私有化

    文/辛东方 [摘要]2015年6月,奇虎360董事长周鸿祎宣布启动360私有化战略计划,并退出美国股市,12月再曝与投资者集团达成私有化协议.周鸿祎在股市上到底是赔了,还是赚了,外人不得而知!360到 ...

  8. 北大AI公开课第九课--人工智能在视频中的应用by奇虎360颜水成

    最近衰退得厉害,总是不记得自己还有flag要扶,而且还有新的课程要听,不过一想到做事不能虎头蛇尾,所以还是坚持着先把这个事完成再说,加油!之前还把第九讲和第十讲弄混了,其实笔记上有标题,但是因为中间笔 ...

  9. 奇虎360通过亚马逊云科技云服务加速创新

    "现在通过AWS云平台,我们可以在几天之内就把应用部署完毕并投入生产!" --谭晓生,技术副总裁 奇虎360科技有限公司(美国纽约证券交易所NYSE:QIHU)是中国领先的互联网和 ...

最新文章

  1. mysql索引底层实现原理_mysql的索引底层之实现原理
  2. 依图科技终止上市审核:冲击科创板「AI第一股」失败
  3. 代码高亮_微信公众号代码高亮美化工具 Markdown Nice
  4. 阿里内推算法岗位编程笔试题
  5. Anaconda安装,linux操作系统学习
  6. 【译】用 JavaScript 和 Emoji 做地址栏动画
  7. sum-ftp-w.sh
  8. 网鼎杯2020 玄武组部分writeup
  9. jq 数字转中文数字_Jquery 字符串转数字
  10. 神奇的Python图片处理库exifread
  11. 线程池 ExecutorService 的使用例子
  12. 威纶tk6070ik与台达变频器vdf-s485通讯程序 自己编写的威纶触摸屏与台达变频器的通讯
  13. Java~设计模式之观察者模式 || 班长大喊老师来啦
  14. 安装程序配置服务器失败
  15. 第十一章 会打电话 天涯变咫尺 不会打电话 咫尺变天涯
  16. ttl备份机顶盒固件_废旧电信盒子华丽变身,简单几步变全网通盒子,备份固件随便折腾...
  17. 第28节 防火墙相关知识详解
  18. python 生存分析_生存分析之KM法
  19. 【Vue 项目】Unknown custom element: XXX - did you register the component correctly? 【问题解决】
  20. Translucent: 任务栏美化工具

热门文章

  1. 【每日最爱一句】2013.07.31
  2. AI 人工智能学习路线
  3. WPF中的MVVM模式
  4. python数据导入之导入各类文件方法
  5. diskgenius软件将分区表类型转换成GUID,提示磁盘的首尾部分没有转换到GUID分区所必须的空间,还需各33个扇区,不能转换成功
  6. python购买股票_Python|买卖股票的最佳时机
  7. 罗斯福国家森林树木类型识别
  8. win下激活python虚拟环境及激活失败解决方案
  9. 一个性价比超高的英语口语平台
  10. 台式机设置声音快捷键