Дао Хуи http://weibo.com/taohui3
Английская версия
Концепция дизайна
Lushan был легкой базой данных клавиш в версии 1.0. Используя Lushan, вы можете легко построить кластер на нескольких машинах, таких как Memcached. Lushan 2.0 также является легкой структурой применения, которая может установить несколько общих библиотек, так что у вас есть возможность получить доступ к данным и вычислять в одном процессе одновременно, что позволяет беспрецедентно легко писать большие данные и высокопроизводительные услуги. Особенно подходит для бизнес -сценариев для интернет -рекомендаций, рекламы и поиска. Lushan использовался в Sina Weibo Рекомендации и рекламного бизнеса в течение многих лет.
Примерно в 2013 году я разрабатывал рекомендацию «пропущенной Вейбо». Мне нужно предоставить несколько хранилищ данных в Интернете для экспериментов с различными алгоритмами, а также их онлайн и тестовые версии. Это требует развертывания нескольких систем. Этот подход слишком низкий. Итак, в одну выходные я разработал Lushan, который может освободить вас от этих вещей, очень круто.
Это правда, что с тех пор Lushan стал инфраструктурой для рекомендаций Weibo и рекламного бизнеса. Теперь есть два кластера, работающие и поддержание, с 12 машинами соответственно, обслуживающие данные онлайн -запроса от T, с более чем 1 миллиардами запросов в день.
Когда я закончил разработку первой версии Lushan, у меня всегда было желание позволить Лушану одновременно установить общую библиотеку. Но я не решил долгое время, потому что я считаю, что рамки должны иметь свое собственное позиционирование, а другая заключается в том, что легко измененная часть должна быть отделена от стабильной части архитектуры. Тем не менее, в 2015 году при разработке рекламных объявлений Weibo данные интересов пользователя, реляционные данные и данные о оценках CTR были легко отсортированы через Hadoop и хранятся в Lushan, в настоящее время можно записано два модуля для реализации функций таргетирования и предсказания CTR, а производительность очень сильна. Поэтому я отказался от своей оригинальной идеи и внедрил вторую версию, сделав функцию Lushan еще более мощной. В реальных приложениях вы все еще можете использовать Lushan только в качестве базы данных ключей или развертывания кластеров Lushan, которые предоставляют только данные и кластеры, которые предоставляют вычисления одновременно отдельно.
В справочнике примеров была предоставлена библиотека образцов и установите ее в соответствии со следующими шагами:
Выход - это значение, соответствующее ключу 123456.
Объясните каждый шаг:
При использовании в качестве вычислительной структуры Lushan поддерживает два протокола, аналогично одностроенному протоколу «URL» http, и протокол, аналогичный посте HTTP, который указывает длину отправки, который также поддерживает отправку бинарных данных. Два примера приведены в каталоге модулей: LProxy и Lecho, которые демонстрируют эти два протокола соответственно.
Пример, для запрошенного ключа, сначала Query Redis и верните напрямую, если есть Redis, и запросите локальные установленные библиотеки, если есть Redis. В простых случаях этот пример также может использоваться в производственных средах.
Следуйте шагам ниже:
Создайте текстовый файл x.txt, введите следующие две строки, первая вкладка - это ключ, и следующее - значение следующим образом:
168 hello lushan
187 line 2
Используйте Lushan_line_maker в инструментах, чтобы преобразовать его в формат файла Lushan.
Запустите Redis на машине, SET DBNO составляет 1, а затем добавьте запись, клавиша - 168, значение - "Hello Redis"
Выполните Make в каталоге Hproxy, поместите сгенерированный каталог hmodule.so и hmodule.conf в Hmod/15/1.0.0 и измените хост и порт в hmodule.conf для развертывания IP и порта Redis для вас.
осуществлять:
echo -ne "hmod_open /mnt/lushan/hmod/15/1.0.0/ 15rn" | nc 127.0.0.1 9999
Если открыто возвращено, он будет успешно включен, в противном случае проверьте, находится ли Libhiredis в LD_Library_Path.
Запрос:
echo -ne "get m15?k=1-168rn" | nc 127.0.0.1 9999
VALUE m15?k=1-168 0 11
hello redis
END
echo -ne "get m15?k=1-187rn" | nc 127.0.0.1 9999
VALUE m15?k=1-187 0 6
line 2
END
Затем, как мы и ожидаем, если Redis существует, результат REDIS будет возвращен, в противном случае данные Lushan будут запрошены.
Закрыть модуль:
echo -ne "hmod_close 15rn" | nc 127.0.0.1 9999
Если все ваши модули не имеют глобальных переменных, вы можете использовать HMOD_OPEN для непосредственной замены старой библиотеки, чтобы не было потери в онлайн -сервисах.
Пример Lecho похож, просто возвращает запрошенные вами данные.
HDICT - это библиотечный формат, установленный Lushan. Он очень прост. В каталоге HDICT_XXXX есть два необходимых файла. Первое содержит ваши данные, а последнее представляет собой отображение клавиш с смещением позиции значения в файле DAT. определение:
typedef struct {
uint64_t key;
uint64_t pos;
} idx_t;
Ключ-64-битный длинный скелет без знака, который не включает номер библиотеки. POS состоит из длины значения и его смещения в файле DAT:
pos = (length << 40) | offset;
Файл IDX должен быть организован в порядке возрастания IDX_T.Key. Файлы DAT не требуются. Вы можете либо создать индекс в файле DAT, который уже существует, либо генерировать индекс одновременно при выводе файла.
Заказанные файлы очень распространены в вычислительных моделях MAP-Reduce. Вы можете указать формат выходного файла в Hadoop для создания библиотеки в формате HDICT. Например, следующая команда:
job.setOutputFormat(LushanFileOutputFormat.class);
Существует три команды для получения статистических данных о состоянии: статистика, информация и hmod_info. Первые выводят глобальные данные, в то время как последние два выхода данных для каждой библиотеки и каждого модуля.
echo -n -e "statsrn" | nc 127.0.0.1 9999
STAT pid 13810
STAT uptime 1435075686
STAT curr_connections 1411
STAT connection_structures 4061
STAT cmd_get 2099151223
STAT get_hits 3950240117
STAT get_misses 2443878402
STAT threads 16
STAT timeouts 117
STAT waiting_requests 0
STAT ialloc_failed 0
END
echo -n -e "inforn" | nc 127.0.0.1 9999
id label state ref num_qry idx_num open_time path
----------------------------------------------------------------
1 interest_CF_trends OPEN 0 139922 18419392 150824-042654 /mnt/lushan/hdb/12/hdict_20150711204737
2 interest_CF_trends OPEN 0 190508 26175141 150824-050246 /mnt/lushan/hdb/12/hdict_20150711204737
echo -ne "hmod_inforn" | nc 127.0.0.1 9999
id label state ref num_qry open_time path
----------------------------------------------------------------
0 OPEN 0 267130787 180419-174502 /mnt/lushan/hmod/0
5 OPEN 0 336829974 180419-174503 /mnt/lushan/hmod/5
Вы можете использовать Lushan.php для создания страниц статистики графической статистики.
Если у вас есть опыт работы с MySQL, будет легко построить простой кластер. Во -первых, вы хотите разделить свои данные на группы, как правило, кратное число вашей машины. Затем подумайте, сколько наборов услуг вы хотите развернуть, обычно два набора распределенных в разных IDC. Затем следуйте правилам группировки, чтобы запросить ваши данные через клиента Memcached.
Хотя это очень просто, Lushan по -прежнему обеспечивает простую структуру, которая поможет вам справиться с некоторыми деталями передачи данных.
Протокол Memcached относительно прост. Команда Set Class поддерживает сложные запросы, но поддерживает только относительно простые результаты. Lushan сделал два изменения в этом.
«Ключ» запроса GET может превышать предел 250 байтов. Настройки при отправке:
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_VERIFY_KEY, 0);
Таким образом, нет проблем с отправкой через либлемакшированную. При возврате результата вам необходимо вернуть ключ в пределах 250 байтов. Пока вы читаете в соответствии с усеченным ключом при чтении, а усеченный ключ не конфликтует.
Использование получает поддержку отправки нескольких линий запросов. Обычно простой запрос на получение достаточно, но если вы хотите отправить запрос, похожий на JSON, вам нужен более сложный протокол. Lushan повторно модифицировал протокол GET и изменил его до того же протокола, что и установлен. При использовании клиента нажмите вышеуказанные настройки, чтобы проверить законность клавиши, а затем отправьте пакет в следующем формате:
gets key 0 0 value_lenrn
valuern
Просто принесите ключ в результате возврата. Инкапсуляция сделана в Lutil.h и просто вызовите hrequest_pack.
В статистике есть больше тайм -аутов, или вы записываете больше запросов от клиента до времени, больше или равны вашей конфигурации.
Есть много файлов HDICT, которые не были переданы по определенному количеству загрузок, что обычно означает, что ваш скрипт передачи будет прерван до его передачи.