Share The Match

A Social Network aimed at Football Fans around the world, featuring teams, players, leagues and cups from all Countries.

The Brief

To implement an infinitely scaleable social network platform for Football.  The platform should support iOS (iPhone and iPad), Android (Phones and Tablets), Blackberry 10 and responsive web.  Teams, Players, Matches and Users would all have their own Activity Feed which users could post to and comment on.  During matches, the application should auto-post to Teams, Players and Match Activity Feeds when a match event (such as a goal, red card, etc) occurs.

The whole platform should be localisable by translators who can login and edit each individual page using an in-page editor.

The platform will reside in Amazon AWS and thus should take advantage of any services AWS provides which will allow the solution to scale horizontally as and when needed.

The Solution

Four frontends were developed for iOS (Objective-C/XCode), Android (J2ME), Blackberry 10 (C++) and responsive web (HTML 5/CSS 3).  The mobile apps connected to a Microsoft .NET WebAPI backend which serviced all data requests to and from the apps using a JSON/REST protocol.  For performance reasons, the responsive web application was developed using Microsoft .NET MVC.

As the frontends required the ability to upload high definition video, using a simple HTTP POST was not sufficient.  High definition video files are very large in size and, due to connectivity issues over mobile internet connections, it was required that video uploads should be able to 'resume' uploading should the connection be lost.  Because of this, a custom 'upload' server was developed which used a custom binary protocol, allowing the mobile applications to send large files as small chunks of data over a permanent connection to the upload server.  When the upload succeeded, the uploaded file was sent to a 'media processing' daemon where it would be resized and transcoded into other formats.

The backend also utilized three separate data stores: a MySQL database for relational data (such as teams, matches, players, users, etc), a MongoDB NoSQL database for flat data structures (such as messages, feed posts, news, etc) and a cache data store for data which does not change very often (such as league/cup hierarchies, country lists, static team/match/player data, etc).

The solution heavily relied on the Amazon AWS infrastructure, utilizing services such as Elastic Load Balancing, Route 53 auto fail-over, Elasticache, Elastic Video Transcoder, RDS, CloudFrontSimple Queue Service (SQS), Simple Notification Service (SNS) and Simple Email Service (SES).