SlideShare una empresa de Scribd logo
1 de 47
OpenResty应用总结
技术部 - kim
讲什么?
• Lua 介绍
• Openresty 介绍
• 重构 Infov 的过程分享
什么是 Lua?
• 轻量级脚本语言
• 最小、最快、最简单
• 嵌入式
Lua 的特性
• Functional 函数式
• Table 数组、哈希表、集合、对象

• Closure 闭包
• Coroutine 协程
著名的 Lua 项目
• 魔兽世界、愤怒的小鸟、Photoshop、仙剑
奇侠传五、淘宝内部
• 56.com (未来)
什么是 OpenResty?
• 最快的 Web 应用开发框架
• OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器,
它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的
大多数依赖项。由章亦春于2011年底发表。
• OpenResty 通过汇聚各种设计精良的 Nginx 模块,从而将 Nginx 有效的
变成一个强大的 Web 应用服务器,这样,Web 开发人员可以使用 Lua
脚本语言调动 Nginx 支持的各种C以及Lua 模块,快速构造出足以胜任
10K+ 并发连接响应的超高性能Web 应用系统。
• OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利
用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远
程后端诸如 MySQL,PostgreSQL,Memcached 以及 Redis 等都进行一
致的高性能响应。
性能对比
• PHP-Fpm:速度慢、吞吐量低、短连接
• OpenResty:执行快、大吞吐量、连接池
• 春哥做的 benchmark:
https://github.com/agentzh/mysql-driverbenchmark
安装
•

下载解压:
wget http://openresty.org/download/ngx_openresty-1.4.3.9.tar.gz
tar -xzf ngx_openresty-1.4.3.9.tar.gz
./configure --help

•

安装 mysql 连接开发包:
yum install libdrizzle-devel

•

安装:
./configure --prefix=/home/openresty/ --with-http_iconv_module --withhttp_postgres_module --with-http_drizzle_module --with-luajit --withpcre=/home/pcre-8.33
gmake && gmake install

•

编辑 conf 配置
vi /home/openresty/nginx/conf/nginx.conf
Hello world - 1
location /helloworld {
echo "hello world!";
}
Hello world - 2
location = /helloworld {
content_by_lua '
ngx.say("hello world!")
';
}
Hello world - 3
location = /helloworld {
content_by_lua_file 'hello_world.lua';
}
--hello_world.lua
ngx.say("hello world!")
ngx.flush(true)
更复杂例子
# http://localhost/test?name=kim&class=A
location /test {
echo "uri = $uri";
echo "request_uri = $request_uri";
set_unescape_uri $name $arg_name;
set_unescape_uri $class $arg_class;
echo "name: $name";
echo "class: $class";
}
无阻塞IO
location /nonblocking {
content_by_lua '
local res = ngx.location.capture("/query")
if res.status == 200 then
ngx.print(res.body)
end';
}
并发子请求
location = /nonblock-multi {
content_by_lua '
local res1, res2, res3 =
ngx.location.capture_multi{
{"/memc"}, {"/mysql"}, {"/postgres"}
}
ngx.say(res1.body, res2.body, res3.body)
';
}
重构 info.v.56.com
为什么?
• 前端核心接口
• PHP 性能瓶颈
• 缓存和数据库压力
开发
• 公共模块:/lib
• 实例代码:/lib/http.lua
一般 debug 方法
• 直接抛出错误:error(“抛出个error!”)
• assert(io.read("*number"), "invalid input")

• Lua提供了错误处理函数pcall:
r, msg = pcall(foo)
• 还可以用 xpcall
以上,我们一般不用。。。
实际 debug 方法
• tailf /home/openresty/nginx/logs/error.log
具体配置
• 新网段 + 3台新机器
• 高可用性:lvs + keepalive
• 高可用 Cache:twemproxy + kt(12个)
• 高性能:openresty

• 实时性:缓存耦合(人气、评论),缓存更新
(直连 + httpsqs)
切换原则
• 完全保留原PHP的所有读写功能,即线上功
能不受影响
Nginx配置技巧
• ~ 为区分大小写的匹配。
• ~* 不区分大小写的匹配。
• !~ 和 !~* 意为“不匹配的”。
多重 if 判断
• # 仅当 uri 匹配 /?ids=xxxx ,即只读时才跳转至 lua:
set $flag 0;
if ($arg_ids ~* "(w)+") {
set $flag "${flag}1"; }
if ($request_uri !~ ".php") { set $flag "${flag}2"; }
if ($arg_dy !~ "c") {
set $flag "${flag}3"; }
if ($flag = "0123") {
content_by_lua_file 'vinfo.lua';
}
fastcgi_pass 10.11.80.159:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
expires off;
Infov当前的conf
location ~ .php {
fastcgi_pass unix:/home/php/php-fastcgi.sock;
fastcgi_index index.php;
include
fastcgi_params;
expires off;
}
location / {
if ($request_uri ~* "luzhi") {
rewrite ^/(.*)$ /index.php?$query_string last;
}
content_by_lua_file '/diska/htdocs/openresty/vinfo.lua';
}
location /api {
content_by_lua_file '/diska/htdocs/openresty/vapi.lua';
}
切换过程
• 对每个应用,通过改 hosts 来灰度切换,有
问题立刻发现立刻修复
• 播放页和vxml 最后切换
遇到的问题
Json输出问题
• PHP json_encode :会把 utf-8 强制 escape
成 unicode,除非是新版 php5.4 以上,可通
过指定 JSON_UNESCAPED_UNICODE 参数来
禁掉。
• Lua cjson :默认并不会对 utf-8 做 escape 处
理,输出的就是 utf-8
Table类型
lua 的 table 数据结构:
typedef union TKey {
struct {
TValuefields;
struct Node *next; /* for chaining */
} nk;
TValue tvk;
} TKey;
typedef struct Node {
TValue i_val;
TKey i_key;
} Node;
typedef struct Table {
CommonHeader;
lu_byte flags;
// 元表标记
lu_byte lsizenode; /* log2 of size of `node' array */ // 哈希部分大小
struct Table *metatable;
// 元表
TValue *array; /* array part */
// 数组部分
Node *node;
// 哈希部分
Node *lastfree; /* any free position is before this position */ // 第一个空闲位置指针
GCObject *gclist;
int sizearray; /* size of `array' array */
// 数组部分大小
} Table;
• 数组部分:速度极快,内存比哈希省一半
• Hash部分:链状发散表,本身即无序(比
如用PHP接收到来自Lua的输出的时候,不
能简单地“认为”它是有序的!)
文件vs模块
• 为什么要把配置文件写成模块 config.lua ?
测试环境问题
• 测试环境和正式环境最好还是分开,特别
是不要在一个 server 配置里面
dns解析问题
• 可以通过安装和配置 nginx 本地 dns 服务来
添加 resolver,从而使 sock 能通过 Nginx
core‘s dynamic resolver 来解析域名。

• 但是目前实际中还是直接使用 ip 来解析,
未来可以对 hosts 进行单独解析,这样就能
使用域名了。
Bug问题
• Error 级别的都是要尽量修复的
• Emerg 级别的是必须修复的
• 举例 gsub 引发的血案。。。
入口不能太“窄”
• vi /etc/sysctl.conf
• net.netfilter.nf_conntrack_max = 655360
• net.netfilter.nf_conntrack_tcp_timeout_establ
ished = 180
Timeout不能太短
• 无论是连接数据库、缓存还是Webservice,
超时时间太短反而不能充分发挥OpenResty
的优势
现状与展望
价值
• 1. 代码量
• 2. 开发效率
• 3. 性能提升
站内应用
•
•
•
•
•
•
•

用户信息接口
短消息提醒接口
头部消息接口
视频观看记录接口
视频信息接口
专辑信息接口
等等中间层。。。
缺少的
• 1. Session
• 2. Http/Smtp/Rpc/…
• 3. Html template

• 等等。。。
场景
• 数据层
• 缓存层
资料
• 官网:http://openresty.org/
• nginx模块手册:
https://github.com/chaoslawful/lua-nginxmodule
• lua手册:
http://www.lua.org/manual/5.2/manual.html
谢谢!

Más contenido relacionado

La actualidad más candente

浮云脱水小说站的搭建
浮云脱水小说站的搭建浮云脱水小说站的搭建
浮云脱水小说站的搭建jondynet
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討國昭 張
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践Orangle Liu
 
再生龍於雲端環境之應用
再生龍於雲端環境之應用再生龍於雲端環境之應用
再生龍於雲端環境之應用Chenkai Sun
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Chu-Siang Lai
 
Using armeria to write your RPC
Using armeria to write your RPCUsing armeria to write your RPC
Using armeria to write your RPCkoji lin
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Chen Liwei
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应zhaolinjnu
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)Jian-Kai Wang
 
常用Mac/Linux命令分享
常用Mac/Linux命令分享常用Mac/Linux命令分享
常用Mac/Linux命令分享Yihua Huang
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 

La actualidad más candente (18)

浮云脱水小说站的搭建
浮云脱水小说站的搭建浮云脱水小说站的搭建
浮云脱水小说站的搭建
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹twMVC#43 C#10 新功能介紹
twMVC#43 C#10 新功能介紹
 
OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践OpenResty 项目模块化最佳实践
OpenResty 项目模块化最佳实践
 
再生龍於雲端環境之應用
再生龍於雲端環境之應用再生龍於雲端環境之應用
再生龍於雲端環境之應用
 
Docker應用
Docker應用Docker應用
Docker應用
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)
 
Using armeria to write your RPC
Using armeria to write your RPCUsing armeria to write your RPC
Using armeria to write your RPC
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧Mac os Terminal 常用指令與小技巧
Mac os Terminal 常用指令與小技巧
 
Mysql展示功能与源码对应
Mysql展示功能与源码对应Mysql展示功能与源码对应
Mysql展示功能与源码对应
 
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
CKAN : 資料開放平台技術介紹 (CAKN : Technical Introduction to Open Data Portal)
 
常用Mac/Linux命令分享
常用Mac/Linux命令分享常用Mac/Linux命令分享
常用Mac/Linux命令分享
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 

Destacado

OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsHo Kim
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUNCong Zhang
 
Semillero de matemáticas iensumor 2016
Semillero de matemáticas iensumor 2016Semillero de matemáticas iensumor 2016
Semillero de matemáticas iensumor 2016nitram0809
 
Robert Rafton Photography
Robert Rafton PhotographyRobert Rafton Photography
Robert Rafton PhotographyRobert Rafton
 
What we are learning today
What we are learning todayWhat we are learning today
What we are learning todayjdav3011
 
Idioma ii powerpoint presentation museums
Idioma ii powerpoint presentation museumsIdioma ii powerpoint presentation museums
Idioma ii powerpoint presentation museumsmaji_martinez
 
Sreerag what is a web service
Sreerag   what is a web serviceSreerag   what is a web service
Sreerag what is a web serviceSreerag Gopinath
 
Dinoszauruszok és emberek
Dinoszauruszok és emberekDinoszauruszok és emberek
Dinoszauruszok és emberekCurcubet Gabriel
 
Alice Start Part Four
Alice Start Part FourAlice Start Part Four
Alice Start Part FourCraig Perkins
 
SKF - Rapport första kvartalet 2009
SKF - Rapport första kvartalet 2009SKF - Rapport första kvartalet 2009
SKF - Rapport första kvartalet 2009SKF
 
Innovative Solutions
Innovative SolutionsInnovative Solutions
Innovative SolutionsPGrosskopf
 
Project Management Using Redmine
Project Management Using RedmineProject Management Using Redmine
Project Management Using RedmineHo Kim
 
Skf q4 2010_pr_eng
Skf q4 2010_pr_engSkf q4 2010_pr_eng
Skf q4 2010_pr_engSKF
 
Solving Algebraic Expressions with properties of numbers and
Solving Algebraic Expressions with properties of numbers andSolving Algebraic Expressions with properties of numbers and
Solving Algebraic Expressions with properties of numbers andFidelfo Moral
 

Destacado (20)

OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUN
 
Semillero de matemáticas iensumor 2016
Semillero de matemáticas iensumor 2016Semillero de matemáticas iensumor 2016
Semillero de matemáticas iensumor 2016
 
Writing & Organising English Emails
Writing & Organising English EmailsWriting & Organising English Emails
Writing & Organising English Emails
 
LIFE - 4/7/2010 - Lavender Recipes
LIFE - 4/7/2010 - Lavender RecipesLIFE - 4/7/2010 - Lavender Recipes
LIFE - 4/7/2010 - Lavender Recipes
 
Cj Rider
Cj RiderCj Rider
Cj Rider
 
Robert Rafton Photography
Robert Rafton PhotographyRobert Rafton Photography
Robert Rafton Photography
 
What we are learning today
What we are learning todayWhat we are learning today
What we are learning today
 
Idioma ii powerpoint presentation museums
Idioma ii powerpoint presentation museumsIdioma ii powerpoint presentation museums
Idioma ii powerpoint presentation museums
 
Sreerag what is a web service
Sreerag   what is a web serviceSreerag   what is a web service
Sreerag what is a web service
 
Dinoszauruszok és emberek
Dinoszauruszok és emberekDinoszauruszok és emberek
Dinoszauruszok és emberek
 
Alice Start Part Four
Alice Start Part FourAlice Start Part Four
Alice Start Part Four
 
Wi Fi
Wi FiWi Fi
Wi Fi
 
SKF - Rapport första kvartalet 2009
SKF - Rapport första kvartalet 2009SKF - Rapport första kvartalet 2009
SKF - Rapport första kvartalet 2009
 
Innovative Solutions
Innovative SolutionsInnovative Solutions
Innovative Solutions
 
Project Management Using Redmine
Project Management Using RedmineProject Management Using Redmine
Project Management Using Redmine
 
Skf q4 2010_pr_eng
Skf q4 2010_pr_engSkf q4 2010_pr_eng
Skf q4 2010_pr_eng
 
giftee@NCC2010
giftee@NCC2010giftee@NCC2010
giftee@NCC2010
 
LIFE - 11/4/09 - Hiking Around Houston
LIFE - 11/4/09 - Hiking Around HoustonLIFE - 11/4/09 - Hiking Around Houston
LIFE - 11/4/09 - Hiking Around Houston
 
Solving Algebraic Expressions with properties of numbers and
Solving Algebraic Expressions with properties of numbers andSolving Algebraic Expressions with properties of numbers and
Solving Algebraic Expressions with properties of numbers and
 

Similar a OpenResty/Lua Practical Experience

使用Lua提高开发效率
使用Lua提高开发效率使用Lua提高开发效率
使用Lua提高开发效率gowell
 
Node getting-started
Node getting-startedNode getting-started
Node getting-startedlylijincheng
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
Nginx+常见应用技术指南
Nginx+常见应用技术指南Nginx+常见应用技术指南
Nginx+常见应用技术指南andy54321
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發Weizhong Yang
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践longhao
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍gowell
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
Go语言web开发
Go语言web开发Go语言web开发
Go语言web开发Andy Shi
 

Similar a OpenResty/Lua Practical Experience (20)

Node分享 展烨
Node分享 展烨Node分享 展烨
Node分享 展烨
 
使用Lua提高开发效率
使用Lua提高开发效率使用Lua提高开发效率
使用Lua提高开发效率
 
Node getting-started
Node getting-startedNode getting-started
Node getting-started
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
Nginx+常见应用技术指南
Nginx+常见应用技术指南Nginx+常见应用技术指南
Nginx+常见应用技术指南
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
 
Node js实践
Node js实践Node js实践
Node js实践
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
Go语言web开发
Go语言web开发Go语言web开发
Go语言web开发
 
Js培训
Js培训Js培训
Js培训
 

Más de Ho Kim

解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获Ho Kim
 
40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.xHo Kim
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
Lua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsLua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsHo Kim
 
人人-56 账号拆分项目总结
人人-56 账号拆分项目总结人人-56 账号拆分项目总结
人人-56 账号拆分项目总结Ho Kim
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 
Character Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectCharacter Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectHo Kim
 
Video Upload Architecture of 56.com
Video Upload Architecture of 56.comVideo Upload Architecture of 56.com
Video Upload Architecture of 56.comHo Kim
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelHo Kim
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and TutorialHo Kim
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 

Más de Ho Kim (13)

解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获解决Lvs上行丢包的过程和收获
解决Lvs上行丢包的过程和收获
 
40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x40 Powerful Shortcuts of Xcode 6.x
40 Powerful Shortcuts of Xcode 6.x
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
Lua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization TipsLua 30+ Programming Skills and 20+ Optimization Tips
Lua 30+ Programming Skills and 20+ Optimization Tips
 
人人-56 账号拆分项目总结
人人-56 账号拆分项目总结人人-56 账号拆分项目总结
人人-56 账号拆分项目总结
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
Character Encoding and Database Transcoding Project
Character Encoding and Database Transcoding ProjectCharacter Encoding and Database Transcoding Project
Character Encoding and Database Transcoding Project
 
Video Upload Architecture of 56.com
Video Upload Architecture of 56.comVideo Upload Architecture of 56.com
Video Upload Architecture of 56.com
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits Level
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
MongoDB Basics and Tutorial
MongoDB Basics and TutorialMongoDB Basics and Tutorial
MongoDB Basics and Tutorial
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 

OpenResty/Lua Practical Experience