gservice大规模测试

63 篇文章 11 订阅
15 篇文章 0 订阅

gservice大规模测试

测试环境

 服务器1台:

  cpu: 2 * Intel® Xeon® CPU E5530 @ 2.40GHz

  memory:32GB

  PostgreSQL 10.4 x16

  操作系统:ubuntu 16.04 server

普通计算机3台:windows 10 x64 ,windows 2008 x64

 100MB局域网

1 导入测试数据

测试数据我已经生成,点击下载测试数据.下载解压后导入(注意修改脚本路径).测试数据共10000000条.

psql -h ip -U 用户名 -d 数据库 -f e:/test_users.sql

顺便提一句,大规模数据中保证6-16纯数字随机组成的用户名唯一性还是有点难度的,需要好几轮检查修改才行,有兴趣的同学可以自己试试.

下载的测试数据中已经包含创建表和函数,因此不需要再执行下面的脚本.

/****************************************************************************************
	用户表
	为了方便测试,用户名由6-16位数字组成,并且是唯一的
	密码固定为cd7ae1509a301365de872ea79d73d99e
	昵称或姓名由2-8位数字组成
	创建日期2018-01-01至2018-12-31 23:59:59.999999随机分布
drop table if exists test_users;
****************************************************************************************/
create table test_users(
	objectid bigserial not null,									--唯一编号
	uname varchar(16) not null,								--用户名,唯一,不能修改
	pwd varchar(64) not null,									--密码
	name varchar(8) not null,									--昵称或姓名
	generate timestamptz default now() not null,	--创建日期
	--实际使用中用户名只能是字母和数字组合
	--constraint ck_test_users_uname check(uname~'^[0-9a-zA-Z_]{4,16}$' and uname !~ '^[0-9]+$' ),
	constraint pk_test_users_objectid primary key(objectid) with (fillfactor=100)
)with (fillfactor=100);
create unique index uidx_test_users_uname on test_users(uname)  with (fillfactor=100);



/****************************************************************************************
	用户登录函数
	实际应用应加上限制,同一ip同一用户名3秒登录一次,防止暴力破解
drop function if exists test_users_login(varchar(16),varchar(64));
****************************************************************************************/
create or replace function test_users_login(
	iidentity varchar(16),ipwd varchar(64)
) returns bigint
as $$
	declare
		v_userid bigint;
		v_pwd text;
	begin
		select objectid,pwd into v_userid,v_pwd from test_users where uname=iidentity;
		if( v_userid is null or v_pwd is null ) then
			raise exception '用户名不存在!';
		end if;
		if( v_pwd != ipwd ) then
			raise exception '登录密码错误!';
		end if;		
		return v_userid;
	end;
$$ language plpgsql;

2 编译运行gservice

下载gservice

sudo apt-get install libjansson-dev libssl-dev libpq-dev
unzip gservice-master.zip
cd gservice-master
#编译前要修改makefile文件的libpq头文件和库文件路径
make
#运行前修改conf.json中的配置信息
./gservice -c 1

3 运行测试工具

下载测试工具

测试工具每5次调用一次正确的用户名,其它情况用户名随机生成.

#linux
make
./client -u http://192.168.1.252:7654 -t 16 -n 100000
#windows,在cmd中直接切换到Release目录
chcp 65001
client -u http://192.168.1.252:7654 -t 16 -n 100000

4 gservice测试方法和消耗的资源

gservice和PostgreSQL在同一台ubuntu主机上,32线程,32连接.然后在另外三台windows计算机上分别运行client,每个client运行16个线程,调用十万次登录方法.

在这里插入图片描述
windows client基本占用了客户机的所有cpu资源,内存占用3.2MB左右.

client调用时PostgreSQL资源消耗情况,tps大约3500.(因为测试工具每5次调用一次正确的用户名,其它情况用户名随机生成.所以每5次回滚4次,提交一次)
在这里插入图片描述
查看gservice内存和cpu

#gservice pid 21644
cat /proc/21644/status

top -p 21644

在这里插入图片描述

在这里插入图片描述

在调用过程中不要强行中止client,会导致内存泄露,linux可在gservice运行的终端按Ctrl+c或Ctrl+\ 停止服务,windows 按esc停止服务,同时客户端也自动停止.

如分开gservice和PostgreSQL分开部署,吞吐量会进一步提高.

5 gservice每次请求处理时间

gservice平均每次响应时间1毫秒以下,共响应了3x1600000个请求(应减去网络通信时间和客户端显示数据时间).一个客户端共远程调用了16x100000共耗时2645930.495ms(含网络通信),约44分钟左右.
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值