5/17/2015 1 project voldemort bhupesh bansal & jay kreps

49
11/01/22 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Upload: neal-garrett

Post on 17-Dec-2015

219 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

04/18/23 1

Project VoldemortBhupesh Bansal & Jay Kreps

Page 2: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

The Plan

1. Motivation2. Core Concepts3. Implementation4. In Practice5. Results

Page 3: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Who Are We?

• LinkedIn’s Data & Analytics Team• Project Voldemort• Hadoop system• Recommendation Engine• Relevance and Analysis• Data intensive features

• People you may know• Who viewed my profile• User history service

Page 4: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Motivation

Page 5: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

The Idea of the Relational Database

Page 6: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

The Reality of a Modern Web Site

Page 7: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Why did this happen?

• Specialized systems are efficient (10-100x)• Search: Inverted index• Offline: Hadoop, Terradata, Oracle DWH• Memcached• In memory systems (social graph)

• Specialized system are scalable• New data and problems

• Graphs, sequences, and text

Page 8: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Services and Scale Break Relational DBs

• No joins• Lots of denormalization• ORM is pointless• No constraints, triggers, etc disappear• Natural operations not captured easily• Caching => key/value model• Latency is key

Page 9: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Two Cheers For Relational Databases

• The relational model is a triumph of computer science:• General• Concise• Well understood

• But then again:• SQL is a pain• Hard to build re-usable data structures• Don’t hide the memory hierarchy!

Good: Filesystem API

Bad: SQL, some RPCs

Page 10: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Other Considerations

• Who is responsible for performance (engineers? DBA? site operations?)• Can you do capacity planning?• Can you simulate the problem early in the design phase?• How do you do upgrades?• Can you mock your database?

Page 11: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Some domain constraints

• This is a real-time system• Data set is large and persistent

• Cannot be all in memory• Partitioning is key• 80% of caching tiers are fixing problems that shouldn’t exist• Need control over system availability and data durability

• Must replicate data on multiple machines• Cost of scalability can’t be too high• Must support diverse usages

Page 12: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

• Amazon’s Dynamo storage system• Works across data centers• Eventual consistency• Commodity hardware• Not too hard to build

Memcached– Actually works– Really fast– Really simple

Decisions:– Multiple reads/writes– Consistent hashing for data distribution– Key-Value model– Data versioning

Inspired By Amazon Dynamo & Memcached

Page 13: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Priorities

1. Performance and scalability

2. Actually works

3. Community

4. Data consistency

5. Flexible & Extensible

6. Everything else

Page 14: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Why Is This Hard?

• Failures in a distributed system are much more complicated• A can talk to B does not imply B can talk to A• A can talk to B does not imply C can talk to B

• Getting a consistent view of the cluster is as hard as getting a consistent view of the data

• Nodes will fail and come back to life with stale data• I/O has high request latency variance• I/O on commodity disks is even worse• Intermittent failures are common• User must be isolated from these problems • There are fundamental trade-offs between availability and

consistency

Page 15: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Core Concepts

Page 16: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Core Concepts - I

ACID – Great for single centralized server.

CAP Theorem– Consistency (Strict), Availability , Partition Tolerance– Impossible to achieve all three at same time in distributed platform– Can choose 2 out of 3– Dynamo chooses High Availability and Partition Tolerance

by sacrificing Strict Consistency to Eventual consistency

Consistency Models– Strict consistency

2 Phase Commits PAXOS : distributed algorithm to ensure quorum for consistency

– Eventual consistency Different nodes can have different views of value In a steady state system will return last written value. BUT Can have much strong guarantees.

Proprietary & Confidential 04/18/23 16

Page 17: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Core Concept - II

Consistent Hashing Key space is Partitioned

– Many small partitions

Partitions never change– Partitions ownership can change

Replication – Each partition is stored by ‘N’ nodes

Node Failures– Transient (short term)– Long term

Needs faster bootstrapping

Proprietary & Confidential 04/18/23 17

Page 18: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Core Concept - III

• N - The replication factor • R - The number of blocking reads• W - The number of blocking writes

• If R+W > N • then we have a quorum-like algorithm• Guarantees that we will read latest writes OR fail

• R, W, N can be tuned for different use cases• W = 1, Highly available writes • R = 1, Read intensive workloads• Knobs to tune performance, durability and availability

Proprietary & Confidential 04/18/23 18

Page 19: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Core Concepts - IV

• Vector Clock [Lamport] provides way to order events in a distributed system.

• A vector clock is a tuple {t1 , t2 , ..., tn } of counters.• Each value update has a master node

• When data is written with master node i, it increments ti.• All the replicas will receive the same version• Helps resolving consistency between writes on multiple replicas

• If you get network partitions• You can have a case where two vector clocks are not comparable.• In this case Voldemort returns both values to clients for conflict resolution

Proprietary & Confidential 04/18/23 19

Page 20: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Implementation

Page 21: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Voldemort Design

Page 22: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Client API

• Data is organized into “stores”, i.e. tables• Key-value only

• But values can be arbitrarily rich or complex• Maps, lists, nested combinations …

• Four operations• PUT (Key K, Value V) • GET (Key K)• MULTI-GET (Iterator<Key> K), • DELETE (Key K) / (Key K , Version ver)• No Range Scans

Page 23: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Versioning & Conflict Resolution

• Eventual Consistency allows multiple versions of value• Need a way to understand which value is latest• Need a way to say values are not comparable

• Solutions• Timestamp• Vector clocks

• Provides global ordering.• No locking or blocking necessary

Page 24: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Serialization

• Really important• Few Considerations• Schema free?• Backward/Forward compatible• Real life data structures• Bytes <=> objects <=> strings?• Size (No XML)

• Many ways to do it -- we allow anything• Compressed JSON, Protocol Buffers,

Thrift, Voldemort custom serializtion

Page 25: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Routing

• Routing layer hides lot of complexity• Hashing schema• Replication (N, R , W) • Failures• Read-Repair (online repair mechanism)• Hinted Handoff (Long term recovery mechanism)

• Easy to add domain specific strategies• E.g. only do synchronous operations on nodes in

the local data center• Client Side / Server Side / Hybrid

Page 26: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Voldemort Physical Deployment

Page 27: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Routing With Failures

• Failure Detection•Requirements

•Need to be very very fast• View of server state may be inconsistent

• A can talk to B but C cannot• A can talk to C , B can talk to A but not to C

• Currently done by routing layer (request timeouts)• Periodically retries failed nodes.• All requests must have hard SLAs

•Other possible solutions• Central server • Gossip protocol• Need to look more into this.

Page 28: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Repair Mechanism

Read Repair– Online repair mechanism

Routing client receives values from multiple node Notify a node if you see an old value Only works for keys which are read after failures

Hinted Handoff– If a write fails write it to any random node– Just mark the write as a special write– Each node periodically tries to get rid of all special entries

Bootstrapping mechanism (We don’t have it yet)– If a node was down for long time

Hinted handoff can generate ton of traffic Need a better way to bootstrap and clear hinted handoff tables

Proprietary & Confidential 04/18/23 28

Page 29: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Network Layer

• Network is the major bottleneck in many uses• Client performance turns out to be harder than server (client must wait!)

•Lots of issue with socket buffer size/socket pool• Server is also a Client• Two implementations

• HTTP + servlet container• Simple socket protocol + custom server

• HTTP server is great, but http client is 5-10X slower• Socket protocol is what we use in production• Recently added a non-blocking version of the server

Page 30: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Persistence

• Single machine key-value storage is a commodity• Plugins are better than tying yourself to a single strategy

• Different use cases• optimize reads• optimize writes• Large vs Small values

•SSDs may completely change this layer• Couple of different options

•BDB, MySQL and mmap’d file implementations•Berkeley DBs most popular•In memory plugin for testing

• Btrees are still the best all-purpose structure• No flush on write is a huge, huge win

Page 31: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

In Practice

Page 32: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

LinkedIn problems we wanted to solve

• Application Examples • People You May Know• Item-Item Recommendations• Typeahead selection• Member and Company Derived Data• User’s Network statistics• Who Viewed My Profile?• Abuse detection• User’s History Service• Relevance data• Crawler detection• Many others have come up since

• Some data is batch computed and served as read only• Some data is very high write load• Latency is key

Page 33: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Example Use Cases - I

User Data lookup service– Returns user data for a user.– Create a single Voldemort Store

Key : User ID Value : User Settings

– Treat Voldemort as a simple Hash Table with extra benefits Scalability Fault tolerance Persistence Data Size > RAM Can control Data / RAM ratio for better performance

There are “surprisingly” a lot of use cases which can be served by this simple model– “provide best seller lists, shopping carts, customer preferences, session

management, sales rank, and product catalog” [Dynamo paper]

Proprietary & Confidential 04/18/23 33

Page 34: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Example Use Cases - II

User Comments Service Return Latest ‘N’ comments for a topic Create two Voldemort Stores

Store 1:– Key: Topic Id– Value : CommentID tree reverse sorted by timestamp

Store 2:– Key : commentID– Value: Comment data

Insert time:– Get the commentID tree using store 1.– Update the tree and put it back in store1– Insert new key/value pair in store2

Query time:– Do a query on Store1 and then multi-get Query for last ‘N’ comments.

Proprietary & Confidential 04/18/23 34

Page 35: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Example Use Cases - III

Inbox Search Service Search for a ‘keyword’ phrase in member Inbox data Create a Voldemort Store.

Key: User ID Value : Search Index for user emails

Insert time Get the search index for user given userID Update search index with new update and put back to store.

Query Time get the right index using userID use search index to query for ‘keyword’ and return results Try to colocate voldemort/Inbox Search service to avoid network hops

Proprietary & Confidential 04/18/23 35

Page 36: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Example which do not work

Financial Transactions– Please donot use *any* alpha system to save credit card details.

Transaction requirement between 2 stores– Write key1 to store A iff key2 to store B succeeded.

Range scans

Proprietary & Confidential 04/18/23 36

Page 37: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Example V: Hadoop and Voldemort sitting in a tree…

Hadoop can generate a lot of data Bottleneck 1: Getting the data out of hadoop Bottleneck 2: Transfer to DB Bottleneck 3: Index building We had a critical process where this process took a DBA

a week to run! Index building is a batch operation

04/18/23 37

Page 38: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps
Page 39: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Throughput vs. Latency Index building done in Hadoop Fully parallel transfer Very efficient on-disk structure Heavy reliance on OS pagecache Rollback!

Read-only storage engine

Page 40: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Voldemort At LinkedIn

• 4 Clusters, 4 teams• Wide variety of data sizes, clients, needs

• My team:• 12 machines• Nice servers• 500M operations/day• ~4 billion events in 10 stores (one per event type)• Peak load > 10k operations / second

• Other teams: news article data, email related data, UI settings

Page 41: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

•Gilt Groupe Inc (www.gilt.com http://www.gilt.com•Thanks to Geir Magnusson for sharing numbers •3 Clusters (Another 3 coming in 3 weeks)

•4 Machines each•Replication 2 required•Bdb storage engine

•Values avg size about 5K•QPS : upto 2700/sec•Latency

•96 % < 20ms•99.7 % < 40 ms

•Production issues seen:•load balancer started caching causing writes to fail

Gilt Group

Page 42: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Results

Page 43: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Some performance numbers

• Production stats• Median: 0.1 ms• 99.9 percentile GET: 3 ms

• Single node max throughput (1 client node, 1 server node):

• 19,384 reads/sec• 16,559 writes/sec

• These numbers are for mostly in-memory problems

Page 44: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Glaring Weaknesses

• Not nearly enough documentation• Need a rigorous performance and multi-machine failure tests running NIGHTLY• No online cluster expansion (without reduced guarantees)• Need more clients in other languages (Java, Python, and C++ currently) • Better tools for cluster-wide control and monitoring

Page 45: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

State of the Project

• Active mailing list• 4-5 regular committers outside LinkedIn• Lots of contributors• Equal contribution from in and out of LinkedIn• Project basics

• IRC• Some documentation• Lots more to do

• > 300 unit tests that run on every checkin (and pass)• Pretty clean code• Moved to GitHub (by popular demand)• Production usage at a half dozen companies• Not just a LinkedIn project anymore• But LinkedIn is really committed to it (and we are hiring to work on it)

Page 46: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

1. Index build runs 100% in Hadoop 2. MapReduce job outputs Voldemort Stores to HDFS3. Nodes all download their pre-built stores in parallel4. Atomic swap to make the data live5. Heavily optimized storage engine for read-only data6. I/O Throttling on the transfer to protect the live servers

Page 47: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Some new & upcoming things

• New• Python client• Non-blocking socket server• Alpha round on online cluster expansion• Read-only store and Hadoop integration• Improved monitoring stats• Compression

• Future• Publish/Subscribe model to track changes• Great performance and integration tests• Improved failure detection

Page 48: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

Shameless promotion

• Check it out: project-voldemort.com• We love getting patches.• We kind of love getting bug reports.• LinkedIn is hiring, so you can work on this full time.

• Email me if interested• [email protected]

Page 49: 5/17/2015 1 Project Voldemort Bhupesh Bansal & Jay Kreps

The End