Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Nginx共享内存
李航
2015-05-25
目录 CONTENTS
1. 介绍
2. 结构
3. 流程
4. 配置方式
5. 接口及功能
6. 性能测试
7. Q&A
Confidential &
Proprietary
3
介绍
介绍:
nginx共享内存是利用mmap将内容存储在内存中以及自旋锁。当master启
动的时候,根据相应的指令去初始化共享内存。利用共享内存实现一个轻量级
的k/v系统。
htt...
Confidential &
Proprietary
4
结构
全局变量ngx_cycle结构:
Confidential &
Proprietary
5
结构
ngx_cycle结构:
Confidential &
Proprietary
6
结构
ngx_zone_s结构:
Confidential &
Proprietary
7
结构
ngx_shmtx_t结构:
Confidential &
Proprietary
8
结构
ngx_slab_pool_t结构:
Confidential &
Proprietary
9
结构
ngx_slab_pool_t结构:
Confidential &
Proprietary
10
流程
启动Nginx初始化共享内存:
Confidential &
Proprietary
11
流程
添加k/v:
Confidential &
Proprietary
12
流程
获取k/v:
Confidential &
Proprietary
13
流程
过期回收k/v:
Confidential &
Proprietary
14
流程
流程图:
Confidential &
Proprietary
15
流程
流程图:
Confidential &
Proprietary
16
流程
内部哪些使用共享内存:
Confidential &
Proprietary
17
接口及功能
共享内存接口结构:
class CNgxDictInterface {
public:
CNgxDictInterface():s_zone_name(""),zone_t...
Confidential &
Proprietary
18
接口及功能
共享内存接口结构:
/**
* key 字典的key.
* value 字典的value
* exptime 过期时间(秒)
* zoneName 共享内存名称
**/
/...
Confidential &
Proprietary
19
接口及功能
接口内部结构:
Confidential &
Proprietary
20
接口及功能
功能介绍:
1.初始化共享内存
ah_shm_zone zone=test max_size=10m;
ah_shm_zone zone=test1 max_size=10...
Confidential &
Proprietary
21
配置
Nginx配置文件:
ah_shm_zone zone=lands max_size=10m;
ah_shm_zone zone=click max_size=10m;
serv...
Confidential &
Proprietary
22
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set?zone=lands&
key=440932&value=440...
Confidential &
Proprietary
23
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set_20k?zone=lands&k
ey=68146&exptim...
Confidential &
Proprietary
24
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set_44k?zone=lands&k
ey=68146&exptim...
Confidential &
Proprietary
25
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set_100k?zone=lands&
key=68146&expti...
Confidential &
Proprietary
26
测试
共享内存性能测试:
ab -c 500 -n 100000
http://127.0.0.1:8011/set_20k?zone=lands&ke
y=68146&exptime...
Confidential &
Proprietary
27
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set_44k?zone=lands&k
ey=68146&exptim...
Confidential &
Proprietary
28
测试
共享内存性能测试:
ab -c 500 -n 100000
"http://127.0.0.1:8011/set_100k?zone=lands&
key=68146&expti...
Confidential &
Proprietary
29
Q&A
Q&A
北京市海淀区丹棱街3号中国电子大厦B座10层 100080
10th Floor Tower B,CEC Plaza,No.3 Dan Ling Street, Hai Dian District, Beijing 100080,China
T...
Upcoming SlideShare
Loading in …5
×
Upcoming SlideShare
Presentasi Leon Kamilius SxC Summit
Next
Download to read offline and view in fullscreen.

0

Share

Download to read offline

Nginx共享内存

Download to read offline

Nginx共享内存

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Nginx共享内存

  1. 1. Nginx共享内存 李航 2015-05-25
  2. 2. 目录 CONTENTS 1. 介绍 2. 结构 3. 流程 4. 配置方式 5. 接口及功能 6. 性能测试 7. Q&A
  3. 3. Confidential & Proprietary 3 介绍 介绍: nginx共享内存是利用mmap将内容存储在内存中以及自旋锁。当master启 动的时候,根据相应的指令去初始化共享内存。利用共享内存实现一个轻量级 的k/v系统。 https://github.com/lidaohang/ngx_shm_dict
  4. 4. Confidential & Proprietary 4 结构 全局变量ngx_cycle结构:
  5. 5. Confidential & Proprietary 5 结构 ngx_cycle结构:
  6. 6. Confidential & Proprietary 6 结构 ngx_zone_s结构:
  7. 7. Confidential & Proprietary 7 结构 ngx_shmtx_t结构:
  8. 8. Confidential & Proprietary 8 结构 ngx_slab_pool_t结构:
  9. 9. Confidential & Proprietary 9 结构 ngx_slab_pool_t结构:
  10. 10. Confidential & Proprietary 10 流程 启动Nginx初始化共享内存:
  11. 11. Confidential & Proprietary 11 流程 添加k/v:
  12. 12. Confidential & Proprietary 12 流程 获取k/v:
  13. 13. Confidential & Proprietary 13 流程 过期回收k/v:
  14. 14. Confidential & Proprietary 14 流程 流程图:
  15. 15. Confidential & Proprietary 15 流程 流程图:
  16. 16. Confidential & Proprietary 16 流程 内部哪些使用共享内存:
  17. 17. Confidential & Proprietary 17 接口及功能 共享内存接口结构: class CNgxDictInterface { public: CNgxDictInterface():s_zone_name(""),zone_t(NULL){}; virtual ~CNgxDictInterface(){}; // int Get(const std::string &key,const std::string &value,uint32_t *exptime=0,const std::string &zoneName=""); int Set(const std::string& key,const std::string& value,uint32_t exptime=0,const std::string& zoneName=""); int Set(shm_str_t* key, shm_str_t* value,uint32_t exptime=0,const std::string& zoneName=""); int Del(const std::string& key,const std::string& zoneName=""); int Del(shm_str_t* key,const std::string& zoneName=""); int Incr(const std::string& key,int count,int64_t *res,uint32_t exptime=0,const std::string& zoneName=""); int Incr(shm_str_t* shm_key,int count,int64_t *res,uint32_t exptime=0,const std::string& zoneName=""); int FlushAll(const std::string& zoneName=""); std::string GetZoneName(); int SetZoneName(const std::string& zoneName); std::string GetError(int ret); private: std::string s_zone_name; void* zone_t; };
  18. 18. Confidential & Proprietary 18 接口及功能 共享内存接口结构: /** * key 字典的key. * value 字典的value * exptime 过期时间(秒) * zoneName 共享内存名称 **/ //获得k/v int Get(const std::string &key,std::string &value,uint32_t *exptime=0,const std::string &zoneName=""); //设置k/v int Set(const std::string& key,const std::string& value,uint32_t exptime=0,const std::string& zoneName=""); int Set(shm_str_t* key, shm_str_t* value,uint32_t exptime=0,const std::string& zoneName=""); //删除k/v int Del(const std::string& key,const std::string& zoneName=""); int Del(shm_str_t* key,const std::string& zoneName=""); //key增加n int Incr(const std::string& key,int count,int64_t *res,uint32_t exptime=0,const std::string& zoneName=""); int Incr(shm_str_t* shm_key,int count,int64_t *res,uint32_t exptime=0,const std::string& zoneName=""); //清空共享内存 int FlushAll(const std::string& zoneName="");
  19. 19. Confidential & Proprietary 19 接口及功能 接口内部结构:
  20. 20. Confidential & Proprietary 20 接口及功能 功能介绍: 1.初始化共享内存 ah_shm_zone zone=test max_size=10m; ah_shm_zone zone=test1 max_size=10m; ah_shm_zone zone=test2 max_size=10m; zone共享内存名称 max_size共享内存大小 2.模块使用共享内存 shm_zone_name test|test1; a.使用的共享内存名称 b.必须跟初始化共享内存的名称对应 c.如果需要使用多块共享内存配置多个即可
  21. 21. Confidential & Proprietary 21 配置 Nginx配置文件: ah_shm_zone zone=lands max_size=10m; ah_shm_zone zone=click max_size=10m; server { listen 80; server_name localhost; location / { shm_zone_name lands; ah_shm_dict_test; } }
  22. 22. Confidential & Proprietary 22 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set?zone=lands& key=440932&value=440932&exptime=441032 “ 单核CPU 写入QPS:17000左右 ab –c 500 -n 100000 "http://127.0.0.1:8011/get?zone=lands& key=440932“ 单核CPU 读入QPS:19000左右 测试场景: 单核CPU 小value读写性能
  23. 23. Confidential & Proprietary 23 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set_20k?zone=lands&k ey=68146&exptime=1000" 单核CPU 写入20k QPS:9000左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_20k" 单核CPU 读入20K QPS:10000左右 测试场景: 单核 大value读写性能(数据大小:20k)
  24. 24. Confidential & Proprietary 24 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set_44k?zone=lands&k ey=68146&exptime=1000" 单核CPU 写入44k QPS:6100左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_44k" 单核CPU 读入44K QPS:6400左右 测试场景: 单核 大value读写性能(数据大小:44k)
  25. 25. Confidential & Proprietary 25 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set_100k?zone=lands& key=68146&exptime=1000" 单核CPU 写入100k QPS:3100左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_100k" 单核CPU 读入100K QPS:3700左右 测试场景: 单核 大value读写性能(数据大小:100k)
  26. 26. Confidential & Proprietary 26 测试 共享内存性能测试: ab -c 500 -n 100000 http://127.0.0.1:8011/set_20k?zone=lands&ke y=68146&exptime=1000 30核CPU 写入20k QPS:13000左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_20k" 30核CPU 读入20K QPS:14000左右 测试场景: 30核 大value读写性能(数据大小:20k)
  27. 27. Confidential & Proprietary 27 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set_44k?zone=lands&k ey=68146&exptime=1000" 30核CPU 写入44k QPS:1000左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_44k" 30核CPU 读入44K QPS:9000左右 测试场景: 30核 大value读写性能(数据大小:44k)
  28. 28. Confidential & Proprietary 28 测试 共享内存性能测试: ab -c 500 -n 100000 "http://127.0.0.1:8011/set_100k?zone=lands& key=68146&exptime=1000" 30核CPU 写入100k QPS:7100左右 ab -c 500 -n 100000 "http://10.168.100.187:8011/get?zone=lands &key=68146_shm_dict_set_string_100k" 30核CPU 读入100K QPS:7200左右 测试场景: 30核 大value读写性能(数据大小:100k)
  29. 29. Confidential & Proprietary 29 Q&A Q&A
  30. 30. 北京市海淀区丹棱街3号中国电子大厦B座10层 100080 10th Floor Tower B,CEC Plaza,No.3 Dan Ling Street, Hai Dian District, Beijing 100080,China Thanks

Nginx共享内存

Views

Total views

267

On Slideshare

0

From embeds

0

Number of embeds

3

Actions

Downloads

7

Shares

0

Comments

0

Likes

0

×