I have a stupid question here. When you have a large memory machine, why can't you serve 1M clients on 1 ip without IP aliases?
I asked this question because if one uses 17 instances to handle 1M connections, for each instance is around 50k. I am more interested in knowing the possibility and performance for one machine to handle 1M connections.
the real problem is not to generate 1M outgoing connections, but to handle 1M incoming connections on a single node (C1M), while in addition also doing some meaningful processing.
It's a solved problem for me. That is why I don't understand why many high profile realtime web startups (like Convore), still using inferior solutions, like Python eventlib or gevent, which at most let them handle hundreds-to-thousands of clients.
EDIT: metabrew has very good tutorial - which should be a starting point for everybody new to this space!
Thank you for your replying. The original C10k from Dan Kegel was a guideline for me when I worked on project during 2003 - 2006. I am wondering what is the latest progress in this area. I am glad this problem is solved to you. I will check out niver tech in future when the problem comes up.
In the real world your 1M connections will be coming from ~1M clients, so there's no problem. When doing load testing with one client and one server you run into port number limits; this is most realistically solved by using multiple IP addresses on the client (or multiple clients if your cloud is crippled).
Port numbers are 2byte values. To track a connection as an IP:port number combination(the way your typical OS does it) you need multiple IPs to give you enough port numbers.
If we are testing a web server on port 80, such that ServerIP,and port are fixed, then the only way you are getting more than 64K connections is through multiple client IP addresses.
Comments
I have a stupid question here. When you have a large memory machine, why can't you serve 1M clients on 1 ip without IP aliases?
I asked this question because if one uses 17 instances to handle 1M connections, for each instance is around 50k. I am more interested in knowing the possibility and performance for one machine to handle 1M connections.
the real problem is not to generate 1M outgoing connections, but to handle 1M incoming connections on a single node (C1M), while in addition also doing some meaningful processing.
It's a solved problem for me. That is why I don't understand why many high profile realtime web startups (like Convore), still using inferior solutions, like Python eventlib or gevent, which at most let them handle hundreds-to-thousands of clients.
EDIT: metabrew has very good tutorial - which should be a starting point for everybody new to this space!
Are you referring to http://www.metabrew.com/article/a-million-user-comet-applica...
http://www.metabrew.com/article/a-million-user-comet-applica...
http://www.metabrew.com/article/a-million-user-comet-applica...
By Richard Jones of the Last.fm?
Thank you for your replying. The original C10k from Dan Kegel was a guideline for me when I worked on project during 2003 - 2006. I am wondering what is the latest progress in this area. I am glad this problem is solved to you. I will check out niver tech in future when the problem comes up.
In the real world your 1M connections will be coming from ~1M clients, so there's no problem. When doing load testing with one client and one server you run into port number limits; this is most realistically solved by using multiple IP addresses on the client (or multiple clients if your cloud is crippled).
Port numbers are 2byte values. To track a connection as an IP:port number combination(the way your typical OS does it) you need multiple IPs to give you enough port numbers.
each socket can be uniquely identified by 4-tuple: {LocalIP,LocalPort,ServerIP,ServerPort}
LocalIP:LocalPort -> ServerIP,ServerPort
So even if number of ports is limited by 64K, total number of incoming sockets per IP address isn't.
Yes, but when you are load testing a specific server, as in this case, you are bound to a specific serverIp and serverPort.
And thus, the total amount of sockets you can have open to that server is limited by the amount of IP's your machine has.
If we are testing a web server on port 80, such that ServerIP,and port are fixed, then the only way you are getting more than 64K connections is through multiple client IP addresses.