Is there a way for deploying websockets server on Google Cloud Appengine?
No, you cannot. There is an open ticket for this feature, it's been open since 2009. There is maybe some light at the end of the tunnel though, as they've started to make an alpha version of this available.
There was a way for doing it for non secure sockets only(ws), but seems they are no longer support it. Lately they also removed samples from docs in this commit.
Not sure if there are plans for supporting websockets based solutions on appengine in future, so for deploying such a thing on Google Cloud you probably should use Compute Engine, atleast that's the way I go.
Related
As far as I can see, GKE seems to be slighty more complex to configure and deploy an application (using Kubernetes direct files or Helm Charts or something else ?). Furthermore it seems to have no better pod failure detection or better performances ?
Why should we use GKE whereas there is GAE which only needs dispatch.yaml, app.yaml files and gcloud cli to deploy ?
Is there any technical or financial feedback against GAE ?
Finally, how can we make a choice between GKE and GAE ? What whould be the reason to not choose GAE ?
Google Kubernetes Engine(GKE) is a cluster manager and orchestration system for running your Docker containers. Google App Engine(GAE) is basically google managed containers.
They both try to provide you similar main benefits(scalability, redundancy, rollouts, rollbacks, etc.). The main difference is in their philosophy: GKE tries to provide you very fine grained control over everything about your cluster. GAE tries to get you run your apps with as little configuration/management as possible.
With GKE you have more control, but also more work for you. You need to configure the network, security, software updates etc. With GAE you don't need to worry about many of these things, and you can focus on your app.
One overseen benefit of using GKE is to be independent from the cloud provider.
When using kubernetes it is much easier to migrate to another cloud provider or even to a private cloud.
As a rule of thumb, when using a propietary solution you are bound to a cloud provider for good and bad. For example what will you do when your cloud provider decides to deprecate a certain runtime.
When using open source solutions, even when they are managed you are still a free person.
App engine is PaaS where as GKE is CaaS. Below are the comparison among than
Trying to share my thoughts for future visitors
Let me start with the below image and then we will see the OP's questions one-by-one:
As far as I can see, GKE seems to be slighty more complex to configure
and deploy an application (using Kubernetes direct files or Helm
Charts or something else ?).
When you see from the perspective of a client who does not want the overhead of managing the environment - basically a PaaS client - then, yes, Google Kubernetes Engine is slightly more complex as compared to Google App Engine.
As you can see in the above diagram as well - GKE is more towards the left, which it is a less vendor-managed cloud solution, so environment configuration and management overheads are expected.
Furthermore it seems to have no better pod failure detection or better
performances ?
I have not used Google App Engine but I can assure you that Google Kubernetes Engine is a certified Kubernetes (check more over here) so if you are running Kubernetes on Google App Engine, you can be sure that GKE is offering you same performance and features as Google App Engine.
Why should we use GKE whereas there is GAE which only needs
dispatch.yaml, app.yaml files and gcloud cli to deploy ?
As I mentioned in the start and as you can see in the above diagram as well that it is all about control over the environment - the more control you want over your environment, you will select a solution farther on the left side. And please note that more control means more overhead of environment management, and exactly that's the reason why people tend to choose solutions from farther on the right side.
Is there any technical or financial feedback against GAE ?
Both Google Kubernetes Engine and Google App Engine are highly successful and production-grade offerings from Google, so you can be sure about technical aspects. For financial aspects - you need to check their pricing model and see which will go more smoothly in your pockets.
Finally, how can we make a choice between GKE and GAE ? What whould be
the reason to not choose GAE ?
IMHO - the top three decision points could be:
How much you control you want over your environment
More control comes with more self-management, so are you ready to go through the overheads of a self-managed environment
Your budget
Will graphlab, apache mahout or lenskit work on google app engine ?. If it won't, how will i be able to use collaborative filter on gae ?
There should be no problem in principal running LensKit on Google AppEngine, but doing the model build will be tricky (you'll need a way to run that job).
Apache Mahout integrates nicely with platforms such as Hadoop for distributed processing of the data. However, most of the algorithms are designed to work standalone as well. You should be able to run them within App Engine without an issue. For scalability though, I would consider switching to Hadoop.
I have an application that is using JDBC to manipulate its data.
I'm looking for a way to run the application on Appengine. Unfortunately, it seems like there aren't many options besides datastore (which I just can't get used to).
I've tried to use an embedded JavaDB, but Appengine blocks FileOutputStream (throws an exception "java.io.FileOutputStream is a restricted class" on initial driver loading). Therefore, I haven't tried Sqlite.
I've also tried to use Jiql, a new project that offers a JDBC interface to Datastore. However, I just can't seem to establish a "connection". It is somewhat unclear to me how to use jiql (like: what user/pass do you supply?), despite the few examples on their site.
I've looked at Google Cloud SQL and eventually signed up for it. It seemed to be the perfect solution to our problem, until I realized it's a paid service (it'll be paid soon, once it leaves the beta phase). I prefer not to pay (yet) as I'm still testing and evaluating the potential of GAE.
--
What would you recommend, keeping in mind would like to use JDBC for the persistence layer of the application?
Thanks in advance!
GAE supports two frameworks for persistence, JPA and JDO. There are few frameworks that plays well with GAE rules like Objectify. But to start with datastore you can also take at google tutorial GAE DATASTORE. If you need to learn the relationship with JPA and support for JDBC persistence Check this Link
Can an application developed on Google App Engine be run any where else without heavy modification? I mean at a cooperate/private server?
If you are developing using GAE and GWT alone and not using any of the GAE specific services like mail, blobstore, memcache then you have nothing to worry about. You get tied down to GAE to the extent you use GAE services only. That said, you have to watch how you are accessing DataStore, as low level API's are going to lock you down to DataStore.
I haven't tried using AppScale and am assuming you were asking if you could host your web application on a standalone Tomcat/Glassfish server with a conventional RDBMS.
AppScale and TypoonAE are both projects which attempt to allow you to host your own App Engine compatible projects. Both are quite young and chasing the moving target that is GAE.
This question has been addressed elsewhere
You can use Appscale.
Please, refer to this post.
I recently had to realize a project on Google AppEngine. At the beginning I was sceptic. But there a some really nice approaches on Appengine:
No server setup. Everything works out of the box. Gzip, libraries, etc.
One-Click-Deployment. Fire up GAE Launcher on the Mac and click DEPLOY. Done.
Low costs
Easy in-production-logging
But there are some things I don't like if I'm thinking about professional projects
The blobstore. It's just... weird. And non-backupable
All the 1 MB restrictions
The feeling that your code will only run on AppEngine. (BigTable)
Do you know any similar alternatives to AppEngine? And I don't mean services like EC2.
You can have a look at AppScale
Its an open-source implementation of AppEngine which you can deploy on your own machines, with a host of databases to choose from.
I think Heroku is a great alternative.
It can run most of GAE existing apps, since it supports django, but also:
It supports Ruby (w or w/o Rails), Java (w or w/o Spring), Node.js, Clojure,...
It has a strong CLI support (git push for publishing, creation of apps, scaling, log, ps,...)
It supports MySql and PostgreSQL (and, so on, MongoDB, Amazon RDS, etc.)
It has a free tier for 750 hours a month (~1 machine always up) for every app.
It has a collection of addons for providing cloud services as a resources for the apps
It has an add-on program to develop your own add-ons.
Really, it is a good alternative.
If you want your application is not binded to GAE, the best approach is to use well-known langs and well-known persistence providers. Ruby+PostgreSQL, for instance, could be a combination very portable. Django as well, but w/o BigTable...
AppScale and TyphoonAE are both third-party implementations of the App Engine platform. TyphoonAE is targeted at small-to-medium scale, while AppScale is targeted at the large-scale end of things.
As far as backing up the blobstore goes, this is quite doable: just use the built in handler to serve blobs, and, in conjunction with remote_api, you can download your blobs just fine.
I almost hate to mention Microsoft in a Google-related question, but I'm completely vendor-agnostic. So, I'll offer Microsoft's Azure as a platform that offers many similarities to AppEngine but enough differences that it might fit as a good answer to your question.
Azure and AppEngine are similar in that they are both designed to allow you to build easily scalable applications. Azure gives you Microsoft's standard web toolkit options: C#, VB.NET, ASP.NET ASP.NET MVC, but also offers PHP. It has a NoSQL, document database like AppEngine but also gives you the option of choosing a more standard instance of SQL Server. Although I haven't used it myself, it looks like AppEngine for Business now offers SQL, too.
Azure gives you a ready means of having long-running background processes. AppEngine does not to the best of my knowledge.
From my perspective, AppEngine has the huge advantage of charging you for usage only when a request is actually being processed. An Azure instance causes you to get billed even for time that it is completely idle. That's entirely typical, but the fact that Google doesn't so it that way makes me choose AppEngine every time. My budget is too tight to allow me to spend money for idle CPU hours.
There's a port of django to non-relational databases that works with app engine or mongodb.
google for django non-rel
documentation is a bit sparse though