Not so long ago I was working on a product that internally exposed an API to allow clients to keep in sync with a user's most recently read documents. I expect most readers of this blog will have used Amazon's Kindle or a similar online reading application so I won't have to explain any of the fundamentals of this functionality.
On the surface this "recently read" service was quite simple - just read the user's most recent records out of a specifically designed database table and present it to the client application.
A complicating factor in this particular system was that some documents belong to a group rather than an individual user, and as a result the rights to access documents could change over time.
I consider this to be a case study of when catering for an edge case can lead to unnecessary pressure on core systems. Approximately 75% of calls to the documents service were permission checks from the recently read service.
All of the clients of the recently read service would silently ignore any reference to a document that the client did not have, so the permission checks were completely unnecessary.
After consulting with the various teams involved I removed the permission checking calls and as a result the response time of the recently read service improved, and the load on the documents service reduced significantly. As a result the documents service was able to run with fewer instances.
This was one of the rare cases when the best way to improve the performance of a service call was to remove it altogether.
No comments:
Post a Comment