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 Boris Lublinsky on Dec 16, 2009
In his new blog post, "Advice To Organisations Embarking On SOA Today", Ganesh Prasad gives an advice, based on his several years of experience, on how to approach a major SOA initiative:
... don't let the lack of grandeur in this approach worry you. Complexity impresses the novice, but results are what ultimately impress all.
Ganesh’s approach covers the following major points:
...simplifying the components of your enterprise and making them easy to understand and connect to... So keep simplicity at the back of your mind all the time, and don't confuse it with expediency, which is the path of least resistance. Simplification could take some effort.
All services exposed out of these logical domains should use these definitions and it is the responsibility of service consumers from other domains to understand them. Processes that combine services crossing such domains should perform their own mapping between similar data elements. This is not as bad as it sounds because only a subset of data elements managed by a domain is exposed through its service interface.... Don't look to [build] a single canonical data model. That's a wild goose chase, so don't even start.
HTTP is quite a universal protocol to use as the logical infrastructural element for your SOA.ESBs, Service Directories and other "governance" components are often only required to manage the complexity that they themselves introduce. It's amazing what you can achieve with a farm of simple web servers and a database, and still keep things simple and understandable.
REST is in fact a valid way to do SOA and can usually help to deliver solutions at much lower cost and complexity. The hard part about doing REST is finding good people who can think that way.
Already, there are JSON Schema libraries in many high-level languages such as Java. It should be possible to define data contracts with as much rigor as with XML, but at a much lower level of complexity... instead of going down the XML rabbit-hole, start with JSON anyway, and incorporate JSON Schema as it matures. You will find this works especially well in combination with REST.
Of course, if you're politically inclined, you will bask in the prestige of a hefty budget and a large team, and can declare victory anyway on the basis of the number of services and processes you have delivered. But if you want to be really successful at delivering SOA (i.e., making your business more agile and able to operate on a sustainably lower cost basis) while keeping your burn rate low along that journey, you would do well to look at boring, unimpressive and even anticlimactic approaches and technologies such as the ones I've listed above. Give the big vendors a wide berth. You don't need to buy technology (beyond the web servers and databases you already have). You certainly don't need to buy complex technology, which is what the vendors all want to sell you.
Prasad's post addresses many issues which are encountered during a typical SOA implementation. It also appears to dismiss existing, oft-used solutions to the problems encountered in favour of newer approaches. This leads to a question: when is it better to understand and improve upon an existing solution, and when is it better to dismiss the existing solution and try a new approach? Is newer always better?
I have to call the bluff on rest. I'm actually a huge fan and I have used rest in a couple of projects. In fact, the paradigm is definitely better and more simple. The big problem with rest is who supports it? If someone says they would like to call your service from program X, guess what they will be looking for? Soap. It's unfortunate, but that's the way it is right now. I fought the tide for a while, but honestly wsdl works, as bad as it is. Someone can take your wsdl and use a random program to invoke your service, because all the vendors jumped on the wsdl/soap bandwagon. Maybe something will change in the future.
Kevin:
could you remind me again what does REST bring for X-to-server communication where X is not a browser? I must be missing something. Could you explain what "better" means, how about "simple"? Let's take real scenario where a "service" (are there "services" in REST?) changes here and there every 6 to 12 months? What will change in the future? Do you really think we'll never need contracts? validation? Asynchrony? Bi-directional interfaces? Assemblies?
What a waste.
JJ-
Yes if there was a way to build a wsdl type of document to describe the contracts for rest it would be much more useful. I think there is something called WADL that is supposed to do it, but I haven't checked it out. Maybe someone on infoq has used rest with WADL?
HTML 5 is supposed to handle communication threads now so if your primary client is the browser then you can mimic some of the soap MEPs there. I find that XML is very bloated for communication where JSON or google's rpc format is much more optimized in terms of space requirements. Using JSON or another similar format seems to be the standard from the web browser side . I agree that for system to system communication behind a company firewall that soap is not broken and is probably the best choice in the current market.
By simple I mean that I can send you a single url that is my service. For example:
myrestserver/rest/objects/1
This can be built to return a random java object as json. This is very simple from the web browser side since we can convert a JSON string into a Javascript object which can be manipulated and displayed. Please tell me how easy it would be to do that with a soap web service? I assure you it's much more complicated.
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.
4 comments
Watch Thread Reply