18 из 20 порядков ломают counter++, а 10 000 запусков на ноутбуке этого не показали

opium 2 минуты назад Краткое содержание статьи 18 из 20 порядков ломают counter++, а 10 000 запусков на ноутбуке этого не показали 7 мин 0 Программирование * Системное программирование * Перевод Автор оригинала: Farid...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. opium 2 минуты назад Краткое содержание статьи 18 из 20 порядков ломают counter++, а 10 000 запусков на ноутбуке этого не показали 7 мин 0 Программирование * Системное программирование * Перевод Автор оригинала: Farid Zakaria Вот над чем стоит подумать: баги не редки, редки порядки событий, которые их вызывают. Начнём с простой истории. Когда я работал в AWS над RDS (Relational Database Service), мы строили управляющий слой сервиса на воркфлоу, разумеется, на SWF (Simple Workflow).
Воркфлоу выполняли последовательность шагов, чтобы создать, изменить или удалить инстанс базы данных. Время от времени мы видели нечто невозможное: воркфлоу будто бы выполнял шаги не по порядку. На самом деле мы наблюдали паузу.
Технические детали
Воркер брал шаг и останавливался на неожиданно долгое время. Пока он стоял, он не слал heartbeat, поэтому SWF решал, что воркер умер, и передавал шаг другому. Новый воркер завершал шаг, и воркфлоу шёл дальше.
А потом первый воркер просыпался. Насколько он мог судить, времени не прошло, поэтому он продолжал выполнять свой шаг и оставлял после себя хаос. Три дорожки: воркер 1, SWF и воркер 2.
Воркер 1 выполняет snapshot, начинает apply config и замирает. SWF не слышит heartbeat и передаёт apply config воркеру 2, тот выполняет его и делает reboot. Воркер 1 просыпается и доделывает apply config уже после reboot, SWF отклоняет его результат, но инстанс видит snapshot, apply config, reboot, apply configМы вдруг поняли, что недостаточно тестируем возможные расписания событий.
Отраслевые последствия
Код воркфлоу был правильным, но расписание, вызвавшее баг, в наших тестах ни разу не встречалось. Редким было расписание, а не баг. Так мы начали добавлять токены идемпотентности к каждому шагу и следить, чтобы любой шаг можно было выполнить несколько раз, ничего не сломав.
Работы было много, но система стала гораздо надёжнее. Я делаю Rewind VM, детерминированную виртуальную машину. Она помогает находить баги в программах главным образом тем, что запускает один и тот же код при множестве разных расписаний.
(Я намеренно говорю расписание, а не чередование потоков. Большинство багов на той странице — гонки между процессами либо между процессом и сигналом. Лишь несколько случаются между двумя потоками одной программы.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




