Як створити додаток з високою доступністю


10

В даний час у нас є класичне n-ярусне додаток: DB / веб-сервіс / front-end. У нього є інші компоненти, але це основний макет.

Ми хочемо покращити доступність програми з 3 основних причин:

  1. Наш хост іноді відчуває перебої (як це роблять усі), і ми хочемо мінімізувати вплив на наших клієнтів, тому, наприклад, вони перемикаються на Б центр обробки даних, якщо центр обробки даних А знижений.
  2. Коли ми оновлюємо версію, ми закриваємо сайт для обслуговування, і це зазвичай займає кілька годин (сценарії міграції тощо). Ми хотіли б, щоб користувачі пройшли більш плавний перехід, з мінімально можливим простоєм (вони використовують сервер B під час оновлення сервера A).
  3. Як правило, наші клієнти розташовані по всьому світу, і ми хочемо, щоб вони мали найкращий можливий досвід, незважаючи на можливі хитрі зв'язки (кожен, хто працював з індійськими розробниками, повинен знати, що я маю на увазі). В ідеалі, ми б хотіли, щоб ми могли підключити сервер до їх офісу (або використовувати центр обробки даних поблизу їхнього міста), і він би легко інтегрувався в нашу архітектуру.

Нам віддалено не потрібна 99% доступність, навіть 95%. Це додаток для управління документами. Всім все одно. Але оскільки міграція може зайняти деякий час, і є клієнти по всьому світу, іноді ми заважаємо клієнту працювати протягом більшої частини дня.

Що стосується частини SQL, незважаючи на те, що немає "належних" DBA, ми знаємо про можливості SQL : реплікація, дзеркальне відображення тощо. З боку БД досить легко знайти ресурси для цього. Що складніше - це все інше: зберігання сеансів, коду тощо. Якщо мій сервер веб-сервісу виходить з ладу, то як мій інтерфейс знає, що він повинен перемикатися? Як зберігаються мої сеанси на серверах?

На жаль, ніхто з нас не має досвіду в цій галузі, і ми навіть не знаємо, з чого почати шукати. Чи є найкращі практики для цього? Шаблони дизайну? Бібліотеки (які повинні бути безкоштовними, оскільки у нас немає грошей)?

Ми використовуємо ASP.Net і SQL Server, з веб-сервісом WCF посередині. У нас є купа служб Windows, але вони не є критично важливими, і я припускаю, що методи роботи з веб-сайтом будуть застосовні до послуг.

Я розумію, що більшість хмарних платформ забезпечують вбудовану систему для цього, але хмарний хостинг - це не випадок завдяки нашому системному адміністратору, який хоче все керувати самим і ні на кого не покладатися.


1
"що робити, якщо вони раптом вирішать продати наші дані нашим конкурентам?" Дійсно? Це найкращий аргумент, який вони мають? 1) Досить впевнений, що це було б незаконно. 2) Жоден поважний хостинг-провайдер цього не зробив (це може підірвати весь їхній бізнес). 3) Якщо ви дійсно переживаєте, переконайтеся, що будь-які підписані угоди забороняють такі речі і подайте позов, якщо вони порушують угоду. 4) Зашифруйте свої дані. 5) Що заважає вашому поточному господареві робити те саме?
Becuzz

1
Але з усією серйозністю, уникати використання чогось попередньо створеного саме для того, що ви хочете, це просто призведе до проблем. Вам доведеться вивчити кожен урок про те, як правильно розмістити систему з високою доступністю, про яку вже засвоїли ці провайдери. І ви, мабуть, не матимете ресурсів та досвіду, щоб реагувати на проблеми так само, як вони будуть. Якщо ви (або sysadmins) все ще наполягаєте на цьому, погляньте на балансування завантаження, зберігання сеансів, які не є в пам’яті (наприклад, сховище сеансів SQL), автоматизовані розгортання тощо
Becuzz

Вартість бібліотек буде найменшою з витрат
Ден Пішельман

@Becuzz: Я трохи перебільшую там, але вони (на мій погляд) мають переважно необґрунтовані та нелогічні аргументи проти хмарного хостингу. Вони майже вважають, що самі кращі, ніж більшість хостелів. Що я можу сказати? По-друге, ми не проти використання бібліотеки, але вона повинна бути безкоштовною або дешевою, тому що у нас немає бюджету на це.
thomasb

1
Витрати на HA, як capex, так і opex, тому що вам потрібно надлишкові апаратні засоби та неабияка кількість розробок і девепсів, щоб змусити роботу HA - якщо у вас немає бюджету на придбання деяких інструментів, я сумніваюся, ви можете дозволити собі розвиватися та керувати налаштуваннями HA.
Фредерік

Відповіді:


5

Вам потрібно уточнити, яку високу доступність ви шукаєте. Є дуже доступні програми, які я запускаю, які потребують до 95% часу. Є й інші, яким потрібно працювати на 99%. Я можу придумати сценарії "життя чи смерть", які потребують 100% часу роботи. Просто у цих трьох різко різні підходи та витрати.

Просто здогадуючись, виходячи з ваших потреб та 95-99% часу безрезультатного обслуговування:

  • Для більшості змін міграція баз даних повинна відбуватися в режимі реального часу. Практикуйте еволюційне проектування баз даних . Для змін, які вимагають більш інвазивної поведінки, у вас є кілька варіантів. Один - це прийняти простої. Якщо можливо, запуск вашої служби в режимі лише для читання може працювати. Для повної функціональності я хотів спробувати ScaleArc деякий час. Це виглядає як дійсно гладкий інструмент для масштабування та стійкості у світі SQL Server.
  • Розміщення серверів на сайтах вашого клієнта - це рецепт некерованої катастрофи, якщо у вас немає стратегій розгортання світового класу (яких, виходячи з опису ваших міграцій, у вас ще немає). Не натискайте хмарні сервіси заздалегідь, оскільки у вас є проблеми з продуктивністю. Вирішуйте проблеми з роботою, а потім вам не доведеться мати справу з дорогими, зробленими в дорозі.
  • Ваш сервер стану повинен бути певною базою даних. Дотримуйтесь їхніх настанов HA. Ви можете використовувати для цього SQL Server, оскільки він уже доступний для вас.
  • Якщо говорити про бази даних, то реплікація не дозволяє HA. Насправді, SQL-реплікація викличе вам головні болі на кожному кроці (якщо говорити про досвід із декількома сценаріями реплікації вузлів). Дзеркальне відображення може працювати, але останнє, я пам’ятаю, кластеризація SQL займає 1-5 хвилин, щоб перейти на новий сервер. Я чула хороші речі про AlwaysOn, але все ще підозріла, враховуючи досвід Microsoft. Тут може допомогти щось на зразок ScaleArc.
  • Ваш веб-сервер повинен бути без стану. Скрутіть три або чотири і покладіть їх за балансир навантаження. Це вирішує ваші турботи про час роботи. Як згадував Фредерік раніше, ви також можете робити прокатні розгортання таким чином.
  • Ваш веб-сервіс, ймовірно, має бути без громадянства. Якщо ні, то подивіться, чи зможете ви розбити його на біти без громадянства та штати. Якщо помістити декілька примірників його за один і той же балансир навантаження, знову вирішується проблема тривалості роботи та надає більше зацікавлених сценаріїв розгортання (наприклад, синьо / зелені розгортання).

На відміну від Фредеріка, я не буду називати вашу хмарну паранойю необгрунтованою. Це залежить від ваших вимог до продовження часу. Цілком можливо, що для скорочення служби довелося б працювати в декількох центрах обробки даних, якими керуються різні провайдери в різних країнах. Однак, враховуючи ваш стан, я погоджуюся, що AWS, Azure або подібні - це, мабуть, безпечні ставки для вашої компанії.


1
Про внутрішню установку: це не проблема продуктивності, це проблема пропускної здатності клієнта. Вони можуть бути в місцях з нестабільними або повільними зв’язками. Але це не важлива особливість. Дякую за решту, я розглядаю це (їх?)
thomasb

5

Отримання деякого рівня HA на рівні веб-додатків:

  1. В ідеалі виділіть будь-який стан, включаючи стан сеансу, в системи загального стану, такі як база даних або сервер стану сеансу в пам'яті. Залежно від дизайну програми, це може спричинити проблеми з продуктивністю через додаткову затримку, що спричиняє велику кількість стану.

  2. Кожен ваш веб-сайт та рівень додатків повинен мати незалежний балансир навантаження перед собою. NGINX зробить трюк, але IIS теж може це зробити (ARR).

  3. Якщо одна база даних не може впоратись із завантаженням, використовуйте розподіл стану сеансу (або посилення чи послідовне хешування), щоб направити конкретний запит до певного вікна бази даних.

Якщо стан факторингу занадто важкий, ви можете перейти до спорідненості сервера для збалансування завантаження (тобто користувачі послідовно спрямовуються в одне поле, часто на основі файлів cookie). Він не настільки доступний, як підхід без обмежень за станом без громадянства, тому що відключення коробки вплине на всіх користувачів та стан цього вікна, але воно може бути повним відключенням (залежно від використання).

З боку оновлення:

  1. Створіть сценарії вашої бази даних таким чином, щоб можна було оновити базу даних під час роботи системи, іншими словами, підтримувати зворотну сумісність. Шаблон, який добре працює для цього, - це "розширити, потім укласти контракт" -> внести лише додаткові, зворотні сумісні зміни, але видалити залежності від полів (тощо), від яких потрібно позбутися; потім оновити всіх клієнтів бази даних до v-latest; потім зробіть ще одне оновлення db, щоб позбутися старих полів (тощо) у базі даних. Це може бути повільним процесом, якщо у вас є велика база даних, і ви повинні бути обережними, щоб не пошкодити продуктивність вашої системи.

  2. Оновлення рівня вашого додатка: оскільки ви не використовуєте хмарне середовище, я рекомендую вам дотримуватися схеми розгортання каналів: виконайте поступову модернізацію веб-і середніх ярусів. Якщо розгортання піде не так, вийміть коробку з балансира навантаження так само, як ніби вона вийшла з ладу.

Слово попередження: перетворення системи, яка не була розроблена для НА, в таку, яка є, може бути довгим і дорогим процесом. Вам доведеться робити компроміси по дорозі (витрати проти зусиль, щоб досягти певного рівня доступності)

Ваша параноїя у хмарі не є обґрунтованою - такі постачальники, як AWS разом із передовою практикою з вашого боку, можуть контролювати / зменшувати більшість ризиків - перегляньте сторінку їх відповідності, щоб зрозуміти, яким нормам вони відповідають: https: // aws .amazon.com / відповідність /


1

TL; DR: складання надлишкових, модульних; тест на наявність; уважно стежити.

Після того, як зрозумів, що спроба втиснути будь-яке пояснення може затягнутися дуже довго, тому я запишу всі зроблені нами спостереження.

Допит до передумови

Хмарна система - панацея

Навіть якщо ви хотіли б повністю перейти на хмару, з найкращим постачальником хмар, вам все одно знадобиться розробити заявку на стійкість, обґрунтування. AWS може замінити ваш VM, але ваша програма повинна бути здатна перезапуститись, якщо її залишити посеред обчислення.

Ми не хочемо використовувати хмарну систему через x / y / z

Якщо ви не надто велика організація, вам краще використовувати хмарні системи. У топ-3 хмарних системах (AWS, MSFT, Google) зайняті тисячі інженерів, які нададуть вам обіцяні угоди про обмежене обслуговування (SLA) та просте керування інформаційною панеллю. Насправді це хороша угода, щоб використовувати їх замість того, щоб витратити ні копійки на цю власну компанію.

Проблеми в обстеженні та дизайні

Визначення, кількісне визначення та постійне вимірювання доступності послуги є більшим завданням, ніж написання рішення щодо проблем із доступністю.

Визначити та оцінити "доступність" важче, ніж очікувалося

Кілька зацікавлених сторін по-різному бачать доступність, і те, що може статися, - це визначення, яке надає перевагу особі, яка має найвищі зарплатні. Іноді це правильне визначення, але часто екосистема не будується навколо вимірювання одного і того ж, тому що це ідеальне визначення дуже складно виміряти, не кажучи вже про моніторинг у режимі реального часу. Якщо у вас є визначення доступності, яке неможливо відстежувати в режимі реального часу, ви знову і знову знайдете подібний проект, що займається саморобкою, з чудовими подібностями. Дотримуйтесь чогось, що має сенс, і того, що можна легко контролювати.

Люди недооцінюють складність завжди доступної системи.

Щоб звернутися до слона в кімнаті, дозвольте сказати так: "Жодна багатокомп'ютерна система не доступна на 100%. Це може бути в майбутньому, але не за допомогою сучасних технологій". Тут, маючи на увазі сучасні технології, я маю на увазі нашу нездатність надсилати сигнали швидше, ніж швидкість світла та подібні речі. Усі інженери-комп’ютери, які варті своєї солі, знають, що розподілені обчислювальні обмеження знаходяться , і більшість з них не згадають про це на засіданнях, боячись, що вони будуть схожі на нуків. Щоб компенсувати всіх тих, хто не згадує обмеження в розподілених обчисленнях , скажу, його складні, але не завжди довіряють комп’ютерам .

Люди завищують можливості своїх інженерів

На жаль, доступність потрапляє до тієї категорії, де ви не знаєте, що хочете, але знаєте, чого не хочете. Трохи складніше, що категорія "знаю, що хоче", наприклад, інтерфейс користувача. Це вимагає трохи досвіду та читання, щоб засвоїти досвід інших та ще багато чого.

Побудова доступної системи на основі ґрунту

Переконайтеся, що ви будете євангелізувати перед кожною командою з архітектури та дизайну щодо правильного пріоритету доступності як системної вимоги.

Атрибути системи, що допомагає доступності

Наступні характеристики системи показали, що сприяли доступності системи:

Надмірність

Деякі приклади цього - ніколи не мати лише одного VM позаду VIP або ніколи не зберігати лише одну копію ваших даних. Це питання, які хороший ІААС полегшить вам рішення, але вам все одно доведеться приймати ці рішення.

Модульність

Модульний REST краще, ніж монолітний SOA. Навіть модульна мікросервіс фактично доступніший, ніж звичайний HATEOS REST . Міркування можна знайти в обговоренні виходу в наступному розділі. Якщо ви займаєтеся пакетною обробкою, тоді краще проводити пакетну обробку в розумній партії 10 секунд порівняно з розправою з партією 1 000 000.

Стійкість

"I am always angry"
                    - Hulk

Еластична система завжди готова до відновлення. Ця стійкість застосовується до таких випадків, як підтвердження ACK для запису лише після запису на диск RAID, і, можливо, для принаймні двох центрів обробки даних. Іншим останнім трендом є використання безконфліктних структур даних , де структура даних бере на себе відповідальність за вирішення конфліктів, якщо вони представлені у двох різних версіях. Система не може бути стійкою як задумка, її потрібно передбачити і вбудувати. Провал гарантується в довгостроковій перспективі, тому ми повинні бути завжди готові до плану відновлення.

Шлях колоди

Це технічно підтип Resilience, але дуже особливий, тому що він охоплює всі можливості. Незважаючи на докладені зусилля, ми, можливо, не зможемо передбачити схему недоступності. Якщо можливо, підтримуйте достатню кількість протоколів журналу системних дій, щоб мати можливість відтворювати системні події. Це, за великої ручної вартості, дозволить вам оговтатися від непередбачених ситуацій.

Атрибути доступності

Невичерпний список атрибутів "розумності": "Для обговорення, припустимо, що запитує користувач питання:" Скільки предметів у мене в кошику для покупок? "

Правильність

Ви мусите дати максимально точну можливу відповідь, чи все в порядку помилки? Тільки для довідки, коли ви знімаєте гроші з банкомату, це не гарантовано є правильним. Якщо банк виявить, що він помилився, можливо, ви зможете скасувати транзакції. Якщо ваша система виробляє прості номери, то я б здогадався, ви можете постійно відповідати правильними відповідями.

Вихід

Пропустіть цю точку, якщо ви відповідали завжди правильно за попереднє питання теми. Іноді відповіді на питання не повинні бути точними, наприклад, скільки у мене зараз друзів у Facebook? Але відповідь, як очікується, буде весь час +/- 1. Коли ви даєте очікуваний результат, ваш урожай 100.

Послідовність

Ваша відповідь може бути правильною в один момент часу, але до того моменту, коли світло вийшов з екрана і ввійшов у сітківку спостерігача, все могло змінитися. Це робить вашу відповідь неправильною? Ні, це просто робить непослідовним. Більшість застосунків є можливими послідовними, але хитрість полягає у визначенні, яку модель узгодженості надає ваша програма. Випадково ваша програма може працювати на одному комп’ютері, ви можете пропустити це чудове читання за теоремою CAP .

Вартість

Багато що залежить від загального впливу короткострокових ефектів (втрата доходу) та довгострокових ефектів (погана репутація, утримання клієнтів). Залежно від типу клієнта (платний / безкоштовний, повторний / унікальний, власний) та доступність ресурсів повинні бути складені різні рівні гарантій доступності.

На шляху до покращення доступності існуючої системи

Оперативне управління окремими машинами та мережею настільки складне, що я припускаю, що ви залишили це хмарному провайдеру або ви вже достатньо досвідчені, щоб знати, що ви робите. Я торкнуся інших тем за доступністю. Для довгострокової стратегії « Визнач-міри-аналізуй-контроль» - це небесна відповідність, те, що я бачив сам.

  1. Визначте, що таке "доступність" для ваших зацікавлених сторін
  2. Як ви будете вимірювати те, що ви визначили
  3. Аналіз кореневих причин для виявлення вузьких місць
  4. Завдання на вдосконалення
  5. Постійний моніторинг ( контроль ) системи

Причини недоступності

Оскільки ми погодилися, що оперативне управління, яке охоплюватиме будь-яке управління фізичною інфраструктурою, повинно здійснюватися професіоналами, я торкнуся інших причин недоступності заради повноти. Доступність IMO також повинна включати відсутність очікуваної поведінки, тобто якщо користувачеві не показано очікуваного досвіду, то щось недоступне. Зважаючи на таке широке визначення, наступне може спричинити недоступність: - помилки в коді - випадки безпеки - проблеми з продуктивністю


Цікаво, але не дуже корисно і трохи поза темою. Все одно, дякую.
thomasb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.