Обробка транзакцій

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Обробка транзакцій (aнгл. Transaction processing) - це обробка інформації в комп'ютерній науці, яка ділиться на окремі неподільні операції, які називаються транзакціями. Транзакція може бути виконана повністю і успішно, дотримуючись цілісності даних і незалежно від інших транзакцій, що йдуть паралельно, або не виконана зовсім, тому що транзакція не може бути виконана частково. 

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

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

Опис[ред. | ред. код]

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

Наприклад, розглянемо типову банківську транзакцію, яка включає переказ 700 доларів США з ощадного рахунку клієнта на поточний рахунок клієнта. Ця транзакція поєднує в собі як мінімум дві окремі операції в комп'ютерних термінах: дебетування ощадного рахунку на 700 доларів США та кредитування розрахункового рахунку на 700 доларів США. Якщо одна операція завершується успішно, а інша - ні, банківська книга буде незбалансована. Тому повинен бути спосіб, який гарантує, що обидві операції матимуть успіх або зазнають невдачі, так щоб в базі даних банку ніколи не виникла неузгодженість.

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

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

Як правило, транзакції здійснюються одночасно. Якщо вони перекриваються (тобто звертаються до однієї і тієї ж частини бази даних), це може призвести до конфліктів. Наприклад, якщо клієнт, згаданий в наведеному вище прикладі, має 150 доларів на своєму ощадному рахунку і намагається переказати 100 доларів іншій людині, одночасно переказуючи 100 доларів на поточний рахунок, то тільки одна з цих операцій буде успішною. Однак, примусове виконання транзакцій неефективне. Тому паралельна реалізація обробки транзакцій запрограмована таким чином, щоб гарантувати, що кінцевий результат буде без конфліктів, того ж можна досягнути при виконанні транзакцій послідовно в будь-якому порядку. У цьому прикладі це означає, що незалежно від того, яка транзакція була зроблена першою, переказ іншій особі, або переказ на поточний рахунок, одна операція буде завершена успішно, а інша - невдало.

Методи оброки транзакцій[ред. | ред. код]

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

Rollback — Відновлення початкового стану[ред. | ред. код]

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

Rollforward — Збереження останніх дій[ред. | ред. код]

Також можливо зберегти окремий журнал всіх змін в системі управління базами даних (іноді це називають "наступне зображення"). Це не потрібно для відкату невдалих транзакцій, але це корисно для оновлення системи управління базами даних, в разі збою бази даних, тому деякі системи обробки транзакцій надають такий журнал змін. Якщо система управління базами даних повністю не працює, вона повинна бути відновлена ​​з останньої резервної копії. Створення резервних копій не відображатиме транзакції, виконані з моменту створення резервної копії. Однак, як тільки система управління базами даних буде відновлена, журнал наступних зображень може бути застосований до бази даних (накат), щоб оновити систему управління базами даних. Будь-які транзакції, що виконуються в момент збою, можуть бути відкинуті назад. Результатом є база даних в останньому відомому стані, яка містить в собі результати всіх транзакцій, здійснених до моменту збою.

Deadlocks — Критична межа[ред. | ред. код]

У деяких випадках дві транзакції можуть намагатися під час обробки отримати доступ до однієї і тієї ж частини бази даних одночасно. Наприклад, транзакція A може отримати доступ до частини X бази даних, а транзакція B може отримати доступ до частини Y бази даних. Якщо в цей момент транзакція A намагатиметься отримати доступ до ділянки Y бази даних, тоді як транзакція B намагається отримати доступ до частини X, виникає взаємоблокування, і жодна транзакція не може продовжити виконуватись. Система обробки транзакцій призначена для виявлення цих взаємоблокувань, коли вони відбуваються. Як правило, обидві транзакції будуть скасовані і відновлені до початкового стану, а потім будуть знову запущені в іншому порядку, автоматично, так що безвихідної ситуації не відбудеться. Або іноді, тільки одна з тупикових транзакцій буде скасована, відновлена до початкового стану і автоматично перезапущена після невеликої затримки.

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

Компенесація транзакцій[ред. | ред. код]

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

Критерії ACID[ред. | ред. код]

Докладніше: ACID

Джим Грей визначив властивості надійної системи транзакцій в кінці 1970-х років під абревіатурою ACID - атомарність, узгодженість, ізольованість і довговічність.[1]

Atomicity — Атомарність[ред. | ред. код]

Докладніше: Атомарність

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

Consistency — Узгодженість[ред. | ред. код]

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

Isolation — Ізольованість[ред. | ред. код]

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

Durability — Надійність[ред. | ред. код]

Як тільки транзакція завершується успішно (вона фіксується), зберігаються зміни в її стані, після усунення помилок.

Переваги[ред. | ред. код]

Обробка транзакцій має наступні переваги:

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

Реалізації[ред. | ред. код]

Стандартне програмне забезпечення для обробки транзакцій, таке як IBM's Information Management System, було вперше розроблено в 1960-х роках і часто тісно пов'язане з конкретними системами управління базами даних. Клієнт-серверні обчислення реалізували аналогічні принципи в 1980-х роках зі змінним успіхом. Однак в останні роки розподілену модель клієнт-сервер стало значно складніше підтримувати. Оскільки кількість транзакцій зросло у відповідь на різні онлайн-послуги (особливо в Інтернеті), одна розподілена база даних не була практичним рішенням. Крім того, більшість онлайнових систем складається з цілого набору програм, які працюють разом, на відміну від суворої моделі клієнт-сервер, де один сервер може виконувати обробку транзакцій. Сьогодні є ряд систем обробки транзакцій, які працюють на міжпрограмному рівні і масштабуються для великих систем, включаючи мейнфрейми.

Одним з зусиль є X/Open Distributed Transaction Processing (DTP) (див. також Java Transaction API (JTA). Однак запатентовані середовища обробки транзакцій, такі як CICS від IBM, як і раніше користуються великою популярністю, хоча CICS розвинула галузеві стандарти.

Термін «обробка екстремальних транзакцій» (XTP) використовувався для опису систем обробки транзакцій з надзвичайно складними вимогами, особливо вимогами пропускної здатності (транзакцій в секунду). Такі системи можуть бути реалізовані за допомогою розподілених або кластерних архітектур. Ці архітектури використовувалися принаймні до 2011 року.[2][3]

Примітки[ред. | ред. код]

  1. Gray, Jim; Reuter, Andreas. "Transaction Processing - Concepts and Techniques (Powerpoint)". Retrieved Nov 12, 2012. 
  2. Koen Vanderkimpen and Dirk Deridder. "Going eXtreme for Health Care". Devoxx 2011 presentation. Retrieved March 18, 2017. 
  3. Kevin Roebuck (2011). Extreme Transaction Processing. Lightning Source. ISBN 9781743042663.