Titan — это лицензированная распределенная графовая база данных Apache 2 , способная поддерживать десятки тысяч одновременно работающих пользователей, читающих и пишущих в одном крупномасштабном графе . Чтобы обосновать вышеупомянутое утверждение, в этом посте представлены эмпирические результаты Titan, поддерживающего симулированный сайт социальной сети, подвергающийся транзакционным нагрузкам, оцениваемым в 50 000–100 000 одновременных пользователей. Эти пользователи взаимодействуют с 40 m1.small серверами Amazon EC2, которые работают с 6-ти машинным кластером Amazon EC2 cc1.4xl Titan / Cassandra .
В следующей презентации обсуждается структура социального графа моделирования, типы процессов, выполняемых в этой структуре, а также различные анализы времени выполнения этих процессов при нормальной и пиковой нагрузке. Презентация заканчивается обсуждением используемой кластерной архитектуры Amazon EC2 и связанных с этим затрат на ее эксплуатацию в производственной среде. Вкратце, Titan хорошо работает при существенной нагрузке с относительно недорогим кластером и, таким образом, способен поддерживать онлайн-сервисы, требующие больших графических данных в реальном времени.
Структура и процессы социального графа
Онлайн-сервис социальной сети, такой как Twitter, обычно поддерживает 5 операций, перечисленных ниже.
- создать учетную запись : создать нового пользователя с указанным дескриптором.
- опубликовать твит : распространить сообщение <140 символов.
- читать поток : получить упорядоченный по времени список из 10 твитов от подписчиков.
- подписаться на пользователя : подписаться на твиты другого пользователя.
- получить рекомендацию : получить приглашение от потенциально интересных пользователей.



follows = g.V('name',name).out('follows').toList()
follows20 = follows[(0..19).collect{random.nextInt(follows.size)}]
m = [:]
follows20.each { it.outE('follows')[0..29].inV.except(follows).groupCount(m).iterate() }
m.sort{a,b -> b.value <=> a.value}[0..4]
- Извлеките всех пользователей, за которыми следует пользователь, где name — уникальный дескриптор пользователя Twitter.
- Произвольно выберите 20 из тех пользователей, за которыми следуют (обеспечивает вариации для каждого вызова — недетерминированные ).
- Создайте пустой ассоциативный массив / карту, которая будет заполнена рейтингом рекомендаций.
- Для каждого из 20 случайно выбранных пользователей найдите 30 последних подписавшихся пользователей, которые еще не подписались, и запишите их на карту.
- Переверните карту и верните 5 лучших пользователей в качестве рекомендаций.
Обратите внимание, что вершинно-ориентированные индексы снова вступают в игру в строке 4, где следующие ребра (например, ребра потока ) имеют первичный ключ времени и, таким образом, расположены в хронологическом порядке. 30 самых недавних пользователей — это один поиск O (log (n)), где, опять же, n — это число ребер, исходящих из вершины.
Titan, обслуживающий 50 000–100 000 одновременно работающих пользователей
Titan — это графическая база данных OLTP . Он предназначен для обработки множества коротких параллельных транзакций, подобных тем, которые обсуждались ранее. В этом разделе представлена производительность Titan при нормальной (5900 транзакций в секунду) и пиковой (10 200 транзакций в секунду) нагрузке. Мы считаем, что последующее является разумным эталоном: никакого специализированного оборудования не требуется (стандартные машины EC2), никаких сложных конфигураций / настроек Cassandra или Titan, а весь рабочий код выполняется через стандартный API Blueprints .
Нормальная нагрузка

| действие | количество тх | среднее время передачи | стандартное время | Время 3 сигма |
|---|---|---|---|---|
| завести аккаунт | 379019 | 115,15 мс | 5,88 мс | 132,79 мс |
| опубликовать твит | 7580995 | 18,45 мс | 6,34 мс | 37,48 мс |
| читать поток | 37936184 | 6,29 мс | 1,62 мс | 11,15 мс |
| получить рекомендацию | 3793863 | 67,65 мс | 13,89 мс | 109,33 мс |
| общее | 49690061 |
После 2,3 часов вышеупомянутых транзакций в существующий график Twitter за 2009 год были добавлены следующие типы вершин и ребер. Справа приведена статистика с учетом этого поведения за день.
| 2,3 часа | 1 день |
|---|---|
|
|
Пиковая нагрузка

| действие | количество тх | среднее время передачи | стандартное время | Время 3 сигма |
|---|---|---|---|---|
| завести аккаунт | 374860 | 172,74 мс | 10,52 мс | 204,29 мс |
| опубликовать твит | 7517667 | 70,07 мс | 19,43 мс | 128,35 мс |
| читать поток | 37618648 | 24,40 мс | 3,18 мс | 33,93 мс |
| получить рекомендацию | 3758266 | 229,83 мс | 29,08 мс | 317,06 мс |
| общее | 49269441 |
Amazon EC2 Machinery и расходы

40 рабочих были m1.small экземпляров Amazon EC2 (1,7 ГБ памяти с 1 виртуальным ядром). Кластер Titan / Cassandra состоял из 6 машин, каждая из которых имела следующую спецификацию.
- 23 ГБ памяти
- 33,5 вычислительных блока EC2 (2 x Intel Xeon X5570, четырехъядерная архитектура Nehalem )
- 1 690 ГБ памяти
- 64-битная платформа
- 10 гигабитный Ethernet
- Имя API EC2: cc1.4xlarge
При моделировании нормальной нагрузки кластер Titan с 6 компьютерами испытывал следующее использование ЦП, чтение с диска (в байтах) и запись на диск (в байтах) — каждая цветная линия представляет 1 из 6 машин cc1.4xlarge. Обратите внимание, что диаграмма чтения с диска — это снимок за 1 час в середине эксперимента, поэтому кеши теплые. Таким образом, Titan способен последовательно и без усилий поддерживать нормальную транзакционную нагрузку.
Стоимость запуска всех этих машин указана в таблице ниже. Обратите внимание, что в производственной среде (без моделирования) 40 рабочих могут интерпретироваться как веб-серверы, принимающие пользовательские запросы и обрабатывающие результаты, возвращаемые из кластера Titan.
| пример | стоимость за час | стоимость за день | стоимость в год |
|---|---|---|---|
| 6 куб. См | $ 7,80 | $ 187,20 | $ 68328 |
| 40 м.лм | $ 3,20 | $ 76,80 | $ 28032 |
| общее | $ 11,00 | $ 264,00 | $ 96360 |
Для обслуживания 50 000–100 000 одновременно работающих пользователей 96 360 долл. США в год недороги, учитывая поступление доходов, получаемых от базы пользователей такого размера (предположим, что 5% базы пользователей одновременно: ~ 2 миллиона зарегистрированных пользователей). Кроме того, Titan можно развернуть на произвольном количестве машин и динамически масштабировать для удовлетворения требований к нагрузке (см . Преимущества Titan ). Следовательно, эта архитектура 6 cc1.4xl является не необходимостью, а конкретной конфигурацией, которая была исследована для целей представленной социальной симуляции. Для сред с меньшей нагрузкой можно и нужно использовать меньший кластер.
Вывод
Титан занимается исследованиями и разработками в течение последних 4 лет. Весной 2012 года Aurelius предоставил бесплатный доступ к Titan под свободной лицензией Apache 2 . В настоящее время он распространяется в виде альфа-версии 0.1, выпуск которого запланирован на конец лета 2012 года.

Рекомендации
Квак, Х., Ли, С., Парк, Х., Мун, С. « Что такое Твиттер, социальная сеть или средства массовой информации? «World Wide Web Conference, 2010.
Родригес, М.А., Бройчелер, М., « Титан: рост больших графовых данных », публичная лекция в Jive Software, Пало-Альто, 2012.
Broecheler, M., LaRocque, D., Rodriguez, MA, « Титан: масштабируемая база данных распределенных графов », GraphLab Workshop 2012, Сан-Франциско, 2012.



