Tuesday, September 14, 2010

Business Ideas: Cloud Computing

Earlier this year, I decided that I should just dump all my business ideas here.

Since thinking up ideas seems to be enough for me, it makes sense that I should pass them on to others so that they can money with them.  Part of the delusion is that people who make money with my ideas might actually send me some of it.

Yeh, right.

My family ran a cemetery.  I heard the phrase, "If I get hit by a bus..." more often than most.  Sample sentence: "If I get hit by a bus, the flag map is in the bottom drawer of my desk."  It's not creepy.  People who work in the cemetery and funeral home business know that people die, and their death is usually a big inconvenience for those left behind.  It's life.  Deal with it.

Well, I'm going to put the ideas on this blog without regard to profit in case I get hit by a bus, leaving my ghost with no way to prove that I thought of anything useful.  My ghost could never do the work and collect money anyway, much like its carnal predecessor.

Cloud Computing

I've been thinking about many of these plans since the 90's.  At the time, doing many of them was cost prohibitive, or otherwise risky because of the investment required for racks of servers.

To make a good run at a business, you have to be able to handle the load created by your super-successful ad campaign.  At the peak usage times, the power has to be there to keep everyone happy, or you've blown your advertising wad just to piss people off.

One of the things that was frustrating about running a dialup ISP was phone lines.  You remember busy signals, don't you?  Those ISPs made money because they didn't worry about satisfying everyone.  I couldn't stand busy signals, so at one point I had 207 access lines (9x23), 150 of which were idle for most of the day.

No one ever got a busy signal, but an access line was about $22/mo and 150x$22 = $3300.  Perhaps I should have had 92 fewer access lines and made some people wait a few minutes to get on after their dinner.

Here's where I tell you that I too thought of customized profiles like MySpace and online design of websites like CMS systems back in the 90's.

Someone get me back on the subject.

Cloud Computing

The risk to start a new online business is much lower these days because you do not have to have your own servers somewhere or lease dedicated servers or try to get things started on a shoestring shared server.

Today, you can write your software to run on a cloud computing platform where you "spin up" servers to meet demand and spin them back down when they're no longer required.  You generally pay hosts like Amazon Web Services for each hour a server runs and for the bandwidth you use.

Good cloud services also have an API by which your software can control it's own footprint:  You keep at least one server always available that monitors your whole platform.  Then it can decide when it's time to spin up a new server.

Good cloud services also have a load balancing with detached IPs.  This way, you point your DNS names (a la www.myawesomeservice.com) at the virtual IP and their distribution box forwards the packets to one of your currently running servers.

Writing software for a cloud platform takes a little forethought.

Your software needs to be prepared to serve any session from any server, no matter the state of the session.

If your application is a web service, then you should be aware (and I'm sure you are) that every HTTP interaction is fresh.  The protocol does not actually maintain any sort of information between calls.  The web browser asks for a file, the server sends the file, and everything is done.

If your web application is using Microsoft's session state or PHP's session state, then you should be aware that those states are looked up based on a cookie sent back by the client.  By default, Microsoft and PHP both store a list of session identifiers on the server and compare the cookie to the list and bring back the state.  The "state" could be a list of variables like the Customer ID, etc.

Well, if you're in a cloud computing environment, or in some other situation using an upper layer switch, then you could find a request starting a session on one server and then that very same client eventually sending a request which is forwarded to a different server.

So, you're going to have to store your session states in a server that's always running.  You could store the session states in a database server or in a file on a shared file system.

You could write your own business logic server that communicates with the edge servers via an internal IP network.

Client says to Edge Server, "Gimme my Account Balance."

Edge Server says to Logic Server, "Who is this guy?"

Logic Server says to Edge Server, "He logged in a while ago.  Give him balance to account #454635."

You're going to have to decide the most efficient spot to do the data grabbing.  Sometimes it's easiest to just use an SQL server and have the edge server query the database for the session state and then query it for the account information, etc.  But, these arrangements aren't used in very large scale applications because it would put too much load on an SQL server and it would be a single point of failure making the whole cloud thing kind of silly.

You might want to look at database solutions that replicate data between servers very quickly.  I have a friend from high school who works on mongoDB: http://www.mongodb.org/.  It can pull together document data in a PHP or browser friendly format called JSON... this would be quite useful to create a Twitter/Facebook-killer app.

So is this one of my business ideas?  Killing Facebook and Twitter?  They don't need to die: They're too useful teaching people what sucks about them.  Present a solution.

The business ideas I put here are not going to be complete business plans: They're not going to detail the costs,  the risks, the competition, the exit strategy, etc.

But, the costs are all pretty low.  If you're using Amazon Web Services, then you can plan on spending less than $100/mo for a single server, running all month, 24x7.  The actual cost for a small capacity, Linux server is like $65/mo and then you'd pay for disk storage, bandwidth, etc.  The costs are higher for Windows servers or for servers that need lots of memory or storage...

Services like Rackspace Cloud are a little more expensive for bandwidth, but their performance is higher than Amazon and they have a way to upgrade the capacity of your servers in place... without reinstallation of your software.  This might be worth a few extra bucks spent on bandwidth.

I'm going to post again tomorrow.  Eventually I'm going to post the complete ideas for everything including JoeDesktop, the Twitter client, specific CMS twists, vertical market social networking, and the various services for children.