Agile Zone is brought to you in partnership with:

Current: CEO at Jelastic Inc. Past: Engineer-Programmer of Science Department at National Space Agency of Ukraine Ruslan has posted 3 posts at DZone. You can read more from them at their website. View Full User Profile

Evolution of Java PaaS toward standards and developer control

12.08.2011
| 8922 views |
  • submit to reddit

You’ve created the next amazing blockbuster Java application and now need to find a server to run it, looking for a service which would be cost-effective, elastic, compatible with your application and tools, and not trying to lock you in.

Historically, hosting services have been very inflexible. A customer looking to change out servers rented from a hosted service provider would have to wait for several days, sometimes resulting in a significant blow to credibility and other losses. Amazon, with its infrastructure-as-a-service (IaaS) solution, was able to reduce that operation to minutes, yet still left most of the server administration tasks to users. Later, first generation platform-as-a-service (PaaS) offerings, like Google AppEngine and Heroku, allowed developers to upload their application code to a preconfigured environment, but with a trade-off. Developers often had to rewrite code to run on the vendor's platform and give up control of the execution environment.

PaaS for the cloud needs to evolve to address the shortcomings of earlier platforms. This next generation platform - PaaS 2.0 - should combine the global availability of the hosting ecosystem (hosters, their customers and application developers), the standardization and flexibility of IaaS, and ease of provisioning and scaling.

Proprietary Engines to Standard Execution Environments

The first Java platforms as a service, like Google App Engine, implemented proprietary execution environments. Developers had to learn the new environment and its limitations, and change their code to work in that environment. Some platforms, like Heroku, tried to mitigate this problem by taking an existing open source server and customizing it. While this made the learning curve smaller, the limitations imposed on developers, such as the absence of multi-threading and limited server choice, meant that most existing applications could not be deployed "as is" in PaaS. This kind of worked in limited languages like PHP and Ruby, but is totally incompatible with Java.

Java, a popular and established programming language, is supported by numerous application servers that suit various deployment scenarios. The Wikipedia page on Java Platform Enterprise Edition lists a variety of server options, including Tomcat, GlassFish and Jetty - each with its share of devoted users and advantages in particular scenarios. Developers are not eager to switch between servers and want the exact environment required by their applications.

The same situation is true for database servers. Older platforms offer either proprietary solutions or support only one type of database server, such as MySQL, so the environment topology for the applications can't be set up. Use of proprietary storage platforms, such as Google's Big Table or Amazon SimpleDB, lock developers into a specific service and hold them hostage to changes in the service provider's policies. Recent price increases by Google AppEngine illustrate the problem.
PaaS 2.0 should offer a wide range of application and database servers. This is the only way that developers can achieve 100 percent compatibility with existing open standards, use a wide range of libraries and frameworks, and establish environment topologies according to their tastes, needs and knowledge, without vendor lock-in.

Separation of Platform and Service

Early PaaS offerings lack a separation between platform and service. Google, for example, is the only service provider offering Google App Engine. Amazon is the only one offering Amazon Elastic Beanstalk. Salesforce.com (the owner of Heroku) is the only one offering Heroku, and so on. If you like the platform, but don't like the service - too bad. If the price goes up (as in Google's case) or if you need the service outside the U.S. with a different set of service level agreements (SLA) or certifications - again, too bad. This marriage between platform and service limits consumer choice and stifles innovation.
PaaS needs to evolve to an ecosystem model where platforms are developed by software companies, and the service is available in multiple geographies, across a variety of industries, at attractive price points, and with value-add options from an ecosystem of hosted service providers.

Scalability

Scalability for first-generation PaaS offerings came at a price. Platforms were not able to automatically add resources, such as RAM and CPU, when apps needed them. Instead, developers had to change their apps to use multiple parallel machines, and add machines each time more resources were needed.
While horizontal scaling creates highly scalable and available Internet applications, it imposes huge additional requirements on application developers, making code redesign necessary just to ensure the application has the resources it needs.

The next-generation PaaS needs to be more flexible in adapting to applications. If a developer chooses to run a single instance of an application (or the application is just not designed to run on multiple machines), the platform needs to automatically give the application the resources it needs when usage goes up. The same is true when usage goes down. If no one is using the system at 1 a.m. and it only needs 128 MB of memory, PaaS needs to automatically recycle the rest of the resources to reduce the bill.
PaaS 2.0 shouldn't force developers to change their applications and behaviors, but should support both scaling scenarios without imposing limitations.

 

Control over the Environment

Like the limitations that early PaaS imposed on the application server, developers were also very limited in how they could work with the execution environment to extend and control it. If an extra library was needed for an application, the developer could only use frameworks made available by the vendor. If the developer needed to fine-tune server configuration files or add new ones, he was out of luck if the application did not fit within the platform's limits. PaaS 2.0 needs to allow developers to use all of the libraries and configurations currently available.

Graphical User Interface

Usability is another key requirement for PaaS technology to go mainstream. First-generation PaaS platforms often required using obscure command-line utilities to get anything done, making the learning curve even bigger and limiting its use among enthusiasts. PaaS 2.0 needs to easily integrate into the tools that developers know and use already with a highly intuitive graphical user interface of its own.

You are obviously welcome to try the free beta of Jelastic at http://jelastic.com and see how it stacks up against the principles of PaaS 2.0 listed above.

Published at DZone with permission of its author, Ruslan Synytsky.

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)

Comments

John David replied on Wed, 2012/01/25 - 7:04pm

PaaS is a type of cloud service in which the provider delivers not only on-demand hardware and operating-system services, but also application platforms and solution stacks. PaaS services automate most of the IT management aspects associated with application deployment, including resource allocation, staging and testing, load balancing, database access, and access to platform libraries. A key feature of PaaS is multitenant architecture: multiple unrelated applications can run on the same hardware and software infrastructure, resulting in cost savings and more-efficient use of computing resources. Developers can focus on the application itself, as opposed to deployment and IT issues.

new java

Chris Haddad replied on Sun, 2012/04/29 - 2:29pm

Hi Ruslan,   your article describes standard platform attributes.   

 

  • PaaS 2.0 should offer a wide range of application and database servers. 
  • PaaS 2.0 shouldn't force developers to change their applications and behaviors, but should support both scaling scenarios without imposing limitations. 
  •  PaaS 2.0 needs to allow developers to use all of the libraries and configurations currently available.
  •  PaaS 2.0 needs to easily integrate into the tools that developers know and use already with a highly intuitive graphical user interface of its own. 

What makes the application platform Cloudy?  

While I don't believe PaaS should force developers to change, I do believe scaling is impacted by architecture decisions.  Cloud Native application platforms may provide architectural guiderails facilitating wide scale-out scenarios, effective resource pooling, and increased tenant density.    To learn more about my views on a suitable framework to evaluate Cloud platforms, ready my white paper at http://wso2.com/casestudies/selecting-a-cloud-platform

 

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.