Статьи

Titan предоставляет большие графические данные в реальном времени

Титан-большой граф-данные

блоге Аврелия .

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 операций, перечисленных ниже.

  1. создать учетную запись : создать нового пользователя с указанным дескриптором.
  2. опубликовать твит : распространить сообщение <140 символов.
  3. читать поток : получить упорядоченный по времени список из 10 твитов от подписчиков.
  4. подписаться на пользователя : подписаться на твиты другого пользователя.
  5. получить рекомендацию : получить приглашение от потенциально интересных пользователей.

твиттер-схемаЭти операции приводят к появлению структуры графа свойств, эпиморфной схеме, изображенной справа. В этой схеме есть пользовательские вершины и твиты. Когда пользователь пишет в Твиттере, край твита соединяет пользователя с его твитом. Более того, все последователи этого пользователя (то есть подписчики) имеют временную метку края исходящего потока, присоединяющую свою вершину к твиту. Для каждой пользовательской вершины края потока отсортированы по времени, поскольку в этой системе время является объявленным первичным ключом. Titan поддерживает вершинно-ориентированные индексыкоторые обеспечивают O (log (n)) поиск соседних вершин на основе меток и свойств падающих ребер, где n — количество ребер, исходящих из вершины. Для симуляции искусственно сгенерированные твиты представляют собой случайно выбранные фрагменты из «Одиссеи» Гомера (согласно проекту Гутенберга ), где длина выбирается из гауссовского распределения со средним числом 70 символов.

щебет рабочих-титанЧтобы обеспечить базовый уровень данных, график Twitter с 2009 года был сначала загружен в кластер Titan. Эти данные включают в себя 41,7 миллиона пользовательских вершин и 1,47 миллиарда следующих ребер. После загрузки 40 m1.small машин помещаются в «цикл while (true)» (на самом деле на каждом работнике 10 одновременных потоков, выполняющих 125 000 итераций). Во время каждой итерации цикла работник выбирает операцию, которую необходимо выполнить, используя пристрастное подбрасывание монеты (см. Схему слева). Распределение сильно благоприятствует потоковому чтению, поскольку это обычно самая распространенная операция в таких онлайн-социальных системах. Далее, если будет предоставлена рекомендация , существует 30% вероятность того, что пользователь последует за одним из рекомендованных пользователей. Вот как следующие ребра добавляются к графику.

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

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]
  1. Извлеките всех пользователей, за которыми следует пользователь, где name — уникальный дескриптор пользователя Twitter.
  2. Произвольно выберите 20 из тех пользователей, за которыми следуют (обеспечивает вариации для каждого вызова — недетерминированные ).
  3. Создайте пустой ассоциативный массив / карту, которая будет заполнена рейтингом рекомендаций.
  4. Для каждого из 20 случайно выбранных пользователей найдите 30 последних подписавшихся пользователей, которые еще не подписались, и запишите их на карту.
  5. Переверните карту и верните 5 лучших пользователей в качестве рекомендаций.

Обратите внимание, что вершинно-ориентированные индексы снова вступают в игру в строке 4, где следующие ребра (например, ребра потока ) имеют первичный ключ времени и, таким образом, расположены в хронологическом порядке. 30 самых недавних пользователей — это один поиск O (log (n)), где, опять же, n — это число ребер, исходящих из вершины.

Titan, обслуживающий 50 000–100 000 одновременно работающих пользователей

Titan — это графическая база данных OLTP . Он предназначен для обработки множества коротких параллельных транзакций, подобных тем, которые обсуждались ранее. В этом разделе представлена ​​производительность Titan при нормальной (5900 транзакций в секунду) и пиковой (10 200 транзакций в секунду) нагрузке. Мы считаем, что последующее является разумным эталоном: никакого специализированного оборудования не требуется (стандартные машины EC2), никаких сложных конфигураций / настроек Cassandra или Titan, а весь рабочий код выполняется через стандартный API Blueprints .

Нормальная нагрузка

Моделирование нормальной нагрузки длилось 2,3 часа, и за это время было выполнено 49 миллионов транзакций . Это примерно 5900 транзакций в секунду . Предполагая, что пользователь совершает транзакцию каждые 5-10 секунд (например, читает свой поток, а затем публикует твит и т. Д.), Этот кластер Titan поддерживает около 50 000 одновременно работающих пользователей . В приведенной ниже таблице указано количество транзакций на операцию, среднее время транзакций, стандартное отклонение этих времен и сигма 3времена представлены. 3 сигма на 3 стандартных отклонения больше среднего и представляют ожидаемое время наихудшего случая, с которым столкнется 0,1% пользователей. Наконец, обратите внимание, что создание учетной записи является более медленной транзакцией, поскольку это операция блокировки, которая гарантирует, что никакие два пользователя не будут иметь одинаковые имена пользователей (т. Е. Дескриптор Twitter).

действие количество тх среднее время передачи стандартное время Время 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 день
  • 361 000 пользовательских вершин
  • 7,58 миллиона твитов (вершин твитов)
  • 7,58 миллиона твитов ( краев твитов )
  • 150 миллионов краев потока
  • 1,12 миллиона следует за краями
  • всего : 166,6 млн. элементов
  • 3,78 миллиона пользователей вершин
  • 79,33 миллиона твитов (вершин твитов)
  • 79,33 миллиона твитов ( краев твитов )
  • 1,57 миллиарда краев потока
  • 11,79 миллиона следует за краями
  • итого : 1,75 млрд элементов

Пиковая нагрузка

Чтобы определить, как Titan будет работать в среде пиковой нагрузки, 40 рабочих машин вместе выполняли 10 200 транзакций в секунду за 1,3 часа (всего 49 миллионов транзакций ). Это моделирует примерно 100 000 одновременных пользователей . Номера транзакций и статистика по времени представлены в таблице ниже. Обратите внимание, что более высокие задержки ожидаются при более высокой нагрузке и что, хотя время транзакций больше, чем при нормальной нагрузке, время все еще приемлемо для онлайн-службы в реальном времени.

действие количество тх среднее время передачи стандартное время Время 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 и расходы

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

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 года.

Обратите внимание, что Титан — это всего лишь одна часть большой головоломки. Titan обслуживает OLTP- аспект обработки графиков. К середине осени 2012 года Aurelius выпустит коллекцию графических технологий OLAP для поддержки глобальной обработки и аналитики графов. Все технологии Aurelius будут интегрироваться друг с другом, а также с набором графических технологий BSD с открытым исходным кодом, предоставляемых TinkerPop . Стоя на плечах гигантов (например, Cassandra, TinkerPop, Amazon EC2), возможны большие скачки в прикладной теории графов и сетевых науках .

Рекомендации

Квак, Х., Ли, С., Парк, Х., Мун, С. « Что такое Твиттер, социальная сеть или средства массовой информации? «World Wide Web Conference, 2010.

Родригес, М.А., Бройчелер, М., « Титан: рост больших графовых данных », публичная лекция в Jive Software, Пало-Альто, 2012.

Broecheler, M., LaRocque, D., Rodriguez, MA, « Титан: масштабируемая база данных распределенных графов », GraphLab Workshop 2012, Сан-Франциско, 2012.