Добро пожаловать в реальный мир! PDF Печать E-mail

(В оригинале - Welcome to the Real World)

Инженеры любят точность, особенно это характерно для программистов, живущих в мире нулей и единиц. Им приходится работать с бинарными выборами: ноль или один, true или false, да или нет. Все ясно и согласованно, гарантируемо атомарными транзакциями, ограничениями и контрольными суммами.

К сожалению, реальный мир не столь бинарный. Клиенты делают заказы лишь для того, чтобы их отменить в следующий момент. Чеки не принимаются к оплате, письма теряются, платежи задерживаются, а обещания не выполняются. Ошибки ввода данных случаются слишком часто. Пользователи предпочитают простые интерфейсы, предоставляющие доступ сразу ко многим функциям, без выстраивания последовательных процессов с фиксированной очередностью выполнения операций, что кажется более логичным для большинства разработчиков, а также более простым для реализации.

Более того, широко распространенные системы вносят еще больше несоответствия. Сервисы могут быть недоступны, могут меняться без предварительного оповещения об этом или не поддерживать транзакции. Когда вы запускаете приложения на тысячах компьютеров, то сбой – это лишь вопрос времени. Эти системы слабо связаны, асинхронны, параллельны и не всегда поддерживают транзакционную целостность. И вам придется с этим жить.

Что же с этим всем делать? Первый шаг к решению – это осведомленность о проблеме. Попрощайтесь со старой предсказуемой моделью стека вызовов, при которой вы определяете порядок выполнения. Вместо этого готовьтесь обрабатывать любые события в любой момент времени. Обрабатывайте асинхронные запросы параллельно вместо последовательного вызова обработчиков. Избегайте полного хаоса, используя событийно-управляемую архитектуру или машины состояний. Обрабатывайте ошибки при помощи компенсационных механизмов, повторов или предварительных операций.

Звучит ужасно и совсем не так, к чему вы готовились? К счастью, реальный мир справляется с такими же задачами вот уже очень долгое время: задержанные письма, невыполненные обещания, платежи, отправленные не по адресу – примеры можно перечислять бесконечно. И людям приходится отправлять письма повторно, игнорировать неправильные заказы или просить не обращать внимание на напоминание о платеже, если платеж уже выполнен. Поэтому не осуждайте реальный мир за вашу головную боль, а используйте его подсказки для нахождения решений. В конце концов, Starbucks тоже не используют методологию двухфазового коммита в своем процессе. Добро пожаловать в реальный мир!

Автор оригинала - Gregor Hohpe.