I have decided to make a new web app.
The web app would be high concurrency and using Socket.io. to implement streaming data in realtime.
I have implemented socket.io with PHP before.
Every moves in website will be Ajax processed and its behavior and actions will interact with server by socket.io.
I'm familiar with PHP and Apache2 but I have heard that those two are not efficient and good enough for realtime web app.
Socket.io is a Node.js module and I know that it is super-fast and highly scalable but I'm so curious that it changes version too rapidly (0.6.x - stable version came out recently) to adapt it as production one.
I'm considering 4 choices and I don't know which one would fit to me.
- PHP + Apache2 + mongoDB
- PHP-mpm + nginx + FastCGI + mongoDB
- node.js + mongoDB
- nginx (as proxy) + node.js + mongoDB (I know that nginx does not support HTTP 1.1, so socket.io would not work, a critical problem)
or any other recommendation on choosing architecture?
Source: Tips4all, CCNA FINAL EXAM
I would use the following configuration:
ReplyDeleteNginx for serving static files ( http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile << read the section about serving static files)
Node.js under Nginx for dynamic regular stuff (except realtime Socket.IO) - Ryan Dahl (Node.js creator) even recommended this
Socket.IO for realtime, since it abstracts away all the websocket logic, has some advanced (and really needed) features (like heartbeats for example). Socket.IO even takes care of browsers that don't support native WS, by using Flash-WS or long-polling etc. (your stuff would even work on IE6 lol)
Since you know Nginx doesn't play well with HTTP 1.1, WebSockets (allthough I've heard there are some plugins for that), you could use something else for that: Node.js directly or some other proxy ( node-http-proxy or bouncy are 2 Node solutions for proxying).
First recommendation is "define 'realtime'". Do you mean the data seen by the viewer can be as much as 5 seconds behind? 1 minute? 5 minutes? Or on the other side, 0.1 seconds? (nearly impossible to guarantee in a web app and hard in an internet app.) 0.01 seconds (now you're pushing the limits of message propagation on the internet.)
ReplyDeleteAlso, how many concurrent users? 10, 100, 10,000?
I suggest to use lighttpd. I think it's also very stable but I don't know about the other programs. Maybe you want to rent a loadbalancer and focus on the usuability and marketing instead? Lighttpd and fast-cgi is better then apache.
ReplyDelete