Portfolio

Social network for finding, storing and sharing music

Type Mobile application, Web application
TECHNOLOGIES Haskell, Java, Node.JS, Objective C
DURATION 4 years
TEAM 32 employees

Vertigo project is a unique social media platform focused on finding, storing and sharing music and video. The Admin side is a web application, and the Client-side is a mobile application designed for both Android and iOS.

The application enables users to gather their external music collections from many sources in one place. Vertigo users have it all gathered at once via Vertigo aggregating features. They can link their Apple Music and Spotify Premium accounts to find songs, build playlists, and share them with their social friends.

The media platform allows users to broadcast their favorite music in the best possible quality, receive real-time feedback through live commenting, connect with other users to tune into their live sessions and discover new music.

Challenges
  1. There was a huge bulk of data with relational structure represented as text-files in the system. The Customer wanted to arrange fast ways of searching for data items.
  2. We had to scale and route the high load Stateful Service. The classical approach to balancing the load could not be used for this service.
  3. The data processing algorithm was implemented as SQL scripts. The implementation took more than 24 hours. The Customer wanted to speed up this process.
Solutions
  1. We have used ETL algorithm based on the framework ReactiveX. The search index is created in ElasticSearch.
  2. We have implemented a self-balancing method for the cluster. An individual address is sent to a client, the client can be served at this address.
  3. We have migrated the data processing algorithm to Apache Spark.
Results
  1. We have parallelized and optimized the process of downloading the data. The total amount of the indexed data is about 70 Gb. The data is available for real-time searching.
  2. The implemented method allows the system with 500+ users to serve 100+ video data streams in real time.
  3. The data processing is scaled horizontally. The scaling is 30 minutes.
Areas of expertise

Backend: High load // Data mining // Multithreading // ETL // RDBMS // NoSQL // WebRTC
Frontend: Sending PUSH notifications // Audio playback // Custom controls // Integration with site API and third parties' service API // Asynchronous networking // Storage settings // Sharing in social networks // Working with camera // Incremental synchronization

Additional Technologies

Frameworks: Google Guice // Spring // Hazelcast
Databases and indexes: PostgreSQL // DynamoDB // ElasticSearch
Multimedia systems: WebRTC // Kurento iOS // Android (Android SDK, SQLite, Java, Gradle, Android Studio) // OSX // Windows // iTunes // PubNub
Testing: Unit tests (Java, Haskell) // Integration tests (Java, JMeter) // Load tests (JMeter, Blazemeter) // iOS UI automated tests (Appium) // Manual testing

Application for dynamic compaction control
Application for dynamic compaction control
AR Office application
AR Office application