Problems scaling out new international sites dictated a change in HolidayCheck’s application development platform and the adoption of a new approach to developing applications.
The HolidayCheck idea dates back to 1999 when Markus Schott and Sascha Vasic, frustrated with the lack of authentic information when choosing a hotel, decided to create a website that would give others the opportunity to read real opinions and reviews instead of basic catalogue descriptions. Since the 2004 launch of the official company in Switzerland, HolidayCheck has seen rapid growth and expanded internationally. Today HolidayCheck is available in 10 languages worldwide.
Each month 20 - 30 million people visit HolidayCheck websites to learn about hotels and destinations by viewing feedback from over 10 million user opinions. Information is available on more than 300,000 hotels and 100,000 points of interest in the holiday destinations.
The Business Problem
HolidayCheck is the largest German speaking online travel site/agency, having been online now for more than ten years. In their peak-booking season they have over one hundred million page impressions per week. The platform started with a typical LAMP stack, which worked well for the initial site as it was meeting usual business goals and classical web business KPIs like Shopper Conversion and Look2Book.
Problems arose, however when the team tried to duplicate the code to deploy slightly different products for different markets – the biggest problems being related to platform/code complexity, stability and performance. Christopher Schmidt, Senior Lead Architect responsible for the online platform was tasked with designing, developing and implementing a new architecture based on a new technology stack.
In 2010, Christopher attended the first Scala Days in Lausanne, Switzerland where he was introduced to the Scala programming language and the Akka runtime. Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Akka on the other hand is a runtime for building highly concurrent, distributed, and fault tolerant event-driven applications.
Christopher’s platform reworking requirements included a major objective to deploy a new platform or change an existing one with new/changed front-end applications within a matter of days – a lofty goal considering the complexities involved.
Christopher felt that both the Scala and Akka held a great deal of promise for his project, and began to investigate them more closely. For Scala and Akka to become the building blocks for Christopher’s new architecture however, there were additional technical requirements that needed to be met:
- High performance websites, like Twitter, Yahoo, LinkedIn demonstrated the scale.
- Dynamic cloud and cluster deployments as opposed to “static” or predefined configurations.
- Polyglot persistence instead of a one size fits all MySQL.
- Loosely coupled and massively parallel, asynchronous from top to bottom.
- Utilizing industry standards instead of JSR stuff,
- Simplicity regarding APIs, semantic and usage, pragmatism (instead of dying in beauty).
There was no dedicated evaluation to use Scala or not, it simply was clear that Scala added significant value (because of Functional Programming, the collection API, Traits) so we used it. We wanted to use Actors for parallel processing, so Akka was a natural choice.Christopher SchmidtSenior Lead Architect, HolidayCheck
HolidayCheck uses Scala and Akka for their applications, however it’s difficult to build applications without relying on third-party frameworks. The HolidayCheck team has utilized Zookeeper, Storm, Tomcat/Jersey (for REST), Neo4j, MongoDB, Kafka, Hadoop and one of Christopher's own frameworks - neo4j-scala.
The passport to productivity
HolidayCheck has about 50 developers, divided into 9 teams, using mostly Scrum or Kanban (both with the release train concept). The average development project length is around 2-3 months.
Areas for improvement
Christopher mentions that he and his team clearly underestimated the effort needed to go from Scala 2.9 to Scala 2.10 - binary compatibility issues dictated that the frameworks and libraries he utilized needed to be migrated to Scala 2.10 at the same time which took more time.
Version fragility is a major concern for Lightbend and is something that we're attacking from multiple angles. Scala 2.10.x has been fully backwards and forwards binary compatible, so you can mix and match libraries compiled for any Scala 2.10.x version and run them on Scala 2.10.y. This a major improvement over older (pre-Lightbend) Scala releases, which didn't offer any kind of compatibility, essentially.
In Scala 2.11.x, we've focused on reducing the standard library (by modularizing scala-library-jar shed about 1 MB, or 20%) so that there's a smaller surface area that needs to be kept stable. In addition, Lightbend will build as many open-source projects and libraries as possible to ensure that compatibility issues are minimized and remedied prior to the final release.
Eventually, we'd like to offer binary backwards compatibility between major releases for the core of the standard library, but we're not there yet.Adriaan MoorsScala Tech Lead, Lightbend
Christopher notes that Scala 2.10’s extensive feature set is a double-edged sword - developers tend to try to utilize as many of these features as possible which leads to multiple ways that problems can be solved. Engineering managers need to pay attention to the functionality being utilized and reign in their teams to produce consistent code just the same as with other languages.
Christopher notes a number of points gleaned from his use with Scala and Akka:
- Good developers want to code Scala, which is very good for recruiting.
- Scala is an enabler for great frameworks using DSLs.
- The collection API is the one of Scala’s most valuable capabilities.
- You need skilled developers, as Scala is a sophisticated language.
- The possibilities of Scala separate good and bad developers more clearly.
- The Scala world sometimes tends to reinvent wheels.
- Scala/Java interoperability is not an issue and works seamlessly.
- CoffeeScript and Scala are a good fit.
HolidayCheck doesn’t utilize advanced functional patterns and are very productive using the more basic functionality. Christopher is very happy with his decision to use the Lightbend Platform.
I am sure that without Lightbend, we would not have the confidence to use Scala and Akka in our business or platform. Good to know that there is someone who can help!Christopher SchmidtSenior Lead Architect, HolidayCheck
Inspired by this story? Contact us to learn more about what Lightbend can do for your organization.