200分求优化建议

an9ryfr09 2009-05-23 12:23:30
加精
问题是这样的:

a -> b -> c

a是我们的合作方,他们负责通过http协议给我们同步数据。
b是我们,负责接收a推过来的数据,做业务逻辑处理后,再把整理好的数据推给我们的合作方c(有很多c)。


我的程序整体架构是这样的:
1 有一个入口文件,其实就是个php文件,负责接收a的数据,存入数据库。
2 我用nohup命令调用php cli模式开了一个php进程运行一个php文件在系统后台处理下面的事情:从数据库中一次取出10条数据,循环fetch出每一条,然后根据业务逻辑,根据每条数据的不同,转发给不同的c(其实就是要访问不同的url)。


a给我同步数据的时候,一秒可能会来10几条,他们是多线程发包。而我这边经过入库,一次取出10条数据,循环推送到不同的url地址,在收到他们接口给我响应的'ok'后,做标记,然后推送下一条数据,如果在我设置的超时时间5秒后还没有收到对方的'ok',则重发,超时时间依然是5秒,共重发2次。等于一条数据最多推送3次,3次都推不过去的话就不管了。并且,我在每次推送数据间设置sleep了1秒。


遇到的问题:
正常情况下,推一条数据应该大概在2秒以内,但如果某个c,他的接口受网络原因或程序的问题,我3次推送都没推过去(也就是说他的接口响应速度大于5秒或根本没响应),它会令我的数据队列最多懈怠18秒的时间。这会令推送速度大大降低!我今天看了下,我的数据队列比正常速度大概慢了一个小时。请问有什么好的方法解决这个问题吗?
php本身不支持多线程,我无法设置不同的线程去给不同的c推送数据。所以一个c的接口响应慢,会影响所有的c,影响整个数据队列。
不知有没有朋友做过这方面的东西,指教点经验。除了要求c提高接口响应速度,和保证网络畅通外。有没有我自己这边解决问题的方法?我的一些合作方它们用的都是java,可以建立线程池多线程发包,但php这点比较无奈。


其实在以前,我采用的方式是同步转发,也就是接到a的数据后,立刻处理业务逻辑,然后立刻把数据同步转发给c,不入队列。这样是没有上述问题的,但这样会产生很多其它问题,所以我现在才改成这种队列的方式。

我想了两个解决方案不知是否可行:
1 php本身不支持多线程,但linux下的curl,wget,或apache带的ab。它们支持多线程的,我是否可以用php去调用它们来实现多线程推数据?给每个不同的c分配一个线程,这样,一个c堵塞,不会影响其它的c。
2 不支持多线程,我用多进程,我给每个不同的c开一个单独的php进程,这样也可以避免c之间互相影响。但我不清楚开这么多进程无限死循环着运行会对操作系统有多大影响。目前我们这个业务大概有10个c。


希望大家给点意见,指点下,谢谢!
...全文
1580 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
hcjonline 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 iasky 的回复:]
把php换掉吧,直接使用C实现
[/Quote]

晕点错!!
iasky 2010-08-08
  • 打赏
  • 举报
回复
把php换掉吧,直接使用C实现
xcasp 2010-08-03
  • 打赏
  • 举报
回复
这贴高手实在太多了额...
ww365610866 2010-07-30
  • 打赏
  • 举报
回复
我正在关注中, 想会回答你 .
relateTarget 2010-05-26
  • 打赏
  • 举报
回复
1、php、curl、apache多进程
2、soap
3、mysql主从库自动更新
晕,好多木懂:(
xuanyijie 2010-04-13
  • 打赏
  • 举报
回复
招聘职位 :高级PHP程序员
招聘公司 :喧怡网络科技
工作地点 :杭州
月  薪 :6000-7999
年 龄 :24-28
工作性质 :全职
工作年限 :三年
学  历 :大专
联系电话:13758166419
联系邮箱:542843172@qq.com
任职要求:
1、负责Web网站的新产品的设计及维护
2、数据库的设计和维护
3、负责程序模块的设计、编码。
4、负责撰写所属模块开发文档。
岗位要求:
1.精通JavaScript及其浏览器兼容性;
2.两年以上PHP/MySQL开发经验,开发过大型互联网应用程序;
3.熟悉sql和数据库优化,至少有MySQL, PostgreSQL, MSSQL, Oracle其中任何一种数据库相关经验;
4.具有查询优化和存储优化经验、PHP缓存技术、静态化设计方面的经验;
5.有Linux平台下多线程编程经验优先;
6.熟悉CGI标准、HTTP和HTTPS等互联网协议;
7.熟悉AJAX,熟悉DIV+CSS布局,熟悉模板技术;
8.有较强的团队协作意识及独立解决技术问题的能力,拥有良好的代码习惯,要求结构清晰,命名规范,逻辑性强,代码
冗余率低,有自主或组织研发B/S应用产品者优先;
9.有团队开发经验,书面语言表达能力强,能阅读英文文档,英文水平过硬;
10. 有丰富的互联网项目,特别是Web2.0项目;
11.追求程序的高效,对于大流量和高负载情况下的程序设计非常熟悉。
文华在线 2010-04-04
  • 打赏
  • 举报
回复
什么问题呀?
williswatson 2010-03-24
  • 打赏
  • 举报
回复
帮顶,SOAP看来很NB的样子
sswweett 2010-03-11
  • 打赏
  • 举报
回复
去年的帖子了,晕。实际纯http协议就可以实现这个需求的。
garcon1986 2010-01-30
  • 打赏
  • 举报
回复
学习
xiucaidemeng 2010-01-19
  • 打赏
  • 举报
回复
我是来学习的。。看一下 哈哈
glzxe 2009-09-01
  • 打赏
  • 举报
回复
学习
zmacro 2009-05-25
  • 打赏
  • 举报
回复
学习
程序猿之殇 2009-05-25
  • 打赏
  • 举报
回复
ps:mysql可以实现主从服务器同步更新, 可以考虑设置单独的数据库服务器,为每个合作方开一端口,让mysql完成数据推送的过程.
程序猿之殇 2009-05-25
  • 打赏
  • 举报
回复
b->c
可否考虑由推送改为c向b请求获取或者请求同步更新数据.以减少b的压力.


把你当前的处理B->C的php cli程序放到apache下,即http://www.x.com/b2c.php
===================================================================
交给apache去处理可能是一个方法.apache是多线程的.

如果以上都不可行,可以考虑用c++来完成php的工作.
phpboy 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 ShadowSniper 的帖子:]
问题是这样的:

a -> b -> c

a是我们的合作方,他们负责通过http协议给我们同步数据。
b是我们,负责接收a推过来的数据,做业务逻辑处理后,再把整理好的数据推给我们的合作方c(有很多c)。


我的程序整体架构是这样的:
1 有一个入口文件,其实就是个php文件,负责接收a的数据,存入数据库。
2 我用nohup命令调用php cli模式开了一个php进程运行一个php文件在系统后台处理下面的事情:从数据库中一次取出10条数据,循环…
[/Quote]

soap 可行,但 需要 c 方支持

不知道 LZ 的原来 基础上,能不能多加上 一个处理, 如果 c 端,第 一次(三次发送) 接收失败 ,可以停 1 小时 或者 其它 时间,再进行 发送,期间不进行 这一个 c 端的发送,这样不会 影响其它 c 端, 如果 再一次发送 失败, 完全 可以 考虑 不给 这个 c 端 发送,如果 是用什么方法 进行 联系这个 c 端( 发邮件,或者 就是电话联系), 他们 的接收 估计 是有问题的 ..
an9ryfr09 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 jakey9826 的回复:]
b->c
可否考虑由推送改为c向b请求获取或者请求同步更新数据.以减少b的压力.


把你当前的处理B->C的php cli程序放到apache下,即http://www.x.com/b2c.php
===================================================================
交给apache去处理可能是一个方法.apache是多线程的.

如果以上都不可行,可以考虑用c++来完成php的工作.

[/Quote]

这样不行的,我不能让c按我们的要求做这么多更改。

现在看来,要么开多进程,要么调用linux的curl或apache来实现多线程。要么就开多进程,只有这两种方法最合适了。

谢谢大家的意见,结贴了。
lonelyriver 2009-05-24
  • 打赏
  • 举报
回复
丿
zhenwenxian 2009-05-24
  • 打赏
  • 举报
回复
开多进程,给每个c开一个单独的php进程,
影响,就同时开2个,一直用,一个监视一些其它进程,一个做文件操作,都死循环样运行,
j2eeoriented 2009-05-24
  • 打赏
  • 举报
回复
dsd
加载更多回复(21)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧