Cloud Computing Terminology - IaaS , PaaS & SaaS - google-app-engine

I went over a number of questions in Stackoverflow & on the web , which were very very useful. I had few questions on what I've read so far with regards to IaaS , PaaS & SaaS. However I have a lot of questions which may be very naive as I haven't seen any of these in action.
1) Is PaaS equivalent of a development environment where a software is developed / customized as opposed to IaaS which is an execution environment to run the developed the software (could be any env test or production)?
2) In case of PaaS , I saw apprenda as an example. As part of Apprenda , I saw .net , Java , IIS & SQL Server listed as part of platform. Does this mean that instead of having to install all these on my local machine or development box , I get to have a sort of remote machine where all the development tools are installed and I just have to go and program whatever I want to?
3) If I have not subscribed to IaaS for instance , how can I run the software developed using the platform that is exposed as a service?
4) I also read that PaaS can either be public or private (within company's firewall). If it is private , will the provider of PaaS basically set of up the platform for development on my company's infrastructure?
5) Can any website that provides be a capability to login be termed as SaaS? Eg: GMAIL , Yahoo Mail , Facebook etc.
6) Can Google Drive , Apple iCloud etc be termed as SaaS?

PAAS : Platform as a Service
You don't care about the underlying hardware or OS.
You only care about your code, the platform takes care of the rest
Scaling is done for you
You have to adhere to some restrictions imposed by the platform
Pay for what you use (more traffick, storage used -> higher bill)
examples are Google AppEngine, Heroku, AWS Elastic Beanstalk
IAAS : Infrasctructure as a Service
You rent infrastructure where you choose the amount of memory, CPU, disk size, OS, ...
You setup the runtime environment will full choice from NodeJs, Redis or LAMP stack or any flavor you can think of.
You are responsible for configuring the rented infrastructure for high availability and scaling out
More freedom but more configuration (devops)
Pay for what you allocate (You setup your machines and choose your infrastructure beforehand)
examples are Google Compute Engine, Amazon EC2
But the world isn't that black and white. PaaS and IaaS grow towards each other. For example AppEngine managed VMS give you more freedom in choosing your underlying OS while still in a PaaS environment. And Google Autoscaler or Kubernetes brings managing your infrastructure to a more declarative level.
Finally SaaS products are oriented towards non-technical end users. So Apple iCloud, Google Drive, Gmail, Yahoo webmail are examples of SaaS.

I try to provide simpler answer and mapping with Azure deployment model
SaaS: Software as a service.
It's simplest, easiest, fastest method to host your web app/service into cloud.
Your web will be deployed automatically into some VMs and autoscale when needed.
You don't need to care about the VMs. Cloud provider will maintain them.
SaaS in Azure: Azure App Services (or Web App/Websites).
PaaS: Plafform as a service.
Cloud provider will create the pre-configured VMs which install all prerequisites (Ex: Windows Server 2012 with .Net 4.5 and IIS installed). These VMs will autoload your sites/apps when it's completely spin-off.
PaaS almost identical to SaaS except it allows you can remote desktop connect to the VMs, do some configuration tasks on there such as run custom startup scripts...
PaaS in Azure: Azure Cloud Services. Azure provides 2 kind of preconfigured VMs. They are Web Roles if you need host the website and Worker Roles if you need run background process.
IaaS: Infrastructure as a service.
Cloud provider will provide you dedicated VMs so you have full control to do any customization you want (you can customize the OS to the services and software...). It just like the VMs on-premises.
It's suitable if your app need to do a lot of customizations on the hosting environments to run.
IaaS in Azure: Azure Virtual Machines

The NIST definition of Cloud Services in general is a great place to start when looking for answers.
It gives the 5 characteristics of Cloud Services:
Broad Network Access
On-demand Self Service
Resource Pooling
Rapid Elasticity
Measured service
And then talks about service models, which are SaaS, PaaS and IaaS.
Simply running your app in the cloud is not sufficient to say it's SaaS. So, it's not just apps being targeted at non-technical users, it's apps that cover those characteristics. A sub-point to resource pooling above is providing some sort of multi-tenanted capability when delivering the solution to users.
1) Is PaaS equivalent of a development environment where a software is developed / customized as opposed to IaaS which is an execution environment to run the developed the software (could be any env test or production)?
A PaaS solution does not have to be a development environment. It can provide the resource for some software being developed, without the developer needing to provision all the underlying facilities to enable the delivery of that resource. Eg, SQL Azure is a PaaS that lets developers have access to a relational DB service. The developer can write and invoke queries against it, without having to stand up SQL Server instances themselves.
2) In case of PaaS , I saw apprenda as an example. As part of Apprenda , I saw .net , Java , IIS & SQL Server listed as part of platform. Does this mean that instead of having to install all these on my local machine or development box , I get to have a sort of remote machine where all the development tools are installed and I just have to go and program whatever I want to?
It should mean that you have access to the remote resources that your development tools can connect to and manage. The server (say SQL server) is not the same as the tool you use to access it, say SQL Server Management studio.
3) If I have not subscribed to IaaS for instance , how can I run the software developed using the platform that is exposed as a service?
You can't.
4) I also read that PaaS can either be public or private (within company's firewall). If it is private , will the provider of PaaS basically set of up the platform for development on my company's infrastructure?
A private PaaS means that a company has setup private infrastructure to allow developers to use a resources that are part of the architecture of a solution that do not need to be managed by the developers themselves.
5) Can any website that provides be a capability to login be termed as SaaS? Eg: GMAIL , Yahoo Mail , Facebook etc.
No, not according to the NIST definition. Providing user login is not the same as enabling multi-tenancy. Simply put, if the app enables companies/teams with groups of users to use it, it's moving towards SaaS. So, think solutions like Slack, Gitter & Freshbooks.
6) Can Google Drive , Apple iCloud etc be termed as SaaS?
Google Drive as part of Google Apps for Business, yes.
Until you start seeing, "iCloud for business", no.

Related

Upload java chat server

recently I have build a chat application with a client and a server it works fine on a virtual machine. But now I am stuck what I need to do with the server application?
Where can I upload it?
I had found that I can upload apps to Google(app engine) but I don't know the address of the server so the client can't connect to it...
please help me I hope my question is clear...
Google App Engine is a PaaS and cannot run any Java Server application that you have written.
So, you will have to make sure that you understand the App Engine platform and write applications using various services that are provided as part of the platform.
To get started, check the following: https://developers.google.com/appengine/docs/java/gettingstarted/introduction
Google also has an offering called Compute Engine, that provides you with Linux VMs hosted on the Google infrastructure.
So if you are looking at VMs, where you want to host your application, you could look at that. You definitely have more flexbility with the Compute Engine but you have to deal with configuration, settings things up and more Administrative stuff.
Compute Engine is not free whereas App Engine comes with a generous free quota.

how to connect Google App Engine PaaS to DaaS

I want to connect my GAE Java project (Paas) to third party Cloud SQL (DaaS), I just want to know is it possible or not!
Details:
With my basic fundamental knowledge on J2EE I'm doing some hacks onGoogle App Engine (Java) PaaS, since Google cloud-sql for GAE is paid I want connect the GAE to any third party cloud SQL service (DaaS) like nuvola which offers free service for limited time period. Developers pain point is Google Cloud storage/ sql doesn't allow free space for developers unlike other platforms like Parse, kinvey etc will do.
update: URL Fetch API we can do that, I'm not sure it's the right way or not! also URL Fetch API Calls are Outgoing Bandwidth are billable!!
If you want to connect to external systems, the recommended way to integrate with them would be via Web Services.
You have 2 options:
Look out for a Web Service (typical REST with JSON/XML data) for your chosen data service provider in the cloud. You can then integrate your GAE app via URL Fetch API.
There is also a likelihood that your data provider also provides client libraries (Java, Python, etc) which you can easily integrate into your application. That would ease the integration.
App Engine also supports Sockets, but they are currently in Preview and available only for Paid Applications.

How to scale a webapp after Heroku

Heroku's great, but expensive. How do most startups scale after hosting with Heroku starts getting too costly?
Let's say we're running rails on a linux server, typical bandwidth and storage needs.
Rackspace? I've just heard of getting into trouble if you go down this route.
Google app engine I've heard is another dangerous route.
Amazon Web Services? Just peel off Heroku's layer and save the money there?
Heroku is a value added layer of services on top of AWS EC2.
If Heroku is more expensive, you can run your own app servers on AWS using EC2 (app servers), ELB (load balancer), ElastiCache (memcached/redis), and RDS (Postgres/Mysql).
All of the Heroku services are provided on top of their applications running on AWS EC2.
Heroku allows ease of use and implements tools/services you will need to build yourself (deployment, scaling, etc). They do this at a premium over the cost of the raw AWS services. You may be able to achieve lower costs and economies of scale with larger instances.
Rackspace has a couple of options for hosting.
Rackspace Cloud: this option is very similar to Amazon but somehow is a bit more limited on the some of features they provide. However, their prices are a bit more competitive's than AWS's. They provide a Rest API as well that you can use to manage your servers programmatically (Although not compatible with AWS's API)
Rackaspace Hosting: with this option you get the whole physical server/infrastructure for you to manage. This option is very cost effective if you need a lot of CPU power (physical CPU) and you use your servers permanently (no on-demand). For example, we created an entire Cloudera/Hadoop cluster using several machines using Rackspace and migrated all of our jobs from EMR (Amazon's Elastic Map Reduce) to our physical cluster with more than 50% savings. The downside to this option is that you generally have to manage the physical servers yourself.

Install tomcat on Google app engine?

I am pretty new to this whole idea of cloud and started of with Google app engine. I was able to create the basic 'hello world' program.
When i tried to understand the difference between a cloud and a server I learned that Cloud is where you have an access to virtual instance created exclusively for you and you are free to choose and install software of your choice.
But I don't see such an option with Google-cloud/app-engine. What if I have a tom-cat based application server which I would like to deploy on a cloud? Will Google app engine be of any help or should I try other cloud service providers such as Amazon EC2, hp cloud etc?
/DJ
The cloud type that you are referring to is called Infrastructure as a Service cloud.
OTOH, Google App Engine is Platform as a Service cloud.
The difference is that IaaS are a bunch of virtual machines that you need to setup yourself (OS + app stack), while PaaS typically comes with it's own API, where you write your app against the API and the rest (sw stack + scalability) is taken care of.
AppEngine comes with it's own servlet container (Tomcat is also a servlet container), so from this standpoint you could use your code on AppEngine. But the problem lies elsewhere: AppEngine imposes a set of limitation on the apps:
app must use GAE provided databases.
app can not write to filesystem
app can not have listening sockets
requests must finish in 60 seconds (e.g. no Comet or WebSockets -> no push)
You might want to review the FAQ.
To add to Peter's excellent answer, note that Google also has an IaaS service called Google Compute Engine.
Regarding other cloud query-
Before you start with cloud you might once try other options. Currently deploying application in almost all services are very easy.
few of them are-
Jelastic , Heroku , rackspace , nimbus , openshift etc.
Difference between cloud and server is very well explained already.
Since you mentioned about tomcat based application , I have worked with Jelastic for the same and found very easy to implement.
http://jelastic.com/docs/tomcat
http://jelastic.com/tomcat-hosting
Try all possible option , it will help you more .

Other preconfigured service hosting platform like Google App Engine?

I'm finding alternatives for Google App Engine for startup. The preconfigured service hosting include security, networking, scaling, database, backup, application, maturity and etc.. Because we have no experts on each parts. It's too hard operating whole service stack properly for only one application programmer.
What other services can I consider for this?
The term you want to search for is PaaS or Platform-as-a-Service. I do not claim to be an expert in this nacent field, however my basic understanding of the key players other than Google App Engine are:
Amazon AWS - My understanding is that Amazon's Web Services gives you bare-bones OS installs that you can completely own. While this allows for more configuration than App Engine, this also means you are on the hook for patching security holes and what not. (Right?)
Heroku - App Engine type functionality, except for Ruby
AppHarbor - App Engine type functionality, except for .NET
Microsoft Azure - Amazon AWS type functionality, except for Windows/The Microsoft stack.
The CloudCamp awards 2011 serves as a nice list of PaaS services

Resources