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

Post on 16-Apr-2017

154 views 5 download

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

1 / 31

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

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

http://github/akopytov/sysbench

2 / 31

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

3 / 31

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

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

4 / 31

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

5 / 31

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

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

6 / 31

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

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

7 / 31

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

8 / 31

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

9 / 31

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

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

10 / 31

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

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

11 / 31

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

12 / 31

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

13 / 31

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

14 / 31

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

15 / 31

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

16 / 31

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

17 / 31

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

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

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

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

PostgreSQLTODO

18 / 31

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

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

19 / 31

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

20 / 31

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

21 / 31

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

fuzzycheckpointing,adaptiveflushing,parallelflushing,paralleldoublewrite

PostgreSQL:

“requireslotsofperformanceworkonourside”–AndresFreund

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

22 / 31

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

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

23 / 31

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

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

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

24 / 31

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

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

25 / 31

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

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

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

26 / 31

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

27 / 31

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

28 / 31

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

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

29 / 31

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

30 / 31

Спасибо!Этислайды:Отчёт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