img

引言

第一次见到春哥本尊(活体)是在2015年是在360举行的openresty大会,历经4年再次在北京现场感受春哥技术热情与现场号召力,即使收了99元门票费现场200个座位座无虚席, 就像开个人演唱会一样,一个人演讲一下午非常辛苦,没有人提前离开,可见春哥在技术圈的影响力。这么说吧, 在中国认为最能拿得出手的开源项目就两个,一个是章文嵩博士开启现在比较稳定变化不大的LVS项目, 另外一个是章亦春发起在全球广泛使用还在蓬勃发展的openresty项目,可以说双章把中国开源技术带到世界先进水平。 这次大会春哥认真准备了4份PPT,现场演示了很多技巧,亮点多多,我个人认为最大的亮点有:

  • 动态追踪技术
  • 各种小语言及周边库建设
  • 编程与禅修

免责声明 如下为本人记录本次技术沙龙部分精要和个人理解,如有错误之处,欢迎指正。

会议流程

Openresty北京技术沙龙

  • 时间:8 月 10 日(周六)13:30-19:00
  • 地点:北京丽都皇冠假日酒店(北京朝阳区将台路6号)酒店二层宴会厅A

img

部分精要

应用开发

基于Openresty开发应用的优势:

  • 小巧: lua作为嵌入式脚本放在openresty和游戏中开发很小巧
  • 高效: lua开发非常高效,比用C开发nginx模块要高效很多,入门门槛也低。
  • 成熟稳定: 已经大规模广泛商业应用,尤其现在CDN行业基本都用openresty作为前端。
  • 全动态: 可以通过edge语言生成不用重启即可生效,程序既数据,数据既程序。

img

应用场景

刚开始写openresty主要是想通过它来做一个完整的blog,包含前后端的webserver,目前openresty做着做着发现在CDN领域应该广泛,它主要应用场景:

  • 命令行应用(编译器、系统编程工具、测试工具)
  • 网关类型应用(API、负载均衡、CDN等)
  • Web应用(连接数据库、memcached、redis等等)

测试驱动

现在主要通过测试驱动学习、测试驱动开发方法,早期主要抄书,通过肌肉记忆,当抄到一大半时候不懂的慢慢就懂了,看似抄书节奏放慢其实可以更好的理解,书读百遍其义自现。早期抄书有些时候主要是书都是借的,不抄的话以后就看不到了,还透露有些书废寝忘食的抄完后,朋友看自己那么喜欢这本书就说这本书就送给你吧,自己哭笑不得,白抄那么累了。

自己怎么在两三月内精通nginx核心会开发C模块,一边抄代码一边通过Test:Nginx测试驱动学习开发。它的第一个nginx开源项目echo-nginx-module是这样完成的,即使现在还是很多人学习入手nginx的基础, nginx echo模块是在nginx程序上扩展了echo输出字符的功能, 对于调试很方便。

Resty CLI

resty -e 'ngx.("hello,world!")

restydoc ngx.pipe

restydoc -s content_by_lua

resty

resty-cli - OpenResty的高级命令行实用程序,可以像使用 lua 或者 luajit 命令行工具一样直接从命令行运行 resty 命令行实用程序来运行openresty脚本。 它可以使用 OpenResty Lua创建各种命令行实用程序, 现场演示了下该命令与其他语言如python、perl、nodejs等性能对比,都优于python、nodejs。

restydoc

OpenResty 附带了非常完善的用户参考手册 restydoc,提供与 UNIX 手册 man 相同的功能,可以检索 OpenResty 里所有组件的帮助文档,包括但不限于:

  • OpenResty 各个组件的介绍和用法;
  • OpenResty 指令和功能接口的用法;
  • Nginx 介绍、用法、基本工作原理;
  • Lua/LuaJIT 语法要素。

调试与调优

通过打印日志可以解决大部分的问题,通过动态追踪可以解决高层次的问题。

  • 打印日志
  • 测试驱动
  • 动态追踪(火焰图、SystemTap、GDB、OpenResty Trace)
  • Openresty Cloud

如何编写高效的Lua代码

  • 避免或减少在热代码路径上创建GC对象(string、table、function)
  • lua-tablepool
  • 避免闭包
  • 尽量使用Lua模块
  • 拼接字符串的正确做法
  • 让热代码路径被JIT编译
  • 自动优化的可能性(lux编译器)

更多的开源教程与演示视频

  • blog.openresty.com
  • youtube/bilibili
  • 由Openresty Showman批量制作
  • 由Openresty Trace展示软件内部真实细节

怎样阅读openresty源码

核心开发

核心开发主要讲解主题如下,由于没有完全听懂先列出主题,以后再分解。

  • Openresty核心结构
  • luajit内部实现结构
  • 全新的基于luajit ffi的Lua API实现
  • 全新的ngx_meta_lua模块
  • Test:Nginx测试台
  • valgrind测试模式
  • mockeagain测试模式
  • memcheck模式

img

小语言与周边建设

春哥曾经说过要学习好技术,主要是:英语、数学、计算机科学,我个人认为计算机科学里最主要的是计算机操作系统、算法、编译原理,曾经有个老师说如何衡量你对某个语言的理解程度,就看你是否自己写出其编译器,再用自己写的编译器与官方编译器对比,就是你对这个语言的理解程度,到目前为止个人还没写过编译器表示汗颜。 他本次分享自己写的小语言如下:

  • OpsLang: 更高效更智能的自动化运维语言

OpsLang 快速上手 https://doc.openresty.com.cn/zh/opslang/

img

  • edgelang: 更加接近自然语言,使用更短的语句可翻译生成lua代码

Edge 语言用户手册 https://doc.openresty.com.cn/zh/edgelang/

img

  • fanlang: 类似DSL基于Perl 6语言的语法设计

fanlang 用户手册 https://doc.openresty.com.cn/en/fanlang/

img

  • ylang:

Ylang 用户手册 https://doc.openresty.com.cn/en/ylang/

  • ylua:

Ylua 用户手册 https://doc.openresty.com.cn/en/ylua/

动态追踪

动态追踪技术是一种不用停机停程序、不用修改当前代码情况下的一种调试调优技术,它的一般原理如下: img 他还现场演示了如何使用动态追踪技术观察程序内部真实细节和不改代码加入探针调试,大致原理是把各种语言都编译成ylang中间语言进行调试。

img img img

动态追踪技术详见春哥写的:动态追踪技术漫谈

编程与禅修

技术的尽头是宗教,炒币的尽头是嫩模,编程就像学习各种武功,当武功越高毒素越多,需要像佛法之类的心法来综合,一个修外一个修内,武功越高需要的佛法也越高,否则会走火入魔的。

人们通常说的四禅八定,属于修世间禅的层次和境界。世间禅的禅定层次恰好与三界层次一样,三界是欲界、色界、无色界。世间禅中,欲界中的定有欲界定、未到地定两种。佛家认为,这两种所谓的定,不能算是真正的人定,只是达到身心初步的轻安,为进人四禅八定作准备而已。四禅八定指初禅、二禅、三禅、四禅及空无边处定、识无边处定、无所有处定、非想非非想处定八种依次升进的坐禅人定层次和境界。坐禅者人定,如果依次达到初禅、二禅、三禅、四禅四种境界,就能自然达到脱离欲界众生共同具有的饮食男女之欲,但心念中仍有固定形态的物质身体存在,故名色界四禅。坐禅者如果修过色界四禅,再依次人空无边处定、识无边处定、无所有处定、非想非非想处定四种定者,修持者意识中已没有物质身体的存在,故名无色界四定,也叫四空定。

推荐书

春哥在会上唯一推荐的书是《The Practice of Programming》, 对应的中文版为《程序设计实践》,建议读英文版本,春哥说这本书读了很多年很多次,每次读都有新的体会新的收获。

小结

一入技术深似海(可能还没入门), 同样是80后人与人差距啥这么大呢,有些时候感觉人与人之间的差距甚至大于人与动物之间的差距,路漫漫其修远兮,吾将上下而求索。

微信扫一扫

作者:mospan
微信关注:墨斯潘園
本文出处:http://mospany.github.io/2019/08/11/openresty-salon-site-record/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。