phxsqlproxy模块中phxsqlproxymain.cpp中StartWorker函数中的一些疑问
dwxiayi opened this issue · 4 comments
dwxiayi commented
1.该函数中会开启两个端口,使用两个线程去accept,这样做的目的是什么呢?增加接入性能吗?还是预留了unixsocket(unix domain socket),暂未开发?
2.后端数据库服务器与phxsqlproxy在同一台机器上时后端是否会支持使用unixsocket方式连接mysql,现在看是使用127.0.0.1这个ip,从资料看unixsocket性能要优与tcp;
3.函数最后 主线程在不停的loop(TickFunc函数),是不是一种资源的浪费;
4.phxsqlproxy模块你们内部是否在使用?从资源和性能讲都有损耗,作为一个新的项目规划,client端应该如果智能的实现数据安全、高可用,能否提供一定的思路,谢谢!
wodesuck commented
- 两个端口是为了区分mysql client到phxsqlproxy的请求和phxsqlproxy之间的请求,跟性能没什么关系
- 用unixsocket连也可以,有这方面需求的话改一下ConnectDest就可以,应该挺好改的
- 主线程里的co_eventloop是libco的写法,为了让协程跑起来,TickFunc里面什么都没做
- 微信内部使用phxsql的时候也是通过phxsqlproxy连接的,性能损耗其实没多少,瓶颈也不在这里
dwxiayi commented
感谢答复!
关于问题3:从代码看StartWorker函数 是主线程,其中启动了n多线程,io线程内部才会使用协程,主线程中并未启动协程,只是在loop,上次测试协程时空loop是不停的epll_wait,大概会消耗5%(根据wait的时间占用不同)的cpu,我觉得这个loop只是为了不让进程终止没必要,可以将HeartBeatThread、GroupStatusCache放在这里执行。
wodesuck commented
你说得好像有道理,能帮忙试一下把这里去掉会怎样吗
dwxiayi commented
我这边还没有搭建编译环境,程序应该会退出吧,测试协程的时候遇到过。
ps:好期待QQ群或者讨论组之类的组织(难道是因为mysql官方出了Group Replication)