Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Industrial Programming Java - Lection Pack 02 - Distributed applications - Lavrentyev Fedor

127 vues

Publié le

Курс "Промышленное программирование на Java". Набор лекций 2. "Распределенные приложения".

Производительность и ресурсы системы. Распределенные системы. Архитектуры клиент-сервер, клиент-фронтенд-бекенд, Service-Oriented Architecture (SOA). HTTP, REST.
Угрозы безопасности в интернетах. Защита приложения.

МФТИ, 2014 год. Лектор - Лаврентьев Федор Сергеевич

Publié dans : Logiciels
  • Soyez le premier à commenter

Industrial Programming Java - Lection Pack 02 - Distributed applications - Lavrentyev Fedor

  1. 1. Производительность Промышленное программирование
  2. 2. Границы возможностей ЭВМ
  3. 3. Ресурсы машины Процессорная мощность Оперативная память Дисковый ввод/вывод Сетевой ввод/вывод
  4. 4. На что расходуются ресурсы Получение запросов по сети, отдача ответов - сеть Поддержание соединений и управление ими - процессор, память Обработка запроса и формирование ответа (т.е. логика) - процессор, память Отдача статического контента - диск
  5. 5. На что расходуются ресурсы Чтение и запись в БД и ФС - диск Кеши БД и ФС - память Сложные запросы к БД (filter, aggregate, join) - диск, память, процессор Запросы к другим процессам - процессор Запросы к другим машинам - сеть Телеметрия - диск, сеть
  6. 6. Чем меряют производительность Нагрузка (load) - число запросов в секунду (Requests per second, RPS) Пропускная способность (throughput) - максимальное значение нагрузки, которое выдерживает сервис, RPS Задержка (latency) - время выполнения одного запроса, мс. latency = f(load)
  7. 7. Из чего складывается задержка Передача по сети в обе стороны (RTT) Установление TCP соединения (SYN+ACK) Получение и разбор запроса Обращение к базам данных Обращение к другим сервисам Вычисления, построение ответа Обработка (рендеринг) ответа на клиенте
  8. 8. Приемлемая задержка RTT внутри ДЦ <1мс RTT из Москвы до Нью-Йорка - 120 мс RTT из Москвы до южного Китая - 250 мс Get в Redis - 0,3 мс Prepared query by PK в MySQL - 5 мс Ответ от Web-сервера - 50-200 мс Рендеринг на клиенте - 50-100 мс Незаметное для человека время - 400 мс
  9. 9. Деградация сервиса Ошибки взаимодействия (протокола) Утрата функциональности В т.ч. переход в Read-Only Таймаут - чрезмерная задержка Ошибки, блокирующие выполнение Потеря или рассогласование данных
  10. 10. Последствия нехватки ресурсов
  11. 11. Если не хватает процессора За момент времени обрабатывается запросов меньше, чем принимается Запросы встают в очередь Очередь не уменьшается Запросы не успевают выполниться Очередь сжирает всю память Клиент фиксирует таймауты
  12. 12. Если не хватает объема памяти Выполнение запроса может спонтанно прерваться в любое время Может спонтанно прерваться сервисный тред или сторонняя служба Система коллапсирует, пока не будет остановлен расходующий память процесс Клиент фиксирует всевозможные ошибки
  13. 13. Если не хватает скорости сети Некоторые запросы фрагментируются, засоряют очередь и отбрасываются Некоторые ответы теряются Нарушается связь с другими узлами Отвалившиеся соединения образуют очереди и расходуют память и процессор Клиент фиксирует таймауты Клиент фиксирует ошибки протоколов
  14. 14. Если не хватает скорости дисков Дисковые операции долго висят в ожидании, блокируют друг друга или теребят контроллер диска Существенно увеличивается время обработки запросов За момент времени обрабатывается запросов меньше, чем принимается… См. нехватку процессора
  15. 15. Если не хватает объема дисков Прекращается сбор телеметрии (логи, мониторинг) - оператор системы слепнет Спонтанно прекращается запись на диск, возможно, с утратой целостности данных Фатально деградирует функциональность систем, пишущих на диск Клиент фиксирует ошибки сервиса Система может жить в Read-Only
  16. 16. Чего еще может не хватать Файловых и сокетных дескрипторов Дескрипторов потоков и процессов Скорости северного моста (можно считать, что процессора) Скорости южного моста - связки между процессором и I/O Мощности отдельных устройств - сетевой карты, дисковых контроллеров и т.п.
  17. 17. Увеличение доступных ресурсов
  18. 18. Оптимизация расхода ресурсов Рефакторинг кодовой базы Асимптотческая оптимизация алгоритмов Дедупликация данных, устранение избыточности, рефакторинг моделей Упорядочивание запросов к диску Кеширование расчетов и данных с диска Переход на NIO, бинарные протоколы, внедрение сжатия
  19. 19. Разделение ролей Вынос баз данных на отдельные машины Разнесение автономных модулей на разные машины Создание дополнительных проксирующих прослоек на других машинах + Вышли за пределы одной машины - Повысили расходы на коммуникацию
  20. 20. Вертикальное масштабирование Заменить в сервере процессоры Воткнуть туда больше памяти Вставить быстрый RAID-контроллер Заменить диски на SSD Обновить сетевой адаптер Переехать на новый сервер… Весело. Но дорого.
  21. 21. Горизонтальное масштабирование Распараллелить выполнение программы Убрать критические секции Облегчить работу с общими ресурсами Обеспечить запуск на нескольких машинах Равномерно распределить нагрузку Минимизировать связь между машинами Получать прирост пропускной способности при росте числа машин
  22. 22. Эластичное масштабирование Линейная пропорция между пропускной способностью и объемом ресурсов Возможность подключения и отключения машин к кластеру без его остановки Отсутствие единой точки отказа
  23. 23. Распределенные системы Промышленное программирование
  24. 24. Архитектура распределенных систем
  25. 25. Клиент-сервер
  26. 26. Клиент-сервер Монопольный контроль над БД Просто программировать Отрисовка данных на клиенте (опц) Кросс-платформенность с помощью портирования клиентов Единая точка отказа Нельзя горизонтально масштабировать
  27. 27. Толстый VS Тонкий клиенты Тонкий клиент только посылает запросы и отображает ответы Толстый клиент проводит некоторые расчеты без запросов к серверу Тонкий клиент проще в реализации Толстый клиент сложнее, но быстрее На толстом клиенте данные могут устареть Толстый клиент плохо портируется
  28. 28. Web-приложения
  29. 29. Web-приложения Стандартный протокол - HTTP Стандартный клиент - браузер Стандартные client-side средства Тяжелый, избыточный трафик* Слабая client-side производительность Почти кросс-платформенно Проблемы с портируемостью графики
  30. 30. Backend - Frontend - Client
  31. 31. Backend - Frontend - Client Разделение server-side на слои Масштабирование каждого слоя отдельно Возможность дробить систему на части Очень большой трафик внутри кластера Значительно сложнее разработка Узкая специализация разработчиков
  32. 32. Service-Oriented Architecture (SOA)
  33. 33. Service-Oriented Architecture (SOA) Физическое выделение отдельных компонентов на отдельную машину Уменьшение связности между компонентами - упрощение разработки Возможность регулировать работу каждого сервиса отдельно Значительное усложнение адресации внутри кластера
  34. 34. Role-based адресация Закрепление за машиной роли - запуск на ней определенных сервисов Всегда ясно, где подняты инстансы сервиса Легкая стартовая конфигурация со сложным “горячим” изменением Возможно оптимально подобрать железо под нужды конкретного сервиса
  35. 35. Cloud-based адресация Выделение пула машин, на которых могут быть запущены разные сервисы Гибкое переключение и оперативное реагирование на нагрузку и сбои Приходится абстрагироваться от железа Необходима отдельная инфраструктура для учета и управления кластером
  36. 36. Межпроцессное взаимодействие
  37. 37. Способы передачи данных Передача файлов Общая база данных Разделяемая память Потоки и каналы данных Общение через брокер
  38. 38. Организация потоков данных Transport-level потоки: UNIX Socket TCP Socket UDP Stream Protocol-level потоки: Binary Plain text
  39. 39. Прикладные протоколы Telnet - clear plain text over TCP HTTP - convention over plain text over TCP CORBA - binary, configurable SOAP, REST, XML-RPC - over HTTP Apache Avro, Apache Thrift - binary over TCP …
  40. 40. HTTP HyperText Transfer Protocol, 1992 Plain Text, line-based Различные типы запросов - GET, POST, PUT, HEAD, … Коды ответа - 200 ОК, 404 Not Found, … Заголовки - Content-Type:text/html, … Blobs via Base64
  41. 41. REST Representational State Transfer, 2000 Over HTTP Client-Server Stateless (no sessions) Cacheable Uniform interface Layered
  42. 42. REST: трактовка HTTP запросов GET /collection - получить всю коллекцию PUT /collection - заменить всю коллекцию POST /collection - добавить элемент в коллекцию DELETE /collection - очистить коллекцию GET /collection/item - получить элемент по ID PUT /collection/item - заменить элемент по ID DELETE /collection/item - удалить элемент
  43. 43. Промышленное программирование Пользовательские интерфейсы
  44. 44. Web-интерфейсы Здесь должны быть слайды про реализацию Web UI средствами Java, Thymeleaf и Spring Web MVC Но нет
  45. 45. Промышленное программирование Угрозы безопасности
  46. 46. Ахтунг! Эта лекция не дает исчерпывающего списка возможных угроз Лекция призвана только лишь обратить внимание на проблему, но не дает сколь- нибудь приемлемого решения Tl;dr: кругом враги, приложения полны дыр, уделяйте внимание безопасности
  47. 47. Терминология Угроза Уязвимость Атака Подробнее: Т.Иващенко, Яндекс ШРИ
  48. 48. Виды угроз Отказ в обслуживании (DoS) Перехват данных пользователя Подмена действий пользователя Утечка данных приложения Модификация данных приложения Перехват управления Проникновение в незащищенную зону …
  49. 49. Отказ в обслуживании (DoS) Генерация множества одновременных запросов к приложению Эксплуатация чувствительных к нагрузке участков кода и методов API Исчерпание аппаратных ресурсов Деградация сервиса вплоть до отказа
  50. 50. Перехват данных пользователя Средства прослушки: Незащищенные публичные сети Снифферы трафика Прокси (HTTP Proxy, NAT, анонимайзеры, …) Спуфинг (подмена) ARP, IP, DNS, … Атаки Man-In-The-Middle Фишинг Социальная инженерия
  51. 51. Подмена действий пользователя Кража учетной записи Кража сессии (авторизационной куки) Атаки MITM с модификацией запросов Cross-Site Request Forgery (CSRF) Cross-Site Scripting (XSS)
  52. 52. Утечка и модификация данных Инъекции SQL, JS, Shell, XPath, … Неустойчивые к перебору идентификаторы (пользователей, сессий, ресурсов, …) Служебные страницы без авторизации Уязвимости в серверном ПО
  53. 53. Перехват управления Безумные служебные страницы Инъекции исполняемого кода Shell-инъекции Уязвимости в бинарном коде ПО Недостаточно защищенные средства удаленного администрирования
  54. 54. Уровни угрозы Внешняя угроза Инъекции Внутренняя угроза Перехват управления системным пользователем Перехват управления суперпользователем Получение доступа к базам данных (R, W) Компрометация системы внутридоменной аутентификации
  55. 55. Промышленное программирование Защита приложения
  56. 56. Защита транспортного уровня SSL/TLS: HTTPS DSA для аутентификации RSA+DH для обмена шифрами AES/3DES/… для обмена трафиком Защищает от: прослушки трафика подмены ARP, IP, DNS атак MITM
  57. 57. Аутентификация и авторизация Аутентификация - определение личности: Учетные записи Пользовательские сессии Подписывание (digesting) запросов Авторизация - проверка уровня доступа: Роли пользователей Группы и разрешения (Groups & Permissions) Раздельный доступ к ресурсам
  58. 58. Защита аутентификации Шифрование учетных данных по пути от клиента к серверу (сеансовым ключом) Хеширование идентификатора сессии Соленое хеширование паролей в БД Многофакторная аутентификация Осложняет кражу учетной записи или сессии
  59. 59. Валидация запросов Защита от инъекций - экранирование, prepared-запросы, отказ от exec() Совершение действий только на POST CSRF-токены для веб-форм Request Digesting для REST API
  60. 60. Защита ресурсов Обязательная авторизация всех запросов Маскировка идентификаторов ресурсов Вынос служебных ресурсов в интранет Сокрытие средств удаленного администрирования в интранете
  61. 61. Защита от (D)DoS и роботов Поиск подозрительной активности (некорректные, неестественные запросы) Выявление типового поведения (краулеры, накрутчики) Ограничение подозрительных подсетей (интенсивный однотипный трафик) Сетевое оборудование с возможностью анализа и ограничения трафика

×