SlideShare a Scribd company logo
Sharding: patterns and 
antipatterns 
Konstantin Osipov (Mail.Ru, Tarantool) 
Alexey Rybak (Badoo)
Big picture: scalable databases 
● replication 
● sharding and re-sharding 
● distributed queries & jobs, Map/Reduce 
● DDL 
● will focus on sharding/re-sharding only
Contents 
I. sharding function 
II. routing 
III.re-sharding
I. Sharding function
Selecting a good shard key 
● the identified object 
should be small 
● some data you won’t be 
able to shard (and have to 
duplicate in each shard) 
● don’t store the key if you 
don’t have to
Good and bad shard keys 
● good: user session, shopping order 
● maybe: user (if user data isn’t too thick) 
● bad: inventory item, order date
Garage sharding: numbers 
● replication based doubling (2, 4, 8, out of 
cash) 
● the magic number 48 (2✕3✕4)
Garage sharding thru hashing 
● good: remainders 
o f(key) ≡ key % n_srv 
o f(key) ≡ crc32(key) % n_srv 
● bad: first login letter
Sharding for grown-ups 
● table function 
● consistent hashing
Table functions 
● virtual buckets: key -> bucket -> shard 
o “key -> bucket” function, “bucket -> shard” table 
o “key -> bucket” table, “bucket -> shard” table
Consistent hashing 
● Danny Lewin RIP 
● Kinda ring and like... 
uhm... points, you 
know ... 
● Libraries: Ketama
Guava/Sumbur 
● f(key, n_servers) => server_id 
● strictly uniform key-to-server mapping 
● recurrence formula (15 lines of code)
II. Routing
Routing types 
● smart client 
● coordinator 
● proxy 
● local proxy on every app server 
● intra-database routing
Smart Client 
● no extra hops 
● all clients 
(PHP/Python/C...) 
should implement 
it 
● resharding is hard
Proxy 
● encapsulates routing logic 
● extra hop, traffic 
● +1 service 
● SPOF 
=> local proxy
Coordinator 
● centralized 
knowledge 
● SPOF
Intra-database routing 
● too many nodes 
● redundancy is high 
● ad-hoc requests
III.Re-sharding
Re-sharding is a pain 
● redistribution impacts: 
o clients 
o network performance 
o consistency 
=> maintenance time window 
● forget about it on petabyte scale
Best practice: no data redistribution 
● update is a move 
● data expiration (new data on new servers) 
● new data on selected servers
DDL 
● upgrade your app 
● upgrade your database 
● update your app and remove any trace of old 
schema
Thank you! Questions? 
kostja@tarantool.org 
fisher@corp.badoo.com

More Related Content

PPTX
Monitoring MySQL with OpenTSDB
PDF
«Scrapy internals» Александр Сибиряков, Scrapinghub
PDF
My talk from PgConf.Russia 2016
PPTX
Lessons Learned Migrating 2+ Billion Documents at Craigslist
PPTX
Back to Basics Webinar 6: Production Deployment
PDF
OpenTSDB for monitoring @ Criteo
PDF
Gnocchi v4 - past and present
PPTX
Ops Jumpstart: Admin 101
Monitoring MySQL with OpenTSDB
«Scrapy internals» Александр Сибиряков, Scrapinghub
My talk from PgConf.Russia 2016
Lessons Learned Migrating 2+ Billion Documents at Craigslist
Back to Basics Webinar 6: Production Deployment
OpenTSDB for monitoring @ Criteo
Gnocchi v4 - past and present
Ops Jumpstart: Admin 101

What's hot (20)

PPTX
Open Source Monitoring Tools
PDF
Bringing code to the data: from MySQL to RocksDB for high volume searches
ODP
MySQL And Search At Craigslist
PPT
MongoDB Basic Concepts
PDF
Gnocchi v3 brownbag
PPTX
Understanding and tuning WiredTiger, the new high performance database engine...
PDF
Postgres vs Mongo / Олег Бартунов (Postgres Professional)
PPTX
Sharding Methods for MongoDB
PPTX
Fusion-io and MySQL at Craigslist
PPTX
Attack monitoring using ElasticSearch Logstash and Kibana
PPTX
Logs management
PPTX
Lightning Talk: MongoDB Sharding
PPTX
Efficient cluster resource management by using Cook and Mesos / Li Jin (Two S...
PPT
Mongo Web Apps: OSCON 2011
PPT
Large Scale Log collection using LogStash & mongoDB
PDF
Zero to 1 Billion+ Records: A True Story of Learning & Scaling GameChanger
PDF
Real time fulltext search with sphinx
ODP
Logging for OpenStack - Elasticsearch, Fluentd, Logstash, Kibana
PDF
Couchbase live 2016
PPTX
Scaling an ELK stack at bol.com
Open Source Monitoring Tools
Bringing code to the data: from MySQL to RocksDB for high volume searches
MySQL And Search At Craigslist
MongoDB Basic Concepts
Gnocchi v3 brownbag
Understanding and tuning WiredTiger, the new high performance database engine...
Postgres vs Mongo / Олег Бартунов (Postgres Professional)
Sharding Methods for MongoDB
Fusion-io and MySQL at Craigslist
Attack monitoring using ElasticSearch Logstash and Kibana
Logs management
Lightning Talk: MongoDB Sharding
Efficient cluster resource management by using Cook and Mesos / Li Jin (Two S...
Mongo Web Apps: OSCON 2011
Large Scale Log collection using LogStash & mongoDB
Zero to 1 Billion+ Records: A True Story of Learning & Scaling GameChanger
Real time fulltext search with sphinx
Logging for OpenStack - Elasticsearch, Fluentd, Logstash, Kibana
Couchbase live 2016
Scaling an ELK stack at bol.com
Ad

Similar to "Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Константина Осипова (Mail.ru) (20)

PDF
Caching in
PDF
Caching in (DevoxxUK 2013)
PDF
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
PDF
PDF
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
PDF
Caching in
PDF
2013 05 ny
PPTX
AWS big-data-demystified #1.1 | Big Data Architecture Lessons Learned | English
PDF
Sv big datascience_cliffclick_5_2_2013
ODP
Web-scale data processing: practical approaches for low-latency and batch
PDF
Which DBMS and Why?
PDF
PostgreSQL and Redis - talk at pgcon 2013
PDF
Piano Media - approach to data gathering and processing
PDF
kranonit S06E01 Игорь Цинько: High load
PDF
UKOUG 2011: Practical MySQL Tuning
PPTX
Large Scale NoSql DB Migration Under Fire - Ido Barkan - DevOpsDays Tel Aviv ...
PDF
How to build TiDB
PPTX
Big Data in 200 km/h | AWS Big Data Demystified #1.3
PDF
Joker'14 Java as a fundamental working tool of the Data Scientist
PDF
Etl confessions pg conf us 2017
Caching in
Caching in (DevoxxUK 2013)
Python's slippy path and Tao of thick Pandas: give my data, Rrrrr...
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Caching in
2013 05 ny
AWS big-data-demystified #1.1 | Big Data Architecture Lessons Learned | English
Sv big datascience_cliffclick_5_2_2013
Web-scale data processing: practical approaches for low-latency and batch
Which DBMS and Why?
PostgreSQL and Redis - talk at pgcon 2013
Piano Media - approach to data gathering and processing
kranonit S06E01 Игорь Цинько: High load
UKOUG 2011: Practical MySQL Tuning
Large Scale NoSql DB Migration Under Fire - Ido Barkan - DevOpsDays Tel Aviv ...
How to build TiDB
Big Data in 200 km/h | AWS Big Data Demystified #1.3
Joker'14 Java as a fundamental working tool of the Data Scientist
Etl confessions pg conf us 2017
Ad

More from Badoo Development (20)

PDF
Viktar Karanevich – iOS Parallel Automation
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
Григорий Джанелидзе, OK.RU
PPTX
Андрей Сидоров, Яндекс.Браузер
PDF
Филипп Уваров, Avito
PDF
Cocoaheads Meetup / Alex Zimin / Swift magic
PDF
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
PDF
Alex Krasheninnikov – Hadoop High Availability
PDF
Андрей Денисов – В ожидании мониторинга баз данных
PDF
Александр Зобнин, Grafana Labs
PDF
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
PPTX
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
PDF
TechLeads meetup: Алексей Рыбак, Badoo
PPTX
TechLeads meetup: Евгений Потапов, ITSumma
PDF
TechLeads meetup: Макс Лапшин, Erlyvideo
PDF
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
PPTX
Как мы готовим MySQL
PPTX
Архитектура хранения и отдачи фотографий в Badoo
PDF
5 способов деплоя PHP-кода в условиях хайлоада
PDF
ChromeDriver Jailbreak
Viktar Karanevich – iOS Parallel Automation
Как мы делаем модули PHP в Badoo – Антон Довгаль
Григорий Джанелидзе, OK.RU
Андрей Сидоров, Яндекс.Браузер
Филипп Уваров, Avito
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Alex Krasheninnikov – Hadoop High Availability
Андрей Денисов – В ожидании мониторинга баз данных
Александр Зобнин, Grafana Labs
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Макс Лапшин, Erlyvideo
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Как мы готовим MySQL
Архитектура хранения и отдачи фотографий в Badoo
5 способов деплоя PHP-кода в условиях хайлоада
ChromeDriver Jailbreak

Recently uploaded (20)

PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PPTX
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
PDF
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
PDF
Sims 4 Historia para lo sims 4 para jugar
PPTX
artificialintelligenceai1-copy-210604123353.pptx
PPTX
Database Information System - Management Information System
PPTX
Digital Literacy And Online Safety on internet
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PPTX
artificial intelligence overview of it and more
PDF
The New Creative Director: How AI Tools for Social Media Content Creation Are...
PDF
Smart Home Technology for Health Monitoring (www.kiu.ac.ug)
PPT
Ethics in Information System - Management Information System
PPTX
innovation process that make everything different.pptx
PDF
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
PPTX
newyork.pptxirantrafgshenepalchinachinane
PDF
Paper PDF World Game (s) Great Redesign.pdf
PPTX
Funds Management Learning Material for Beg
PPTX
Power Point - Lesson 3_2.pptx grad school presentation
DOC
Rose毕业证学历认证,利物浦约翰摩尔斯大学毕业证国外本科毕业证
DOCX
Unit-3 cyber security network security of internet system
Design_with_Watersergyerge45hrbgre4top (1).ppt
June-4-Sermon-Powerpoint.pptx USE THIS FOR YOUR MOTIVATION
FINAL CALL-6th International Conference on Networks & IOT (NeTIOT 2025)
Sims 4 Historia para lo sims 4 para jugar
artificialintelligenceai1-copy-210604123353.pptx
Database Information System - Management Information System
Digital Literacy And Online Safety on internet
Unit-1 introduction to cyber security discuss about how to secure a system
artificial intelligence overview of it and more
The New Creative Director: How AI Tools for Social Media Content Creation Are...
Smart Home Technology for Health Monitoring (www.kiu.ac.ug)
Ethics in Information System - Management Information System
innovation process that make everything different.pptx
💰 𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓 💰
newyork.pptxirantrafgshenepalchinachinane
Paper PDF World Game (s) Great Redesign.pdf
Funds Management Learning Material for Beg
Power Point - Lesson 3_2.pptx grad school presentation
Rose毕业证学历认证,利物浦约翰摩尔斯大学毕业证国外本科毕业证
Unit-3 cyber security network security of internet system

"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Константина Осипова (Mail.ru)

  • 1. Sharding: patterns and antipatterns Konstantin Osipov (Mail.Ru, Tarantool) Alexey Rybak (Badoo)
  • 2. Big picture: scalable databases ● replication ● sharding and re-sharding ● distributed queries & jobs, Map/Reduce ● DDL ● will focus on sharding/re-sharding only
  • 3. Contents I. sharding function II. routing III.re-sharding
  • 5. Selecting a good shard key ● the identified object should be small ● some data you won’t be able to shard (and have to duplicate in each shard) ● don’t store the key if you don’t have to
  • 6. Good and bad shard keys ● good: user session, shopping order ● maybe: user (if user data isn’t too thick) ● bad: inventory item, order date
  • 7. Garage sharding: numbers ● replication based doubling (2, 4, 8, out of cash) ● the magic number 48 (2✕3✕4)
  • 8. Garage sharding thru hashing ● good: remainders o f(key) ≡ key % n_srv o f(key) ≡ crc32(key) % n_srv ● bad: first login letter
  • 9. Sharding for grown-ups ● table function ● consistent hashing
  • 10. Table functions ● virtual buckets: key -> bucket -> shard o “key -> bucket” function, “bucket -> shard” table o “key -> bucket” table, “bucket -> shard” table
  • 11. Consistent hashing ● Danny Lewin RIP ● Kinda ring and like... uhm... points, you know ... ● Libraries: Ketama
  • 12. Guava/Sumbur ● f(key, n_servers) => server_id ● strictly uniform key-to-server mapping ● recurrence formula (15 lines of code)
  • 14. Routing types ● smart client ● coordinator ● proxy ● local proxy on every app server ● intra-database routing
  • 15. Smart Client ● no extra hops ● all clients (PHP/Python/C...) should implement it ● resharding is hard
  • 16. Proxy ● encapsulates routing logic ● extra hop, traffic ● +1 service ● SPOF => local proxy
  • 17. Coordinator ● centralized knowledge ● SPOF
  • 18. Intra-database routing ● too many nodes ● redundancy is high ● ad-hoc requests
  • 20. Re-sharding is a pain ● redistribution impacts: o clients o network performance o consistency => maintenance time window ● forget about it on petabyte scale
  • 21. Best practice: no data redistribution ● update is a move ● data expiration (new data on new servers) ● new data on selected servers
  • 22. DDL ● upgrade your app ● upgrade your database ● update your app and remove any trace of old schema
  • 23. Thank you! Questions? kostja@tarantool.org fisher@corp.badoo.com

Editor's Notes

  • #3: Если мы будем обсуждать тему за пивом, то шардинг будем обсуждать в широком смысле: и мы одновременно поднимем кучу других тем: как выбрать ключ по которому шарить, собственно шардинг, как выбрать функцию шардинга, то есть алгоритм разбиения данных по серверам как поддерживать систему: решардить данные при добавлении нод или замене выбывших DDL, то есть обслуживание схемы данных и эволюция схемы данных распаралеливание запрсоов (запрашивать данные с нескольких нод, менять данные консистентно и т.д. Сегодня мы сфокусируемся на одной области, чтобы попытаться раскрыть её.
  • #4: То есть, мы смотрим конкретно на тему шардинга. Какие тут главные вопросы? Мы утверждаем, что это: то как мы разбиваем данные на кластер - функция шардинга как мы находин нужный при запросах, то есть адресация и роутинга как всем этим управлять, т.е. добавлять новые ноды
  • #5: Шардинг функция почему мы об этом говорим сначала Всё три части взаимосвязаны, но естественно когда данные перестают помещаться на одну машину, первое о чём мы думаем, это как их поделить. И это принципиальный вопрос - поделишь - получишь неработоспособную архитектуру, дорогую подддержку на долгие годы вперёд (т.к. downtime недопустим)
  • #6: Во-первых, имейте в виду, что размер объекта должын быть достаточно мал, чтобы шардинг был равномерным (тебе не повезло, ты на шарде с Джастином Бибером). Во-вторых, часто оказывается, что для определенных случаев вам либо нужно постоянно делать запросы к разным нодам, либо дублировать данные. Не бойтесь дублировать данные. В этом мире у нормальных форм не такая ценность, как в теории, забейте на нормальные формы, постройте всё вокруг сценария использования данных. Наконец, может оказаться, что размер ключа - это половина размера объекта, поэтому совершенно не обязательно ключ должен храниться в самих данных.
  • #7: Давайте рассмотрим примеры. Что скоре всего имеет маленький размер и размажется равномерно? Сессия, заказ. А данные пользователя? Уже не во всех случаях (комментарии к постам Джастина Бибера, но есть нюансы - если в соцсети по нескольку джастинов биберов на шард, то ок). Равномерность нужна не только для всех данных, но и для горячей части. Поэтому есть и совсем прохие примеры выбора ключа - например, дата заказа/поста, в этом случае данные размазываются равномерно, но горячие данные либо сидят на совсем небольшой части кластера, либо почти любая операция должна подгружать данные со многих нод. Реальная история из твиттера и выборов обамы - добавляли по несколько нод в день на новые твиты, порвали два баяна во время выборов Обамы, в итоге сменили схему шардинга.
  • #8: Есть парочка “олдскульных” рабочих способов, которые обеспечат шардинг в разумных пределах (условно, от 1 до 50 серверов). деление на двойку рулит, потому что решардинг только половины данных с каждой ноды каждый раз пиздец приходит на больших числах, т.к. нужно закупать много железа очень рабочий и удобный вариант когда вы знаете что в пределе не может быть данных больше чем X X < 50 узлов replication based doubling - это йогурт для админов завиточки к предыдущей схеме - 2*3*4 - фишеру не забыть их рассказать
  • #9: примеры на предыдущем слайде это уже функция хэширования - например выраженная в виде crc + остаток от деления, либо first login letter Ага! Идея - что мы ещё можем использовать как функцию хэширования Например first login letter - это как раз совершенно не гарантирует равномерность распределения, крайне неудобен в поддержке, когда окажется что одна буква не влезает в несколько серверов
  • #10: если предполагается полностью эластичный рост на тысячи серверов если нужно решение “из коробки” методы
  • #11: мы конфигурируем отображение ключа на шард заданное с помощью таблицы ключ на бакет отображается с помощью хэш функции бакет на шард отражается с помощью таблицы соответствия вопрсо: где мы храним эту таблицу? На центральном серевере либо на координаторе. В любом случае, возникает проблема распространения конфиугурации при её изменении максимально р может быть задано распределение центральный сервер как только ты используешь математику, ты теряешь в свободе = ты не можешь конкретный ключ при желании положить в конкретное место (это если есть промежуточные бакеты). Так что от бакетов иногда имеет смысл отказаться
  • #12: главная проблема - минимизировать количество ребалансировки при добавлении шарда 9/11 first victim, one of the founders of AKAMAI, consistent hashing and merkle trees - for load balancing of content delivery network you need a lot of virtual points otherwise you don’t have sufficient randomness библиотеки есть в open source - профит решардинг - при больших данных - положит вам сеть в любом случае,потому что заливка шарда всё равно положит роутер в стойке в которой находится этот шард таким образом, нерезиновый
  • #13: однозначная функция, принимает два числа и выдаёт server_id < n_servers очень ровно режет диапазон не имеет состояния (удобно разместить как на клиенте, так и на сервере, так и на прокси - всц равно где) минусы - долго работает при большом количестве шардов, сложность - N^2
  • #21: forget about it on petabyte scale patterns of avoiding resharding: update is a move expire