|
|
|
|
|
by jiggawatts
786 days ago
|
|
This is a generic problem across a vast range of technologies: how to handle scale out replication with delays and have a consistent “streaming” experience. The main issue is that most query languages like SQL predate HTTP and haven’t been updated with the same concepts such as ETag headers and cookies. Every database request should include a transaction consistency header that contains a vector clock of logical replication status. Every response should include cache control headers and an updated vector clock. This should then be encrypted and bubbled up through the HTTP pipeline to the end clients. E.g.: a client should able to request a “snapshot no older then T minutes” for a report run and be able to return a cookie that ensures that subsequent queries remain consistent with that. Most databases can do this… for a single TCP socket connection only. They’ll lose track of the context if the socket is closed or if multiple servers connect from a web farm. With an approach like this, any cache or any replica could be utilised for any query in a safe and consistent manner. Essentially, this would be fixing an impedance mismatch between a stateful connection-oriented system and a stateless request-response system. |
|