Libdrizzle Lua Nginx
-
Upload
m8r-gss7pa -
Category
Documents
-
view
242 -
download
0
Transcript of Libdrizzle Lua Nginx
-
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