Cluster-based scalable network services
Proceedings of the sixteenth ACM symposium on Operating systems principles
Self-similarity in World Wide Web traffic: evidence and possible causes
IEEE/ACM Transactions on Networking (TON)
Internet telephony: architecture and protocols—an IETF perspective
Computer Networks: The International Journal of Computer and Telecommunications Networking - Special issue on Internet telephony
Proceedings of the seventeenth ACM symposium on Operating systems principles
Towards junking the PBX: deploying IP telephony
NOSSDAV '01 Proceedings of the 11th international workshop on Network and operating systems support for digital audio and video
SEDA: an architecture for well-conditioned, scalable internet services
SOSP '01 Proceedings of the eighteenth ACM symposium on Operating systems principles
A Case for NOW (Networks of Workstations)
IEEE Micro
A design framework and a scalable storage platform to simplify internet service construction
A design framework and a scalable storage platform to simplify internet service construction
High performance web servers on windows NT design and performance
NT'97 Proceedings of the USENIX Windows NT Workshop on The USENIX Windows NT Workshop 1997
Flash: an efficient and portable web server
ATEC '99 Proceedings of the annual conference on USENIX Annual Technical Conference
MIS'02 Proceedings of the 2002 international conference on Metainformatics
Hi-index | 0.00 |
Recent research has revealed that the conventional threaded programming model exhibits poor performance under high concurrency workloads. Moreover, with emerging stateful network services, where concurrent states can go to thousands, the traditional 'thread per request' solution is no longer feasible. To meet this challenge, people promote a new parallel programming model, stage-based programming, where the whole service logic is viewed as a set of stages, each driven by a limited number of threads and capable of communicating with others through message passing. In this paper, we show two main streams of stage design, Thread-Over-Stages and Thread-Per-Stage. Due to the advantages in Thread-Per-Stage, we promote this solution and reveal three key design principles for delivering a high performance stage-based design. They are: on a uniprocessor system, the number of stages should not be too large - for most fine grained network services, it should not be over ten; for stages with blocking calls, a good estimation of the number of threads for that stage can be gotten by (call arrival rate × blocking time); and to deliver temporary messages quickly, it is much better to locate this part of the services in a separate nonblocking stage. We implement a sample SIP proxy server to prove our arguments.