Синхронизация данных

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 05:22, 29 декабря 2016.

Синхронизация данных (от древне-греч. σύγχρονος — одновременный) - поддержание двух и более копий данных в согласованности друг с другом, поддержание целостности информации.

Примеры включают, но не ограниивают:

  • Синхронизацию файлов, (например, портативного MP3-плеера и компьютера, электронной читалки и компьютера);
  • Кластерные файловые системы, т.е. файловые системы , которые поддерживают данные или индексы последовательно во всем вычислительном кластере;
  • Когерентность кэша, поддержание нескольких копий данных в синхронизации с несколькими кеш;
  • RAID-массив, данные записываются в резервной копии на нескольких дисках, так что потеря одного диска не приведет к потере данных;
  • Репликация баз данных, копии данных на базе синхронизируются, несмотря на возможные большие географического разделения;
  • Журналирование - техника, используемая многими современными файловыми системами, чтобы убедиться, что метаданные обновляются на диске в логичном, последовательном порядке.

Способы

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

  • Наиболее простой способ - предполагается, что изменения вносятся в одну копию - т.н. «рабочую» - а друга я копия просто перезаписывается ее содержимым. Этот способ применяется в большинстве приложений.
  • Случай, когда данные представляют собой набор независимых записей (например, телефонная книга) - можно применить объединение множества записей. Что минимизирует риск потери данных, однако приводит к возможному появлению множественных записей одинаковых данных под разными ярлыками (напр. один телефонный номер, записанный под фамилией и прозвищем) и к сложностям при удалении
  • Случай множественной синхронизации наборов - можно автоматически вводить в них дополнительную служебную информацию: дата\время последних правок, отметки об удаленных записях и прочее. Такой подход реализован в частности в Outlook.
  • Обработка конфликтов автоматически или вручную - применяют, если вышеперечисленные способы не работают, например в системах управления версиями.

Например, CVS при обнаружении двух независимых правок объявляет о «конфликте» и либо разрешает его автоматически, либо предоставляет пользователю разрешить его вручную. Аналогичным образом ведет себя SVN.

  • Отдельно выделяют способ репликации - в частности для синхронизации баз данных.

Классические проблемы синхронизации

Некоторые классические проблемы синхронизации:

  • Задача поставщика-потребителя;
  • Взаимная блокировка (т.н. deadlock и livelock);
  • Проблема чтение-запись;
  • Проблема обедающих философов;

Задача поставщика-потребителя

Задача поставщика-потребителя ( англ. Producer-consumer problem), также известная как задача ограниченного буфера ( англ. Bounded-buffer problem ) - это классический пример задачи синхронизации нескольких процессов . Задача описывает два процесса, поставщик и потребитель, которые совместно используют буфер установленного размера. Задачей поставщика является создание фрагмента данных, запись его в буфер и повторение этих действий раз за разом. Одновременно с этим потребитель потребляет данные (то есть, удаляет их из буфера) по одному фрагменту за раз. Задача состоит в том, чтобы не дать поставщику записать данные, когда буфер полон, а потребителю не дать удалить данные из пустого буфера.

Взаимная блокировка

Взаи́мная блокиро́вка (англ. deadlock) — ситуация в многозадачной среде или СУБД, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами.

Livelock - ситуация близкая к deadlock, но с существенным отличием: система не «застревает» (как в обычной взаимной блокировке), а занимается бесполезной работой, её состояние постоянно меняется — но, тем не менее, она «зациклилась», не производит никакой полезной работы. Жизненный пример такой ситуации: двое встречаются лицом к лицу. Каждый из них пытается посторониться, но они не расходятся, а несколько секунд сдвигаются в одну и ту же сторону.

Проблема чтение-запись

« Есть область памяти, позволяющая чтение и запись. Несколько потоков имеют к ней доступ, при этом одновременно могут читать сколько угодно потоков, но писать — только один. Как обеспечить такой режим доступа? »

Проблема обедающих философов

Задача обедающих философов (англ. Dining philosophers problem) — классический пример, используемый в информатике для иллюстрации проблем синхронизации при разработке параллельных алгоритмов и техник решения этих проблем. Сформулирована в 1965 году Эдсгером Дейкстрой как экзаменационное упражнение для студентов. В качестве примера был взят конкурирующий доступ к ленточному накопителю. Вскоре проблема была сформулирована Ричардом Хоаром в том виде, в каком она известна сегодня

Задача о курильщиках

Задача о курильщиках (англ. Cigarette smokers problem) — проблема синхронизации в информатике, первоначально описанная в 1971 году Сухас С. Патилом.

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

Проблемы синхронизации данных

Некоторые проблемы, специфичные для синхронизации именно данных: Some of the challenges which user may face in data synchronization:

  • Сложность форматов данных data formats complexity;
  • Работа в реальном времени real-timeliness;
  • беопасность данных data security;
  • качество данных data quality;
  • производительность performance.

Сложность форматов данных

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

Одно из решений - применение ETL-тулзов (от английского Extract, Transform, Load — дословно «извлечение, преобразование, загрузка»).

Пролема работы в реальном времени

Сейчас наступила эра реального времени. Пользователи хотят знать состояние системы в настоящий момент времени, клиенты - видеть текущее состояние заказа в интернет-магазине, отслеживать текущее состояние посылки по ее трек-номеру, контроллировать текущие остатки по счетам и т.д. и т.п. Соответсвенно возникает необоходимость взаимодейсвия и синхронизации в режиме реального времени и постостроения системы, которая не только могла бы обновляться, но и обеспечивать непрерывный произодсвенный процесс в реальном времени - как ьто (например) заказ материала, синхронизация заказов с процессом производства и отгрузки готовых продуктов и т.д.

Проблема безопасности данных

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

Этот вопрос обенно важен в случае работы с грифованной информацией и персональными данными.

Проблема качества данных

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

Проблема производительности

Синхронизация данных в общем виде состоит из пяти различных фаз:

  1. извлечение данных из источника мастер данных и\или из основной системы;
  2. передача данных;
  3. преобразование данных;
  4. загрузка данных в целевую систему.

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

Ссылки