- 论坛徽章:
- 1
|
本帖最后由 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处理是万分之一秒或者更少了???
写的比较乱,想的有点多,发现写的比较少
|
|