15. Key Challenges
• New Type Of Database (Cassandra)
• New Type Of Deployment (Elastic in the Cloud, Small & Fast on the Desktop)
• New Type of Access (REST API, SDKs)
• New Type of Learning Curve (Smart Docs & Swagger)
15
16. Major Milestones & Progress
• 2011 – Usergrid released as first Open Source BaaS
• 2012 – Usergrid becomes part of Apigee
• 2012 – Apigee ships Enterprise App Services
• 2013 – Integrated as Apigee Edge BaaS
• 2013 – Usergrid goes to Apache
• 2014 – Apache Usergrid 1.0 release!
• 2014 – Apigee 127 Developer Kit with Node.js, Volos, and Usergrid
• 2014 – Apigee BaaS 2.0 and Usergrid 2.0 Beta
16
32. Who is this man and why isn’t he here?
32
Todd Nine, Lead Architect for Apigee Edge BaaS, Apache Usergrid Committer, and
Recently Married Man as of Last Friday, now on Honeymoon
34. Challenges
• 1.0 Architecture had a number of Cassandra anti-patterns
• Enterprise users wanted to load and query large datasets
• Cassandra moving to 2.0 with CQL3, deprecating Thrift protocol
• Team wanted to leverage new indexing models of Elastic Search
34
35. New Architectures
• Elastic Search
• Cassandra 2.0+
• Moving most common operations to CQL as the transport
• Archaius and Guice for dynamic configuration management
• Hystrix and RxJava
35
36. New Architectures: Elastic Search
• Right tool for the job
• Cassandra worked… until it didn’t.
• Well known operationalization characteristics
• Scale-out was well understood for “full text search” use case
36
37. New Architectures: Cassandra 2.0/2.1
• Still best of breed NoSQL solution for scale
• Off-heap performance improvements
• Failure scenario performance improvements
37
38. New Architectures: Archaius and Guice
• Properties typing
• Property change polling
• Hierarchical callbacks on changes
• Load from anywhere dynamic sources
• … all via Guice annotations
38
41. New Architectures: Hystrix and RxJava
• Compose sequences of asynchronous events declaratively
• Circuit breaker pattern for back-off and retry
• Natural fit with complex, asynchronous operations such as graph updates…
41
and those apps could have a lot of users, the people who actually interact with the app
and 10 millions users has to be as easy as ten thousand
The idea is a platform service with lots of teams, each with lots of devs
Think something like the GitHub model
This is the basic foundation, lots of software-as-a-service needs this
And the idea is that each team can build as many apps as they want
each app is going to get a dataspace of its own
and those apps could have a lot of users, the people who actually interact with the app
and 10 millions users has to be as easy as ten thousand
and every user has a device and a bunch of data
So this is the goal
Now that’s a lot of data, and it’s “big data”, but it’s also kind of a hard data model
an inherently relational data model
so lots of people start with relational DBs
I want to be able to manager users
I want to have groups
I want social constructs
I want to be able to store and retrieve anything my app needs
and I need to track the devices no matter how many of them
and log every event, keeping track of counts in realtime
I want to be able to build arbitrary relationships
social or data relations
I need to be able to query by locations
and complex queries
I want any app I build, whether consumer or pro to have activities
and get all the activities fast with a single query at any scale
I’ve got to be able to do it from iOS and Android
I want OAuth 2 to be built in
I also need to do things like sign in with Facebook
and filter on user’s facebook profiles
or do complex queries so I can do personalization or targetting
Right tool: REST, lucene documents/inverted index, tokenization
Cassandra: Went well beyond original use case of “message inbox search” Indeterminent results: TODO lookup 10k limit code sample
Right tool: REST, lucene documents/inverted index, tokenization
Cassandra: Went well beyond original use case of “message inbox search” Indeterminent results: TODO lookup 10k limit code sample
Probably best-of-breed property management.
This was so good, a stand-alone project was spun out.
CollectionModule.java
GuiceModule.java
That’s “zip” as in “zipper” i believe. This says “apply this function in strict sequence against the asynchronous results of these two observables”
which is kind of exactly what you want when listening for graph edges to delete.
EdgeDeleteListnerImpl