Based in Tel Aviv, Israel, Vitali Margolin is the Head of R&D for Roomer. Vitali leads a team of seven developers who built and operate the travel marketplace www.roomertravel.com and the travel protection service Life Happens, both running on Heroku.
What are you running on Heroku?
The four big projects are: the Roomer website, our administration app, our partner network and B2B website, and the Roomer API. The Roomer API is our highest load app. It can get up to 10k requests per minute from partner integrations such as Kayak. We have a few more technical products, including an app that does text recognition and automatically decodes confirmation emails, as well as a smart pricing system and a search algorithm.
About 90% of everything runs on Heroku. We have ten “pipelines” which represent ten projects. In every pipeline we have staging, production, and a few sandboxes, so I’m guessing we have about 50 apps total on Heroku.
Tell us about your stack
Roomer is basically all Ruby on Rails. We have some models built in C++, which are integrated inside Ruby, and which we compile automatically when they get pushed to production.
On the front end we use a bit of CoffeeScript, and the Backbone.js framework. We use SCSS for our CSS rendering.
Our database is MySQL stored directly on Amazon. We use Amazon Redshift for our data warehouse because we process a lot of data, especially from our API. After we reached something like 10 billion rows in MySQL, we got to the point that it just couldn’t handle the speed we wanted, so we moved to Redshift. We use Amazon SQS for queuing services.
We use a lot of Heroku add-ons, including Memcached Cloud and Redis Cloud for caching, New Relic APM for performance monitoring, Logentries for all our logs, Librato for real-time monitoring, and also Gemfury.
How does your team ship new features?
We take a continuous integration and continuous deployment approach using Heroku’s GitHub integration and CircleCI’s GitHub integration. We follow the GitHub approach of two branches – the master and the branch you’re working on. So every developer can push to master and push to production, and whenever you actually merge something it will go into CircleCI, run the tests, and automatically deploy. Everyone is notified and the developer updates what he output to production. So we upload between zero and twelve versions every day—but not before weekends!
You mentioned Pipelines earlier, how does that fit into your CD workflow?
We’ve tried your Heroku Pipelines system and we like it because it’s so comfortable. Every developer doesn’t have to have his own environment.
Review Apps let us spin up an environment for every branch automatically whenever a developer does a pull request. When the developer finishes, he can merge it and QA can promote it to their environment. QA can then check it and promote it to production. It lets us bypass the “who’s using staging #3?” type of conversation during the work day. It takes time to create more environments, and Pipelines just gives you that automatically.
Have you experimented with microservices?
We’re currently migrating some of our logic to microservices using SQS. Although a true microservice is two different projects talking through a queue or the network, we do have specific gems for different models. They may be hard coded on Heroku, but they’re in a separate gem, so it’s pretty modular.
Another example is our hotel-matching algorithm. We built this to resolve any discrepancies, such as in hotel name or street name spellings, street vs. avenue, geographic locations, etc. It can check all the variations and pinpoint the correct hotel. This is done as a microservice, which is basically a separate app talking through SQS.
We’re also migrating our booking engine to a different microservice.
How do you find out about new Heroku features?
I go to Heroku Labs once in awhile to check on new features. I also get Ruby Weekly and Heroku newsletters. We are very early adopters in our soul, so we usually check out the new stuff as soon as it’s available.
--
Founded in 2011, Roomer Travel connects travelers who are stuck with a nonrefundable hotel room with those looking for last minute, discounted accommodation. Read our Roomer Travel Customer Story to learn more about Roomer’s business.