SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
速致 - 赖立维 (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

Weitere ähnliche Inhalte

Was ist angesagt?

Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2Wot2013云计算架构师峰会 -陈轶飞2
Wot2013云计算架构师峰会 -陈轶飞2
dotCloud
 

Was ist angesagt? (20)

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

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

20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET
Jui-Nan Lin
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
hugo
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
q3boy
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
 
陈桂鸿 Ak--手机qq hybrid-app优化新思路
陈桂鸿 Ak--手机qq hybrid-app优化新思路陈桂鸿 Ak--手机qq hybrid-app优化新思路
陈桂鸿 Ak--手机qq hybrid-app优化新思路
yingganfei
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
FLASH开发者交流会
 
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1
drewz lin
 
Using CDN to improve performance
Using CDN to improve performanceUsing CDN to improve performance
Using CDN to improve performance
Gea-Suan Lin
 

Ähnlich wie Nginx+lua+py构建高性能处理服务 (20)

20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET20110821 Web Development on Cloud Platform - PIXNET
20110821 Web Development on Cloud Platform - PIXNET
 
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
 
豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017豆瓣Paa s平台 dae - 2017
豆瓣Paa s平台 dae - 2017
 
How to integrate GitLab CICD into B2B service
How to integrate GitLab CICD into B2B serviceHow to integrate GitLab CICD into B2B service
How to integrate GitLab CICD into B2B service
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
認識 Docker
認識 Docker認識 Docker
認識 Docker
 
Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
QIoT ,QuAI
QIoT ,QuAI  QIoT ,QuAI
QIoT ,QuAI
 
Python in vir
Python in virPython in vir
Python in vir
 
React Native + Redux
React Native + ReduxReact Native + Redux
React Native + Redux
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
 
陈桂鸿 Ak--手机qq hybrid-app优化新思路
陈桂鸿 Ak--手机qq hybrid-app优化新思路陈桂鸿 Ak--手机qq hybrid-app优化新思路
陈桂鸿 Ak--手机qq hybrid-app优化新思路
 
轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)轻量级Flash服务器开发框架(刘恒)
轻量级Flash服务器开发框架(刘恒)
 
敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1敏捷模式下的百度研发基础环境建设 1
敏捷模式下的百度研发基础环境建设 1
 
Using CDN to improve performance
Using CDN to improve performanceUsing CDN to improve performance
Using CDN to improve performance
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 

Mehr von OpenRestyCon (6)

Nginx+Lua在京东商品详情页的大规模应用
Nginx+Lua在京东商品详情页的大规模应用Nginx+Lua在京东商品详情页的大规模应用
Nginx+Lua在京东商品详情页的大规模应用
 
基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送基于OpenResty的百万级长连接推送
基于OpenResty的百万级长连接推送
 
Developing OpenResty Framework
Developing OpenResty FrameworkDeveloping OpenResty Framework
Developing OpenResty Framework
 
Using ngx_lua in upyun 2
Using ngx_lua in upyun 2Using ngx_lua in upyun 2
Using ngx_lua in upyun 2
 
Be a microservices hero
Be a microservices heroBe a microservices hero
Be a microservices hero
 
OpenRestyCon 2015
OpenRestyCon 2015OpenRestyCon 2015
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