castomFLOW
Адкрыць castomFLOW

Запускі, якім можна давяраць

Ніхто не заўважае аўтаматызацыю, пакуль яна не адправіць што-небудзь двойчы

А потым заўважаюць усе. Чатыры механізмы на гэтай старонцы існуюць таму, што збоі такога праграмнага забеспячэння — заўсёды тыя ж самыя чатыры збоі, і ўсе іх можна прадухіліць канструкцыяй, а не стараннасцю.

Працуйце ў рэжыме імітацыі перад публікацыяй

Прапусціце рэальны запіс праз выключаны працоўны працэс і прачытайце дакладна тое, што адбылося б: выбраны шлях, кожнае значэнне на кожным кроку, фармулёўку кожнага паведамлення і запыт, які быў бы адпраўлены ў кожную знешнюю сістэму.

Нішто не пакідае сістэму. Ніякія лісты не адпраўляюцца, ніякія рахункі не ствараюцца, ніякія спробы спісання не робяцца, ніякія радкі не запісваюцца. Знешнія выклікі фіксуюцца як намеры, з данымі, якія былі б адпраўлены, каб вы маглі праверыць правільнасць адпаведнасці да таго, як гэта стане чыйай праблемай.

Сімуляцыі — гэта спосаб адказаць на пытанне, якое спыняе людзей ад уключэння аўтаматызацыі: што яна насамрэч зробіць?

Сімуляцыя · заказ 88 214Нічога не адпраўлена
  • 1Праверыць адрасСупадзенне. Было б запісана 6 палёў.
  • ?УмоваЗамова звыш 1 000 zł? Не — 289,00 zł. Выбраны кароткі шлях.
  • 3РахунакБыў бы адпраўлены POST-запыт у сістэму выставлення рахункаў. Карысная нагрузка паказана цалкам.
  • !Захоплена тутСтаўка ПДВ узятая з няправільнага поля. Знойдзена ў імітацыі, а не ў паштовай скрынцы бухгалтара.

Адпраўлена: нічогаСпісана: нічога

Запуск ідзе па той версіі, на якую ён трапіў

Публікацыя змяненняў у працэсе не закранае запускаў, якія ўжо ў ім знаходзяцца. Кожны запуск замацаваны за версіяй, на якой ён пачаўся, і завяршае яе — незалежна ад таго, колькі ён доўжыцца і колькі вы перапісваеце ў гэты час.

Такім чынам, вы можаце перабудаваць працэс, пакуль дзесяць тысяч людзей знаходзяцца ў яго сярэдзіне, і кожны з іх завяршыць той паток, які яму быў абяцаны. Альтэрнатыва — рашэнне, пры якім увесь наступны шлях матэрыялізуецца на ўваходзе, — прычына таго, чаму рэдагаванне жывой аўтаматызацыі ў большасці інструментаў падаецца небяспечным. Тут гэта нічога асаблівага.

Новыя запускі атрымліваюць новую версію з моманту публікацыі. Версія, на якой знаходзіцца запуск, запісана на самім запуску, таму на пытанне аб паводзінах у сакавіку ёсць адказ у верасні.

Рэдагаванне на жывой сістэмеv4 → v5
  • 1Да2 918 запускаў у працэсе, усе на v4. Некаторыя чакаюць па два дні.
  • 2Апублікаваць v5Два крокі перастаноўлены, адно паведамленне перапісана.
  • 3ПасляТыя 2 918 завяршаюць v4. Усё, што пачынаецца з 11:40, ідзе па v5.
  • §Ніхтоне атрымаў палову аднаго працэсу і палову другога.

Версія запісана на кожным запускуСтарыя версіі захаваны

Паўторы, якія не могуць адправіць двойчы

Крок — чыстая функцыя сваіх уваходных даных, і яго эфекты фіксуюцца разам з уласным пераходам запуску да наступнага кроку. Не існуе акна, у якім паведамленне ўжо адпраўлена, а запуск яшчэ не ведае пра гэта.

Гэта ўвесь трук, і гэта структурная ўласцівасць, а не абяцанне. Працоўны працэс, забіты пасярэдзіне кроку — разгортванне, збой, машына, якая знікла, — пакідае запуск дакладна там, дзе ён быў. Іншы працоўны працэс падхапае яго і паўтарае крок. Паколькі эфект і пераход фіксуюцца як адно цэлае, адбываецца або і тое, і другое, або нічога.

Зыходныя выклікі да сістэм, якія падтрымліваюць ключы ідэмпатэнтнасці, нясуць такі ключ, вытворны ад запуску і кроку, каб другі бок таксама мог распазнаць паўтор.

Працоўны працэс загінуў пасярэдзіне адпраўкіАдноўлена
  • 1Крок 5 пачынаеццаАдправіць паведамленне аб адпраўцы.
  • ✕Працоўны працэс гінеРазгортванне. Нічога не было зафіксавана.
  • 2ПадхопленаІншы працоўны працэс знаходзіць запуск усё яшчэ на кроку 5.
  • ✓Адпраўлена адзін разКліент атрымаў адзін ліст, а не два.

Эфекты фіксуюцца разам з пераходамКлюч ідэмпатэнтнасці для кожнага запуску і кроку

Журнал, напісаны для чытання чалавекам

Кожны запуск, кожны крок, выбраная галіна і значэнне, якое яе вызначыла. Часы выканання па кроках. Запыт і адказ кожнага знешняга выкліку з выдаленымі уліковымі данымі. Версія, на якой быў запуск. Дзе запуск чакае і да якога моманту.

Калі нехта пытаецца, што сталася з замовай, размешчанай чатырнаццатага, ёсць адказ, і яго пошук займае хвіліну, а не пасляабед з суаднясеннем журналаў трох сістэм.

Запускі, што не ўдаюцца, збіраюцца ў адным месцы з згрупаванай прычынай, таму «сорак адна памылка за ноч» ператвараецца ў «адзін пастаўшчык вяртаў 503 дзевяць хвілін», а не ў сорак адну асобную справаздачу.

За ноч, згрупавана41 памылка
  • 1Адна прычынаAPI пастаўшчыка вяртаў 503 з 02:41 да 02:50.
  • 2Што здарыласяУсе 41 паўтарылі; 39 удаліся з другой спробы.
  • 3ЗасталосяДзве спыніліся і чакаюць чалавека. Абедзве пералічаны з радком, што не ўдаўся.
  • §Не сорак аднасправаздача. Адна — і рашэнне наконт двух запісаў.

Уліковыя дадзеныя засакрэчаныВерсія запісана

Чаго мы не сцвярджаем

Мы не публікуем паказчык часу працы на маркетынгавай старонцы, бо лічба без акна вымярэння і вызначэння «працуе» — гэта ўпрыгожанне. Калі вам патрэбна дамоўная лічба, спытайце, і мы абмяркуем, да чаго можам сапраўды абавязацца.

Мы таксама не можам зрабіць чужы API надзейным. Калі правайдэр не працуе, сцэнарый, які ад яго залежыць, чакае, паўтарае і ўрэшце спыняецца з зразумелай прычынай. Што мы можам абяцаць — гэта тое, што памылка бачная, што яна нічога не псуе і што аднаўленне не дасылае паведамленне другі раз.

Пра чаканне: запуск, які чакае два дні, — гэта wake_at на запуску, а не заданне ў чарзе. Менавіта таму сцэнарый можа трымаць сто тысяч запускаў у трохтыднёвым чаканні без якіх-небудзь выдаткаў, і таму колькасць запускаў, што зараз чакаюць, — не тое, пра што вам трэба думаць.

Запуск, пра які вы ніколі не думаеце, — гэта той, што ўдаўся.