- •Розподілені системи
- •Історична довідка
- •Базові терміни та визначення
- •Телекомунікаційні мережі як елемент розподілених систем
- •Модель клієнт–сервер
- •1.3. Особливості розподілених систем
- •Переваги розподілених систем
- •Недоліки розподілених систем
- •Класифікація розподілених систем
- •Характеристики розподілених систем
- •Висновки
- •Запитання для самоконтролю
- •Розподілене середовище
- •Концепції апаратних рішень
- •Архітектура багатопроцесорних систем
- •Системи зі спільною пам’яттю
- •Системи з роздільною пам’яттю
- •Топології багатопроцесорних систем
- •Концепції програмних рішень
- •Та засобів проміжного рівня
- •Операційні системи й розподіленість
- •Проміжне середовище
- •2.5. Поняття розподіленого середовища
- •Розподіл прикладних програм за рівнями
- •Варіанти архітектури клієнт–сервер
- •Програмні компоненти розподілених систем
- •Основи мережної взаємодії
- •2.6. Взаємодія компонент розподіленої системи
- •Концепції взаємодії компонент розподіленої системи
- •Обмін повідомленнями
- •Віддалений виклик процедур
- •Використання віддалених об’єктів
- •Розподілені події
- •Розподілені транзакції
- •Безпека в розподілених системах
- •Опис інтерфейсу програмної компоненти
- •Мова і схеми Extensible Markup Language
- •Soap: мова повідомлень розподіленої системи
- •Wsdl: опис інтерфейсу програмної компоненти
- •Базові технології подання інформації в розподілених системах
- •Вимоги до прикладних програм серверної сторони
- •Висновки
- •Запитання для самоконтролю
- •Рівні протоколів
- •Низькорівневі протоколи
- •Транспортні протоколи
- •Протоколи верхнього рівня
- •Віддалений виклик процедур
- •Виклик локальної процедури та повернення результату
- •Звертання до віддалених об’єктів
- •Розподілені об’єкти
- •Прив’язка клієнта до об’єкта
- •Статичне й динамічне віддалене звертання до методів
- •Передача параметрів
- •1.4 Зв’язок на основі потоків даних
- •Підтримка безперервних середовищ
- •Потік даних
- •Синхронізація потоків даних
- •1.5 Протоколи проміжного рівня
- •Протокол soap
- •Сімейство протоколів xmpp
- •Протокол umsp
- •Висновки
- •Запитання для самоконтролю
- •2. Процеси
- •Потоки виконання. Визначення і структура
- •Стан процесів та потоків виконання
- •Реалізація потоків виконання
- •Потоки виконання в нерозподілених системах
- •Потоки виконання в розподілених системах
- •Багатопотокові клієнти
- •Багатопотокові сервери
- •Інтерфейси користувача
- •Клієнтське програмне забезпечення і прозорість розподілу
- •4.6 Сервери
- •Підходи до побудови серверів прикладного програмного забезпечення
- •Сервери об’єктів
- •Частина 2
- •Представлення додатка розподіленної системи
- •Рівнева організація додатку
- •Рівнева організація, застосування, виділення рівнів
- •Використання рівня Сервісів(Services Layer)
- •Дизайн рівневої структури
- •Вибір стратегії розбиття на рівні
- •Визначення наскрізної функціональності
- •Визначення інтерфейсу між рівнями
- •Вибір стратегії реалізації і впровадження
- •Вибір протоколів взаємодії
- •3. Дизайн Рівню Представлення
- •Дизайн рівня представлення включає наступні кроки:
- •Специфічні проблеми дизайну рівня представлення
- •Кешування
- •Комунікації
- •Композиція
- •Управління виключеннями
- •User Experience(Зручність Використання)
- •Інтерфейс користувача
- •Перевірка даних вводу користувача (Validation)
- •Batching(Пакетування)
- •З'єднання
- •Формат даних
- •Управління виключеннями
- •Реляційне відображення об'єктів(Object Relational Mapping)
- •Процедури, що зберігаються
- •Транзакції
- •Перевірка вводу
- •Типи бізнес-процесів
- •Загальні правила складання сміття:
- •Вибір стратегії визначення виключень
- •Стратегія протоколювання виключень
- •Стратегія повідомлення про виключення
- •Ухвалення рішення про необхідність обробки необроблених виключень
- •Спеціальні питання проектування
- •Аутентифікація
- •Авторизація
- •Кешування
- •Мережева взаємодія
- •Управління конфігурацією
- •Управління виключеннями
- •Протоколювання
- •Управління станом
- •Проблеми, які виникають при проектуванні взаємодії
- •Загальні завдання проектування стратегії зв'язку
- •Обмін файлами
- •Розподілена база даних
- •Виклик видалених процедур
- •Обмін повідомленнями
- •Процедура передачі повідомлення включає 5 основних етапів:
- •Комерційні системи обміну повідомленнями
Стратегія протоколювання виключень
Існують різні варіанти протоколювання даних виключення :
-
Windows Event Log(Журнал реєстрації подій Windows), якщо додаток розгорнутий на одному комп'ютері, якщо необхідно використати існую- чі інструменти для перегляду журналу, або якщо надійність є основною вимогою.
-
SQL Database, якщо додаток розгорнутий на фермі або в кластері, якщо необхідно забезпечити централізоване протоколювання, або якщо пот- рібно гнучкість в структуризації і протоколюванні даних виключення.
-
Власний файл журналу, якщо додаток розгорнутий на одному комп'ю- тері, якщо потрібна абсолютна гнучкість вибору формату протоколю- вання, або якщо хочете просто і легко реалізувати сховище журналу ре- єстрації. Контролюйте розмір файлу журналу, періодично очищаючи або архівуючи журнал, щоб він не розростався в розмірах.
-
Механізм обміну повідомленнями(Message Queuing) в якості механізму доставки для передачі повідомлень про виключення в точку їх остаточ- ного призначення, якщо надійність є головною вимогою, якщо застосу- вання розгорнуті на фермі або в кластері, або якщо вимагається центра- лізувати протоколювання.
У будь-якому додатку може використовуватися декілька з представлених ва- ріантів залежно від сценарію і політики обробки виключень. Наприклад, ви-
ключення безпеки можуть протоколюватися в Security Event Log, а виклю- чення бізнес-логіки - у базу даних.
Стратегія повідомлення про виключення
У корпоративних додатках необхідно передбачити повідомлення для адмініс- траторів і операторів. Для цього можуть використовуватися такі технології, як події WMI, електронні листи SMTP, текстові повідомлення SMS або інші системи повідомлення.
Якщо вимагається відокремити систему контролю і повідомлення від коду додатків, і залишити в застосуваннях тільки код протоколювання, то можна використати зовнішні механізми повідомлення, таких як системи моніторин- гу журналів або середовища сторонніх виробників, які виявляють в даних журналу умови виникнення помилки і формують відповідні повідомлення.
Ухвалення рішення про необхідність обробки необроблених виключень
Якщо виключення залишається необробленим до останньої точки або межі і немає можливості відновлення після виключення перед поверненням управ- ління користувачеві, додаток повинний обробити це необроблене виключен- ня. Для необроблюваних виключень вимагається зібрати необхідні відомос- ті, записати їх у файл журналу або аудиту, розіслати усі необхідні для цього виключення повідомлення, виконати усе необхідне очищення і, нарешті, пе- редати інформацію про помилку користувачеві.
Не рекомендується розкривати усі деталі виключення. Надайте користувачеві зрозуміле універсальне повідомлення про помилку. Для клієнтів без призна- ченого для користувача інтерфейсу, таких як Веб-сервіси, замість детального виключення можна сформувати універсальне виключення. Це запобіжить можливість розголошування даних системи кінцевому користувачеві.
-
Патерни проектування наскрізної функціональності Наскрізна функціональність і принципи проектування
Наскрізна функціональність - це загальна функціональність, яку не можна віднести до конкретного шару або рівня. До наскрізної функціональності від- носять такі операції як аутентифікація, авторизація, кешування, зв'язок, управління виключеннями, протоколювання і валидация.
Наскрізна функціональність(crosscutting concerns), по можливості, повинна реалізовуватися централізовано. Наприклад, є код, котрый виконує ведення " лігв" - протоколювання і цей код реалізований на різних шарах і рівнях.
При зміні вимог треба виконати пошук і зміну коду по усьому застосуванню.
Якби цей код був централізований те внести зміна знадобилася б лише в од- ному місці.
До механізмів реалізації наскрізної функціональності відносять фреймвор- ки, які реалізують шаблони проектування впровадження залежнос- тей(Dependency Injection), а також Аспектно-Ориентированноге Програму- вання(АOP)
Для використання патерну Впровадження залежності(Dependency Injection) застосовують програмні компоненти т.з. DI- кінтейнерами. ( Unity для плат- форми .NET компанії Microsoft; Ninject - open source рішення).
Основне завдання контейнера - надати клієнтові об'єкт, що повністю ініціалі- зував, з усіма залежностями, не обтяжуючи клієнта знаннями про ці залежно- сті.
Для того, щоб контейнер знав, який тип відповідає інтерфейсу, його необхід- но заздалегідь конфігурувати. Більшість DI- кінтейнеров підтримують мож- ливість завдання конфігурації на рівні зовнішніх текстових файлів, що дозво- ляє виключити необхідність перекомпіляції застосування при заміні одного конкретного типу-сервісу. Такий підхід забезпечує високу гнучкість і дозво- ляє створювати застосування, що повною мірою відповідають принципу сла- бкої зв'язаності.
Аспектно-орієнтоване програмування(АОП) ― парадигма програмуван- ня, яка грунтована на ідеї розділення функціональності для поліпшення роз- биття програми на модулі. Основна ідея зводиться до виділення наскрізної функціональності, розкиданої між модулями програми(класами, функціями), в окремі аспекти, які потім можна повторно використати.
-
Наскрізна функціональність виноситься в окремий модуль - ас- пект(aspect).
-
У цьому модулі за допомогою точок з'єднання(joint - points) визнача- ється, де, в яких місцях, і за яких умов застосовуватиметься ця функціона- льність.
-
Клас, який реалізує наскрізну функціональність називають ра- дою(advice).
-
Ради можуть прив'язуватися до точок з'єднання або під час компіляції програми, або під час завантаження програми, або під час виконання.
-
Різні бібліотеки реалізації АОП надають різні можливості. Приклад реалізації ― AspectJ(Java)
Принципи проектування
-
Необхідно проаналізувати функції в кожному шарі, і виділити ті, які можуть бути винесені в загальні компоненти, які можуть настроюватися залежно від конкретних вимог кожного шару застосування. Передбачи- ти можливість використання цих компонентів в інших застосуваннях.
-
Залежно від фізичного розподілу компонентів і шарів додатку, компо- ненти наскрізної функціональності можуть бути встановлені на декіль- кох фізичних рівнях.
-
Необхідно розглянути можливості впровадження екземплярів компо- нентів наскрізної функціональності в застосування на підставі даних конфігурації. Це дозволить змінювати використовувані в кожній підсис- темі компоненти наскрізної функціональності без необхідності повтор- ної компіляції і розгортання додатку.
-
Щоб скоротити час розробки потрібно досліджувати можливість засто- сування бібліотек компонентів сторонніх виробників, які надають мож- ливість конфігурації компонент.
-
Використання методик аспектно-орієнтованого програмування(AOP), дозволить впровадити наскрізну функціональність в додатках без реалі- зації явних викликів в коді.