Синхронизация данных
Последнее изменение этой страницы: 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 — дословно «извлечение, преобразование, загрузка»).
Пролема работы в реальном времени
Сейчас наступила эра реального времени. Пользователи хотят знать состояние системы в настоящий момент времени, клиенты - видеть текущее состояние заказа в интернет-магазине, отслеживать текущее состояние посылки по ее трек-номеру, контроллировать текущие остатки по счетам и т.д. и т.п. Соответсвенно возникает необоходимость взаимодейсвия и синхронизации в режиме реального времени и постостроения системы, которая не только могла бы обновляться, но и обеспечивать непрерывный произодсвенный процесс в реальном времени - как ьто (например) заказ материала, синхронизация заказов с процессом производства и отгрузки готовых продуктов и т.д.
Проблема безопасности данных
Правила и политики безопасности могут различаться в зависимости от системы, которая используется. Однако даже в случае, когда безопасность данных (хранение, права доступа и прочее) обеспечивается абсолютно корректно в исходной системе, эта политика должна быть транспанирована и на целевые системы, а так же необходимо также обратить внимание на потоки информации (например, ввести то или иное шифрование при передаче данных меж системами), чтобы предотвратить возможное возникновение злоупотреблений информацией.
Этот вопрос обенно важен в случае работы с грифованной информацией и персональными данными.
Проблема качества данных
Еще одно серьезное препятствие - качество данных. Данные должны быть не противоречивы, должно выполняться свойство целостности. Хорошей практикой является хранение данных в одном месте с последующим их перенаправлением в целевые системы, что помогает предотвратить нестыковки в данных и в конечном счете приводит к более эффективному управлению и поддержанию хорошего качетва данных.
Проблема производительности
Синхронизация данных в общем виде состоит из пяти различных фаз:
- извлечение данных из источника мастер данных и\или из основной системы;
- передача данных;
- преобразование данных;
- загрузка данных в целевую систему.
Каждый из этих шагов очень важен и является критичным. В случае синхронизации больших объемов данных, каждый процесс должен быт тщательно спроектирован и произведен, чтобы не обрушить производительность и работу систем(ы) в целом.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.