• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
 

2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все

on

  • 439 views

 

Statistics

Views

Total Views
439
Views on SlideShare
439
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
1

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все 2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все Presentation Transcript

    • Web Scale Взорвётся всёЛеонид ЕвдокимовВторой омский IT-субботник, январь 2013, vk.com/omskit
    • О чёмJuggler рост нагрузки с 1k до 10k машинMongoDB о свойствах и особенностяхPython о доставке сигналов смеха дляMySQL о пользе суррогатных ключейLinux об учете накладных расходовFreeBSD о внезапной сложности простого
    • JugglerСистема мониторинга событийВнутри: MySQL, MongoDB, PythonВ обвязке: nginx или lighttpd, flup или uWSGIПодробнее: «Мониторинг со всех сторон»YaC 2011, Алексей Симаков, clck.ru/L5GF
    • MongoDB NoSQL СУБД Быстрая как /dev/null Не использует JOIN mongodb-is-webscale.com
    • MongoDBfind({x:1}) vs. update({x:1}, {$set:{pad:"A…A"}})
    • MongoDB> find({x: 1}){"_id": ObjectId("4f…c3"), "x": 1 }{"_id": ObjectId("4f…c3"), "x": 1,"pad": "A…A" }>v2.0.2 — взорвано
    • MongoDBdouble-update ≈ ½ quad damage> update(..., {$push: {big object}}) «Scaling with MongoDB» by Michael Schurter 2011Слушатель, доверяй, но проверяй!
    • MongoDB/usr/bin/mongod vs. /usr/sbin/logrotate
    • MongoDBjira/SERVER-3339 — при ротации логов…… stackoverflow в обработчике SIGABRT… deadlock в malloc()Починка базы медленнее, чем MyISAM!
    • MongoDBjira/SERVER-3339 — при ротации логов…… stackoverflow в обработчике SIGABRT… deadlock в malloc()Починка базы медленнее, чем MyISAM!Ответ: db.runCommand("logRotate")
    • PythonОднопоточный«Медленный»GIL
    • PythonОднопоточный«Медленный»GILОтвет: multiprocessing
    • Python/usr/lib/python2.7/multiprocessing vs. /usr/sbin/logrotate
    • Pythonbugs/issue8296 — про multiprocessingПроисходит deadlock из-за EINTR и смертиодного из тредов…ох уж эти сигналы!Ответ: kill -9 -${sid} :-)
    • MongoDB & PythonОкончательный ответ на вопрос logrotate,доставки сигналов и всего такого:«Delivering Signals for Fun and Profit»by Michal Zalewski clck.ru/4RGgyalways look on the bright side of life vulnerability
    • MySQLНа этот раз не просигналы
    • MySQLНа этот раз не просигналыВ mysql все сигналыобрабатываются вотдельном потокеНа этот раз — проJOIN
    • MySQLLEFT JOIN vs. RIGHT OUTER JOIN
    • MySQLLEFT JOIN vs. RIGHT OUTER JOIN На самом деле - нет
    • MySQLSELECT … FROM t1 LEFT JOIN t2ON t1.type = HOSTAND t1.host_name = t2.object_nameAND t1.check_name = t2.check_nameLEFT JOIN t1_1 … LEFT JOIN t2_1 …RIGHT OUTER JOIN t1_2 …
    • MySQLmysqld: Incorrect key file for table/var/tmp/#sql17161_b3_3.MYI;try to repair it
    • MySQLSELECT … FROM t1 LEFT JOIN t2ON t1.type = HOSTAND t1.host_name = t2.object_nameAND t1.check_name = t2.check_name …host_name, object_name, check_name- varchar(128) COLLATE utf8_bin
    • MySQLMEMORY maximum key length is 3072 bytesMyISAM maximum key length is 1000 bytes
    • MySQLMEMORY maximum key length is 3072 bytesMyISAM maximum key length is 1000 bytesCreated_tmp_disk_tables: MEMORY → MyISAM
    • MySQLMEMORY maximum key length is 3072 bytesMyISAM maximum key length is 1000 bytesCreated_tmp_disk_tables: MEMORY → MyISAMПри выходе за key_len: MEMORY ↴ MyISAM BADABOOM storage engine
    • MySQLПомогают…… суррогатные INTEGER ключи… tmp_table_size & max_heap_table_size You can’t hardware yourself out of a performance problem you softwared yourself into. – Cary Millsap
    • Linux & FreeBSD
    • Linux/bin/ping vs. setsockopt(fd, SO_RCVBUF, …)
    • LinuxSO_RCVBUF… The kernel doubles this value (to allow spacefor bookkeeping overhead). – man 7 socket
    • LinuxА теперь пошлем ICMP PING на 10000 хостовПеренесем «пинговалку» в vm на основе KVM…
    • LinuxЗадержка пакета от входа до recvmsg()возросла в десятки раз (пики до 50ms!)RCVBUF, кажется, достаточно большой длянескольких тысяч 28-байтных пакетовНо входящие PONG не помещаются вRCVBUF при такой задержке
    • LinuxИзмеряем: gist.github.com/4454323«Bookkeeping overhead» до ¾ kbyte / pktНакладные расходы в ≈27.5 раз вышеописанных в man page
    • LinuxICMP PING — не очень интересенЧто происходит в UDP (VoIP, игры) сокетах?Почему KVM настолько повышает latency?
    • FreeBSDrename() vs. FreeBSD-8.2
    • FreeBSDСказ о rename() и о том, как скушать все PIDыи уснуть в D-state● В N потоков: rename(tmp, dest_dir)● В M потоков: exists(dest_dir/fname)● Порождать новый worker-поток, если старый не ответил за время T
    • FreeBSDВ FreeBSD-9.0 VFS уже починили и этотdeadlock в rename() исчезОтвет: pool, queue & two strict ulimits
    • ITОкончательный ответ на вопрос разработки,протекающих абстракций и всего такого: Закон больших чисел Взорвётся всё Даже /dev/null. Я не шучу.
    • Q&AЛеонид Евдокимов, разработчик ПОleon@darkk.net.ru || http://darkk.net.ru AKA @mathemonkey