Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于如何运行多个Group 提升性能 #171

Open
yongs2018 opened this issue Oct 23, 2019 · 2 comments
Open

关于如何运行多个Group 提升性能 #171

yongs2018 opened this issue Oct 23, 2019 · 2 comments

Comments

@yongs2018
Copy link

腾讯的大神好,请教一个问题
文档描述:
设置oOptions.iGroupCount为1,标识我们想同时运行多少个PhxPaxos实例。我们通过GroupIdx来标识实例,
其范围为[0,oOptions.iGroupCount),我们支持并行运行多个实例,每个实例独立运作。不同实例直接无任何关联,
支持多实例的目的仅仅是为了让它们可以共享同一个IP/PORT。

我的目的:是运行多个Group 提高系统性能
我的问题:我写了一个启动多个group 的程序, 但是性能结果并没有提高,反而下降.
我的环境:4核心 8G内存, 一台物理机上部署了3个进程. 每个进程有(1,n) 个group, 一个group 有(1, N) 个状态机. 一个进程里线程个数和group 数字相同

初始化:大概如下

int PhxEngine::RunPaxos()
{
。。。。。,,
。。。。。
//添加group
for( int i = 0 ; i < gsum ; i++)
{
GroupSMInfo oSMInfo;
oSMInfo.iGroupIdx = i;
if( i == 0 )
{
oSMInfo.bIsUseMaster = true;
}
for( int i = 1 ; i <= max ; i++)
{
OrderSync* tmp = new OrderSync;
tmp->id = i;
//每个group 添加状态机
oSMInfo.vecSMList.push_back(tmp);
}
//添加group
oOptions.vecGroupSMInfoList.push_back(oSMInfo);
}
oOptions.pMasterChangeCallback = &PhxEngine::OnMasterChange;
。。。。。

	for( int i = 0 ; i< gsum ; i++)
	{
		m_poPaxosNode->SetMasterLease(i, 3000);
                    //设置每个group线程数分配一个线程. i 是group id 。
		m_poPaxosNode->SetMaxHoldThreads(i, 1);
		m_poPaxosNode->SetLogSync(i,false);
	}
        LOGS<<"run paxos ok"<<std::endl;

}

发其调用, 思路是,随机的分配到每一个group ,随机的使用每个group 里面状态机, 进行提交。
最后统计提交总是和成功总数. 按成功总是计算tps
{
string oid = buffer;
total++;
long long rm = tars::TC_Common::now2us();
srandom(rm);
int gid = random()%gsum;
int matchid ;
matchid = random()%max + 1;
SMCtx oCtx;
OrderSMCtx tx;
oCtx.m_pCtx = (void *)&tx;
oCtx.m_iSMID = matchid;

	nodeid_t id = m_poPaxosNode->GetMyNodeID();
	m_poPaxosNode->SetProposeWaitTimeThresholdMS(id, 1000);
	
	int ret = m_poPaxosNode->Propose(gid, buffer, llInstanceID, &oCtx);

}

我的结论: 多个group 反而性能没有什么提升。测试性能 total = 13880 succ=13876 tps=1387 大概1387 左右。 如果每个进程都发起提按,性能在500 左右,错误码爆 -14

我如何实现多个group 导致性能提升呢? 我该怎么做? 你们是怎么做的!!!!拜托了,大神

@jettchen00
Copy link

你的程序可以并发的调用m_poPaxosNode->Propose这个接口吗,也就是说你处理外部请求的server必须是多线程或者多进程模式?
另外你为啥要调用SetMaxHoldThreads这个接口

@yongs2018
Copy link
Author

yongs2018 commented Mar 30, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants