Top Banner
Decathlon Sport Meeting Alonso Torres, DEVELOPER Sports, a new Grails discipline Antonio de la Torre, DEVELOPER Kaleidos
61
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Decathlon Sport Meeting - Grails, a new sport discipline - Greach'15

Decathlon Sport Meeting

Alonso Torres, DEVELOPER

Sports, a new Grails discipline

Antonio de la Torre, DEVELOPER

Kaleidos

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

Introduction

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

What’s Decathlon Sport Meeting?

Intro

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

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

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

Intro

Who developed it?

Kaleidos

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

What did it contributed to the community?

● 3 Pull Request to GrailsGRAILS-11647, GRAILS-11323, GRAILS-10763

● 6 open sourced plugins

Intro

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

Intro

How is DSM?

100k registered users

1000 active sport proposals

35 sports

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

Development Decisions

«The risk of a wrong decision is preferable to the terror of indecision.»

Maimónides (12th c.)

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

Development decisions

Divided in

three applications● WEB, JOBS, API

and a plugin with business

logic and common code● CORE

JOBS

WEB API

CORE

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

Development decisions

Command Objects

● Responsibility● Validate objects

○ accessing model to validate data

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

Development decisions

Command ObjectsCheck if is a type

and a valid domain object

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

Development decisions

Tests

● Start with Integration tests << due to odd behaviour

● and moving to Unit tests << less dependency

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

Development decisions

Asynchronous processes and background jobs

● Asynchronous processes (platform-core)

○ Immediate email sending

○ Push notifications to mobile devices

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

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)

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

API Decisions

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

API decisions

Trait with helpers to create responses: 4XX

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

API decisions

Command Objects accepts input JSON < Magic happens

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

API decisions

Command Objects accepts input JSON < Magic happens

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

API decisions

Command Objects accepts input JSON < Magic happens

Binding Lists

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

API decisions

Data Oriented Design (RESTful)

over

Screen Oriented Design

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

Infrastructure decisions

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

Infrastructure decisions

PostgreSQL as our main database

● Open-Source and very mature

● Highly scalability

● Widely used

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

Infrastructure decisions

MongoDB as a secondary storage for denormalized data

● Optimize read and searches by storing documents

● Filter, sorting, querying

● Highly availability

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

Infrastructure decisions

MongoDB to store statistics and usage data

● Fire and forget model

● Map-reduce to extract the information

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

Infrastructure decisions

MongoDB for geolocalized data

● Great support of geolocalization

● Aggregation pipeline

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

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

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

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

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

Awesome Tools

«If I have seen further it is only by standing on the shoulders of giants.»

Isaac Newton

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

Awesome tools

Java Melody Plugin

● Allows monitoring of requests and JVM state

● Saved us in several occasions

Page 30: Decathlon Sport Meeting - Grails, a new sport discipline - Greach'15
Page 31: Decathlon Sport Meeting - Grails, a new sport discipline - Greach'15

Awesome tools

Build Test Data Plugin

● Creates complex objects from your constraints

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

Awesome tools

Build Test Data Plugin

● Creates complex objects from your constraints

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

Awesome tools

Build Test Data Plugin

● Creates complex objects from your constraints

Check constraints and relationships and creates the necessary objects

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

PostgresSQL Extensions plugin

Awesome tools

● Disclaimer: created by @ilopmar & @alotor inside

Kaleidos

● Provides native access to PSQL native types:

HSTORE, Arrays, JSON...

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

PostgresSQL Extensions plugin

Awesome tools

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

Awesome tools

Platform Core plugin

● Asynchronous task is a bliss

● Maintained by the Grails-core team

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

Awesome tools

Platform Core plugin

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

Know your tools

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

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

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

Awesome tools

GPars

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

Awesome tools

GPars

Five threads at the same time

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

Awesome tools

GPars

we need a transaction within the new thread

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

Awesome tools

Groovy Metaprogramming

● Sometimes the magic is fun :)

● We developed a system with metaprogramming to

easily create new types of notification

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

Awesome tools

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

Awesome tools

Grails & Spring

● Problem: we wanted different implementations in

development and “real” environments

● Examples: notifications, file storage...

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

Awesome tools

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

Awesome tools

Inject a generic “fileService”

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

Awesome tools

Alias the necessary bean per environment

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

Difficult Challenges

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

Difficult Challenges

Migration Grails 2.1.5 → 2.4.4

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

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

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

Difficult Challenges

URL’s internationalization

● Grails doesn’t support out-of-the-box multi-language URL’s

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

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 @tednaleidhttp://bit.ly/1FlJs75

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

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)

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

Difficult Challenges

MongoDB Plugin

● Mongodb’s GORM plugin had unexpected

behaviour

● We finally decided to use the low-level API when

accessing MongoDB

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

Going Forward

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

Going forward...

● Currently the application is only available for

spanish users

● Decathlon is present in 27 countries

Travel abroad!

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

Going forward...

● Decathlon Sport Meeting will be opening their API

● We hope to create an application ecosystem

around the social network

Opening the API

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

Going forward...

● First application using DSM API

● Was done during the ΠWEEK

Sport Spot

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

Going forward...

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

See you on track!