Tuesday, July 24, 2012

About SaaS

This time I'd like to share my views about different approaches to SaaS. Remember from my previous post - SaaS (just) scales on demand, and when executed, it is somehow isolated from other tenants of the "same" software.

1) PaaS Ready, i.e. software that is ready to be installed/deployed to PaaS. This can be for example a Ruby on Rails application ready to be deployed to Heroku, or java web application to be deployed to Jelastic. It means Software Instance per tenant. E.g. origin code can be hosted on GitHub, you clone it, customize and deploy to PaaS. This is not much different from classic hosting. Beside the fact that it will scale!

Oh, I should have mentioned the simplest approach, used at some of existing SaaS marketplaces. A SaaS markeplace company lets you use a software without being bothered with its installing and deploying. It does not necessarily need to be SaaS actually. I think this is very close to Amazon Marketplace, when they sell pre-configured Amozon Machine Images (AMI). Interesting, but something different. Or non-SaaS approach to SaaS :)

2) Business SaaS, let's call it. SalesForce, WSO2 and may be many others, allows to build SaaS at their platform online. WSO2 has somewhat better case, when one can deploy special type of application - carbon application, but you still need to configure resources needed for the application, like database or web services. Well, how is it different from the first case? At Heroku or Jelastic you may also need to setup resources needed for the application. Is it different because SalesForce and WSO2 applications share execution environment? In my thoughts, difference is rather that you don't have standalone codebase that you can just deploy into PaaS, you build your software with their online tools.

Well, with WSO2 it's not so bad (from software developer point of view, of course). Developers create carbon applications "offline".  Also, what's interesting, setting carbon.enable.saas=true in web.xml, WSO2 application becomes multi-tenant. But looks like WSO2 tenant context can not be leveraged in the application. Developer still needs  to have a multi-tenant architecture for his application, like multi-tenant data store , or anything else. Also it's not clear if only super tenant can run saas enabled carbon application.

Note, I was trying hard to understand whether SalesForce allows to create multi-tenant application. Looks like not. Also it does not seem possible to deploy any redistributable package.

3) Multi-tenant SaaS - tenant aware application, such that each tenant will share the instance of running software. It may look the same for tenants, but technically it will be one deployed instance, serving needs of different tenants. Isolation happens on application level, similarly to WSO2 all resources are shared, but everything is executed isolated. Why it's needed? For better resource utilization. Notice, it comes from previous case. It also can be PaaS Ready application.

Well, the latter is actually area of my research, for those curious why I'm thinking so much about cloud computing. Hopefully next post(s) will be about programming model(s) of multi-tenant applications in Java. Though don't expect it to be "ready" for any PaaS yet.

Off-topic, it could be interesting to talk about sharing revenue between PaaS provider developer of SaaS. It's clearly possible in non-SaaS case, like being an AMI vendor. It's also likely possible in second type. And it's completely up to software developer in third case.

In 2nd case, it rather depends on how billing works in WSO2-like saas enabled case. Will tenant be billed for using super-tenant resources, and/or will he have his own resources?

I'm rather inclined to 3rd type, multi-tenant SaaS, which leaves revenue sharing out :) And hope to write about it. Is there someone excited?

And picture!




Thursday, July 5, 2012

About Cloud Computing

Let me express my understanding of (computing) cloud, that is so much and long talked about. I've come to this understanding today, while talking to my wife - she's great listener of my thoughts like this. Well, I like to explain things to her. I understand them better then :)

First, as to me, the term (computing) cloud, is over used. Mostly everybody uses it for mostly every internet service. That is not absolutely wrong. Because cloud picture is widely and long used to depict internet. Ok, but modern (computing) cloud, must be something else.

Second, (computing) cloud exists on different (3) levels, Infrastructure, Platform and Softwre, all used as  a Service. Iaas, PaaS and Saas for short. What it means?

I think Amazon if not the first, but definitely is the most noticeable provider of IaaS with their Elastic Computing Cloud (EC2). I base on them my understanding. I guess the main "cloudy" thing of their service is elasticity. So, I take it as base. Computing cloud on infrastructure level gives its users feeling of endless computing capacities, by number of smaller computer joined together, in cluster, like into cloud. You get virtually computer. And you can get possible more of them, on demand, interconnected. That's cloud on infrastructure level. That's IaaS.

Further, Platform as a Service, or cloud platform, must be something very similar. Instead of computer, you get application platform. Like Heroku. You can not any longer do everything what you could do on your own computer. Instead you get very strict rules, or predefined environment, or set of them. You can only host your (web) application, written in limited number of programming languages, using limited number of development frameworks and also limited access to peripheral devices. Like you may not be allowed to write on disk or open sockets. But what you get? Virtually endless horizontal extensibility. You app can serve as many requests per second as you would like to pay, but without any efforts to scale. Increase your computing power and cloud platform will do the rest for you. It will copy your application(s) to new computers and balance load between them. That's PaaS.

Finally, SaaS. That was most tricky for me. And I've tired once already to think about it in context of multi-tenancy. So, now, looking from bottom up, I think, it must be more clear what differs Software as a Service from software/web service. As to me, software should use term 'cloud' if and only if it allows you to serve your users needs, not yours. Imagine, you get virtually e-shop, and your friend uses the same e-shop software service. But you both have your own end-user interface, your own products and your own customers. And what's important, when you get more customers, you ask your e-shop software service provider to increase computing power, and that's all you need to grow. So, at Software level, you can not develop your own applicaiton, but you can use what's offered for your business. Some other example - online surveys solutions. Think about it.

Cloud software on Cloud platform in (computing) Cloud - 4Cast?