Skip to main content

Что такое возможная последовательность?

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

Один из наиболее заметных способов применения возможной согласованности связан с обновлениями программного обеспечения, распространяемыми в Интернете. Первые несколько секунд после выпуска обновления его никто не получит; пользователям программного обеспечения не удалось загрузить и установить обновление. Это состояние «доступно»; обновление существует, но еще не распространено. Со временем, когда пользователи загрузят обновление, некоторые получат его, а некоторые - нет. Однако по прошествии достаточного количества времени каждый, кто использует программное обеспечение, обновится до последней версии. Это предпосылка состояния возможной согласованности: при достаточном времени любое обновление будет полностью распространяться по всей системе.

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

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

При восстановлении записи изменения в коде, хранящемся на компьютере, вносятся во время операции записи, когда компьютер уже записывает что-то на жесткий диск системы. Это устраняет несоответствие, приводя программу или данные в соответствие с моделью, но также временно замедляет исходную операцию записи. Для восстановления чтения корректирующая операция происходит во время цикла чтения с жесткого диска. Это, в свою очередь, замедляет операцию чтения. В асинхронном восстановлении восстановление происходит, когда не выполняются ни операции чтения, ни записи, что приводит к потреблению циклов простоя на процессоре.