Про нас

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

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

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

Ретриця не є другим рішенням купівлі

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

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

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

Подаруйте кожний купівля стійкий ключ

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

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

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

Модель невідомого результату

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

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

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

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

Захищаючи заголовок і варіантів валют

ключ idempotency запобігає повторенню одного інтенту; він не автоматично робить кожен побічний ефект правильним. Визначте варіантів, грант повинен зберегти. Неспроможна заголовок з'являється в більшості випадків для облікового запису та продукту. Подання валюти має вихід з одним ключем транзакцій, відомий дельта, а також отриманий баланс, який відповідає сумі дійсних записів. Інвентаріііієнти надають obey стека, ємність та правила визначення пункту. Період підписки не поширюється двічі тому, що підтвердження кінцевої точки рани двічі.

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

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

Тестові аварійні ситуації, перезапуски, і червоне

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

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

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

Зберігати кордони чесно

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

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

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

Практичний контроль

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

Часті питання

Чи є унікальний ідентифікатор квитанції для idempotency?

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

Якщо клієнт автоматично перейде на час?

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

Якими є незрівнянні заголовки?

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

Що таке Persistium?

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

Схожі системиОгляд Persistium