Whether it's syntactic, or semantic, it's a very important aspect of software systems. I saw many organizations lack interoperability between their internal applications, where, for example, interacting from system to another requires some effort, and will be specific to the domain of the business needs. In these organization you might notice a number of different representation of the same business entity in different applications/modules. Interoperability could be achieved via different techniques, and on different levels, using a shared database is one solution, where one application interact with the other one application database. This is on the persistence level, what about the logic level, away from persistence.
Vendors are exposing their services and data more rapidly now, making most if not all of their service available programmatic for developers/software systems to (re)use. This might be a very rich environment to build interoperable systems. Vendors must start to think this way for their internal application, building modules, with a well defined set of API's will promote interoperability between applications.
A basic, yet a very critical candidate for interoperability is the business entities, or reference data, more specifically the master reference data. This is one entity shared between systems, and could be easily standardized, and moved somewhere centric, and made available to other systems as a standard data source. This is one proposed solution for interoperable PaaS, which could be delivered as part of the cloud.
Cloud computing is a style of computing in which dynamically scalable and often virtualised resources are provided as a service over the Internet. Users need not have knowledge of, expertise in, or control over the technology infrastructure "in the cloud" that supports them.
The cloud could be delivered to the user in a variety of ways, all as a service:
- Infrastructure as a Service IaaS, something like amazon web services. Amazon delivered it's cloud services through a well defined set of web services API's, however, it needs some knowledge of the infrastructure you are building: Linux or windows, MySql or Oracle, SDB or relational database. So basically, Amazon delivered an easy to use, easy to configure and deploy environment for your servers.
- Platform as a Service, a container where you application lives. A higher level from IaaS, which comes with some limitations. Google AppEngine is one example, easy to use, deploy and configure. More over, you don't care about the underlying infrastructure: the operating system they are using, the web server as long as your requirement are filled. Building applications with Google AppEngine needs a very small amount of effort to get your application up and running. Limitation is technology used, some API's are closed, like for example I/O in some cases, porting to other PaaS is not trivial, etc.
- Software as a service SaaS is here for so long, sometimes called Application Service Provider, or ASP for short, is the delivery of the software as a service. Usually it's built on top of PaaS, but not necessarily.
A list of Cloud computing providers are classified in http://saaslink.googlepages.com/Laird_CloudMap_Sept2008.png.
Noticeable effort from the community in bringing cloud computing to the next level:
- The Open Cloud Consortium (OCC) http://www.opencloudconsortium.org/
- Cloud Security Alliance http://www.cloudsecurityalliance.org/
- Open Cloud Manifesto - http://opencloudmanifesto.org/ -
Please note that these attempts to standardize part of the cloud computing is not finalize yet, and there is debate on some of them, for example, amazon.com, Microsoft, Google and Salesforce.com, the big four in cloud computing business, are not signatories. Check Steven Martin blog message, it's a bit old, but will give the idea.
Achieving interoperability between application was a challenge for so long, and it will stay that way. Working with cloud computing is no difference, achieving interoperability will not be an easy task.
One rich area is the interoperability among reference data, and could be supported by the cloud, maybe PaaS is the most obvious place to do such work.
As part of the container, providers can start to integrate Master Reference Data repository for hosted applications to (re)use.
Master reference data repository in PaaS, Interoperability bridge
Before moving into details of this section, I want to point out that these are some ideas I have. I don't know if it's available in some of the PaaS available in the market or not, but what I know is that this is a vital need, and will change a lot of what might do when it's there.
PaaS provides a high level solution stack, with a number of layers on top of it abstracting the the underlying infrastructure. PaaS provides you with high level, container like environment, with variety of API's to use for deployment sometimes, and for using other services provided under the same umbrella.
As part of this service, providers can abstract a layer of a predefined representation of master reference data. These are not to include sensitive data, and they will obey to the security rules as defined by the owner of the data. This kind of data representation need a spacial data-structure, supporting dynamic schema manipulations.
Examples of such entities are User, which is shared among all software applications. Address, Work Address, Friends/Buddies, and many others?
The repository it self is a data and meta data storage, created and manipulated dynamically, and exchanged via standard XML format, or JSON. It does not matter as long as it's well defined, and well understood by user/developer. Your class can extend another class if you are working within the same environment using the same tools as the case in, for example, Google AppEngine with java support (hopefully). Java in the backend, bigtable as a database, and GWT in the front end. In this case, Google can exceed what I pointed out in this article, they can have a User Form GWT, and you can extend it and just worry about the additional data you add to that form and to the user object they provides as part of the repository.