Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Decathlon Sport Meeting - Grails, a new sport discipline - Greach'15

Decathlon Sport Meeting - Grails, a new sport discipline - Greach'15


Talk given in
Greach 2015
2015 April 10th

Antonio de la Torre @adelatorrefoss
Alonso Torres @alotor


Decathlon’s mission is to make sport accessible to more people. Decathlon SportMeeting, its new social network, was created to take this one step further, allowing everyone to find people who share their sport and their passion.

DSM was defined from scratch to support the actual traffic with more than 100k registered users, 1000 active sport proposals for more than 30 sports.

This web platform is entirely built with Groovy & Grails but there are also applications in Android and iOS that use its RESTful API. Along the development process several plugins were created and open-sourced to the community.

In this talk Kaleidos will explain how the development of this platform was, some of the technical decisions that were made, lessons learned, pitfalls or how the infrastructure has been evolving for almost 3 years, and much more.

More Decks by Antonio de la Torre Fernández

Other Decks in Technology


  1. Decathlon Sport Meeting Alonso Torres, DEVELOPER Sports, a new Grails

    discipline Antonio de la Torre, DEVELOPER Kaleidos
  2. Intro Why want Decathlon to develop a Social Network? •

    Decathlon’s mission is to make sports widely available • Sport Meeting was created to take this one step further
  3. What did it contributed to the community? • 3 Pull

    Request to Grails GRAILS-11647, GRAILS-11323, GRAILS-10763 • 6 open sourced plugins Intro
  4. Development Decisions «The risk of a wrong decision is preferable

    to the terror of indecision.» Maimónides (12th c.)
  5. Development decisions Divided in three applications • WEB, JOBS, API

    and a plugin with business logic and common code • CORE JOBS WEB API CORE
  6. Development decisions Tests • Start with Integration tests << due

    to odd behaviour • and moving to Unit tests << less dependency
  7. Development decisions Asynchronous processes and background jobs • Asynchronous processes

    (platform-core) ◦ Immediate email sending ◦ Push notifications to mobile devices
  8. Development decisions Asynchronous processes and background jobs • Background jobs

    (quartz) ◦ Quartz scheduler library ◦ Tasks that are processed overnight ▪ Proposals clean up ▪ Mailing with interesting stuff (users, proposals)
  9. Infrastructure decisions PostgreSQL as our main database • Open-Source and

    very mature • Highly scalability • Widely used
  10. Infrastructure decisions MongoDB as a secondary storage for denormalized data

    • Optimize read and searches by storing documents • Filter, sorting, querying • Highly availability
  11. Infrastructure decisions MongoDB to store statistics and usage data •

    Fire and forget model • Map-reduce to extract the information
  12. Infrastructure decisions Terracotta as a Hibernate second-level cache and HTTP

    sessions • Dual licensing (community and commercial) • Problems scaling (on the community product) • Decided to change to Redis
  13. Infrastructure decisions Releases upload to a Nexus repository • Upload

    all the software revisions • “release plugin” can manage this • Could be easily automated for a continuous delivery
  14. Awesome Tools «If I have seen further it is only

    by standing on the shoulders of giants.» Isaac Newton
  15. Awesome tools Java Melody Plugin • Allows monitoring of requests

    and JVM state • Saved us in several occasions
  16. Awesome tools Build Test Data Plugin • Creates complex objects

    from your constraints Check constraints and relationships and creates the necessary objects
  17. PostgresSQL Extensions plugin Awesome tools • Disclaimer: created by @ilopmar

    & @alotor inside Kaleidos • Provides native access to PSQL native types: HSTORE, Arrays, JSON...
  18. Awesome tools Platform Core plugin • Asynchronous task is a

    bliss • Maintained by the Grails-core team
  19. Awesome tools GPars • Easy parallelization inside the Groovy core

    • Provides DSL’s and an easy API to parallelize expensive tasks • Sometimes difficult to work with GORM
  20. Awesome tools Groovy Metaprogramming • Sometimes the magic is fun

    :) • We developed a system with metaprogramming to easily create new types of notification
  21. Awesome tools Grails & Spring • Problem: we wanted different

    implementations in development and “real” environments • Examples: notifications, file storage...
  22. Difficult Challenges Migration Grails 2.1.5 → 2.4.4 • Upgrade Grails

    and it’s dependencies • Package changes, API changes… • DataBinding and Command objects changes
  23. Difficult Challenges Tests pollution • With 1500+ tests if you’re

    polluting one of your tests is a big issue • If this happens to you check: by @tednaleid http://bit.ly/1FlJs75
  24. Difficult Challenges API Documentation • There is no easy way

    to keep an up-to-date API documentation with Grails REST support • Our solution: the documentation as GSP’s allow us to reuse certain common part’s (like messages structure)
  25. Difficult Challenges MongoDB Plugin • Mongodb’s GORM plugin had unexpected

    behaviour • We finally decided to use the low-level API when accessing MongoDB
  26. Going forward... • Currently the application is only available for

    spanish users • Decathlon is present in 27 countries Travel abroad!
  27. Going forward... • Decathlon Sport Meeting will be opening their

    API • We hope to create an application ecosystem around the social network Opening the API