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

Preview:

Citation preview

ПроизводительностьПромышленное программирование

Границы возможностей ЭВМ

Ресурсы машиныПроцессорная мощностьОперативная памятьДисковый ввод/выводСетевой ввод/вывод

На что расходуются ресурсыПолучение запросов по сети, отдача

ответов - сетьПоддержание соединений и управление

ими - процессор, памятьОбработка запроса и формирование ответа

(т.е. логика) - процессор, памятьОтдача статического контента - диск

На что расходуются ресурсыЧтение и запись в БД и ФС - дискКеши БД и ФС - памятьСложные запросы к БД (filter, aggregate,

join) - диск, память, процессорЗапросы к другим процессам - процессорЗапросы к другим машинам - сетьТелеметрия - диск, сеть

Чем меряют производительностьНагрузка (load) - число запросов в секунду

(Requests per second, RPS)Пропускная способность (throughput) -

максимальное значение нагрузки, которое выдерживает сервис, RPS

Задержка (latency) - время выполнения одного запроса, мс.

latency = f(load)

Из чего складывается задержкаПередача по сети в обе стороны (RTT)Установление TCP соединения (SYN+ACK)Получение и разбор запросаОбращение к базам данныхОбращение к другим сервисамВычисления, построение ответаОбработка (рендеринг) ответа на клиенте

Приемлемая задержкаRTT внутри ДЦ <1мсRTT из Москвы до Нью-Йорка - 120 мсRTT из Москвы до южного Китая - 250 мсGet в Redis - 0,3 мсPrepared query by PK в MySQL - 5 мсОтвет от Web-сервера - 50-200 мсРендеринг на клиенте - 50-100 мсНезаметное для человека время - 400 мс

Деградация сервисаОшибки взаимодействия (протокола)Утрата функциональностиВ т.ч. переход в Read-OnlyТаймаут - чрезмерная задержкаОшибки, блокирующие выполнениеПотеря или рассогласование данных

Последствия нехватки ресурсов

Если не хватает процессораЗа момент времени обрабатывается

запросов меньше, чем принимаетсяЗапросы встают в очередьОчередь не уменьшаетсяЗапросы не успевают выполнитьсяОчередь сжирает всю памятьКлиент фиксирует таймауты

Если не хватает объема памятиВыполнение запроса может спонтанно

прерваться в любое времяМожет спонтанно прерваться сервисный

тред или сторонняя службаСистема коллапсирует, пока не будет

остановлен расходующий память процессКлиент фиксирует всевозможные ошибки

Если не хватает скорости сетиНекоторые запросы фрагментируются,

засоряют очередь и отбрасываютсяНекоторые ответы теряютсяНарушается связь с другими узламиОтвалившиеся соединения образуют

очереди и расходуют память и процессорКлиент фиксирует таймаутыКлиент фиксирует ошибки протоколов

Если не хватает скорости дисковДисковые операции долго висят в

ожидании, блокируют друг друга или теребят контроллер диска

Существенно увеличивается время обработки запросов

За момент времени обрабатывается запросов меньше, чем принимается…

См. нехватку процессора

Если не хватает объема дисковПрекращается сбор телеметрии (логи,

мониторинг) - оператор системы слепнетСпонтанно прекращается запись на диск,

возможно, с утратой целостности данныхФатально деградирует функциональность

систем, пишущих на дискКлиент фиксирует ошибки сервисаСистема может жить в Read-Only

Чего еще может не хвататьФайловых и сокетных дескрипторовДескрипторов потоков и процессовСкорости северного моста (можно считать,

что процессора)Скорости южного моста - связки между

процессором и I/OМощности отдельных устройств - сетевой

карты, дисковых контроллеров и т.п.

Увеличение доступных ресурсов

Оптимизация расхода ресурсовРефакторинг кодовой базыАсимптотческая оптимизация алгоритмовДедупликация данных, устранение

избыточности, рефакторинг моделейУпорядочивание запросов к дискуКеширование расчетов и данных с дискаПереход на NIO, бинарные протоколы,

внедрение сжатия

Разделение ролейВынос баз данных на отдельные машиныРазнесение автономных модулей на

разные машиныСоздание дополнительных проксирующих

прослоек на других машинах+ Вышли за пределы одной машины- Повысили расходы на коммуникацию

Вертикальное масштабированиеЗаменить в сервере процессорыВоткнуть туда больше памятиВставить быстрый RAID-контроллерЗаменить диски на SSDОбновить сетевой адаптерПереехать на новый сервер…Весело. Но дорого.

Горизонтальное масштабированиеРаспараллелить выполнение программыУбрать критические секцииОблегчить работу с общими ресурсамиОбеспечить запуск на нескольких машинахРавномерно распределить нагрузкуМинимизировать связь между машинамиПолучать прирост пропускной способности

при росте числа машин

Эластичное масштабированиеЛинейная пропорция между пропускной

способностью и объемом ресурсовВозможность подключения и отключения

машин к кластеру без его остановкиОтсутствие единой точки отказа

Распределенные системыПромышленное программирование

Архитектура распределенных систем

Клиент-сервер

Клиент-серверМонопольный контроль над БДПросто программироватьОтрисовка данных на клиенте (опц)Кросс-платформенность с помощью

портирования клиентовЕдиная точка отказаНельзя горизонтально масштабировать

Толстый VS Тонкий клиентыТонкий клиент только посылает запросы и

отображает ответыТолстый клиент проводит некоторые расчеты

без запросов к серверуТонкий клиент проще в реализацииТолстый клиент сложнее, но быстрееНа толстом клиенте данные могут устаретьТолстый клиент плохо портируется

Web-приложения

Web-приложенияСтандартный протокол - HTTPСтандартный клиент - браузерСтандартные client-side средстваТяжелый, избыточный трафик*Слабая client-side производительностьПочти кросс-платформенноПроблемы с портируемостью графики

Backend - Frontend - Client

Backend - Frontend - ClientРазделение server-side на слоиМасштабирование каждого слоя отдельноВозможность дробить систему на частиОчень большой трафик внутри кластераЗначительно сложнее разработкаУзкая специализация разработчиков

Service-Oriented Architecture (SOA)

Service-Oriented Architecture (SOA)Физическое выделение отдельных

компонентов на отдельную машинуУменьшение связности между

компонентами - упрощение разработкиВозможность регулировать работу каждого

сервиса отдельноЗначительное усложнение адресации

внутри кластера

Role-based адресацияЗакрепление за машиной роли - запуск на

ней определенных сервисовВсегда ясно, где подняты инстансы сервисаЛегкая стартовая конфигурация со сложным

“горячим” изменениемВозможно оптимально подобрать железо под

нужды конкретного сервиса

Cloud-based адресацияВыделение пула машин, на которых могут

быть запущены разные сервисыГибкое переключение и оперативное

реагирование на нагрузку и сбоиПриходится абстрагироваться от железаНеобходима отдельная инфраструктура

для учета и управления кластером

Межпроцессное взаимодействие

Способы передачи данныхПередача файловОбщая база данныхРазделяемая памятьПотоки и каналы данныхОбщение через брокер

Организация потоков данныхTransport-level потоки:

UNIX SocketTCP SocketUDP Stream

Protocol-level потоки:BinaryPlain text

Прикладные протоколыTelnet - clear plain text over TCPHTTP - convention over plain text over TCPCORBA - binary, configurableSOAP, REST, XML-RPC - over HTTPApache Avro, Apache Thrift - binary over TCP…

HTTPHyperText Transfer Protocol, 1992Plain Text, line-basedРазличные типы запросов - GET, POST,

PUT, HEAD, …Коды ответа - 200 ОК, 404 Not Found, … Заголовки - Content-Type:text/html, … Blobs via Base64

RESTRepresentational State Transfer, 2000Over HTTPClient-ServerStateless (no sessions)CacheableUniform interfaceLayered

REST: трактовка HTTP запросовGET /collection - получить всю коллекциюPUT /collection - заменить всю коллекциюPOST /collection - добавить элемент в коллекциюDELETE /collection - очистить коллекциюGET /collection/item - получить элемент по IDPUT /collection/item - заменить элемент по IDDELETE /collection/item - удалить элемент

Промышленное программирование

Пользовательские интерфейсы

Web-интерфейсыЗдесь должны быть слайды про

реализацию Web UI средствами Java, Thymeleaf и Spring Web MVC

Но нет

Промышленное программирование

Угрозы безопасности

Ахтунг!Эта лекция не дает исчерпывающего

списка возможных угрозЛекция призвана только лишь обратить

внимание на проблему, но не дает сколь-нибудь приемлемого решения

Tl;dr: кругом враги, приложения полны дыр, уделяйте внимание безопасности

ТерминологияУгроза УязвимостьАтака

Подробнее: Т.Иващенко, Яндекс ШРИ

Виды угрозОтказ в обслуживании (DoS)Перехват данных пользователяПодмена действий пользователяУтечка данных приложенияМодификация данных приложенияПерехват управленияПроникновение в незащищенную зону…

Отказ в обслуживании (DoS)Генерация множества одновременных

запросов к приложениюЭксплуатация чувствительных к нагрузке

участков кода и методов APIИсчерпание аппаратных ресурсовДеградация сервиса вплоть до отказа

Перехват данных пользователяСредства прослушки:

Незащищенные публичные сетиСнифферы трафикаПрокси (HTTP Proxy, NAT, анонимайзеры, …)

Спуфинг (подмена) ARP, IP, DNS, … Атаки Man-In-The-MiddleФишингСоциальная инженерия

Подмена действий пользователяКража учетной записиКража сессии (авторизационной куки)Атаки MITM с модификацией запросовCross-Site Request Forgery (CSRF)Cross-Site Scripting (XSS)

Утечка и модификация данныхИнъекции SQL, JS, Shell, XPath, …Неустойчивые к перебору идентификаторы

(пользователей, сессий, ресурсов, …) Служебные страницы без авторизацииУязвимости в серверном ПО

Перехват управленияБезумные служебные страницыИнъекции исполняемого кодаShell-инъекцииУязвимости в бинарном коде ПОНедостаточно защищенные средства

удаленного администрирования

Уровни угрозыВнешняя угроза

ИнъекцииВнутренняя угроза

Перехват управления системным пользователемПерехват управления суперпользователемПолучение доступа к базам данных (R, W)Компрометация системы внутридоменной

аутентификации

Промышленное программирование

Защита приложения

Защита транспортного уровняSSL/TLS: HTTPS

DSA для аутентификацииRSA+DH для обмена шифрамиAES/3DES/… для обмена трафиком

Защищает от:прослушки трафикаподмены ARP, IP, DNSатак MITM

Аутентификация и авторизацияАутентификация - определение личности:

Учетные записиПользовательские сессииПодписывание (digesting) запросов

Авторизация - проверка уровня доступа:Роли пользователейГруппы и разрешения (Groups & Permissions)Раздельный доступ к ресурсам

Защита аутентификацииШифрование учетных данных по пути от

клиента к серверу (сеансовым ключом)Хеширование идентификатора сессииСоленое хеширование паролей в БДМногофакторная аутентификация

Осложняет кражу учетной записи или сессии

Валидация запросовЗащита от инъекций - экранирование,

prepared-запросы, отказ от exec()Совершение действий только на POSTCSRF-токены для веб-формRequest Digesting для REST API

Защита ресурсовОбязательная авторизация всех запросовМаскировка идентификаторов ресурсовВынос служебных ресурсов в интранетСокрытие средств удаленного

администрирования в интранете

Защита от (D)DoS и роботовПоиск подозрительной активности

(некорректные, неестественные запросы)Выявление типового поведения (краулеры,

накрутчики)Ограничение подозрительных подсетей

(интенсивный однотипный трафик)Сетевое оборудование с возможностью

анализа и ограничения трафика