Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

463 views

Published on

  • Be the first to like this

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

  1. 1. Web Scale Взорвётся всёЛеонид ЕвдокимовВторой омский IT-субботник, январь 2013, vk.com/omskit
  2. 2. О чёмJuggler рост нагрузки с 1k до 10k машинMongoDB о свойствах и особенностяхPython о доставке сигналов смеха дляMySQL о пользе суррогатных ключейLinux об учете накладных расходовFreeBSD о внезапной сложности простого
  3. 3. JugglerСистема мониторинга событийВнутри: MySQL, MongoDB, PythonВ обвязке: nginx или lighttpd, flup или uWSGIПодробнее: «Мониторинг со всех сторон»YaC 2011, Алексей Симаков, clck.ru/L5GF
  4. 4. MongoDB NoSQL СУБД Быстрая как /dev/null Не использует JOIN mongodb-is-webscale.com
  5. 5. MongoDBfind({x:1}) vs. update({x:1}, {$set:{pad:"A…A"}})
  6. 6. MongoDB> find({x: 1}){"_id": ObjectId("4f…c3"), "x": 1 }{"_id": ObjectId("4f…c3"), "x": 1,"pad": "A…A" }>v2.0.2 — взорвано
  7. 7. MongoDBdouble-update ≈ ½ quad damage> update(..., {$push: {big object}}) «Scaling with MongoDB» by Michael Schurter 2011Слушатель, доверяй, но проверяй!
  8. 8. MongoDB/usr/bin/mongod vs. /usr/sbin/logrotate
  9. 9. MongoDBjira/SERVER-3339 — при ротации логов…… stackoverflow в обработчике SIGABRT… deadlock в malloc()Починка базы медленнее, чем MyISAM!
  10. 10. MongoDBjira/SERVER-3339 — при ротации логов…… stackoverflow в обработчике SIGABRT… deadlock в malloc()Починка базы медленнее, чем MyISAM!Ответ: db.runCommand("logRotate")
  11. 11. PythonОднопоточный«Медленный»GIL
  12. 12. PythonОднопоточный«Медленный»GILОтвет: multiprocessing
  13. 13. Python/usr/lib/python2.7/multiprocessing vs. /usr/sbin/logrotate
  14. 14. Pythonbugs/issue8296 — про multiprocessingПроисходит deadlock из-за EINTR и смертиодного из тредов…ох уж эти сигналы!Ответ: kill -9 -${sid} :-)
  15. 15. MongoDB & PythonОкончательный ответ на вопрос logrotate,доставки сигналов и всего такого:«Delivering Signals for Fun and Profit»by Michal Zalewski clck.ru/4RGgyalways look on the bright side of life vulnerability
  16. 16. MySQLНа этот раз не просигналы
  17. 17. MySQLНа этот раз не просигналыВ mysql все сигналыобрабатываются вотдельном потокеНа этот раз — проJOIN
  18. 18. MySQLLEFT JOIN vs. RIGHT OUTER JOIN
  19. 19. MySQLLEFT JOIN vs. RIGHT OUTER JOIN На самом деле - нет
  20. 20. 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 …
  21. 21. MySQLmysqld: Incorrect key file for table/var/tmp/#sql17161_b3_3.MYI;try to repair it
  22. 22. 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
  23. 23. MySQLMEMORY maximum key length is 3072 bytesMyISAM maximum key length is 1000 bytes
  24. 24. MySQLMEMORY maximum key length is 3072 bytesMyISAM maximum key length is 1000 bytesCreated_tmp_disk_tables: MEMORY → MyISAM
  25. 25. 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
  26. 26. 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
  27. 27. Linux & FreeBSD
  28. 28. Linux/bin/ping vs. setsockopt(fd, SO_RCVBUF, …)
  29. 29. LinuxSO_RCVBUF… The kernel doubles this value (to allow spacefor bookkeeping overhead). – man 7 socket
  30. 30. LinuxА теперь пошлем ICMP PING на 10000 хостовПеренесем «пинговалку» в vm на основе KVM…
  31. 31. LinuxЗадержка пакета от входа до recvmsg()возросла в десятки раз (пики до 50ms!)RCVBUF, кажется, достаточно большой длянескольких тысяч 28-байтных пакетовНо входящие PONG не помещаются вRCVBUF при такой задержке
  32. 32. LinuxИзмеряем: gist.github.com/4454323«Bookkeeping overhead» до ¾ kbyte / pktНакладные расходы в ≈27.5 раз вышеописанных в man page
  33. 33. LinuxICMP PING — не очень интересенЧто происходит в UDP (VoIP, игры) сокетах?Почему KVM настолько повышает latency?
  34. 34. FreeBSDrename() vs. FreeBSD-8.2
  35. 35. FreeBSDСказ о rename() и о том, как скушать все PIDыи уснуть в D-state● В N потоков: rename(tmp, dest_dir)● В M потоков: exists(dest_dir/fname)● Порождать новый worker-поток, если старый не ответил за время T
  36. 36. FreeBSDВ FreeBSD-9.0 VFS уже починили и этотdeadlock в rename() исчезОтвет: pool, queue & two strict ulimits
  37. 37. ITОкончательный ответ на вопрос разработки,протекающих абстракций и всего такого: Закон больших чисел Взорвётся всё Даже /dev/null. Я не шучу.
  38. 38. Q&AЛеонид Евдокимов, разработчик ПОleon@darkk.net.ru || http://darkk.net.ru AKA @mathemonkey

×