New-age Transactional Systems - Not Your Grandpa's OLTP
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Dilip Krishnan on Jun 11, 2009
Dhananjay Nene, who has also written a nice article that chronicles the history of REST, examines the various characteristics to be expected when designing a server side Resource Oriented Framework (ROF). The article also attempts to capture the relationship with a fine grained object model of an application and its’ resource model.
According to Dhananjay quite a few of these are taken for granted as a result of popular frameworks such as Struts, Django, Ruby on Rails etc. However enumerating them explicitly makes for defining the characteristics that make these resource oriented frameworks successful and popular. Examples of these characteristics of an ROF that Dhananjay observes are
A ROF will have an abstraction to represent a resource as an end point
If I was using an Order as a resource and if I introduced an approve method on the OrderController that would not be consistent with this requirement. That would need to be modelled as an OrderApproval resource which may on successful completion, effect a state change on the Order resource to the status ‘approved’.
Given consistent expectations of the Resource Operations these will actually be auto-magically implemented
A ROF may provide additional support for typical aspects of lifecycle (eg. validation)
The resource interface methods will be implicitly implemented by the framework [and] the framework will allow the developer to plug in / override his own implementation [and support lifecycle tasks for e.g. validation].
A ROF will provide capabilities to a developer to override or register methods to handle downstream impact of PUT, thPOST and DELETE
I have drawn the analogy that a REST based system is like a DBMS where client applications can perform direct SQL such as SELECT, INSERT, UPDATE, DELETE (GET, PUT, POST, DELETE in case of HTTP/REST) on the Tables (Resources in case of REST), and the business logic is implemented as triggers. Thus the framework will need to allow the developer to define such triggers.
A ROF will provide a mechanism to describe or map a resource abstraction to to the actual programming constructs
There are a number of ways this could be achieved. XML, YAML, DSL, Annotation - take your pick. Also the actual class could be defined (as in case of a POJO) and the resource characteristics mapped onto it, or the class may manifest itself at runtime based on metaprogramming around the metadata. That the framework will allow [object model] relationships to be described or introspected.
A ROF will allow foreign keys across resources which manifest themselves as URIs to be mapped onto the underlying business object references
Resources refer to each other through URIs. The underlying business objects refer to each other through object references. Given the resource descriptions and URI mappings, the framework should allow for a transparent referencing/dereferencing between such URIs and the object references.
While most of the enumerated facets of an ROF seem natural for RESTful services, some characteristics do seem like they need further explanation or examination or perhaps just a elaboration witconcrete examples.
A ROF will allow factory methods for locating or allow injection of other resources / business objects
The developer may choose to interact with these at a coarse grained (resource) or fine grained (business object) level. The framework should allow the necessary support for such activities.
A ROF should allow for the resource / media-type descriptions to be shipped in band with the resource representation : Since REST allows media types to be auto discovered and auto described, the framework should allow for the metadata for such media types to be also presented to the client. The actual metadata could be represented using any of the typical appropriate standards such as RDFa, XML Schema snippets etc.
Though the facets that Dhananjay enumerates are fairly comprehensive, the article does not address some of the non-functional requirements for e.g. support for monitoring, auditing / logging, transaction management, object pooling. Be sure to read the original article for details.
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.
Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.
Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).
Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.
Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.
One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.
InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.
No comments
Watch Thread Reply