TS/MP Pathsend and Server Programming Manual (G06.24+, H06.03+)
Designing Your Application
NonStop TS/MP Pathsend and Server Programming Manual–132500
2-22
Design Considerations
•
Update or read-only server: A single server exclusively handles either update
transactions or inquiry transactions.
One approach to packaging server functions is to first group server functions based on
management considerations (for example, all servers within a server class must freeze
and stop as a unit) and security considerations (for example, the server class must
execute under one user ID). Then, partition server functions based on the database files
that are most frequently accessed.
To ensure acceptable response times for users and allow you to tune your application for
performance, it is very important to partition server functions based on service times. If
the same set of servers handles short and long transactions, some requests for short
transactions will be queued behind long transactions, resulting in poor response times
for the short requests. If the short and long transactions perform different functions, put
those functions in separate server programs. If the short and long transactions perform
essentially the same work—for example, a simple database lookup—but some requests
could be for multiple lookups, you can configure two or more server classes for requests
of different lengths, all using the same program code.
Nested Servers
A server written in C, C++, COBOL85, Pascal, TAL, or pTAL can use the Pathsend
procedures to send a request message to a server in another server class and receive a
reply. In such a case, the server is acting as a requester. Servers communicating with
each other in this manner are called nested servers.
For example, consider a situation where a requester on one node requires the services of
two server classes on another node. Instead of sending to server class A, waiting for a
reply, and then sending to server class B, the requester could send to server class A, and
server class A could send to server class B, get the response, and then reply to the
requester. This use of nested servers reduces the number of messages sent across data
communications lines and enables application logic to be distributed near the resources
it manages.
Consider the following when considering the use of nested server programs:
•
Single-threaded servers that send to other server classes can cause process
deadlocks. A process deadlock is a situation in which two processes cannot proceed
because each is waiting for a reply from the other.
For example, if a process in server class A sends a request to server class B and the
process in server class B then sends a request to server class A, a deadlock might
occur. Even if there is more than one process in server class A, there is no guarantee
that the second request would not be sent to the same process that sent the original
request.
To avoid this problem, the server program for server class A should keep a read
operation posted on $RECEIVE and wait for completion of either the send operation
or the read operation. Although this multithreading increases the complexity of the
program, it is necessary in order to prevent deadlock.