Tencent / phxpaxos

The Paxos library implemented in C++ that has been used in the WeChat production environment.
Other
3.36k stars 863 forks source link

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

Open yongs2018 opened 5 years ago

yongs2018 commented 5 years ago

腾讯的大神好,请教一个问题 文档描述: 设置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 commented 4 years ago

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

yongs2018 commented 4 years ago

多谢大神的解答, 对于多个group 的问题,我已经知道如何解决了。

------------------ 原始邮件 ------------------ 发件人: "jettchen00"<notifications@github.com>; 发送时间: 2020年3月23日(星期一) 上午10:36 收件人: "Tencent/phxpaxos"<phxpaxos@noreply.github.com>; 抄送: "316871816"<316871816@qq.com>; "Author"<author@noreply.github.com>; 主题: Re: [Tencent/phxpaxos] 关于如何运行多个Group 提升性能 (#171)

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

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.