Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Архитектурные решения при постоении высоконагру...

Архитектурные решения при постоении высоконагруженных Linux систем

Вне зависимости от выбранного стека технологий и цели разрабатываемого бэкэнда - подходы к разработке высокопроизводительных систем всегда одинаковы, как и одинакова их отладка и тонкая настройка. Этот доклад позволит слушателям грамотно спланировать архитектуру высоконагруженного сервера, заранее найти узкие места и устранить возможные недостатки. Для новичков предусмотрен краткий обзор терминологии и основ взаимодействия разработчика с ОС.

Helen

May 14, 2016
Tweet

More Decks by Helen

Other Decks in Programming

Transcript

  1. — Генри Спенсер, программист Те, кто не понимают UNIX, обречены

    на повторное ее создание, несчастные! ” “
  2. UNIX-ФИЛОСОФИЯ Правило Пояснение Модульность Следует писать простые части, связанные ясными

    интерфейсами. Ясность Ясность лучше, чем мастерство. Композиция Программы должны взаимодействовать с программами. Прозрачность Для упрощения отладки программы ее конструкция должна быть обозримой. Представление Знания оставлять в данных, чтобы логика программы была примитивной. Исправность Аварийное завершение должно происходить явно и максимально быстро. Оптимизация Создайте опытные образцы, заставьте их работать, прежде чем перейти к оптимизации. Разнообразие Не следует доверять утверждениям о "единственно верном пути". Расширяемость Проектируйте с учетом изменений в будущем, поскольку будущее придет скорее, чем кажется.
  3. USER SPACE VS KERNEL SPACE User Space Приложения Библиотеки Kernel

    Space Планировщик, межпроцессное взаимодействие Файловые системы I/O и драйвера устройств Сетевой стек, виртуальная память Hardware
  4. STACK VS HEAP Stack Heap Быстрый доступ Более медленный доступ

    Автоматическое выделение и освобождение памяти Ручное* управление памятью Эффективное управление памятью, фрагментации нет Эффективность использования памяти не гарантируется, фрагментация Только локальные переменные Глобальные переменные Предел размера стека (зависит от ОС) Нет лимита на используемую память Размер переменных не может быть изменен Размер переменных может быть изменен
  5. THREAD VS PROCESS Thread Process Быстрое порождение Ресурсоемкое порождение Переключение

    потоков не требует взаимодействия с ОС Переключение процессов требует взаимодействия с ОС Общее адресное пространство Thread = [Parent Code, Data and Heap + Stack, PC and CPU Registers] Личное адресное пространство Process = [Code + Data + Heap + Stack + PC + PCB + CPU Registers] Изменения в родительском процессе влияют на дочерние Изменения в родительском процессе не влияют на дочерние Прямое общение между потоками Ресурсоемкое межпроцессное взаимодействие (IPC)
  6. ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПРИЛОЖЕНИЯ • задержка обработки (latency) • время отклика

    (response time) • пропускная способность (throughput) • ресурсоемкость (utilization) • насыщение (saturation)
  7. ОТЛАДКА ПРИЛОЖЕНИЯ • USE: utilization, saturation, errors • tools: top,

    htop, free, vmstat, netstat, tcpdump, iostat, etc • profiling: DTrace, OProfile, Valgrind, etc
  8. ЦПУ HARDWARE TWEAKS • process priority $ nice -n 19

    ./my_app • affinity (CPU binding) • irqbalance • scheduling: non-real-time/real-time
  9. ПАМЯТЬ HARDWARE TWEAKS • PAGE_SIZE : 4KB - 4MB •

    demand paging • overcommitting memory: vm.overcommit_memory, vm.overcommit_ratio • garbage collection • avoid cache invalidation
  10. HARDWARE TWEAKS • TCP vs UDP • jumbo frames (MTU)

    • socket options: tcp_nodelay, tcp_keepalive_intvl, tcp_keepalive_probes, tcp_keepalive_time, etc • bonding (link aggregation) СЕТЬ
  11. APPLICATION TECHNIQUES • caching • buffering • thread pooling •

    asynchronous IO for files • non-blocking IO for sockets • lock-free programming • actor model: Erlang, Scala • high availability • compiler optimization
  12. СИНХРОНИЗАЦИЯ ПОТОКОВ • spinlock - busy waiting • mutex -

    mutual exclusion lock • read-write lock • deadlock • livelock • race condition • starvation ПРОБЛЕМЫ
  13. РЕКОМЕНДУЕМЫЕ ИСТОЧНИКИ • Systems Performance: Enterprise and the Cloud. Book

    by Brendan Gregg • The Art of Unix Programming. Book by Eric Steven Raymond • Understanding the Linux kernel. Book by Daniel P. Bovet and Marco Cesati • The Art of Scalability. Book by Martin L. Abbott Michael T. Fisher • Linux Foundation Events YouTube channel: https://www.youtube.com/user/ TheLinuxFoundation • Tech Blog “High Scalability”: http://highscalability.com • NGINX Tech Blog: https://www.nginx.com/blog/ • Netflix Tech Blog: http://techblog.netflix.com