Модернізація без зупинки: як IQusion оновлює складні інформаційні системи на UnityBase

· Оновлено · 17 хв

Перенесення даних між серверами під час роботи користувача

Основна спеціалізація ТОВ «Айкюжн ІТ» — розробка, інтеграція та модернізація складних інформаційних систем. Такі системи забезпечують тривале зберігання й обробку значних обсягів даних, одночасну роботу багатьох користувачів із різними рівнями доступу та постійний обмін інформацією між взаємопов'язаними застосунками.

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

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

Чому одна зміна потребує плану для всієї системи

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

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

Інтерактивний прикладОдне правило доступу — однаковий результат у кожному каналі
Правило видимості на сервері підрозділ документа = підрозділ користувача або користувачу явно надано доступ до справи
ДокументКартка справиAPIШІ-огляд
ЗаяваПідрозділ А · справа 17
Висновок експертизи, PDFПідрозділ А · справа 17 · вкладення
ДовідкаПідрозділ Б · справа 17
ЛистПідрозділ Б · справа 22
Архівний документ 2011 рокупідрозділ і справа не визначеніна перевірку до перемикання
Бачить документи свого підрозділу. Довідка підрозділу Б у тій самій справі прихована.
Інший підрозділ, але явний доступ до справи 17: бачить усі її документи, включно з вкладенням. Лист зі справи 22 прихований.
Бачить документи свого підрозділу в обох справах. Матеріали підрозділу А приховані.
Правило описане один раз, тому картка, API і ШІ-модуль отримують однаковий набір документів. Записи без повного набору зв’язків ідуть на перевірку ще до перемикання.

Тривалість переходу залежить від кількості записів, складності їх перетворення та швидкості обробки під робочим навантаженням. Додати поле до схеми — одна операція, заповнити його в мільйонах наявних записів — зовсім інша. У другому випадку записи треба прочитати, обчислити нові значення, записати їх і звірити результат. Масове оновлення конкурує за ресурси СУБД і сховища зі звичайною роботою користувачів. Якщо система має репліки, інтенсивний запис може збільшити їхнє відставання.

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

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

Інтерактивна модельРепетиція міграції: як розмір пакета впливає на перехід
Перенесено записів 240 000 000 з 240 000 000
Відставання репліки 0 с поріг 30 с
Час відповіді користувачам 140 мс поріг 500 мс
Перенесення завершено, звірка пройдена.
Кількість записів збігається Вкладення відкриваються з правильної справи Доступ перевірено для кожної ролі Історія дій збережена
Репетиція на копіїтой самий сценарійРобочий перехід
Умовні значення. Великий пакет пише швидше, але частіше впирається в пороги, і перенесення стає на паузу. Розмір пакета й пороги обирають за результатами репетиції, а потім повторюють той самий сценарій під час робочого переходу.

Чому ми обрали UnityBase

Для таких проєктів ми використовуємо UnityBase як основу прикладної архітектури. Бізнес-правила реалізуємо на серверному JavaScript. Для структурованих даних добираємо СУБД — PostgreSQL, Oracle або Microsoft SQL Server — з урахуванням редакції платформи та вимог до системи. Вкладення й версії документів зберігаємо у файловому сховищі, із суміжними застосунками обмінюємося через API, для автентифікації використовуємо OpenID Connect, Kerberos або інші механізми, яких потребує замовник. Конфігурацію доповнюємо моніторингом, резервним копіюванням і, якщо цього вимагає схема експлуатації, реплікацією.

СхемаІз чого складається рішення на UnityBase
Канали
ВебінтерфейсАдміністративні формиAPI для суміжних системПрикладні модулі, зокрема ШІ
UnityBase
Метадані моделіСерверний JavaScriptПравила доступу до записівЖурнал дій
Дані та вхід
СУБД: PostgreSQL, Oracle, MS SQL ServerФайлове сховище вкладень і версійАвтентифікація: OpenID Connect, Kerberos
Експлуатація МоніторингРезервне копіюванняРеплікація
Метадані моделі — центральна ланка: з одного опису сутностей працюють схема БД, API, форми й правила доступу.

UnityBase ми обрали тому, що одна зміна прикладної моделі часто зачіпає базу даних, API та кілька інтерфейсів. Спільний опис сутностей і повторне використання серверних методів скорочують обсяг робіт у кожному з цих шарів. Звільнений час команда витрачає на те, що визначає результат модернізації: перенесення історичних даних, перевірку доступу та підготовку переходу під робочим навантаженням.

Відкритий вихідний код — одна з головних причин, чому ми обрали UnityBase. Відкрита редакція OpenUB доступна за ліцензією Apache 2.0. Команда може вивчати, як працюють компоненти цієї редакції, розбирати причини збоїв і передавати ці знання іншим виконавцям. Можливості й умови ліцензування залежать від редакції. Редакції UnityBase.

Чому безпека вплинула на вибір UnityBase

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

Підбір або викрадення пароля. У UnityBase можна налаштувати блокування облікового запису після заданої кількості невдалих спроб входу. Невдалі спроби фіксуються в журналі безпеки. Для підтримуваних способів входу можна ввімкнути другий фактор, щоб викраденого пароля самого по собі було недостатньо. Документація UnityBase про автентифікацію й аудит.

Спроба відкрити чужу справу через API. Зловмисник може змінити номер документа в запиті й спробувати отримати його напряму. Для операцій, на які поширюється налаштоване правило доступу, UnityBase перевіряє права на сервері. Навіть якщо зловмисник увійшов під викраденим обліковим записом, його доступ обмежений правами скомпрометованого облікового запису. Окремо перевіряємо завантаження вкладень і власні методи API. Документація UnityBase про доступ до записів.

Перехоплення даних і розслідування інцидентів. HTTPS захищає дані під час передавання. Журнал безпеки допомагає з’ясувати, коли почалися підозрілі спроби входу та які облікові записи вони зачепили. Під час модернізації ці механізми перевіряємо разом із налаштуваннями доступу. Захист від перевантаження трафіком, своєчасні оновлення й відновлення з резервних копій плануємо окремо на рівні інфраструктури та експлуатації.

Zero Trust та інші практики модернізації

Zero Trust. Сам факт підключення до внутрішньої мережі не дає права читати документи або викликати API. Рішення про доступ спирається на ідентичність користувача чи сервісу, запитаний ресурс і контекст сеансу. У прикладі зі справою сервер перевіряє право на операцію й доступ до конкретного документа. Інтеграціям надають окремі ідентичності з мінімальними дозволами. Серверні ролі та правила доступу UnityBase допомагають реалізувати прикладну частину цієї моделі. Перевірка стану пристроїв, керування ідентичностями та сегментація мережі потребують рішень на рівні всієї архітектури. NIST SP 800-207.

Безпека ланцюга постачання ПЗ. Для релізу важливо знати, з якої версії коду й залежностей його зібрали. Інвентар компонентів (SBOM) допомагає визначити, які системи зачіпає нова вразливість. Підтвердження походження збірки (build provenance) дає змогу перевірити, звідки взявся артефакт і як його зібрали. Під час переходу це допомагає зіставити версію, яка пройшла тестування, з тією, яку готують до розгортання. SLSA Build Provenance.

Спостережуваність і контроль переходу. Команда заздалегідь погоджує цілі рівня сервісу (SLO) та пороги, після яких призупиняє перенесення або повертається до попереднього режиму роботи. У нашому умовному прикладі під час перенесення вимірюємо час відповіді, частоту помилок і відставання реплік, якщо вони є. Окремі перевірки підтверджують коректність прав доступу та цілісність даних. Ці результати разом дають підставу вирішити, чи можна продовжувати перемикання.

Чому інформаційні системи національного рівня потребують фінансування

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

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

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

Які роботи потребують фінансування? Адміністратор встановлює готове оновлення. До встановлення потрібно оплатити розробку змін, їх перевірку та ресурси для репетиції переходу. Замовник може звірити ці витрати з погодженими завданнями й результатами приймання.

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

Чи можна залучити іншу команду? Відкритий код OpenUB дає змогу вивчити платформу. Для супроводу конкретної системи новій команді потрібні доступ до коду самого застосунку, право його використовувати й змінювати, документація та можливість самостійно зібрати й розгорнути систему в тестовому середовищі. Новій команді знадобиться час, щоб перевірити інтеграції та відпрацювати відновлення після збою. Для системи національного рівня особливо важливо визначити, хто відповідає за її роботу під час передачі й після неї.

Як кілька компаній працюють над однією системою? У проєкті національного рівня роботи можна розподілити між кількома виконавцями. Наприклад, одна компанія розробляє зміни, друга обслуговує інфраструктуру, а третя незалежно перевіряє оновлення. Кожен підрядник відповідає за результат, визначений у його договорі. Роботи свідомо розподіляють, щоб зменшити залежність від одного постачальника й мати змогу передати окрему ділянку іншій команді.

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

Коли варто замінити систему? Порівнюють повну вартість модернізації та заміни. Для нової системи до ціни розробки або ліцензії додаються перенесення даних і вкладень, підключення суміжних сервісів, навчання користувачів і паралельна експлуатація. Обидва сценарії оцінюють за однаковими вимогами до доступності, збереження даних і можливості передати супровід іншій команді.

Які компетенції потрібні для такого переходу

КомпетенціяЗа яке рішення відповідає
Архітектура застосункуЯк змінюються сутності й серверні методи, скільки часу співіснують дві структури та коли можна перемикати читання й запис.
Інженерія даних і СУБДЯк перенести історичні записи під навантаженням, продовжити перервану міграцію та звірити дані й вкладення.
Системна інтеграціяЯк зберегти сумісність API, обробити повторні повідомлення й відновити обмін після перерви.
Безпека й аудитДе перевіряти повноваження, як тестувати доступ для різних ролей і за якими даними відтворювати дію після релізу.
Експлуатація та тестуванняЯкі показники дозволяють продовжити перехід, коли його треба зупинити та як перевірити готовність до відновлення.
FinOpsСкільки коштують репетиції, паралельна робота середовищ і конфігурація, яка залишиться після переходу.

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

Як FinOps допомагає оцінити вартість переходу

Після розподілу робіт команда порівнює, скільки коштуватимуть різні способи переходу та подальша експлуатація.

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

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

Інфографіка й калькуляторДва бюджети модернізації і повна вартість сценарію
Бюджет переходу закінчується після перемикання РепетиціїКопії данихТимчасові сховищаПередавання файлівПаралельна робота двох середовищ
Бюджет експлуатації залишається щомісяця Робоче навантаженняРезервне копіюванняСтроки зберігання історіїРесурси після завершення робіт
Репетиція показала, що перенесення обмежує запис у сховище. Порівняймо два сценарії:
А. Підвищити продуктивність1 600
Б. Залишити як є, довший перехід1 800
Дешевший сценарій А: на 200 у. о.
Три показники для старту Вартість повної репетиціїВартість доби паралельної роботиПрогноз щомісячних витрат після переходу
Умовні одиниці. Повна вартість сценарію = (доба паралельної роботи + додаткова потужність) × кількість діб. Вартість репетицій однакова для обох сценаріїв і в порівняння не входить.

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

За рахунок чого UnityBase зменшує обсяг розробки

У UnityBase сутності, поля та зв’язки описують у метаданих. Цю модель використовують ORM, інструменти підготовки схеми БД, типові операції API та адміністративний інтерфейс. Для нашого прикладу це означає, що нові зв’язки між документом, справою та користувачем мають один спільний опис. Розробник використовує його в кількох шарах системи, а прикладний код пише для правил переходу, історичних винятків і спеціалізованих сценаріїв.

Інтерактивний прикладНовий зв’язок «документ — справа — користувач»: скільки описів треба змінити
doc_caseAccess.meta нова сутність
{
  "caption": "Доступ до справи",
  "attributes": [
    { "name": "caseID", "dataType": "Entity",
      "associatedEntity": "doc_case" },
    { "name": "userID", "dataType": "Entity",
      "associatedEntity": "uba_user" }
  ]
}
doc_document.meta спрощено
"mixins": { "rls": {
  "expression": "підрозділ користувача
    АБО запис у doc_caseAccess" } }
1 опис нового зв’язку Схема БДDDL готують інструменти платформи ORMпрацює з оновленою структурою Типові операції APIselect, insert, update — з моделі Адміністративна формастандартна форма довідника доступів Правило видимостіодне для картки, API і модулів Узгодження між шарамиперевірити, що п’ять описів не розходяться Прикладний код — в обох випадкахправила переходу, історичні винятки, спеціалізовані сценарії
Зі спільною моделлю команда змінює один опис, а схема, ORM, API, форми й правило доступу беруть його звідти. Без неї той самий зв’язок описують у кожному шарі окремо й узгоджують між собою.
Де виникає економіяЯка робота скорочується
Схема БД і робота з данимиІнструменти платформи готують за моделлю DDL, а ORM працює з оновленою структурою. Команда підтримує менше окремих описів сутностей і зв’язків.
API та адмініструванняТипові операції над сутностями та стандартні адміністративні форми спираються на модель. Для довідників і службових екранів цю основу можна використати повторно.
Доступ до записівСерверні правила видимості й методи сутностей діють у різних інтерфейсах, тож одне правило не доводиться реалізовувати кілька разів. Доступ до вкладень і спеціальних методів перевіряють у відповідних сценаріях.
Репетиція міграціїГенерацію схеми й власні сценарії JavaScript або SQL включають у процес оновлення. Той самий набір кроків повторюють на тестовій копії та під час робочого переходу.

Без повторного використання цих механізмів кошторис був би вищим. Він охоплював би окремі зміни схеми, типових операцій, адміністративних форм і перевірок доступу, а також їх узгодження між собою. UnityBase зменшує саме цю повторювану частину розробки та супроводу. Ресурси для фактичного перенесення й перевірки даних ми оцінюємо окремо. Так у кошторисі видно, де економію дає архітектура застосунку, а де — рішення щодо інфраструктури. Докладніше про ці механізми — у статті «П’ять переваг UnityBase для розробників корпоративних систем».

Як ми приймаємо модернізацію

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

ІнфографікаПриймання на справі, відкритій ще до оновлення
1Користувач знаходить свої матеріали 2Бачить лише дозволені дії 3Продовжує роботу зі справою 4Суміжна система приймає результат 5Операцію відтворено за журналом
Перед перемиканням Результати перевірки показаноУмови відновлення визначеноВартість після переходу розраховано
Справа, яку почали до оновлення, проходить усі частини системи: дані, доступ, інтеграції та журнал.

До перемикання команда показує результати цієї перевірки, визначає умови відновлення та розраховує вартість роботи системи після переходу.

Що дає модернізація після переходу

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

Наприклад, фахівцю потрібно швидко зрозуміти, що змінилося в документах справи. Він натискає «Підготувати огляд змін». Система перевіряє його права, відбирає дозволені для обробки фрагменти й передає їх моделі ШІ. Модель готує чернетку огляду з посиланнями на документи. Фахівець звіряє її з джерелами й вирішує, що робити далі.

Інтерактивна схемаДія «Підготувати огляд змін»: що і куди передається
Контур замовника 1Фахівець натискає «Підготувати огляд змін» у картці справи 2Сервер відбирає редакції, доступні цьому користувачевіте саме правило доступу 3Передаються лише фрагменти, дозволені для обробки 4Локальна модель, розгорнута в контурі 5У картці з’являється чернетка огляду з посиланнями на джерела 6Фахівець перевіряє висновок і виконує штатну дію
Як вимірюють користь: час і вартість перевіреного огляду, разом із часом фахівця на звірку та виправлення.
Кроки 2 і 3 повторно використовують модель документів і серверні механізми доступу. Новий модуль додає лише відбір контексту, виклик моделі й подання результату.

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

Той самий принцип працює для звіту, сповіщення чи нової дії в картці справи. Після модернізації команда може додавати такі функції, спираючись на вже перевірені дані, зв’язки й правила доступу.


Документація UnityBase: архітектура платформи · матриця редакцій · міграції · контроль доступу на рівні записів