Founded in 2011 by Reshef Mann and Oren Kaniel • Just completed Round B funding - total of $28M • Processing 2.5B daily events (it was 1.9B just 2 months ago and 250M at the start of 2014!) • 13 people in the development team (we were just 6 people 12 months ago!)
Bigquery for a couple of hundred thousands of records “chokes” on memory usage. • The possible solutions: – Multi processing (no real thread solution because of the GIL) – C implementation and python interop – Pypy – Different programming language
use of FP paradigm more strictly than Scala (we really want that JVM) • Dynamic • Sequence based processing capabilities really fit in the visualized data flow of AppsFlyer • Easy and common Java interop
Need to understand most of the underlying mechanism in order to write code that performs above average – Lazy evaluation and the (count xs) conundrum • Good Clojure code is fast as, at most, good Java code
(brackets hell) – A good IDE support with Rainbow Parentheses and Paredit really helps • Functional way of thought takes a bit getting used to – State!!! (modeling) • Learning the eco-system of both Java and Clojure was a lot (at first)
single “uberjar” • No application servers/services • Small, isolated services with async communication • Docker container per service • Dedicated machines for DB clusters – no docker (just plain old Amazon virtualization)
• Collections maintain performance guarantees: – New + Old version of collections are available after change – New versions are not full copies – Thread safe, iteration safe • Sequences replace traditional lists – All Clojure and Java collections can be made into seqs