Tencent / phxsql

A high availability MySQL cluster that guarantees data consistency between a master and slaves.
Other
2.47k stars 557 forks source link

phxsqlproxy模块中phxsqlproxymain.cpp中StartWorker函数中的一些疑问 #137

Closed dwxiayi closed 7 years ago

dwxiayi commented 7 years ago

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 7 years ago
  1. 两个端口是为了区分mysql client到phxsqlproxy的请求和phxsqlproxy之间的请求,跟性能没什么关系
  2. 用unixsocket连也可以,有这方面需求的话改一下ConnectDest就可以,应该挺好改的
  3. 主线程里的co_eventloop是libco的写法,为了让协程跑起来,TickFunc里面什么都没做
  4. 微信内部使用phxsql的时候也是通过phxsqlproxy连接的,性能损耗其实没多少,瓶颈也不在这里
dwxiayi commented 7 years ago

感谢答复! 关于问题3:从代码看StartWorker函数 是主线程,其中启动了n多线程,io线程内部才会使用协程,主线程中并未启动协程,只是在loop,上次测试协程时空loop是不停的epll_wait,大概会消耗5%(根据wait的时间占用不同)的cpu,我觉得这个loop只是为了不让进程终止没必要,可以将HeartBeatThread、GroupStatusCache放在这里执行。

wodesuck commented 7 years ago

你说得好像有道理,能帮忙试一下把这里去掉会怎样吗

dwxiayi commented 7 years ago

我这边还没有搭建编译环境,程序应该会退出吧,测试协程的时候遇到过。 ps:好期待QQ群或者讨论组之类的组织(难道是因为mysql官方出了Group Replication)