南宁公司和几个分公司之间都使用了呼叫系统,然后现在需要做一个呼叫通话数据分析,由于分公司的呼叫服务器是在内网,通过技术手段映射出来,分公司到南宁之间的网络不稳定,所以需要把分公司的通话数据同步到南宁。
本身最简单的方法就是直接配置MySQL的主从同步就可以同步数据到南宁来了。但是销售呼叫系统那边的公司不给MySQL权限我们。 所以这个方法只能放弃了。
于是我们干脆的想,使用PHP来实现定时一个简易的PHP定时同步工具,然后PHP进程常驻后台运行,所以首先就先到了一个PHP组件:SWOOLE,经过讨论,分公司的每天半天生成的数据量最大在5000条左右,所以这个方案是可行,就这样干。
我们使用PHP SWOOLE 做一个异步的定时任务系统。
本身MySQL数据库的主从同步是通过解析Master库中的binary-log来进行同步数据到从库的。然而我们使用PHP来同步数据的时候,那么只能从master库分批查询数据,然后插入到南宁的slave库来了。
这里我们使用的框架是 ThinkPHP 3.2 .
首先安装PHP扩展: SWOOLE,因为没有使用到特别的功能,所以这里我们使用pecl来快速安装:
|
1 |
|
安装完成后在 php.ini 里面加入 extension="swoole.so" 安装完成后,我们使用 phpinfo() 来检查是否成功了.
安装成功了,我们就来写业务.
服务端
1、首先启动一个后台的服务端,监听端口9501
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
2、接收和投递任务
|
1 2 3 4 5 6 7 8 9 |
|
3、任务执行,数据从master库查询和写入到slave数据库
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
4、任务完成时候调用
|
1 2 3 4 |
|
客户端推送任务
到此基本完成,剩下来我们来写客户端任务推送
|
1 2 3 4 5 6 7 8 9 10 11 |
|
至此基本完成了,剩下的我们来写一个shell脚本定时执行:/home/wwwroot/sync_db/crontab/send.sh
|
1 2 3 4 5 6 |
|
使用crontab定时任务,我们把脚本加入定时任务
|
1 2 3 4 |
|
Tips: 最好推荐在里面加入写日志操作,这样好知道是任务推送、执行是否成功。
至此基本完成,程序有待优化~~~,各位看客有更好的方法欢迎提出。
参考文献:
https://www.jb51.net/article/110702.htm