8 月 31 日,由又拍云、OpenResty 社区主办的 OpenResty × Open Talk 全国巡回沙龙·成都站在言几又·成都凯德店顺利落幕,这是系列活动的第五站。OpenResty × Open Talk 全国巡回沙龙旨在促进 OpenResty 在技术圈的发展,增进 OpenResty 使用者的交流与学习。在成都站活动现场,五位嘉宾分享了自己专业的观点和经验,让到场的开发者受益匪浅。


成都站活动现场合影

OpenResty × Open Talk 全国巡回沙龙成都站邀请了 OpenResty 软件基金会发起人温铭、王院生、又拍云系统开发高级工程师黄励博、原贝壳找房基础架构部工程师尹吉峰、奇安信工程师艾菲,分享了包括高性能 API 网关、云存储网关、高性能 Web 应用等 OpenResty 相关技术应用,为近百位现场观众和数千线上观众提供了一场技术盛宴。



言几又·成都凯德店


说起成都大家的第一反应肯定是天府之国、美食之都、火锅二巨头之一,总而言之吃就完事了!然而本次活动的一大亮点就是在千丈口水中硬生生开出一片书香墨意,这个独具特色的活动场地——言几又·成都凯德店,为技术分享增添了一丝艺术气息,此处书成墙壁,纸建空间,字画风情,讲师们分享的内容化为有血有肉的实体,让每一个人到场者都被知识所包围。

如何做 API 网关的选型、测试和持续集成

OpenResty 软件基金会发起人温铭做了开场分享,他是开源微服务 API 网关 APISIX 作者,《OpenResty 从入门到实战》专栏作者,他以开源微服务 API 网关 APISIX 为例,详细介绍了 API 网关的选型和持续集成实践。



OpenResty 软件基金会发起人温铭

APISIX 是一个云原生、高性能、可扩展的微服务 API 网关,基于 OpenResty 和 etcd 实现,和传统 API 网关相比,APISIX 增加了包括支持多云和混合云、无状态、随意扩容和缩容等在内的诸多功能,能够更为妥帖的满足企业个性需求的开发。

温铭介绍了 API 网关的核心组件包括路由、插件、schema 和存储等,他通过对着四个组件的合理选择,使 APISIX 具有了很多独有的功能;测试方面,APISIX 遵循着测试驱动开发的原则,通过单元测试、代码风格测试和代码覆盖率的检测,使 APISIX 达到了超高性能;持续集成方面,APISIX 强依赖 GitHub 和 travis CI,以及 coveralls.io。

温铭总结到, APISIX 项目在设计与实现过程中,面临着资源少的难题,但是通过对现有组件的合理使用,APISIX 的选型、测试和 CI 都找到了“取巧”和自动化的方式,大大提升了项目完成的效率和项目的性能,GitHub 和 SaaS 能提供的,绝对不要自己造轮子。

又拍云基于 OpenResty 实现的云存储网关

又拍云系统开发高级工程师黄励博,在又拍云主要负责私有容器平台、云存储、云处理相关的架构设计和开发工作,熟悉 Python/Lua/Go 等语言,在 Docker 容器方面拥有丰富的实践经验,在 ngx_lua 和 OpenResty 方面有着丰富的模块开发和维护经验。他在现场介绍了又拍云基于 OpenResty 实现的云存储网关,设计索引、存储、分块、负载均衡、流量控制等功能的实现与使用方法。



又拍云系统开发高级工程师黄励博

黄励博从数据拆分、路由配置、存储常用的增删查改和扩容四个方面,详细介绍了 OpenResty 在又拍云存储中的实际应用。

黄励博讲到,又拍云存储是分布式存储,而分布式存储的优势为高可用、易扩展和易维护。而又拍数据的拆分是由 OpenResty 来进行的三次拆分,拆分后又将 OpenResty 作为路由层并详述了路由的配置规则。然后介绍了又拍云存储系统中,以 OpenResty 的限制模块为基础开发的 token bucket 的方法,向大家完整的分享又拍云存储体系。

特别地,又拍云作为深度应用 OpenResty 的企业,正在不断为 OpenResty 社区输出开源能力,目前已经开源了以下项目:

[1] upyun/slardar (https://github.com/upyun/slardar

[2] upyun/lua-resty-checkups (https://github.com/upyun/lua-resty-checkups

[3] upyun/lua-resty-limit-rate (https://github.com/upyun/lua-resty-limit-rate

如何使用 OpenResty 搭建高性能 Web 应用

原贝壳找房基础架构部工程师尹吉峰,多语言爱好者,偏向异步和函数式编程,酷爱原型搭建,先后在贝壳使用 OpenResty 搭建了 WebBeacon、图片处理、短连接服务等。他在现场介绍了如何使用 OpenResty 做外部框架写服务,算是一种比较小众的用法。



原贝壳找房基础架构部工程师尹吉峰

尹吉峰认为过早优化是万恶之源,一个好的服务绝对不是优化出来的,架构决定了一个服务的基准。有很多 Web 服务实际上是不适合做水平伸缩的,因此也要高性能。他介绍 Web 应用绝大多数都是 IO 密集型,通过异步编程、事件驱动的方式可以提高性能。

尹吉峰提到,OpenResty 是 Nginx 和 Lua 的有机完美结合,Nginx 是一流的反向代理服务器,在一线的互联网公司已经是一个标配,因此在引入 OpenResty 风险很低;而 Lua 是小巧灵活的编程语言,支持 Coroutine,LuaJIT 性能强大,支持 FFI。之后,他详细介绍了过去使用 OpenResty 构建高性能 Web 应用服务的实践。

那些你可能不知道的 OpenResty 特性

奇安信服务端开发艾菲,网名河马大侠,前 OpenResty 软件基金会成员。2013 年加入奇虎 360,擅长使用 OpenResty 完成各种网关和缓存行为。他在现场介绍了 OpenResty 中具有重要意义的一些模块、命令、API 和框架等。

奇安信工程师艾菲

艾菲首先介绍了 OpenResty 作为 Web 服务器,提供了丰富的 Lua API,包括 ngx.say、ngx.resp.get_header、body_filter_by_*、ngx.exit() 等,让我们可以去操纵 HTTP 的 request和 response 等基本元素,从而灵活控制整个 HTTP 的请求和响应体。如果遇到业务代码,可以用 Lua 的方式编辑,开发效率是无可比拟的。

艾菲介绍了定时器 ngx.timer.at 用法,可以实现延迟运行的任务逻辑,甚至于通过一些特殊的调用方法实现定时任务的功能,这个 API 还有一个“非凡”意义,可以实现跨作用域。他在分享最后介绍了一些 HTTPS 的性能问题以及避免的方式。

高性能 API 网关实践

OpenResty 软件基金会发起人王院生,开源微服务 API 网关 APISIX 作者,在 OpenResty x Open Talk 上海站的活动上,他详细介绍了 APISIX 如何做到高性能及实现的技巧,本次分享,他介绍即将发布的 APISIX 0.7 版本路由将会支持插件化,同时将会超 80% 的代码覆盖率。

OpenResty 软件基金会发起人王院生

王院生在现场分享了一些通用的 OpenResty 编程技巧,他将 radixtree 和 r3 做了对比解释了 APISIX 选择 radixtree 的原因,匹配模式简单、高效,支持遍历、回调等;ngx.var 能使项目性能提速,简单的方式是用 iresty/lua-var-nginx-module 的仓库,可以有 5% 的性能提升;当遇到 fail to json encode 的情况时,他的做法是强制对 cdata、userdata 等进⾏编码,在有循环嵌套时依然可以打印。

除此之外,王院生还向在场的开发者推荐了他自己写的静态代码检查工具,能帮助解决很多代码风格的问题。apisix/core 也是一个非常值得学习的基础库,帮助大家了解一些非常实用的库的实现。

本次活动五位讲师的分享内容将陆续更新,请大家关注 Open Talk 官网(https://opentalk.upyun.com)和又拍云微信公众号(微信 ID:upaiyun)。