Сильные стороны MySQL для высоконагруженных проектов

31
1 / 31

Transcript of Сильные стороны MySQL для высоконагруженных проектов

Page 1: Сильные стороны MySQL для высоконагруженных проектов

1 / 31

Page 2: Сильные стороны MySQL для высоконагруженных проектов

ОсеберазработчикMySQLвMySQLAB/Sun/Oracle2004—2010разработчик,руководительпроектавPercona2010—2015

2004—н.в.MySQLэксперт,Аурига

http://github/akopytov/sysbench

2 / 31

Page 3: Сильные стороны MySQL для высоконагруженных проектов

Очёмдоклад?осильныхсторонахMySQLовозможностяхMySQL,отсутствующихвPostgreSQLпочемукрупнейшиевеб-проектыиспользуютMySQL?

3 / 31

Page 4: Сильные стороны MySQL для высоконагруженных проектов

Причиныобострениедискуссийзапоследнеевремямногомифов,неквалифицированнойкритикиFUD,необъективностьлидеровPostgreSQLсообщества:

«MySQL—проприетарщина!»«ВMySQLнеттранзакций!»«НетпричиниспользоватьMySQL!»

4 / 31

Page 5: Сильные стороны MySQL для высоконагруженных проектов

ДеталиСУБД—сложныепрограммысравниватьихещёсложнеенеутонутьвдеталях—главнаяпроблема

5 / 31

Page 6: Сильные стороны MySQL для высоконагруженных проектов

ГлавноеСильныестороныMySQL:

репликацияикластерныетехнологииоптимизациячтения,записиихраненияданныхальтернативныедвижкиNoSQLинтерфейс

6 / 31

Page 7: Сильные стороны MySQL для высоконагруженных проектов

РепликацияОсновалюбыхнагруженныхпроектов:

горизонтальноемасштабированиевысокаядоступностьгеографическаяраспределённостьописаниеизменений:логическая/физическаядоставкаизменений:синхронная/полусинхронная/асинхронная

7 / 31

Page 8: Сильные стороны MySQL для высоконагруженных проектов

ФизическаярепликацияизменениявсехфайловданныхточнаякопияданныхнарепликевстроенавPostgreSQLс2010г.отсутствуетвMySQL

8 / 31

Page 9: Сильные стороны MySQL для высоконагруженных проектов

Логическаярепликацияописаниеизмененийнавысокомуровне(строки,запросы)встроенавMySQLс2000г.многостороннихрешенийвPostgreSQL,всеснедостатками:

9 / 31

Page 10: Сильные стороны MySQL для высоконагруженных проектов

Плюсылогическойрепликации:

независимостьотфизическойструктурыданныхпозволяетиметьразныесхемынамастереиреплике(приусловииобратнойсовместимости)нетограниченийначтениесрепликсложныетопологии:каскадная,multi-source,multi-master,ит.д.временныетаблицычастичнаярепликациякомпактность

10 / 31

Page 11: Сильные стороны MySQL для высоконагруженных проектов

Минусылогическойрепликации:

требуетбольшересурсовнарепликепопулярныйвсообществеPostgreSQLфактпоканепоявилсяотчётUber:неэффективнаярепликациявPostgreSQLпроблемысMVCCнарепликах

11 / 31

Page 12: Сильные стороны MySQL для высоконагруженных проектов

Полусинхроннаярепликация:разработанавGoogleв2007г.,развиваетсявFacebook,AlibabaдляHighAvailabiliyкластеровкоммитнамастерегарантируетполучениеданныххотябыоднойизрепликнетаналогавPostgreSQL(synchronous_standby_names—неаналог)

12 / 31

Page 13: Сильные стороны MySQL для высоконагруженных проектов

GaleraClusterвнешняябиблиотекаотCodership,вразработкес2007г.параллельнаясинхроннаяmulti-masterрепликациявключенавMariaDB,PerconaXtraDBClusterмасштабированиечтений(всегдалокальны)нетцентрализованногоуправления/единойточкиотказаавтоматическоевключение/исключенияузловавтоматическоесоздание/пересозданиеузлов(nodeprovisioning)нетаналоговвPostgreSQL

13 / 31

Page 14: Сильные стороны MySQL для высоконагруженных проектов

Движкихранения:концепцияпохожанаVFSвUnixабстрагируютфизическоепредставлениеданных/индексовотядравыполнениязапросовмогутхранитьданные:воптимизированномдляопределённыхнагрузоквиденадискевпамятинадругомСУБДсерверевраспределённомкластере

14 / 31

Page 15: Сильные стороны MySQL для высоконагруженных проектов

Движкихранения:InnoDB«рабочаялошадка»современногоинтернетавозможносамаяобкатаннаяиоптимизированнаяреализацияB+Tree

15 / 31

Page 16: Сильные стороны MySQL для высоконагруженных проектов

InnoDB:кластеризованныеиндексы

16 / 31

Page 17: Сильные стороны MySQL для высоконагруженных проектов

InnoDB:особенностикластеризованногоиндекса:запросыпопервичномуключуоченьбыстрыесканпервичногоключаобычноприводиткпоследовательномучтениюсдискапервичныйключявляетсяпокрывающиминдексомдлялюбыхзапросоввторичныеиндексыявляютсяпокрывающимидлясвоих+PKколонок

17 / 31

Page 18: Сильные стороны MySQL для высоконагруженных проектов

КластеризованныеиндексывPostgreSQL:

отсутствуютстарыйипопулярныйпунктв

Многиетипичныедлявебоперации:

медленнееприводятк«распуханию»таблицсоздаютпроблемыдлярепликации

PostgreSQLTODO

18 / 31

Page 19: Сильные стороны MySQL для высоконагруженных проектов

КомпрессияданныхMySQL/InnoDB:интенсивноиспользуетсяинтернет-гигантами(Facebookипр.)постраничнаякомпрессия(данные+индексы)кэшируютсярезультатыкомпрессии/декомпрессии

PostgreSQL(TOAST):толькодляотдельныхзаписей(>2KB)толькодляполейпеременнойдлинытолькодляданныхнеткэширования/буферизации

19 / 31

Page 20: Сильные стороны MySQL для высоконагруженных проектов

InnoDB:поддержкаO_DIRECTчтение/записьданныхвобходкэшаядраболеерациональноеиспользованиепамятинетнакладныхрасходовнадвойноекэширование/буферизациюболеетонкийконтрольнадзаписьюнадискпоявиласьв2003г.

20 / 31

Page 21: Сильные стороны MySQL для высоконагруженных проектов

O_DIRECTвPostgreSQL:толькодляWAL,недляданныхнеэффективноеиспользованиепамяти(shared_buffers=~25%RAM)двойнаябуферизацияизлишняяработадляконтрольныхсумм(вбудущем:шифрования,компрессии,ит.д.)

21 / 31

Page 22: Сильные стороны MySQL для высоконагруженных проектов

InnoDB:поддержкаO_DIRECTMySQL:огромнаяработавPerconaиOracleпосглаживаниюскачковTPS/latencyприинтенсивнойзаписи:

fuzzycheckpointing,adaptiveflushing,parallelflushing,paralleldoublewrite

PostgreSQL:

“requireslotsofperformanceworkonourside”–AndresFreund

сложносделатьбезO_DIRECT

22 / 31

Page 23: Сильные стороны MySQL для высоконагруженных проектов

Движки:MyRocks,TokuDBMyRocksиTokuDB:

оптимизированыназаписьидляSSDустройствMyRocks–LSM-деревья,FacebookTokuDB–«фрактальные»индексы,PerconaболеекомпактноепредставлениеданныхнадискепродвинутыевозможностикомпрессиинизкийwriteamplificationпосравнениюсInnoDBмножественныекластеризованныеиндексы(TokuDB)ничегопохожегопохарактеристикамвPostgreSQL

23 / 31

Page 24: Сильные стороны MySQL для высоконагруженных проектов

Движки:NDBin-memoryкластерсопциональнымчекпойнтингомнадискавтоматическиешардинг,failover,recoveryactive-active/multi-masterрепликация

Типичныеобластиприменения:

телекоммуникации(данныеабонента)платёжные,финансовыесистемыPayPal:гео-распределённыйкластерна100TBдляобнаружениямошенничества(frauddetection)

24 / 31

Page 25: Сильные стороны MySQL для высоконагруженных проектов

Физическиерезервныекопии:важныпридобавленииузловвкластерMySQL:

PerconaXtraBackupPostgreSQL:pg_basebackupbarmanpg_armanpgBackRestпофункциональности–XtraBackup6-7летназад

25 / 31

Page 26: Сильные стороны MySQL для высоконагруженных проектов

key/value(NoSQL)API:Сэкономитьвремяна:разборSQLоткрытие,блокировкутаблицпостроениепланавыполнения

MySQL:HandlerSocket(стороннийплагин)memcached(встроенное)NDBAPI(толькодляNDB)

PostgreSQL:нетаналогов

26 / 31

Page 27: Сильные стороны MySQL для высоконагруженных проектов

Закадром:потокиипроцессывстроенныйпулсоединений(MariaDB/Percona)масштабируемостьприбольшомколичествесоединенийподдержкаасинхронноговвода/выводакомпактностьданныхнадискепроблемаIOamplificationпрозрачноедляклиентовшифрованиеданныхподдержкасохранения/восстановлениясостояниякэша

27 / 31

Page 28: Сильные стороны MySQL для высоконагруженных проектов

Закадром(2):декларативноесекционированиеданныхподдержкакодировоквозможностиоптимизаторазапросовдинамическиепеременныевиртуальныеколонкикомпрессиясоединенийMySQLEmbedded:серверввидевстраиваемойбиблиотекивстроенныйпланировщикзаданий(eventscheduler)

28 / 31

Page 29: Сильные стороны MySQL для высоконагруженных проектов

Выводы:PostgreSQL—замечательнаяСУБД,но:

естьмногопричиниспользоватьMySQLмногиеважныедлякрупныхвеб-проектоввозможностиMySQLотсутствуютвPostgreSQLдосихпорреализацияихможетрастянутьсянагоды(еслинедесятилетия)

29 / 31

Page 30: Сильные стороны MySQL для высоконагруженных проектов

Выводы:MySQLскореевсегоостанется«самойпопулярнойopensourceСУБДдлявеб»аPostgreSQL—«самойпродвинутойopensourceСУБД»выборСУБД—сложныйвопросбегитеотлюдей,которыепредлагаютпростыеответы!Uber:“Don’trelyonhearsay.Don’tbelieveinhype!”

30 / 31

Page 31: Сильные стороны MySQL для высоконагруженных проектов

Спасибо!Этислайды:ОтчётUberопереходенаMySQL:

TokuDB:MyRocks:GaleraClusterforMySQL:MySQLGroupReplication:MySQLNDBCluster:

http://kaamos.me/talks/secr2016

https://eng.uber.com/mysql-migrationhttp://bit.ly/2dx7aYthttp://bit.ly/2cRgS8y

http://galeracluster.com/http://bit.ly/2dx6UwZ

https://www.mysql.com/products/cluster/

31 / 31