How to SaaS-ify your .NET Application
Lately, I have been working on designing Cloud based Datacenters and suggesting Cloud Solutions for customers, etc. I have evaluated quite a few vendors at different spaces in the cloud (Infra, Platform, Security, etc.). I thought, I would share one of the most asked questions by customers.
Q: How do I SaaSify (or SaaS enable) my application ?
Before I jump on to answering that question, I would like to draw some background here, I believe in my prior blogs, I did mention about what is Cloud and all the other stuff (which you may not care about) . In this section, we will look at SaaS
So, lets start from the basics, the “Necessity”…Quite frankly, the primary need for cloud is to ‘Get more Bang out of the buck’ and that all … Isn’t it always about it? Almost, the cloud however also provides other features like availability, resiliency, yada yada … Lets answer the following question …
Q: What is SaaS?
Let’s take a look at software! How can I get more from the investment that I have always made? Wouldn’t it be nice, if I could have the same application used by my many customers, without having to deploy a completely new infrastructure, servers or instances of application for each one of them. (Like in traditional days) Now there is nothing wrong doing it the old way, but the overhead costs are high and a lot of computing resources are not effectively utilized. Now, I have already mentioned in my earlier blog, that cloud follows the “Natural Evolution” … It evolved from Servers to Blade Servers, to Virtual Servers, and now even squeezing more from the virtuals.
This is nothing but SaaS, where multiple people can use the same software, without us having to put in a completely different deployment for each customer. People like the idea of multiple people using the software, and they getting paid for it. Then normally the next question is
Q: So how can I SaaS enable my application?
There are 2 ways,
1. Have your developer re write the code to incorporate, the names of the client, billing structures, connection with some Authentication & Authorization (if not already present), etc !!!
Doesn’t sound easy … Does it ? The cost of development (actually re-development) will be high and even going forward the overhead for management and operations will be high,
I guess the below cartoon will portray my point
This option works, but has a lot of Cons , let us take a look at Pro’s and Cons for this method
- Completely Controlled
- Any programming Language
- High Capital Expenditure
- Time taking process
- The business logic and the costing is still hard coded a lot of times and its essential for the program to change to modify pricing, etc
Option 2: Use SaaS Grid
SaaS Grid is the product from Apprenda. Please remember that this will only work if you have a .NET program (3-Tier web Architecture) to be SaaSified . It doesn’t work on Java
Now, what SaaS Grid is under the covers is a .NET program itself which is capable of running other .NET programs inside it. Yes!! that’s it, same concept of Hypervisors (For those who don’t know, Hypervisors are the heart of the Virtual machine, a layer between the Hardware and multiple operating systems that they run on top of them) in the same way, (drawing an analogy ofcourse, ) SaaSgrid is the hypervisor between the operating system and the programs running on it.This product is a .NET application, it needs to be installed on servers, after which the application will itself host multiple other .NET applications. The application has a few features like
- · Authentication (Federation is Allowed)
- · Authorization
- · Multi tenancy
- · Billing
With SaaSgrid, you are sure to use the following features
- You don’t have to code for the platform.
- Time to market is made better by giving the developers access to create and deploy applications on will
- Enforce compliance, by allowing / disallowing methods (DLL’s)
- Allow easy scaling of the application.
- Standardizing components like authentication
- Offloading multi tenancy concepts
- Abstract Infrastructure layer from the application.
- Consolidate applications.
And the below diagram shows how SaaSGrid will assist when deploying multiple application
Q: How does SaaS Grid saasify my applicationSaaS Grid deployed the application as a normal application; it went ahead and did some changes on the database. (There are how ever 2 modes on the Database)
If you chose commingled, it added columns representing the tenant name (so on and so forth), and it also created views, so when the application queries, it will query the view and hence no change needed in the application.
If you chose Isolated, it created isolated databases for each tenant and then directed the queries of the application to the appropriate databases during the run time.
SaaS Grid inherently has authentication and authorization, so it knows who logged in and what are they allowed to-do.
SaaS Grid intercepts user calls to the application and application calls to the resources and re-routes accordingly, completely transparent to the application. The application doesn’t even need to know. As you can see, we have not deployed multiple different applications; we have not over used the resources at all.
The SaaS grid does it very intelligently, so we don’t see any performance degradation.
There is other fancy stuff that you can do but more on that later….