The Apprenda private PaaS is both full-featured and flexible, supporting .Net and Java development and a wealth of deployment options Credit: Nick Stenning The ideas for the Apprenda PaaS came out of the financial services industry. The wide use of Microsoft technologies in that industry explains why Apprenda started with ASP.Net on Windows, while most other PaaS platforms were built on Linux. Founder and CEO Sinclair Schuller explains that when he worked at Morgan Stanley, his group was constantly reimplementing the same set of services to support ASP.Net applications for analysts and financial consultants: HTTP and database scale-out services, role-based authentication, metering, monitoring, logging, security, server provisioning, multitenancy. When the group asked management whether they could write a reusable set of services so that the actual applications would take a month to develop instead of six months, the answer was no. And Apprenda was born. Apprenda in a nutshell The Apprenda private PaaS is logically an application server and container for .Net and Java applications; it clumps Windows and Linux infrastructure into a single logical layer that is a self-service computing platform for one or more development teams. Physically, Apprenda consists of the server, an SDK, the SOC (Systems Operations Center), an account portal, and a developer portal. The interconnection of nodes in Apprenda forms a grid. The goal of any PaaS is to relieve developers from worrying about infrastructure. Apprenda does that, though IT has to provision and manage it, either on-premise, on cloud instances, or in a hybrid configuration. I tested Apprenda on a single Azure VM running Windows Server 2012 R2 with 8GB of RAM. My single-node test bed lacked Linux and Oracle, which limited me to testing Apprenda with ASP.Net applications backed by SQL Server. Figure 1: On Windows, Apprenda is implemented on IIS. The timecard–v1 application pool is a .Net application running on the Apprenda PaaS. Apprenda can now also run Java apps on Linux. As you can see in the screenshot above (Figure 1), the Windows portion of Apprenda is built on the IIS Web server and .Net 4.5. Optional Linux nodes contain an Apprenda Linux Container, which provides management services for Java Web Applications packaged as WAR files, and installs the WAR files on Tomcat or JBoss, registers the app with Apprenda services, and launches the app. The full stack of Apprenda services, shown below (Figure 2), layers your applications on the Apprenda API, which talks to Apprenda business services, such as metering, logging, and the SOC, and to the Apprenda Kernel, which provides basic platform services like HTTP and database scale-out, application versioning, failure detection and recovery, and multitenancy. Apprenda takes care of providing scale-out, multitenancy, and so on, without requiring the developer to code anything at the application level. In the case of multitenancy, the PaaS can either create a separate database per tenant or expand the database schema to support shared tenancy in a commingled database. The commingled database typically gives better application performance, although isolated databases may be required by regulations. Working with Apprenda Customers who are familiar with Apprenda may be interested in the new features of Apprenda 6. The biggest news is the preview of Docker support, which may be used to deploy WAR files to WebSphere, and to run generic Linux executables — even basic script files. This expands Apprenda beyond its core support for ASP.Net, JBoss, and Tomcat application workloads. As we can see in the screenshot below (Figure 3), Apprenda handles monitoring, scaling, patching, authentication, and reporting. The manual scaling operation shown is augmented by scheduled and automatic scaling operations. Scaling can also be defined in the application’s deployment manifest. Figure 3: Apprenda handles monitoring, scaling, patching, and reporting. Here we are increasing the number of instances for a given service from 1 to 2. The performance improvement was noticeable. The automatic scaling option is missing from this screenshot because I didn’t enable resource throttling for the platform. If it were enabled, automatic scaling would allow you to set the minimum and maximum number of instances for each component; the platform would then scale up or down based on operator-defined rules, such as “When CPU Utilization is > 90% for more than 2 minutes.” Scheduled scaling can accommodate cyclic use cases, such as “scale down on weekends.” You develop Apprenda apps in Visual Studio or Eclipse with the appropriate Apprenda plug-in. The Apprenda SDK for Visual Studio includes .Net Guest Application API files, Visual Studio templates, Java Guest Application API files and docs, an archive builder, a mocker (used to mimic the Apprenda environment on a local development machine), a local API host, and the Apprenda Cloud Shell, or ACS. You can manage Apprenda apps from the ACS command line, from Visual Studio with the Apprenda Extension, or from the Web developer portal. Apprenda supplies demonstration apps for both ASP.Net and Java. Figure 4: The dashboard for an app includes events, event filtering, and uptime. Lifecycle controls are at the bottom right of this page; the next step for this app would be to promote it from the sandbox to production (published). You upload a Zip archive in a specific layout to the Apprenda platform for deployment, calling Apprenda APIs from your code if you wish. You can use the Apprenda archive builder to create the Zip file, or construct it yourself with standard compressed archive tools. The dashboard for an app includes events, event filtering, and uptime (Figure 4). Nothing went wrong with this little app, so we don’t see any events, but in a real app in production, you could easily find yourself swamped with events and would need to filter them to understand what went wrong. The lifecycle controls are at the bottom right of the page; possible application states include definition, sandbox, and published. The app isn’t available to users while it’s in the definition phase. You can patch an app by uploading another archive. When you upload the patch, you need to check a box to tell Apprenda whether the patch is standalone, meaning you want Apprenda to throw away the bits from the last version, or incremental, meaning you want to keep any older files that you’re not replacing. Figure 5: The Apprenda Systems Operations Center allows the Apprenda operator to monitor and control the PaaS itself and the running apps. The Apprenda SOC (Systems Operations Center) allows the Apprenda platform operators to monitor and control the PaaS itself and the running apps. The SOC (Figure 5) provides platform operators with an overview of the current state of the platform. When resource throttling is enabled, the SOC provides information on the current overall allocation of resources and the top guest applications based on memory, CPU, and storage allocation. The Servers and Clouds pages of the SOC enable you to view and manage all the servers and clouds in the Apprenda grid. The Workloads tab for an individual server displays all the applications currently deployed to that server. Figure 6: This is the running Time Card Management app. While not the most sophisticated app in the world, it does demonstrate three-layer ASP.Net architecture running on the Apprenda PaaS. One of the simple ASP.Net demo apps supplied by Apprenda does Time Card Management (Figure 6). It’s not a very exciting Web app, but it demonstrates what the Apprenda PaaS can add to a basic ASP.Net MVC3 app. If you need a PaaS for ASP.Net apps or a mix of ASP.Net and Java apps, Apprenda is one of very few choices available. Similarly, if you need a private PaaS that can run on any cloud and any virtualization technology and create a hybrid grid, Apprenda is one of your very few choices, if not your only choice. On the other hand, if you want a pay-as-you-go public PaaS or your needs can’t support a six-figure annual budget for the platform, Apprenda is not for you. And if your developers prefer Linux but abhor Windows, then OpenShift, Cloud Foundry, or Bluemix might be a better fit for your organization. PaaSSoftware DevelopmentJavaSmall and Medium Business