免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1726 | 回复: 7

[其他] 讨论贴,希望分享下现在工作使用的程序结构 [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:52:30
发表于 2015-04-07 13:31 |显示全部楼层
本帖最后由 liuyeid 于 2015-04-07 13:38 编辑

比如我现在做的苦b工作吧,做银行业务线的。公司的框架(c写的)主要都是这样:
server->switch->worker->front->cups(其它)
server:
就是监听一tcp端口(甚至公司用了10多年的一个框架都是直接fork的),然后通过消息队列送到switch程序
switch:
可能需要处理报文(包括转换什么的)和路由(具体要调用那个交易),然后又通过消息队列发送到worker
worker:
实际的业务程序了
front:
如果worder需要链接银联或人行等,需要调用这个前置,可能是一个前置系统了,也可能是程序的一部分,只是带前置功能
cups:
不是我们的范畴了

公司08年写了个新的server,使用Poll来做,父子进程使用pipe通信,父进程接收回应,通过pipe通知子进程获取回应并发到客户端,这种方式是相对来说是慢的了。不过这种业务注定不会有很大并发
=======
因为以前做过一小段时间的php加运维,并且一直都有玩linux,所以我就很好奇apache和nginx的实现,apache太庞大了,所以最近在看nginx的源码。

因为apache是直接fork的模式,所以业务都在子进程完成(不使用fcgi的情况下,apcahe直接就支持php脚本)。对比公司的程序,就是把switch worker都写在了server里面。

nginx不使用fcgi只能解析静态页面,所以一定要通过fcgi的支持,启动php-fpm进程来解析php的动态网页,nginx里面的rewrite和location可以看作是switch做的是,php-fpm可以看作是workder做的事。

我的问题:
apache的这种方式肯定不适合用在这里。
1. nginx适合吗?nginx使用epoll,和php-fpm也是使用文件描述符,所以epoll可以统一监听,但是现在公司后面的进程都是使用消息队列来通信的,并且nginx直接就到php-fpm(公司现在的程序,还有把switch拆分为了bridge和switch,bridge处理报文,switch路由),毕竟nginx是以高并发著称,如果想要该动公司框架,并且照者nginx fcgi这样的方式套过去,就只有server->worker, 并且使用unix socket或者tcp来通信。这样可取吗?
2. 或者如何解决好在server对客户使用socket,对內使用消息队列。这个在unix 网络编程上作者提到过,但是并没有给出好的解决办法。我想了很久,如果worker不开2个线程,就只有通过父进程告诉子进程了(即公司08年的那个新框架)。
3. 还有个问题,因为刚开始看nginx,想知道,可以直接使用自己的应用层协议写一个模块替换nginx的http或者mail模块来实现自己的tcp的服务器吗


还有一个疑问吧:
都说nginx的并发很高,如果送到php-fpm处理,如果要花费百分之一秒,并且一个nginx的worker链接php-fpm应该是串行的吧,worker的数量和核保持一致,比如10个核,其实实际在处理中的并发也就1000,tcp的链接并发完全有可能是php-fpm处理的成百上千倍,但是根本处理不到,nginx何来高并发,这样来看只有php-fpm处理是万分之一秒或者更少了???

写的比较乱,想的有点多,发现写的比较少









论坛徽章:
0
发表于 2015-04-07 18:35 |显示全部楼层
只要你业务对外提供的是http接口,那么用nginx完全没问题。你可以通过编写nginx扩展模块做你想做的任何业务。

论坛徽章:
0
发表于 2015-04-07 18:38 |显示全部楼层
另外,nginx的事件模型与异步机制你需要去理解一下。只要业务处理不被io阻塞,nginx并发轻松上十万。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亚洲杯之中国
日期:2015-04-22 15:52:45
发表于 2015-04-07 20:03 |显示全部楼层
本帖最后由 hanxin83 于 2015-04-07 20:10 编辑

这个问题非常好.

我思考过好几年, 最后指向了关键字:协程.

有大牛语录为证...


如果世界上曾经有那个模型出现过,其他模型都会变成将就.     ----摘自《码农的自我修养》by hanxin83

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:52:30
发表于 2015-04-07 20:09 |显示全部楼层
自己写个其它应用层协议比如ftp来替换http模块,这样靠谱吗?回复 3# xphh2008


   

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:52:30
发表于 2015-04-07 21:01 |显示全部楼层
刚看了下c的协程,有点不好理解呢。但是感觉和我提出的问题没什么关系了??回复 5# liuyeid


   

论坛徽章:
0
发表于 2015-04-07 22:30 |显示全部楼层
liuyeid 发表于 2015-04-07 20:09
自己写个其它应用层协议比如ftp来替换http模块,这样靠谱吗?回复 3# xphh2008


nginx一般用于http反向代理,主要focus在web应用上。替换成ftp,我不知道可行性,但不太建议,因为这不是nginx的强项。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2015-04-09 08:39 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP