Лицензия: MIT.
Gitter: https://gitter.im/lars_cpp/community.
Подробная инструкция Lars: https://www.jianshu.com/p/ca3849716cd7.
Git: https://github.com/aceld/Lars.
Git: https://gitee.com/Aceld/Lars.
Операционная система: Ubuntu 18.04.
Protobuf: libprotoc версии 3.6.1 или выше.
MySQL: версия MySQL Ver 14.14 Distrib 5.7.27 или выше.
G++: версия 7.4.0 или выше (Ubuntu 7.4.0-1ubuntu1~18.04.1).
Lars — это простая, удобная в использовании и высокопроизводительная система для удалённого вызова, управления, балансировки нагрузки и планирования сервисов.
Высокая производительность: кластер поддерживает миллионы одновременных подключений, удовлетворяя потребности пользователей в доступе к большим объёмам данных.
Высокая доступность: используется кластеризация для обеспечения отказоустойчивости и бесшовного переключения при сбоях.
Гибкость масштабирования: автоматическое распределение и интеграция с эластичным масштабированием позволяют гибко расширять возможности внешних сервисов, используемых пользователями.
Простота использования: быстрое развёртывание, мгновенное включение, поддержка различных протоколов, алгоритмов планирования и возможность эффективного управления и настройки стратегий распределения сервисов.
(1) Крупные порталы:
Для крупных порталов с высоким трафиком Lars обеспечивает равномерное распределение трафика между несколькими серверными облачными серверами, обеспечивая быструю и стабильную работу бизнес-процессов.
(2) Межзональное аварийное восстановление:
Lars позволяет распределять трафик между зонами доступности, создавая систему аварийного восстановления в реальном времени, что соответствует требованиям высокой доступности для предприятий, таких как банки и торговые компании.
(3) Электронная коммерция и распродажи:
В электронной коммерции Lars автоматически создаёт новые серверы в периоды пиковой нагрузки, распределяя трафик между ними, что помогает снизить нагрузку на систему во время распродаж.
Для каждого отдела бэкенда сервис можно представить как комбинацию команды (modid + cmdid), которая называется модулем. Каждый модуль может иметь несколько узлов, и набор адресов всех узлов модуля называется маршрутом.
modid — идентификатор бизнес-категории, например «связанные с прямой трансляцией».
cmdid — идентификатор конкретного сервиса, например «получение списка прямых трансляций».
Бизнес-код использует modid и cmdid для вызова соответствующих удалённых сервисов в системе Lars, которая включает DNS-сервис, службу отчётов и LoadBalance Agent, развёрнутый на каждом сервере. Бизнес-код взаимодействует с системой Lars через API.
API получает адреса узлов и передаёт результаты вызовов узлов в систему Lars в соответствии с потребностями бизнеса. API предоставляет интерфейсы для C++, Golang (в разработке) и Python (в разработке).
LoadBalance Agent работает на каждом сервере и отвечает за предоставление услуг узла, передачу состояния узла, управление маршрутами и планирование нагрузки.
DNS-сервис работает на одном сервере (также может быть развёрнут с использованием LVS для обеспечения высокой доступности) и отвечает за преобразование modid и cmdid в маршруты.
Служба отчётов работает на том же сервере, что и DNS-служба, и собирает информацию о вызовах узлов для каждой категории modid и cmdid. Эта информация может использоваться для мониторинга и оповещения.
Данные modid и cmdid управляются MySQL. SQL-скрипты находятся в каталоге common/sql. Регистрация, удаление и изменение маршрутов могут осуществляться через веб-интерфейс.
Каждый сервер (пунктирная линия) развёртывает один экземпляр LoadBalance Agent и несколько бизнес-сервисов.
Разработчики регистрируют, удаляют и изменяют маршруты на веб-сервере. Информация сохраняется в MySQL.
На каждом сервере бизнес-модуль запрашивает адреса удалённых служб, используя свой уникальный идентификатор modid+cmdid, и затем может взаимодействовать с этими службами. Бизнес-модули также передают результаты вызовов удалённых служб в LoadBalance Agent.
LoadBalance Agent отвечает за управление маршрутами, планирование нагрузки и периодическую передачу информации о результатах вызовов в DNS-службу.
DNS-служба отслеживает изменения в MySQL и периодически обновляет информацию о маршрутах.
Служба отчётов сохраняет результаты вызовов для каждой категории modid и cmdid и отправляет их обратно в MySQL для просмотра и оповещения через веб-сервер.
(1) Компиляция и установка:
Клонируйте репозиторий: git clone https://github.com/aceld/Lars.git.
Перейдите в каталог Lars и выполните команду make.
Обратите внимание: Lars зависит от библиотеки protobuf, поэтому необходимо установить среду protobuf. Если её нет, следуйте инструкциям по установке, указанным в статье.
(2) Настройка базы данных:
(3) Конфигурационные файлы подсистем:
port = 7779
[mysql] db_host = 127.0.0.1 db_port = 3306 db_user = root db_passwd = Your PassWord db_name = lars_dns
[repoter] db_thread_cnt = 3
lars dns
./Lars/lars_dns/conf/lars_dns.conf
[reactor]
maxConn = 1024
threadNum = 5
ip = 127.0.0.1
port = 7778
[mysql]
db_host = 127.0.0.1
db_port = 3306
db_user = root
db_passwd = **Your PassWord**
db_name = lars_dns
lars LoadBalance Agent
./Lars/lars_loadbalance_agent/conf/lars_lb_agent.conf
[reporter]
ip = 127.0.0.1
port = 7779
[dnsserver]
ip = 127.0.0.1
port = 7778
[loadbalance]
;经过若干次获取请求host节点后,试探选择一次overload过载节点
probe_num=10
;初始化host_info主机信息访问成功的个数,防止刚启动时少量失败就认为过载
init_succ_cnt=180
;当idle节点切换至over_load时的初始化失败次数,主要为了累计一定成功次数才能切换会idle
init_err_cnt=5
;当idle节点失败率高于此值,节点变overload状态
err_rate=0.1
;当overload节点成功率高于此值,节点变成idle状态
succ_rate=0.5
;当idle节点连续失败次数超过此值,节点变成overload状态
contin_err_limit=15
;当overload节点连续成功次数超过此值, 节点变成idle状态
contin_succ_limit=15
;整个窗口的真实失败率阈值
window_err_rate=0.7
;对于某个modid/cmdid下的某个idle状态的host,需要清理一次负载信息的周期
idle_timeout=15
;对于某个modid/cmdid/下的某个overload状态的host,在过载队列等待的最大时间
overload_timeout=15
;对于每个NEW状态的modid/cmdid,多久更新一下本地路由,秒
update_timeout=15
启动 lars reporter service
cd ./Lars
./run_lars reporter
启动 lars dns service
cd ./Lars
./run_lars dns
Запуск lars lbagent service
cd ./Lars
./run_lars lbagent
Запуск lars web service
cd ./Lars
./run_lars web
打开浏览器,输入web 服务的ip地址+端口号
配置主机
Просмотр всех главных конфигураций
Запустить симулятор тестирования
cd ./Lars
./run_lars test simulator 1 1
Другие инструменты тестирования
cd ./Lars
./run_lars help
======= Запуск подсистемы =======
Использование ./run_lars [репортер | днс | lbagent | веб | тест]
======= Инструменты тестирования =======
Использование ./run_lars тест gethost ModID CmdID
Использование ./run_lars тест getroute ModID CmdID
Использование ./run_lars тест report ModID CmdID IP порт 0 | 1 --- 0: SUCC, 1: OVERLOAD
Использование ./run_lars тест симулятор ModID CmdID [errRate (0-10)] [queryCnt (0-999999)]
Использование ./run_lars тест qps ThreadNum
Использование ./run_lars пример теста ModID CmdID
Хост 1
Количество процессоров: 2, память: 2 ГБ, система: Ubuntu18.04 виртуальная машина
Количество потоков | QPS |
---|---|
1 | 0,5 Вт / с |
2 | 2,2 Вт / с |
10 | 5,5 Вт / с |
100 | 5,3 Вт / с |
Хост 2
Процессор: 24, память: 128 ГБ, система: облачный сервер
Количество потоков | QPS |
---|---|
1 | 8,36 Вт / с |
3 | 28,06 Вт / с |
5 | 55,18 Вт / с |
8 | 56,74 Вт / с |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )