Статьи

Сервер Titan: от одного сервера до высокодоступного кластера

 

Рост Титана Titan — это распределенная база данных графов, способная хранить графы порядка сотен миллиардов ребер и в то же время поддерживать миллиарды обходов графов в режиме реального времени в день. Для большинства графических приложений аспекты высокой производительности Titan никогда не будут достигнуты. Это не означает, что Titan не подходит для графических приложений в меньшем масштабе — на миллиардах ребер и ниже. Цель этого поста — представить Titan с точки зрения команды инженеров, разрабатывающих новое графическое приложение. Эти инженеры будут первоначально разрабатывать и тестировать свою кодовую базу, используя один сервер Titan . Когда приложение созревает и готово к использованию, высокодоступныйустановка развернута. Наконец, когда приложение становится все более популярным, а объем данных и транзакционная нагрузка увеличиваются, используется полностью распределенный кластер . Рост базы данных Titan с одного сервера на кластер — это просто вопрос конфигурации. Таким образом, Titan изящно масштабируется с учетом меняющихся требований графического приложения.

Титан Единый Сервер

Titan Single MachineАвгуст и Тиберий — два инженера-программиста, которые разработали приложение, которое представляет богов и людей Рима в графе семейных отношений — приложение по генеалогии . Предполагается, что римские ученые будут использовать приложение, чтобы лучше понять социальную структуру своей великой империи. В то время как намерение является однопользовательским, два инженера решили использовать Titan в качестве базы данных бэкэнд-графа. Во-первых, Titan полностью бесплатен для любого использования ( Apache 2 лицензирован ), а во-вторых, он поддерживает как один сервер, так и распределенное развертывание. Последнее важно для них, потому что греческий Оракул Дельфипредсказал, что однажды график генеалогии будет использоваться онлайн всеми по всей Римской империи .

$ wget http://s3.thinkaurelius.com/downloads/titan/titan-cassandra-0.3.0.zip
$ unzip titan-cassandra-0.3.0.zip
$ cd titan-cassandra-0.3.0
$ sudo bin/titan.sh config/titan-server-rexster.xml config/titan-server-cassandra.properties
13/03/27 12:40:32 INFO service.CassandraDaemon: JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.7.0_12-ea
13/03/27 12:40:32 INFO service.CassandraDaemon: Heap size: 40566784/477233152
13/03/27 12:40:32 INFO config.DatabaseDescriptor: Loading settings from file:/Users/marko/software/aurelius/titan/config/cassandra.yaml
13/03/27 12:40:32 INFO config.DatabaseDescriptor: Global memtable threshold is enabled at 151MB
13/03/27 12:40:32 INFO service.CacheService: Initializing key cache with capacity of 2 MBs.
13/03/27 12:40:35 INFO server.RexProRexsterServer: RexPro serving on port: [8184]
13/03/27 12:40:35 INFO server.HttpRexsterServer: Rexster Server running on: [http://localhost:8182]
13/03/27 12:40:35 INFO server.ShutdownManager: Bound shutdown socket to /127.0.0.1:8183. Starting listener thread for shutdown requests.
...
    Users without wget can use curl -O or download from the Titan download page. 

Приведенная выше последовательность из 4 команд оболочки загружает и запускает сервер Titan на localhost. Сервер Titan встраивает Cassandra и (облегченную версию) Rexster в одну и ту же JVM . Titan Server предоставляет разработчикам следующие не зависящие от языка конечные точки для взаимодействия с графом:

  1. RESTful конечных точек доступна на http://localhost:8182/graphs.

    • Операции CRUD могут выполняться через HTTP и JSON .
  2. RexPro двоичный протокол оконечным доступный порт 8184.

    • Произвольно сложные операции чтения / записи Gremlin могут выполняться через MessagePack .

Титан HTTP / RexPro

Сервер Titan настраивается через два основных файла: titan-server-rexster.xml(показано ниже) и cassandra.yaml(обсуждается в следующем разделе). Эти файлы находятся в config/каталоге titan-cassandra-x.y.zдистрибутива.

<rexster>
    <http>
        <server-port>8182</server-port>
        <server-host>0.0.0.0</server-host>
        <base-uri>http://localhost</base-uri>
        <character-set>UTF-8</character-set>
        <enable-jmx>false</enable-jmx>
        <max-post-size>2097152</max-post-size>
        <max-header-size>8192</max-header-size>
        <upload-timeout-millis>30000</upload-timeout-millis>
        <thread-pool>
            <worker>
                <core-size>8</core-size>
                <max-size>8</max-size>
            </worker>
            <kernal>
                <core-size>4</core-size>
                <max-size>4</max-size>
            </kernal>
        </thread-pool>
        <io-strategy>leader-follower</io-strategy>
    </http>
    <rexpro>
        <server-port>8184</server-port>
        <server-host>0.0.0.0</server-host>
        <session-max-idle>1790000</session-max-idle>
        <session-check-interval>3000000</session-check-interval>
        <connection-max-idle>180000</connection-max-idle>
        <connection-check-interval>3000000</connection-check-interval>
        <enable-jmx>false</enable-jmx>
        <thread-pool>
            <worker>
                <core-size>8</core-size>
                <max-size>8</max-size>
            </worker>
            <kernal>
                <core-size>4</core-size>
                <max-size>4</max-size>
            </kernal>
        </thread-pool>
        <io-strategy>leader-follower</io-strategy>
    </rexpro>
    <security>
        <authentication>
            <type>none</type>
        </authentication>
    </security>
    <shutdown-port>8183</shutdown-port>
    <shutdown-host>127.0.0.1</shutdown-host>
</rexster>

ПРИМЕЧАНИЕ . Наряду с вышеуказанными конечными точками Titan Server также предоставляет собственный интерфейс сериализации JVM, который может использоваться языками JVM. Этот интерфейс, например, является средством взаимодействия Faunus / Hadoop с Titan Server для глобальной аналитики графов. Для получения дополнительной информации об этой конечной точке см. Использование Cassandra .

Титан Высоко Доступен

Генеалогическое приложение показало перспективность в качестве однопользовательской системы для изучения генетической истории римского народа и богов. Благодаря положительному ответу Август и Тиберий решают, что многопользовательский онлайн-сервис по генеалогии будет успешным продуктом.

 how many siblings did jupiter have?
g.V('name','jupiter').out('brother','sister').count()
// who is caesar's grandmother?
g.V('name','caesar').out('mother').out('mother').name
// who are marcus' children's in-laws?
g.V('name','marcus').in('father').has('gender','M').out('married').out('father','mother').name 

В настоящее время набор генеалогических данных составляет приблизительно 1 миллиард ребер. Поэтому его можно хранить и обрабатывать на одном компьютере. В качестве однопользовательского приложения достаточно одного сервера Titan. Однако при наличии нескольких пользователей важно, чтобы система была надежной и могла обслуживать множество одновременных запросов. Если приложение поддерживается только одним сервером, то если этот сервер отключается, приложение становится непригодным для использования. Чтобы обеспечить 1) отсутствие единой точки отказа и 2) поддержку большего количества транзакций в секунду, Август и Тиберий развертывают 3 машины, на каждой из которых установлен сервер Titan.

Титан Высоко ДоступенГруппа обновляет config/cassandra.yamlфайл по умолчанию для каждого сервера Titan, изменяя localhostзначение свойства на IP-адрес компьютера и добавляя начальный IP-адрес для обнаружения (см. Многоузловой кластер ). Затем они запускают каждый сервер Titan один за другим ( titan.sh). Чтобы обеспечить правильную кластеризацию серверов, они используют Cassandra nodetool.

apache-cassandra-1.2.3$ bin/nodetool ring
 
Datacenter: datacenter1
==========
Replicas: 1
 
Address         Rack        Status State   Load            Owns                Token
                                                                               57715295010532946864463892271081778854
10.223.14.57    rack1       Up     Normal  93.06 KB        49.28%              141555886663081320436455748965948652071
10.174.123.131  rack1       Up     Normal  59.73 KB        33.44%              28311611028231080169766921879398209884
10.196.0.207    rack1       Up     Normal  9.43 KB         17.28%              57715295010532946864463892271081778854

Наконец, на одном из серверов cassandra-cliинструмент используется для обновления коэффициента репликации titan-keyspace.

apache-cassandra-1.2.3$ bin/cassandra-cli -h 10.174.123.131
 
[default@unknown] update keyspace titan with strategy_options = {replication_factor:3};
a3b7e1a3-4a88-3769-8c5e-90cda4fec0e1
[default@unknown] show schema titan;
create keyspace titan
  with placement_strategy = 'SimpleStrategy'
  and strategy_options = {replication_factor : 3}
  and durable_writes = true;

При коэффициенте репликации 3 каждый из 3 серверов Titan является основным узлом приблизительно одной трети вершин в графе, в то же время каждый из них поддерживает реплику первичных данных двух других серверов. Таким образом, выполняется высокодоступная настройка мастер-мастер . У этой модели нет единой точки отказа. Если один из компьютеров базы данных выходит из строя, два других могут обслуживать первичные данные мертвой машины. Если две машины вышли из строя, оставшаяся машина может обслуживать данные — хотя и не с одинаковой пропускной способностью, возможной, когда все три машины доступны. При полной репликации мастер-мастер график дублируется, и каждый сервер может поддерживать как чтение, так и запись в график.

Титан Кластер

Римский ФорумСледующим летом пророчество о Оракуле Дельфи сбывается. На римском форуме сделано объявление об использовании онлайн-приложения для генеалогии. Сразу же, римские плебеи присоединяются к сайту. Они лихорадочно добавляют свои семейные истории и просматривают график, чтобы узнать больше об их генетическом прошлом. Этот всплеск использования создает чрезмерную нагрузку на серверы. При таком количестве одновременных пользователей три серверных компьютера достигли своего пика ЦП и дискового ввода-вывода, пытаясь обработать запросы.

Титан КластерЧтобы исправить ситуацию, в кластер добавлено еще 6 компьютеров Titan Server, что в общей сложности составляет 9 машин. Token Ring является перебалансирован , чтобы гарантировать , что каждый сервер поддерживает относительно равное количество графа. Идеальное / правильное разделение 2^128на 9 частей ниже (см. Калькулятор Token Ring ).

0
18904575940052135809661593108510408704
37809151880104271619323186217020817408
56713727820156407428984779325531226112
75618303760208543238646372434041634816
94522879700260688493040931281842470912
113427455640312814857969558651062452224
132332031580364960112364117498863288320
151236607520417086477292744868083269632

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

apache-cassandra-1.2.3$ bin/nodetool -h 10.223.14.57 move 0
apache-cassandra-1.2.3$ bin/nodetool -h 10.174.123.131 move 18904575940052135809661593108510408704
apache-cassandra-1.2.3$ bin/nodetool -h 10.196.0.207 move 37809151880104271619323186217020817408
...
..
.

Разделение Token Ring

Если коэффициент репликации по-прежнему равен 3, каждый сервер не поддерживает полную копию графика. Вместо этого каждый сервер реплицирует только треть полного графика (3/9). На данный момент ни один сервер не имеет полной картины графика. Однако, поскольку существует больше серверов, можно обслуживать больше транзакций и сохранять больше данных. Augustus и Tiberius успешно превратили свое однопользовательское графическое приложение в распределенную систему, которая хранит и обрабатывает массивный генеалогический граф, представленный в кластере компьютеров Titan Server.

Вывод

Голова Титана Titan изначально разрабатывался для поддержки хранения и обработки распределенных графов OLTP . Хотя важно, чтобы база данных графов могла масштабироваться бесконечно, менее 1% приложений, написанных сегодня, когда-либо будут использовать около триллиона граничных графов. Остальные 99% приложений будут хранить и обрабатывать миллионы и миллиарды граничных графов. Titan способен удовлетворить требования обоих сегментов графического приложения. Кроме того, Titan изящно масштабируется по мере того, как разработчики переходят от прототипа с одного сервера к высокодоступной производственной системе, в конечном итоге к полностью распределенному кластеру, поддерживающему требования к размеру и рабочей нагрузке, предъявляемые 1% приложений.

Подтверждения

Стивен Маллетт и Блейк Эгглстон являются разработчиками Rexster RexPro . Их усилия были движущей силой развития Titan Server .