|
Comments
Did you read today's front page stories & breaking news?
SYS-CON.TV
|
Features The Application Server and SOA
The characteristics to look for in an app server
By: Larry Cable
Feb. 17, 2009 08:00 AM
When discussing SOA, much of that discussion normally focuses on either the role and value of a "governance" process to manage the lifecycle of a SOA deployment and the use of a metadata repository to contain and control the artifacts associated with that governance process, or the central role that an enterprise service bus plays in the transformations between, and the routing of invocations, of services. While a governance process and an enterprise service bus may both distinguish SOA from other architectural approaches and be crucial in SOA's success, the focus on these distinguishing and valuable characteristics of SOA seem to overshadow all else - so much so that one could be forgiven for forgetting the "services" (http://en.wikipedia.org/wiki/Service_(systems_architecture)) themselves, and the crucial role and capabilities of the container(s) and runtime(s) that host these service instances in realizing a successful, enterprise-scale, mission-critical SOA deployment. This article, in part, attempts to redress that imbalance by discussing the role and characteristics of service container(s) and runtime(s) - in Perhaps it's because, unlike many of its predecessors, SOA is technology-agnostic (i.e., it's more of a meta-architecture approach), that it's growing in adoption. The fact that you can create an SOA deployment using .NET, Java, CORBA, Message Oriented Middleware (MOM), DCE, DCOM, Web Services (based on REST or SOAP), or a host of other technologies, is its core strength. This diversity can, however, also result in a key weakness in creating a successful deployment because of the diverse requirements imposed on the runtimes or containers that host particular services. In beginning to consider the role and responsibilities of service containers or runtimes, it's worth noting a key distinction between developing and deploying an application versus a service. Applications are typically self-contained black boxes, the internal implementations of which can be changed, sometimes, radically, without impact on their consumers or users; while the internal implementation of a service can also change radically without impact on its consumers. Where a service differs from an application is that a service can't typically anticipate its adoption, reuse, or composition. So, when developing and deploying a service, it's crucial to realize that you're in fact defining both a platform (API) and providing a service (quality of service/service level agreement) either implicitly or explicitly. What are the implications of this? When choosing a programming model to implement a particular service the developer should consider the ability of that model to adequately describe a reusable, broadly consumable, and, most critically, an evolvable service interface definition (IDL) - one that's separately evolvable from its implementation. To illustrate this, let's consider the CORBA IDL and Web Services Definition Language. While both these IDLs are abstracted from their target implementation languages, it can be argued that WSDL is significantly better than CORBA IDL at completely decoupling the interface from the implementation and so allows both the implementation and interface to evolve somewhat independently, and also, most significantly, to be evolved and deployed alongside previous versions of a particular definition or schema to allow clients or consumers of all versions of the interface to continue to function. Ignore this capability at your peril - if you evolve your service implementation and/or interface without taking care of backward compatibility with your current consumers, the results could create significant difficulties. So selecting a container or runtime that supports a broad set of programming models, their associated IDLs (if any), and the ability to host multiple versions of a particular service implementation and interface is a key. The second distinction between an application and a service is the relative unpredictability of the demands on a service versus an application over its lifetime. As an SOA deployment matures over time, the most critical or useful services in that deployment will be increasingly reused, often in ways the original developer or deployer never contemplated. Therefore the ability of the container and/or runtime hosting a particular service instance (or instances) to scale to meet highly variable demands from their clients/consumers is key to creating a mission-critical SOA deployment. Because of the inherent distributed nature of SOA-style applications, a particular composite application is only as robust and scalable as its least scalable and robust component. This may seem obvious, but it's often overlooked (with disastrous results) when developing and deploying composite applications. So, in view of the critical impact of service instance runtimes or containers on the ultimate success of the applications that may consume them, what characteristics should we look for in an application server? 1. Programming Model(s): JAX-WS: JAX-B: JMS: EJB: JAX-RS (JSR 311, currently under development): Service Component Architecture: JavaIDL: 2. Enterprise Information Systems Integration: Since most SOA deployments occur virally in the context of an existing mature IT infrastructure, the ability of an application server to encapsulate existing IT assets and recast them as composable services is a key enabler. The Java Connector Architecture describes technology that prescribes connectivity to external systems through connectors and thus allows new services to leverage packaged applications and systems for implementing units of work or for pulling data these existing systems for greater reuse in a SOA deployment. 3. Developer Tools Integration: 4. Quality of Service: Reliability: Features such as automatic state replication of service instance data and transparent failover of protocol requests between hosting containers can transparently isolate applications from individual failures of services. High Availability: Additionally, if the container supports multiple versions of the service or application executing side-by-side, this greatly aids in migrating clients or consumers from earlier versions of the service to newer ones seamlessly. Scalability: Security: So a container or runtime that integrates well with network authorization and authentication, policy, credential, and certificate management systems is highly desirable. Support for multiple identity or credential representation mechanisms is particularly crucial for true secure interoperability between distributed heterogeneous service containers. Transactions: 5. Operational Management and Administration: The administration and management of SOA deployments is very much in its infancy today. Little exists that enables the management, monitoring, and administration of composite SOA applications, although the SCA specifications in the areas of assembly and policy models are beginning to address the management of distributed composites. However the integration between application servers hosting Web Services endpoints, and Web Services management solutions does enable the end-to-end management, monitoring, and policy enforcement on such services. In the interim, the facilities that many application servers provide, such as JMX, SNMP, and emerging Web Services-based management protocols can be used in an ad hoc fashion to manage and monitor individual SOA services and applications deployed therein, allowing IT operations departments to do end-to-end management of SOA deployments. In summary, since SOA is all about creating a rich portfolio of reusable services to enable rapid construction of new applications to meet the needs of business and provide those new applications more economically, having a container that can deliver a rich development environment plus a reliable, scalable, secure, and manageable runtime environment is key to creating a successful enterprise-class deployment. A superior Java application server is ready-made to meet these needs. Reader Feedback: Page 1 of 1
Latest Cloud Developer Stories
Subscribe to the World's Most Powerful Newsletters
Subscribe to Our Rss Feeds & Get Your SYS-CON News Live!
|
SYS-CON Featured Whitepapers
Most Read This Week
Breaking Cloud Computing News
|
|||||||||||||||||||||||||||||||||||||||||||||||||