Главная > Java - язык и технологии, Open Source, Высокопроизводительная архитектура, СУБД > Синхронизация удалённых баз данных через интернет: Java, MySQL или Oracle, JDBC и SymmetricDS

Синхронизация удалённых баз данных через интернет: Java, MySQL или Oracle, JDBC и SymmetricDS

16 ноября 2007

symmetric-chrome.pngПриветствую наших читателей. Если вы разрабатываете какую-то распределённую систему, или просто так сложилось, что существуют несколько баз данных (серверов), которые разнесены в пространстве, и между которыми нужно, с одной стороны, обеспечить синхронизацию данных, с другой - каналы связи не позволяют настроить полноценную репликацию, а над данными ещё бы хотелось и проводить какие-то несложные операции во время синхронизации, фильтровать их, да и избежать перегрузки как серверов, так и серверов, в случае если их несколько десятков или даже сотен. Вы считаете, что это редкая проблема и её только в NASA решают? Ну, к примеру, системы распределённых платёжных или торговых терминалов - их вполне в развитой сети может быть несколько тысяч, и нужно постоянно синхронизировать с одним или несколькими основными серверами, причём это вполне может быть и многоуровневая архитектура. А ещё хочется, чтобы такое решение было простое, бесплатное, то есть open-sourсe, и работало на любой платформе... Не спешите одёргивать себя от таких мыслей, все это вполне реально. Как? Используя SymmetricDS.

И так, SymmetricDS это свободная система под лицензией LGPL, позволяющая через протокол HTTP синхронизировать любые базы данных (ну пока не любые, а те, для которых есть JDBC драйвера, а в документации только упоминается MySQL и Oracle). Это не репликация, а скорее приближенная к ней синхронизация, которая хоть и не в реальном времени, но при возможности близка к ней. Она может быть как по запросу, так и по определённому интервалу, причём устойчиво работает и на низкоскоростных каналах связи, так и справляется с периодическими перебоями в связи.

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

simmetric_type_sync.jpg

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

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

Система имеет и хорошую управляемость, так как данные о конфигурации узлов находятся на едином регистрационном сервере, а управление производится через консоль и механизм Java Management Extensions.

Все компоненты SymmetricDS написаны на Java, а сама система может запускаться в трёх режимах - развёртываться на сервере приложения (WAR или EAR вида), в качестве которого может выступать как Apache Tomkat, так и Jetty или JBoss, как самостоятельное приложение (имеется встроенный веб-сервер), или встраиваться в другие Java приложения (требуется буквально десяток строк кода для встраивания и запуска сервера).

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

P.S. При реализации необходимого промежуточного слоя, система может работать и с другими СУБД, поддерживающими JDBC, но сама база данных, конечно, должна поддерживать необходимые возможности, такие как триггеры и транзакционность, хотя, думается, это также можно перенести в промежуточный слой, таким образом реализовав полную независимость от базы данных. Впрочем, такое можно даже сейчас, используя промежуточное превращение потока синхронизирующих данных в универсальный формат, вроде CSV, правда в таком режиме можно только синхронизировать данные в одну сторону.

Ссылки по теме:

  1. Ігор
    16 ноября 2007 в 19:02 | #1

    Схожий проект sequoia.continuent.org

    Sequoia is a transparent Java middleware solution for offering clustering, load balancing and failover services for any database.

  2. 16 ноября 2007 в 19:42 | #2

    ага, спасибо 🙂 в курсе, он как раз следующий на очереди в описание:)

  3. Vladimir Loshchin
    14 июня 2011 в 03:26 | #3

    Не Tomkat, а Tomcat.

  4. max0s
    7 декабря 2012 в 08:28 | #4

    http://blogmir.net/inout_2933.png (проверка по базе подозрительных веб-адресов) 07.12.2012 10:26:28

    загрузка вредоносной ссылки с вашего сайта.

Комментирование отключено.
Developers.org.ua