Citadel

Scenario

  • App uses Elasticsearch for displaying products
  • PostgreSQL contains product information
  • Need to get that data from PostgreSQL to Elasticsearch on a nightly basis

Why

  • Indexing in the current system is very slow
  • Small features take up a lot of time to build
  • Spaghetti Code

But why was it too slow ?

  • ORM Abuse (Inefficient Queries)
  • Serial execution of code
  • Resources not being used efficiently (PostgreSQL is free when Elasticsearch is being utilized and vice-versa)
  • Incremental development without refactoring and deprecating old functionalities

What to do now ?

GO TO THE RESCUE

Lets fix everything !

  • Lets write efficient queries
  • Lets use all our resources to their full potential
  • Lets deprecate redundant business logic
  • Lets use a language which helps us achieve this

Hello Go

  • Static Typing
  • Statically Compiled
  • Built with concurrency in mind
  • Very Fast!

Optimizing Everything

  • Controlled Concurrency
  • Configurable number of extraction processes
  • Configurable number of loading processes
  • Non blocking I/O everywhere

Architecture

Result

NIGHTLY Old New
Time Taken 1h 30m 9m
Machine Size r3.8xlarge
(256 GB RAM)
t2.2xlarge
(32 GB RAM)
MERCHANT JOB Old New
Time Taken 25m 45s
Machine Size r3.xlarge t2.large

Thank You

@yashm95

/yashmehrotra

Citadel Meetup

By Yash Mehrotra

Citadel Meetup

  • 651