English for Temporal Workflows

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

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

Ключовий словник

** Тривале виконання ** — основна гарантія тимчасового виконання, що поступ і стан потоку робіт переживають аварії процесів, розгортання і перезапуски, відновлюючись точно з того місця, де він зупинився, а не починаючи з початку або втрачаючи стан. “Нам не потрібно створювати власну логіку повторних спроб і контрольних точок для цього багатоденного процесу — тривале виконання означає, що Temporal автоматично відновлює робочий потік саме з того місця, де він був припинений, навіть якщо робочий процес зламався на півдорозі.”

** Потік роботи ** — оркестраційний код, який визначає послідовність кроків у процесі, написаний як звичайний код, але виконаний Temporal у детермінований і відтворюваний спосіб, відмінний від дій, які виконують справжню роботу.

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

** Дія ** — одиниця фактичної роботи з реальними побічними ефектами, наприклад, викликом API або записом бази даних, викликана з робочого потоку і незалежно повторена тимчасовою функцією, якщо вона зазнає невдачі, без потреби у нетиповій логіці повторення. “Оплата карткою клієнта повинна бути окремою дією, а не вбудованим кодом робочого потоку — таким чином, якщо виклик API платежу затримується, Temporal повторює лише цю дію згідно з нашою політикою повторних спроб, без повторення всього робочого потоку з нуля.”

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

  • “Ця помилка сталася тому, що код робочого потоку викликав генератор випадкових чисел безпосередньо — під час повторення, що дало інший результат, ніж перше виконання, і Temporal виявив недетермінізм і зазнав невдачі.” *

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

  • “Ми не проводимо опитування для затвердження — робочий потік просто чекає, і коли менеджер затверджує запит у інтерфейсі користувача, він надсилає сигнал до запущеного робочого потоку, який потім продовжує роботу до наступного кроку.” *

Звичайні фрази

  • «Чи це тривале виконання насправді гарантує відновлення тут, чи ми все ще покладаємося на вручну повторні спроби десь?»
  • Чи повинна ця логіка жити в робочому потоці, чи вона належить до діяльності?»
  • Чи є цей код достатньо детермінованим, щоб вижити в перегляді?
  • Чи можемо ми використовувати сигнал тут замість опитування для зовнішніх подій?»
  • Яка політика повторних спроб у цій конкретній діяльності?»

Приклади висловлювань

Пояснення основного цінностного пропозиції:

  • “Причиною перенесення цього процесу виконання замовлення до режиму Тимчасове є тривале виконання — раніше, якщо наша служба аварійно завершувала роботу в середині процесу, ми втрачали слід на тому кроці, на якому знаходився замовлення. Тепер робочий процес просто відновлюється саме там, де він зупинився.»*

Виправлення помилки проектування:

  • “Це зовнішнє викликання API має бути самостійною дією, а не вбудованою у поток роботи — якщо він зазнає невдачі, ми хочемо, щоб тимчасовий повторював лише цей виклик відповідно до визначеної політики повторення, а не відтворював усю історію потоку роботи з самого початку.” *

Зневадження проблеми з детермінізмом:

  • “Ця робота зазнала невдачі під час повторення, оскільки код читає поточний системний час безпосередньо, що дає інше значення під час повторення, ніж було спочатку — нам потрібно скористатися детерміністичним API часу Temporal.” *

Професійні поради

  • Використовуйте durable execution, коли пояснюєте, чому було прийнято Temporal — це єдина властивість, яка виключає всю категорію вручну переробленого коду повторних спроб і контрольних точок.
  • Зберігати ** workflow ** функцію без побічних ефектів і недетермінізма — всі фактичні роботи, такі як виклики API або запис бази даних, належать до ** активності **.
  • Перед написанням коду для потоку робіт уважно вивчите ** перезапис ** — будь- яке джерело недетермінованості, наприклад, випадкові числа, поточний час або неупорядковані ітерації карт, з часом призведе до невдачі перезапису.
  • Використовувати ** сигнал ** для будь- чого, на що запущений поток роботи має реагувати зовні, наприклад, на затвердження або скасування, замість створення нетипового циклу опитування.
  • Встановити чіткі правила повторення спроби для кожної ** дії **, відповідні навантаженню — типова поведінка повторення спроби не завжди є правильною для кожного типу зовнішнього виклику.

Практичні вправи

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

Наприклад, описати значення значення в часі

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

Розгляньте це повідомлення Slack: « Гей, команда, чи можете ви з’ясувати, чому не вдається виконати дію « ProcessOrder »? Здається, що програма застрягла у стані « Виконання ». Просто повідомити, що операція зазнала невдачі, недостатньо. Ефективнішою відповіддю буде: « Гаразд, давайте перевіримо журнали для дії « ЗамовленняПроцесу ». Зокрема, нам потрібно побачити, чи є якісь помилки, пов’ язані з його взаємодією з зовнішнім платіжним шлюзом - це те, де налаштовується повтор. Ми також повинні перевірити історію виконання навколо точки невдачі; розуміння * коли * повторення почалося дасть нам критичний контекст. “Це демонструє розуміння довговічної природи Temporal і важливості відстеження невдач через повторні виконання. Інша часта проблема виникає під час перегляду коду. Рецензент може залишити коментар на зразок « Ця діяльність не обробляє країв ». Хоча це технічно правильно, у цьому коментарі не вистачає дійових деталей. Кращий підхід був би: «Я помітив, що дія «CalculateDiscount» явно не враховує від’ємні кількості продукту. Розгляньте можливість додавання перевірки, щоб переконатися, що кількість завжди буде додатною перед початком обчислення знижки — це може призвести до несподіваної поведінки під час повтору, якщо початкові вхідні дані містять помилку. » Це підкреслює не лише проблему, але і * чому * це є проблемою в архітектурі Temporal.

Крім того, створення чітких описів PR стає вирішальним для підтримки і співпраці. Замість нечіткого повідомлення « Виправлено помилку у дії X », скористайтеся таким повідомленням: « Впроваджено надійну логіку повторних спроб для дії « FetchUserPreferences », щоб обробляти перехідні помилки мережі під час повторення. Це забезпечує послідовне отримання настроїв користувача, навіть якщо початкова спроба зазнає невдачі через проблеми з під’ єднанням, запобігаючи невідповідності даних між виконаннями. ” Цей рівень деталізації — вказівка * чому * було додано механізм повторних спроб і яку проблему він вирішує — є неоціненним для майбутніх розробників, які розуміють систему.

Нарешті, пам’ятайте акцент Temporal на ідемпотентності. Під час обговорення потенційних змін, чітко вкажіть, як вони впливають на здатність діяльності бути безпечно виконаною знову без небажаних побічних ефектів. Наприклад: «Ця модифікація забезпечує, що дія ‘UpdateInventory’ залишається ідемпотентною; запуск її кілька разів з тим же вхідним кодом завжди призведе до ідентичного кінцевого стану інвентаризації»

Ось проста команда CLI для перевірки стану дії у тимчасовому режимі, яка показує, як можна стежити за її прогресом під час повторення:

temporal activity get --activity-id my-workflow.activity-name.unique-id --include-events

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

Поширені запитання

Про що ця стаття "English for Temporal Workflows"?

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

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "English for Temporal Workflows"?

Приблизно 8 min.