Apparatus for processing requests from a plurality of connected clients (101, 102, 103, 104) for data stored by a plurality of connected servers (111, 112, 113, 114), comprising a processor having one or more compute units (301, 302, 303, 304), memory, storage, and a network interface, wherein said processor is configured to: execute a first process to: receive requests from the connected clients via said network interface, select a connected server to route each of said requests to, thereby defining a selected server per request, create a connection per request to its selected server using said network interface, route each of said requests to their selected servers using said connections, and for each said connection: for the whole lifetime of said connection, monitor said connection whilst the selected server services said request, so as to create a separate monitored connection data stream for said connection that includes all of the connection data associated with said connection, write said monitored connection data stream to a temporary file in said memory, upon completion of servicing the request by its selected server, convert the data of said temporary file into a data structure in said memory, and archive said data structure by marking the position in memory of the data structure as archived; and execute a second process to: create and store in said memory a buffer containing a finite number of references to archived data structures, wherein upon creation of a data structure relating to the most recently created connection, the reference to the oldest data structure in said buffer is removed. execute a first process to: receive requests from the connected clients via said network interface, select a connected server to route each of said requests to, thereby defining a selected server per request, create a connection per request to its selected server using said network interface, route each of said requests to their selected servers using said connections, and for each said connection: for the whole lifetime of said connection, monitor said connection whilst the selected server services said request, so as to create a separate monitored connection data stream for said connection that includes all of the connection data associated with said connection, write said monitored connection data stream to a temporary file in said memory, upon completion of servicing the request by its selected server, convert the data of said temporary file into a data structure in said memory, and archive said data structure by marking the position in memory of the data structure as archived; and receive requests from the connected clients via said network interface, select a connected server to route each of said requests to, thereby defining a selected server per request, create a connection per request to its selected server using said network interface, route each of said requests to their selected servers using said connections, and for each said connection: for the whole lifetime of said connection, monitor said connection whilst the selected server services said request, so as to create a separate monitored connection data stream for said connection that includes all of the connection data associated with said connection, write said monitored connection data stream to a temporary file in said memory, upon completion of servicing the request by its selected server, convert the data of said temporary file into a data structure in said memory, and archive said data structure by marking the position in memory of the data structure as archived; and for the whole lifetime of said connection, monitor said connection whilst the selected server services said request, so as to create a separate monitored connection data stream for said connection that includes all of the connection data associated with said connection, write said monitored connection data stream to a temporary file in said memory, upon completion of servicing the request by its selected server, convert the data of said temporary file into a data structure in said memory, and archive said data structure by marking the position in memory of the data structure as archived; and execute a second process to: create and store in said memory a buffer containing a finite number of references to archived data structures, wherein upon creation of a data structure relating to the most recently created connection, the reference to the oldest data structure in said buffer is removed.