4

Sapiens, I seek thy help! We're about to begin building the backend infrastructure of our mobile application that is going to store (and organise) files quite a lot like Dropbox. While I did extensive reading on engineering blogs (and High Scalability posts) about the backend architectures of few large-scale applications, including Dropbox, the following points have left me undecided where to start:

  • I'm the only backend engineer on the team until we raise some money and hire more people.
  • My language of preference has been Ruby since I started developing projects big or small. I wrote API's for 2 separate mobile apps in the last two years, both in Ruby/Sinatra and want to know if that combination is suitable for applications of, say, Dropbox-scale. Plus PhusionPassenger nginx module as HTTP reverse proxy server?

  • The choice of DB. I've majorly used MongoDB as the primary data store in the last 2 apps. Now, from what I've tried to dig out about the other large-scale applications, MySQL and PostgreSQL dominate backend architectures, especially for those designed around our use case. A point to note, though, is are they 'stuck' with RDMS solutions because MongoDB wasn't as mature back than as it is right now? I do have some basic experience with MySQL and PostgreSQL both, but not to the extent of setting up replica set and sharding counterparts of MongoDB in them (not that I plan on sharding right at the beginning).

  • Finally, keeping all the above in consideration, does it make sense to start with a Ruby, Sinatra, nginx, MongoDB, Redis stack until launch (with the aim of getting there faster) and plan to switch to RDBMS later on as team assets grow?
1

If your application is just "going to store (and organise) files quite a lot like Dropbox", then I recommend you re-use an existing open source backend, and customize it (if you need). Make sure the backend you choose implements the CMIS protocol, rather than a non-standard API. That will allow you to switch backends easily in the future. The CMIS protocol allows you to manage and organize files, so it seems to fit your needs.

There are several open source CMIS repositories, with various clustering and scalability characteristics, the most popular are Alfresco and Nuxeo. They come with a web interface that you can ignore, use a firewall to block everything except CMIS (you can tell by URL). Their licenses are respectively LGPL and Apache 2, which means that you can build on them and don't have to make your code itself open source.

If you are into NoSQL, I recommend NemakiWare (disclaimer: I worked on it). It uses CouchDB and is CMIS-compatible. It is actually being used as the backend server for a Dropbox-like service, both the server and the client are open source.

Note: I was in your shoes a few years ago, building a Dropbox-like client app, and I chose to make it compatible with any CMIS-compliant server.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.