SlideShare a Scribd company logo
速致 - 赖立维 (Jason)
Github: JasonLai256
2015-11-12
Nignx + Lua [+ Py]
实现高性能图片视频处理服务
技术变迁,业务变迁
	
  
! (2012)Vanish -> Nginx + Lua
! (2015)CDN -> 图片视频云处理
现有技术处理概况
Nginx + Lua + Python
	
  
! Lua -> 相对高效,最简实现 Backend-Nginx-Client 间
的薄粘合层;
! Python -> 相对灵活,扛起麻烦的活、耗时的活,与各
路英雄好汉通信打交道;
Nginx + Lua + Python
! Why?
Ø  Lua 性能很好,别的部件不一定
Ø  高并发、多逻辑处理情境下,很多机制需要优雅的降级处理
Ø  期望更好的异步处理相关事情
Ø  人的原因(对于 py 的积累较多)
Ø  事的原因(py 上面的单元测试机制较完善)
Nginx + Lua + Python
! Lua 的高效
Ø  过往经验表明,正常情况下 Lua 端处理性能是杠杠的
Ø  Lua 的协程很简洁高效
Ø  Lua 与 Nginx 水乳交融,搭配合适的 ngx 配置,能在 http 代理转发时候
做魔术般的处理
Nginx + Lua + Python
! Python 的灵活
Ø  实时监测系统、网络的整体情况
Ø  实时检测 ngx 的各类日志
Ø  检测和处理实际的 ngx 缓存文件
Ø  与各类缓存、消息层进行交互(http api、zeromq 等)
Nginx + Lua + Python
! 消息传递?
Ø  基于 lua_shared_dict 缓存信息
Ø  Nginx 暴露 API (监听 127.0.0.1)
Ø  日志输出处理信息
Ø  Nginx 配置预/实时处理
Ø  HTTP 的自定义头信息
Nginx-Lua 与 CDN
! Ngx_proxy 与 Lua 的结合很美妙
Ø  access_by_lua	
  
Ø  header_filter_by_lua	
  
Ø  body_filter_by_lua	
  
! 传统 CDN 所需要的基本功能可以快速实现;
! 复杂处理解决思路,模块化、测试、测试、测试;
Nginx-Lua 与图片处理
! 配合处理	
  
	
  
Ø  在 lua 层面判断各种条件情况,包括 UA、 URL Path、请求状
态、各类头部等;
Ø  在 py 层面进行各类实际处理,包括 nginx 缓存处理、实际图片
处理、图片信息分析等;
Ø  整体 ngx + lua + py 对整体 CDN + 处理集群(backend)进行动
态调度和控制;
Nginx-Lua 与图片处理
! 成果
Ø  图片基本处理,缩略、水印等
Ø  自动图片判断优化,包括:webp自动适配处理、jpeg质量优惠、渐进式jpeg
转换处理;
Nginx-Lua 与视频处理
! 上传优化
Ø  针对视频文件分片上传优化;
Ø  结合 CDN 节点网络;
! 整合存储
Ø  结合 ceph 进行文件落地,Request URL to 客户空间存储转换处理;
Ø  处理后资源下载与 CDN 的打通
Nginx-Lua 与测试
! 起始 -> 痛苦
	
    Python 习惯的悲剧(比较2):
	
  
! 过渡 -> 舒适
	
  
	
    重构,测试,重构,测试 … 良性循环
Nginx-Lua 与测试
! 自动化测试是正路
Ø  Opsboy -> 启发 -> 简易 Python 版本实现
Ø  通过 Local API 黑盒测试内部功能实现
Ø  Python 模拟 backend 收集回源数据
Ø  Atc 线下模拟各类网络环境
Ø  不能不提火焰图(systemtap),性能测试佳品
END

More Related Content

PDF
Nginx+lua在阿里巴巴的使用
PPTX
Angular 开发技巧 (2018 ngChina 开发者大会)
PPTX
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
PDF
Train.IO 【第六期-OpenStack 二三事】
PDF
W3CTech美团react专场-React Native 初探
PPTX
前端转行 DevOps 经验分享
PDF
Gops2016 云端基于Docker的微服务与持续交付实践
PDF
Openstack nova
Nginx+lua在阿里巴巴的使用
Angular 开发技巧 (2018 ngChina 开发者大会)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
Train.IO 【第六期-OpenStack 二三事】
W3CTech美团react专场-React Native 初探
前端转行 DevOps 经验分享
Gops2016 云端基于Docker的微服务与持续交付实践
Openstack nova

What's hot (20)

PDF
Wot2013云计算架构师峰会 -陈轶飞2
PDF
Kubernetes project update and how to contribute
PDF
W3CTech美团react专场-Thinking in React
PPTX
SQL Server 資料庫版本控管
PPTX
Frontend Devops at Cloudinsight
PDF
頑皮工坊 GCP 大冒險
PPTX
Asp.net 5 新功能與變革
PDF
利用Nchan快速打造即時通知系統
PPTX
Angular 4 網站開發最佳實務 (Modern Web 2017)
PDF
Hyper: 让Pod以VM为边界
PPTX
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
PDF
Cncf k8s Ingress Example-03
PDF
Build your own kubernetes apiserver and resource type
PDF
twMVC#26 | Redis資料型別與場景的連結
PDF
Build the Blockchain as service (BaaS) Using Ethereum on Kubernetes
PPTX
RxJS 6 新手入門
PPTX
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
PDF
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
PPTX
20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務
PPTX
宅學習 Firebase
Wot2013云计算架构师峰会 -陈轶飞2
Kubernetes project update and how to contribute
W3CTech美团react专场-Thinking in React
SQL Server 資料庫版本控管
Frontend Devops at Cloudinsight
頑皮工坊 GCP 大冒險
Asp.net 5 新功能與變革
利用Nchan快速打造即時通知系統
Angular 4 網站開發最佳實務 (Modern Web 2017)
Hyper: 让Pod以VM为边界
使用 Angular 2 與 Firebase 實現 Serverless 網站架構 (JSDC.tw 2016)
Cncf k8s Ingress Example-03
Build your own kubernetes apiserver and resource type
twMVC#26 | Redis資料型別與場景的連結
Build the Blockchain as service (BaaS) Using Ethereum on Kubernetes
RxJS 6 新手入門
Azure Web App on Linux @ Global Azure Bootcamp 2017 Taiwan
美团点评技术沙龙06 - 滴滴移动端测试解耦工具实践
20200425 GlobalAzure-Azure API Management-協助邁向Open API及Micro Service架構的好用服務
宅學習 Firebase
Ad

Similar to Nginx+lua+py构建高性能处理服务 (6)

PPTX
lua & ngx_lua 的介绍与应用
PPTX
tengine(nginx with lua ) develop at 2013
PPT
快速搭建高性能服务端
PDF
Nginx深度開發與客制化
PPT
Perl在nginx里的应用
PDF
Weibo lamp improvements
lua & ngx_lua 的介绍与应用
tengine(nginx with lua ) develop at 2013
快速搭建高性能服务端
Nginx深度開發與客制化
Perl在nginx里的应用
Weibo lamp improvements
Ad

More from OpenRestyCon (6)

PDF
Nginx+Lua在京东商品详情页的大规模应用
PDF
基于OpenResty的百万级长连接推送
PDF
Developing OpenResty Framework
PDF
Using ngx_lua in upyun 2
PDF
Be a microservices hero
PDF
OpenRestyCon 2015
Nginx+Lua在京东商品详情页的大规模应用
基于OpenResty的百万级长连接推送
Developing OpenResty Framework
Using ngx_lua in upyun 2
Be a microservices hero
OpenRestyCon 2015

Nginx+lua+py构建高性能处理服务

  • 1. 速致 - 赖立维 (Jason) Github: JasonLai256 2015-11-12 Nignx + Lua [+ Py] 实现高性能图片视频处理服务
  • 2. 技术变迁,业务变迁   ! (2012)Vanish -> Nginx + Lua ! (2015)CDN -> 图片视频云处理
  • 4. Nginx + Lua + Python   ! Lua -> 相对高效,最简实现 Backend-Nginx-Client 间 的薄粘合层; ! Python -> 相对灵活,扛起麻烦的活、耗时的活,与各 路英雄好汉通信打交道;
  • 5. Nginx + Lua + Python ! Why? Ø  Lua 性能很好,别的部件不一定 Ø  高并发、多逻辑处理情境下,很多机制需要优雅的降级处理 Ø  期望更好的异步处理相关事情 Ø  人的原因(对于 py 的积累较多) Ø  事的原因(py 上面的单元测试机制较完善)
  • 6. Nginx + Lua + Python ! Lua 的高效 Ø  过往经验表明,正常情况下 Lua 端处理性能是杠杠的 Ø  Lua 的协程很简洁高效 Ø  Lua 与 Nginx 水乳交融,搭配合适的 ngx 配置,能在 http 代理转发时候 做魔术般的处理
  • 7. Nginx + Lua + Python ! Python 的灵活 Ø  实时监测系统、网络的整体情况 Ø  实时检测 ngx 的各类日志 Ø  检测和处理实际的 ngx 缓存文件 Ø  与各类缓存、消息层进行交互(http api、zeromq 等)
  • 8. Nginx + Lua + Python ! 消息传递? Ø  基于 lua_shared_dict 缓存信息 Ø  Nginx 暴露 API (监听 127.0.0.1) Ø  日志输出处理信息 Ø  Nginx 配置预/实时处理 Ø  HTTP 的自定义头信息
  • 9. Nginx-Lua 与 CDN ! Ngx_proxy 与 Lua 的结合很美妙 Ø  access_by_lua   Ø  header_filter_by_lua   Ø  body_filter_by_lua   ! 传统 CDN 所需要的基本功能可以快速实现; ! 复杂处理解决思路,模块化、测试、测试、测试;
  • 10. Nginx-Lua 与图片处理 ! 配合处理     Ø  在 lua 层面判断各种条件情况,包括 UA、 URL Path、请求状 态、各类头部等; Ø  在 py 层面进行各类实际处理,包括 nginx 缓存处理、实际图片 处理、图片信息分析等; Ø  整体 ngx + lua + py 对整体 CDN + 处理集群(backend)进行动 态调度和控制;
  • 11. Nginx-Lua 与图片处理 ! 成果 Ø  图片基本处理,缩略、水印等 Ø  自动图片判断优化,包括:webp自动适配处理、jpeg质量优惠、渐进式jpeg 转换处理;
  • 12. Nginx-Lua 与视频处理 ! 上传优化 Ø  针对视频文件分片上传优化; Ø  结合 CDN 节点网络; ! 整合存储 Ø  结合 ceph 进行文件落地,Request URL to 客户空间存储转换处理; Ø  处理后资源下载与 CDN 的打通
  • 13. Nginx-Lua 与测试 ! 起始 -> 痛苦    Python 习惯的悲剧(比较2):   ! 过渡 -> 舒适      重构,测试,重构,测试 … 良性循环
  • 14. Nginx-Lua 与测试 ! 自动化测试是正路 Ø  Opsboy -> 启发 -> 简易 Python 版本实现 Ø  通过 Local API 黑盒测试内部功能实现 Ø  Python 模拟 backend 收集回源数据 Ø  Atc 线下模拟各类网络环境 Ø  不能不提火焰图(systemtap),性能测试佳品
  • 15. END