For some time, I’ve been trying to figure out the requirements for an efficient software-as-as-service infrastructure. Here is what I came up with. I don’t feel that this taxonomy is quite final yet, so I encourage everyone to share your thoughts.
1. Automation. All user-initiated or user-requested operations, such as provisioning new user accounts and new services, allocating new resources, and upgrading to the next level of service needs to be performed very quickly and in a fully automated fashion.
2. Provisioning. Fast automated provisioning is particularly important. Service providers need to be able to provision a new application into the hosting infrastructure and start offering it to customers very quickly. Provisioning of a new customer account or a new service instance for a specific customer should be done even faster.
3. Self-service. Users want to be in control. Hence, users need an interface (API and control panel) for managing service properties within their domain of expertise and system properties that are safe to change within the SLA.
4. Licensing. Since services and applications have specific terms and conditions, providers need to be able to manage application permissions for specific users. In other words, providers need to be able to license service and applications to their users.
5. Billing. Along with separation of responsibilities comes separation of costs. Providers, users and developers act as independent entities and need to know who uses which services, how many resources and for how long. Providers need to be able to charge for service and resource usage as well as for services packages, promotions, volume discounts and so on. All of this requires a comprehensive billing system.
6. Density. One of the most important efficiency factors is the ability to host as many users on a single server as possible. A true multi-tenant design is still more art than engineering, and most applications, middleware and business frameworks (with the exception of data base servers) either don’t support multiple application instances on a single server, or require complex configuration.
7. Isolation. However densely the service instances are packed on a server, they need to be very well isolated from each other on system namespaces, faults, performance, security, etc. Service providers need to be able to fulfill and change SLA for a service without affecting other services. For example, you want to make sure that a buggy application cannot consume too much system resources and starve other applications. At the same time, customers want to make sure that their application performance will not go below certain threshold even if all other applications on the same server are also under high load.
8. Service Levels. The key to efficient SaaS infrastructure is to allow a service or an application to run at any desired level of service – from the most affordable to the highest mission-critical – without tweaking either application or the infrastructure. SaaS hosting infrastructure needs to be able to provide operational capabilities – high availability, zero downtime maintenance, distributed load-balancing, precise resource accounting and management, fault tolerance – to any application.
9. Integration. Once a user has multiple services and applications, it is critical to have some consistency among them. In particular, SSO (Single Sign-On) and UI integration (language locale, color scheme) are important to create a seamless user experience.
10. Migration. Users want the flexibility to change hosting facilities, service plans, and hosting providers with little effort. Such migration requires an ability to take services of a user/tenant and move them to a different environment or infrastructure.
Let me know which requirements of SaaS look more important to you and how you are addressing them right now.
In my next post, I’ll talk about standards and virtualization and why I think they are two most important SaaS enablers.
Looking forward to your comments!