You can try moving to Elastic Beanstalk, SimpleDB, and SQS but this
feels like a lot of work for a platform you will have to do a lot of
management for. AWS' offerings are not nearly as well integrated as
GAE. I did some experimentation there and didn't like what I found.
Maybe one of the other cloud providers will be better - check out
RedHat's new offering. Or maybe VMware's. Neither will be
deploy-and-forget like GAE.
It's certainly possible that you have an app that is not sustainable
with GAE's new pricing, but I would look closely. With multithreading
a single Java appserver instance can today handle 10 simultaneous
requests, and this number will probably go up as they refine the
service. So instance pricing is probably not as painful as it sounds.
The bigger question is datastore call pricing, which you may be able
to optimize with memcaching. It's certainly going to be more
expensive than running your own Mongo instances on linode or whatnot,
but GAE provides HRD and automatic infinite scaling. Deploy and
forget.
I'm somewhat worried about the pricing as well, but for the time being
the benefits of GAE are simply too compelling. That said, I don't use
backends even though I'd like to because they're too expensive. But
the costs of the rest of the system do not seem outrageous for most
applications.
Jeff
You can try moving to Elastic Beanstalk, SimpleDB, and SQS but this
feels like a lot of work for a platform you will have to do a lot of
management for. AWS' offerings are not nearly as well integrated as
GAE. I did some experimentation there and didn't like what I found.
I am hardly an expert. I tried setting up the match hive for
Similarity on EB as an experiment. I found:
* The documentation is quite poor by GAE standards.
* The community forums are pretty much a wasteland. Doesn't look
like many people are using it.
* The tools were clumsy. Nothing so elegant as the "deploy" button in eclipse.
* Long waits while a server starts or restarts. Really, unacceptably
long - multiple minutes.
* Old versions of some java libraries (don't remember which ones
offhand, probably apache ones like httpclient) in the deployment
profile conflicted with ones I was trying to use in my WAR.
* I couldn't find *any* way to control java.util.logging output. I
don't think there is one. Seriously, WTF?
It was a dreadful experience, and sent me scurrying back to
rackspacecloud. EB felt entirely half-baked. Maybe it will get
better, but I doubt it. In AWS, everything is a hypervisor virtual
machine. For application serving, GAE's approach of "everything is a
JVM" is vastly superior - a JVM starts up in seconds and consumes less
resources.
Seriously, if I had to ditch GAE, I'd probably go to some PaaS
provider that offers MongoDB/Morphia. Most likely RedHat's new
offering, but that's mainly to get positioned for using Gavin's new
language when it's ready. Either that or I'd go to Joylent and start
using Node/CoffeeScript on the server side. Depends on the project.
Unfortunately there really isn't anything else like GAE on the market.
All the other PaaS (if you can really call it that) providers seem to
be adopting the philosophy of "we'll give you any piece you want to
manage!" rather than "we just give you an API and you can forget about
what's underneath".
Jeff
Everyone's app is going to be different, but I notice the loudest
complaints come from Python users. We Java developers have
<threadsafe>true</threadsafe> which should provide some significant
insulation from per-instance pricing; it *should* (given a properly
behaving scheduler) make per-instance pricing equivalent to CPU usage.
That is to say, GAE should only spin up a new instance of your app
when you've already maxed out a CPU of the old instance. The
scheduler might have some bugs still, and it may not be smart enough
yet (ie max concurrency might be temporarily hardcoded at 10), but I
have faith that these issues will be resolved.
So, don't freak out over per-instance pricing. Just make sure you
have threadsafe=true and file bugs if the scheduler doesn't prune idle
instances fast enough (or spin up new instances at the appropriate
time). I haven't spent time tuning the new knobs yet, but my guess is
that we shouldn't need to set high max latency because a single
instance can handle 10 (possibly more) concurrent requests.
The big change that may affect Java developers is the new datastore
pricing. This will vary wildly by application. The solution is to
optimize the app in the same way you were doing so before - optimize
queries, use memcache where possible. I don't have a good feeling for
what this price increase will generally entail because I can't filter
out all the per-instance complaints from Python users on the mailing
lists. However, you aren't paying for a DBA so appengine is still a
win for most apps.
Philosophically, here's what I see happening:
Appengine (probably among many other departments at Google) now needs
to pay for itself. This means that one of Google's previous
advantages (nearly infinite resources to throw at projects) is now a
liability - we customers must now bear the brunt of all the
inefficiencies built into the system because cost was previously a
non-issue. Google has little experience building lean products, so I
expect that unsubsidized GAE will *always* be significantly more
expensive than "other providers".
So look at your own business model. Is it like Google's? Are you
building a product whereby the actual server time represents a tiny
percentage of your net value? Then GAE is still a good bet. On the
other hand, are you building a product that competes on price, where
you charge small premium for an enhancement to basic computing
services? Examples: CDN-in-a-box, Dropbox. If so, then GAE is a
terrible idea. Because Google is not an efficient company, the
baseline cost will always be too high.
I hope this doesn't discourage most of you from using Appengine. It
hasn't discouraged me. As Jon mentioned, we just started a new
company developing a new product and we're choosing GAE as a platform
despite the price increase. For a small bootstrapped startup, the
benefits are just too compelling.
Jeff
Oh, this means I will roll a release of Objectify 3.0.1 tonight.
Jeff
Jeff, did you ever look at Heroku with Java? I think that's probably one of the closest products to App Engine. I haven't had time to work with it myself, though I fiddled around with a very early version (Rails/MySQL) and was generally impressed with what I saw. Both that team and ours seem to have the same rough set of ideas about what a platform as a service should do.In terms of businesses, I fully agree. There's another thread on the main groups where someone is asking if Google has any tips for people trying to bootstrap a business because App Engine is no longer, well, free. I really don't. I have a lot of respect for entrepreneurs because bootstrapping is a hell of a lot harder than it sounds. That applies to starting a business in general.--Ikai
It looks like that doc may be slightly out of date. This page
suggests there is a second stack (herokuapp.com instead of heroku.com)
which allows multiple concurrent requests:
http://devcenter.heroku.com/articles/http-routing
But yeah, the shining gem in the world of Appengine is the HRD.
Everything else is can be replicated in other services - maybe with
some effort, but it's possible for a small team. The HRD changes
everything.
Jeff
Jeff
Jeff