I would like to know with the restrictions of GAE listed below, is it even possible to build a great social app (like Facebook) by hosting that app on GAE?
In other words is GAE an infrastructure capable of hosting an app used by 600 million active users?
Restrictions I've dugged out from a couple of forums / blogs (please feel free to add to the list if you find anything missing):
HTTP Request/Response
- Max request size: 32 MB
- Max response size: 32 MB
- All requests must respond within 30 seconds otherwise GAE will throw DeadlineExceededException
- Each cron job must be executed within 10 minutes
- Cron jobs cannot utilize map reduce
- Every GET or POST to another site is aborted after 5 seconds. You can configure it to wait till 10 seconds max. (intermediate servers would be necessary to work with Twitter and Facebook many times)
- Client can not connect to GAE through FTP (only HTTP and HTTPS).
- No https for custom domains. Only for your-app-id.appspot.com domains.
- If you get an influx of users, you get "over quota" error
Database
- Database behavior is not the same in the local development than in the actual servers.
- GQL. Nothing else.
- No query can retrieve more than 1000 records (sucks seriously if you want to allow your client to have a one-click-go-offline-now button)
- If you need linear access to a massive amount of records to perform an operation, you are out of luck (Google's systems are massively clustered)
- Memcache values max size is 1 MB.
- Can't do simple text search
- You can't join 2 tables.
- Slow (You have to read about how to separate tables using inheritance so that you can search in a table, get the key and then obtain its parent in order to avoid deserialization performance)
- "Too many indexes" runtime exception
- An entity can at most have 5000 property values in an index
- Key names of the form * (start and end with two underscores) are reserved, and should not be used by the application.
- Key names are limited to 500 bytes (UTF-8 encoded, I guess)
Language
- python or java or Go (or languages that uses the JVM like Groovy, Scala and others)
Server Issues
- No static IP (may have throttling and quota problems calling third party APIs)
- Each application is limited to 3000 files
- No control of OS or hardware running the web app