Сильные стороны mysql для высоконагруженных проектов
TRANSCRIPT
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