1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Aceld-Lars

Клонировать/Скачать
README.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 04:42 ae03ab3

Система разработки и управления удалёнными вызовами, балансировки нагрузки и планирования сервисов Lars

Авторы:

  • Лю Даньбин (@aceld)
  • Ван Юнцзинь (@MrWnag)

Лицензия: MIT.

Gitter: https://gitter.im/lars_cpp/community.

Подробная инструкция Lars: https://www.jianshu.com/p/ca3849716cd7.

Github

Git: https://github.com/aceld/Lars.

码云 (Gitee)

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).

Документация по разработке и учебные пособия:

Обложка: https://upload-images.jianshu.io/upload_images/11093205-5f0b2c8f17dee274.png?imageMogr2/auto-orient/strip|imageView2/2/w/1010/format/webp.

Обзор:

Lars — это простая, удобная в использовании и высокопроизводительная система для удалённого вызова, управления, балансировки нагрузки и планирования сервисов.

Преимущества:
  1. Высокая производительность: кластер поддерживает миллионы одновременных подключений, удовлетворяя потребности пользователей в доступе к большим объёмам данных.

  2. Высокая доступность: используется кластеризация для обеспечения отказоустойчивости и бесшовного переключения при сбоях.

  3. Гибкость масштабирования: автоматическое распределение и интеграция с эластичным масштабированием позволяют гибко расширять возможности внешних сервисов, используемых пользователями.

  4. Простота использования: быстрое развёртывание, мгновенное включение, поддержка различных протоколов, алгоритмов планирования и возможность эффективного управления и настройки стратегий распределения сервисов.

Сценарии применения:

(1) Крупные порталы:

  • Для крупных порталов с высоким трафиком Lars обеспечивает равномерное распределение трафика между несколькими серверными облачными серверами, обеспечивая быструю и стабильную работу бизнес-процессов.

    • Преимущества: гибкость масштабирования позволяет автоматически расширять возможности распределения нагрузки в зависимости от фактического трафика, а высокая производительность обеспечивает поддержку большого количества одновременных соединений.

(2) Межзональное аварийное восстановление:

  • Lars позволяет распределять трафик между зонами доступности, создавая систему аварийного восстановления в реальном времени, что соответствует требованиям высокой доступности для предприятий, таких как банки и торговые компании.

    • Преимущества: гибкость масштабирования позволяет автоматически расширять возможности распределения нагрузки в зависимости от фактического трафика, а межзональное аварийное восстановление обеспечивает бесперебойную работу системы.

(3) Электронная коммерция и распродажи:

  • В электронной коммерции Lars автоматически создаёт новые серверы в периоды пиковой нагрузки, распределяя трафик между ними, что помогает снизить нагрузку на систему во время распродаж.

    • Преимущества: эластичность масштабирования позволяет создавать или удалять серверы в режиме реального времени в соответствии с изменениями трафика, высокая доступность обеспечивает быстрое обнаружение и отключение неисправных серверов, а высокая производительность гарантирует поддержку большого количества одновременных подключений.

Общая архитектура системы 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) Настройка базы данных:

  • Создайте таблицы, выполнив команду source ./lars_dns.sql в MySQL после перехода в каталог base/sql.

(3) Конфигурационные файлы подсистем:

  • lars reporter: файл конфигурации находится в conf/lars_reporter.conf. 127.0.0.1

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

(4) 启动

启动 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

(5) Web管理端操作

打开浏览器,输入web 服务的ip地址+端口号 lars_web_login.png

配置主机 lars_web_add_host.png

Просмотр всех главных конфигураций lars_web_all_hosts.png

(6) Имитация эффекта тестирования

Запустить симулятор тестирования

    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

(7) Просмотр состояния вызова хоста через веб

lars_web_status.png

Пять, Lars QPS производительность тестирования

Хост 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Aceld-Lars.git
git@api.gitlife.ru:oschina-mirror/Aceld-Lars.git
oschina-mirror
Aceld-Lars
Aceld-Lars
master