This is a general question that is pertinent to Software Architecture for a high availability, carrier grade telecom infrastructure box that does say, plenty (==1000s of TCP/IP-based (local) network operations per second) of control plane signaling using TCP/IP based protocols with other gear in the (local) network.
Consider that you will design such a box to be deployed on off-the-shelf 1U pizza box servers that will run off-the-shelf Linux (say RHEL with 2.6 kernel) that will be deployed redundantly (with another 1U pizza box) for a telecom application. You are designing such a box. The question is, how do you go about using the CPU, memory and other hardware resources on the box in an efficient manner?
Let me explain. There are many basic operations such a box should execute flawlessly. I list a few of them below:
- HA operations (failover etc),
- TCP/IP messaging with peers outside the box,
- Memory management (e.g. memory pools),
- The "application:" Protocol (s) processing. Example, if I am designing a SIP server, one imagines the "SIP engine," which processes the SIP messages, to run as a separate process from the process that receives the SIP messages on the interface.
- Configuration and persistence management.
- Statistics and performance management.
My question is, how would you design such a box. This is what the platforms teams do (except 3 above, which is typically divvied up to the apps folks). I am looking for answers from seasoned platforms-heads who can tell me how they have been doing this.
My experience from an embedded environment (very different hardware) tells me, for example, that each of the bullets above would be a separate task--each with its own memory carved out (say using memory pools), and communicates with the other modules via IPC such as message queues. Do you see this model as a viable model for 1U pizza box servers running Linux?