Starting a new project that will involve developing a mobile, web, and cloud solution for a mapping application. Mobile will include Android and IOS. Simple image processing to resize uploaded images will also be required. Users must be able to synchronize data across all platforms. I’ll be using Spring MVC and Spring Security on the web side. I have not decided if or what template or web UI library I’ll use. That is something I can decide later. Near term I need to decide which PaaS solution to use: Amazon Web Services (AWS) or Google Cloud Platform (GCP). I used Google App Engine a few years ago for a GWT and Android cloud application. I would like to use AWS to get that knowledge and experience. And AWS still appears to be the most popular cloud platform, so it is good to have it on the resume.
The following is a comparison of what my project requires and what is provided by AWS and GCP.
- I will be developing in Java using Spring MVC and Spring Security. Both platforms support Java and these frameworks.
- Both provide a NoSQL database solution.
- I prefer to use a JDO or JPA persistence solution for flexibility. I like the idea of my code being portable. GCP supports JDO and JPA. AWS has their own Java Object Persistence Model. It appears to be similar to a JDO/JPA solution – just using their own annotations. The paradigm is the same, so probably not a big deal.
- For running database queries, again AWS provides their own solution – less portable. GCP supports JDO and JPA queries as well as their own Datastore Queries. In my experience with GCP, larger and more complicated queries required using the GCP Datastore Queries.
- Surprisingly, AWS does not have an image processing service. Third party services that work with AWS (like www.blitline.com) are available or you can spin your own. GCP provides an image processing service that supports resizing, cropping, etc.
- For data storage (images), both platforms provide comparable services, Amazon S3 and Google Cloud Storage.
- My application will provide a search feature. Both platforms provide a search service. Amazon has Cloud Search while Google has a Search API.
- Critical to my application is integration with mobile. Both platforms provide Android and IOS mobile cloud APIs. AWS lists various services such as analytics, database, S3 storage, and event streaming while Google has Cloud Endpoints. Here it appears that Google is lacking. Rather than provide access to specific services, Cloud Endpoints builds a client library to your API. So I am required to develop an API to my database and Cloud Endpoints builds the client library. That is more work.
- Also critical is synchronizing data across all devices. In the ideal case, I could use the same persistence model across all devices. I have experience with this on my previous Google App Engine project and it is not easy maintaining data integrity between multiple devices and the cloud. AWS provides the DynamoDB Object Mapping for Android and IOS which is similar if not the same as the Java Object Persistence Model discussed above. Can I define a single POJO domain package to be used for the cloud, Android, and IOS? That would be great. GCP doesn’t provide anything like this. The closest that I can find is Cloud Sync which seems to be focused on lightweight user preferences and game data.
The last two bullets pushes me to use AWS.