Upload
m8r-gss7pa
View
242
Download
0
Embed Size (px)
Citation preview
8/2/2019 Libdrizzle Lua Nginx
1/140
Scripting libdrizzle with Lua inside Nginx
8/2/2019 Libdrizzle Lua Nginx
2/140
Scripting libdrizzle with Lua
inside Nginx
(agentzh)[email protected]
2012.4
8/2/2019 Libdrizzle Lua Nginx
3/140
"MySQL is always the bottleneck !"Really?!"
8/2/2019 Libdrizzle Lua Nginx
4/140
8/2/2019 Libdrizzle Lua Nginx
5/140
8/2/2019 Libdrizzle Lua Nginx
6/140
Some benchmarks onAmazon EC2 Small instances
8/2/2019 Libdrizzle Lua Nginx
7/140
8/2/2019 Libdrizzle Lua Nginx
8/140
A Slow MySQL Query
select sleep (1)
8/2/2019 Libdrizzle Lua Nginx
9/140
Amazon Linux AMI 2011.09
nginx 1.0.14
php-fpm 5.3.10
8/2/2019 Libdrizzle Lua Nginx
10/140
8/2/2019 Libdrizzle Lua Nginx
11/140
8/2/2019 Libdrizzle Lua Nginx
12/140
8/2/2019 Libdrizzle Lua Nginx
13/140
8/2/2019 Libdrizzle Lua Nginx
14/140
A Fast MySQL Query
with a Small Resultset
select *
from world.City order by ID limit 1
8/2/2019 Libdrizzle Lua Nginx
15/140
8/2/2019 Libdrizzle Lua Nginx
16/140
8/2/2019 Libdrizzle Lua Nginx
17/140
A Fast MySQL Query
with a Big Resultset (100 KBytes)
select * from world.City order by ID limit 1000
8/2/2019 Libdrizzle Lua Nginx
18/140
8/2/2019 Libdrizzle Lua Nginx
19/140
8/2/2019 Libdrizzle Lua Nginx
20/140
8/2/2019 Libdrizzle Lua Nginx
21/140
We integrated libdrizzle directly into Nginx !
http://wiki.nginx.org/HttpDrizzleModule
8/2/2019 Libdrizzle Lua Nginx
22/140
8/2/2019 Libdrizzle Lua Nginx
23/140
8/2/2019 Libdrizzle Lua Nginx
24/140
8/2/2019 Libdrizzle Lua Nginx
25/140
8/2/2019 Libdrizzle Lua Nginx
26/140
8/2/2019 Libdrizzle Lua Nginx
27/140
Let's just mud with nginx.conf ,the Nginx configuration file
8/2/2019 Libdrizzle Lua Nginx
28/140
upstream my_mysql_backend {
drizzle_server 127.0.0.1:3306 dbname= test
password= some_pass user= monty protocol= mysql ;
# a connection pool that can cache up to # 200 mysql TCP connections drizzle_keepalive max=200 overflow= reject
}
8/2/2019 Libdrizzle Lua Nginx
29/140
location ~ '^/cat/(.*)' {
set $name $1 ; set_quote_sql_str $quoted_name $name ; drizzle_query "select * from cats where name= $quoted_name " ;
drizzle_pass my_mysql_backend;
rds_json on;}
8/2/2019 Libdrizzle Lua Nginx
30/140
$ curl 'http://localhost/cat/Jerry'[{"name":"Jerry","age":1}]
8/2/2019 Libdrizzle Lua Nginx
31/140
The dynamic SQL Query for
This Request
select *
from cats where name= 'Jerry'
8/2/2019 Libdrizzle Lua Nginx
32/140
8/2/2019 Libdrizzle Lua Nginx
33/140
The Slow MySQL Query again!
select sleep (1)
8/2/2019 Libdrizzle Lua Nginx
34/140
8/2/2019 Libdrizzle Lua Nginx
35/140
8/2/2019 Libdrizzle Lua Nginx
36/140
8/2/2019 Libdrizzle Lua Nginx
37/140
The Fast MySQL Query
with a Small Resultset Again!
select * from world.City order by ID limit 1
8/2/2019 Libdrizzle Lua Nginx
38/140
8/2/2019 Libdrizzle Lua Nginx
39/140
8/2/2019 Libdrizzle Lua Nginx
40/140
The Fast MySQL Query
with a Big Resultset (100 KBytes) Again!
select * from world.City order by ID limit 1000
8/2/2019 Libdrizzle Lua Nginx
41/140
8/2/2019 Libdrizzle Lua Nginx
42/140
8/2/2019 Libdrizzle Lua Nginx
43/140
We also embedded Lua and LuaJIT directly into Nginx !
http://wiki.nginx.org/HttpLuaModule
8/2/2019 Libdrizzle Lua Nginx
44/140
8/2/2019 Libdrizzle Lua Nginx
45/140
Use the Lua language to accessthe ngx_drizzle module!
8/2/2019 Libdrizzle Lua Nginx
46/140
8/2/2019 Libdrizzle Lua Nginx
47/140
location = /api { content_by_lua '
local rds_parser = require "rds.parser"local cjson = require "cjson"
local resp = ngx.location.capture ("/cat/Jerrylocal data, err = rds_parser.parse(res.body)ngx.print(cjson.encode(data.resultset))
';}
8/2/2019 Libdrizzle Lua Nginx
48/140
$ curl 'http://localhost/api'[{"name":"Jerry","age":1}]
8/2/2019 Libdrizzle Lua Nginx
49/140
The Fast MySQL Query
with a Small Resultset Revisited!
select * from world.City order by ID limit 1
8/2/2019 Libdrizzle Lua Nginx
50/140
8/2/2019 Libdrizzle Lua Nginx
51/140
8/2/2019 Libdrizzle Lua Nginx
52/140
The Fast MySQL Query
with a Big Resultset (100 KBytes) Again!
select * from world.City order by ID limit 1000
8/2/2019 Libdrizzle Lua Nginx
53/140
8/2/2019 Libdrizzle Lua Nginx
54/140
8/2/2019 Libdrizzle Lua Nginx
55/140
I just implemented the Lua cosocket API !
http://wiki.nginx.org/HttpLuaModule#ngx.socket.tcp
8/2/2019 Libdrizzle Lua Nginx
56/140
!! a socket API based on Lua coroutines!! a socket API that is synchronous !! a socket API that is nonblocking
8/2/2019 Libdrizzle Lua Nginx
57/140
8/2/2019 Libdrizzle Lua Nginx
58/140
I wrote the lua-resty-mysql librarybased on the cosocket API.
http://github.com/agentzh/lua-resty-mysql
8/2/2019 Libdrizzle Lua Nginx
59/140
It is a pure Lua MySQL driverwritten from scratch !
l l l i " l"
8/2/2019 Libdrizzle Lua Nginx
60/140
local resty_mysql = require "resty.mysql"
local mysql = resty_mysql:new()
local ok, err = mysql:connect{host = "127.0.0.1" ,port = 3306 ,
database = "world" ,user = "monty" ,password = "some_pass"
}
8/2/2019 Libdrizzle Lua Nginx
61/140
local query = "select * from cats"
local rows, err, errno, sqlstate = mysql:query(query)
for i, row in ipairs(rows) do
-- process the row table end
8/2/2019 Libdrizzle Lua Nginx
62/140
-- add the current MySQL connection
-- into the per-worker connection pool, -- with total capacity of 1024 connections and -- 60 seconds maximal connection idle time
local ok, err = mysql:set_keepalive( 60000 , 1024
8/2/2019 Libdrizzle Lua Nginx
63/140
The Slow MySQL Query Revisited!
select sleep (1)
8/2/2019 Libdrizzle Lua Nginx
64/140
8/2/2019 Libdrizzle Lua Nginx
65/140
8/2/2019 Libdrizzle Lua Nginx
66/140
8/2/2019 Libdrizzle Lua Nginx
67/140
The Fast MySQL Querywith a Small Resultset Revisited!
select * from world.City order by ID limit 1
8/2/2019 Libdrizzle Lua Nginx
68/140
8/2/2019 Libdrizzle Lua Nginx
69/140
8/2/2019 Libdrizzle Lua Nginx
70/140
The Fast MySQL Querywith a Big Resultset (100 KBytes) Revisited!
select * from world.City
order by ID limit 1000
8/2/2019 Libdrizzle Lua Nginx
71/140
8/2/2019 Libdrizzle Lua Nginx
72/140
8/2/2019 Libdrizzle Lua Nginx
73/140
How about comparing withthe NodeJS world?
8/2/2019 Libdrizzle Lua Nginx
74/140
8/2/2019 Libdrizzle Lua Nginx
75/140
8/2/2019 Libdrizzle Lua Nginx
76/140
8/2/2019 Libdrizzle Lua Nginx
77/140
8/2/2019 Libdrizzle Lua Nginx
78/140
8/2/2019 Libdrizzle Lua Nginx
79/140
Caching responses with
ngx_srcache + ngx_memc http://wiki.nginx.org/HttpSRCacheModule
http://wiki.nginx.org/HttpMemcModule
8/2/2019 Libdrizzle Lua Nginx
80/140
# configure the cache storage location
8/2/2019 Libdrizzle Lua Nginx
81/140
g g location /memc {
internal ; set $memc_key $query_string ;
set $memc_exptime 300;
memc_pass 127.0.0.1:11211;}
location = /api {
8/2/2019 Libdrizzle Lua Nginx
82/140
location = /api {
set $key "$uri?$args" ;
srcache_fetch GET /memc $key ; srcache_store PUT /memc $key ;
# drizzle_pass/fastcgi_pass/content_by_lua/...}
8/2/2019 Libdrizzle Lua Nginx
83/140
8/2/2019 Libdrizzle Lua Nginx
84/140
8/2/2019 Libdrizzle Lua Nginx
85/140
8/2/2019 Libdrizzle Lua Nginx
86/140
Find the source forall the benchmarks given here:
http://github.com/agentzh/mysql-driver-benchmark
8/2/2019 Libdrizzle Lua Nginx
87/140
Any questions ?
http://openresty.org
https://groups.google.com/group/openresty
8/2/2019 Libdrizzle Lua Nginx
88/140
8/2/2019 Libdrizzle Lua Nginx
89/140
8/2/2019 Libdrizzle Lua Nginx
90/140
8/2/2019 Libdrizzle Lua Nginx
91/140
8/2/2019 Libdrizzle Lua Nginx
92/140
8/2/2019 Libdrizzle Lua Nginx
93/140
8/2/2019 Libdrizzle Lua Nginx
94/140
8/2/2019 Libdrizzle Lua Nginx
95/140
8/2/2019 Libdrizzle Lua Nginx
96/140
8/2/2019 Libdrizzle Lua Nginx
97/140
8/2/2019 Libdrizzle Lua Nginx
98/140
8/2/2019 Libdrizzle Lua Nginx
99/140
8/2/2019 Libdrizzle Lua Nginx
100/140
8/2/2019 Libdrizzle Lua Nginx
101/140
8/2/2019 Libdrizzle Lua Nginx
102/140
8/2/2019 Libdrizzle Lua Nginx
103/140
8/2/2019 Libdrizzle Lua Nginx
104/140
8/2/2019 Libdrizzle Lua Nginx
105/140
8/2/2019 Libdrizzle Lua Nginx
106/140
8/2/2019 Libdrizzle Lua Nginx
107/140
8/2/2019 Libdrizzle Lua Nginx
108/140
8/2/2019 Libdrizzle Lua Nginx
109/140
8/2/2019 Libdrizzle Lua Nginx
110/140
8/2/2019 Libdrizzle Lua Nginx
111/140
8/2/2019 Libdrizzle Lua Nginx
112/140
8/2/2019 Libdrizzle Lua Nginx
113/140
8/2/2019 Libdrizzle Lua Nginx
114/140
8/2/2019 Libdrizzle Lua Nginx
115/140
8/2/2019 Libdrizzle Lua Nginx
116/140
8/2/2019 Libdrizzle Lua Nginx
117/140
8/2/2019 Libdrizzle Lua Nginx
118/140
8/2/2019 Libdrizzle Lua Nginx
119/140
8/2/2019 Libdrizzle Lua Nginx
120/140
8/2/2019 Libdrizzle Lua Nginx
121/140
8/2/2019 Libdrizzle Lua Nginx
122/140
8/2/2019 Libdrizzle Lua Nginx
123/140
8/2/2019 Libdrizzle Lua Nginx
124/140
8/2/2019 Libdrizzle Lua Nginx
125/140
8/2/2019 Libdrizzle Lua Nginx
126/140
8/2/2019 Libdrizzle Lua Nginx
127/140
8/2/2019 Libdrizzle Lua Nginx
128/140
8/2/2019 Libdrizzle Lua Nginx
129/140
8/2/2019 Libdrizzle Lua Nginx
130/140
8/2/2019 Libdrizzle Lua Nginx
131/140
8/2/2019 Libdrizzle Lua Nginx
132/140
8/2/2019 Libdrizzle Lua Nginx
133/140
8/2/2019 Libdrizzle Lua Nginx
134/140
8/2/2019 Libdrizzle Lua Nginx
135/140
8/2/2019 Libdrizzle Lua Nginx
136/140
8/2/2019 Libdrizzle Lua Nginx
137/140
8/2/2019 Libdrizzle Lua Nginx
138/140
8/2/2019 Libdrizzle Lua Nginx
139/140
8/2/2019 Libdrizzle Lua Nginx
140/140