Конфигурационный файл Nebula в формате JSON
Nebula использует конфигурационные файлы в формате JSON, которые отличаются хорошей читаемостью, расширяемостью и удобством обслуживания. Кроме того, они легко управляются через центр удалённого управления.
Выбор формата JSON для конфигурационных файлов также важен, потому что библиотека CJsonObject делает использование JSON таким же удобным, как использование собственных структур данных в C++.
Прежде чем обсуждать конфигурационный файл, необходимо определить несколько понятий:
Каждый запущенный сервер называется узлом (node). Каждый узел регистрируется на одном или нескольких маяках (beacon) или группе маяков с основным и резервным режимами работы. Все узлы, управляемые одним или несколькими маяками, образуют кластер Nebula. Доступ к кластеру Nebula осуществляется через один или несколько узлов с тем же типом узла, и эти узлы называются узлами доступа.
Проект Nebula предоставляет шаблон для конфигурационного файла. Каждый проект, основанный на Nebula (например, NebulaBeacon, NebulaInterface и т. д.), имеет свой собственный конфигурационный файл. Конфигурационные файлы Nebula можно рассматривать как класс, а конфигурационные файлы конкретных проектов — как объекты этого класса. Если вы разрабатываете новый сервер на основе Nebula, вы можете создать собственный конфигурационный файл для этого сервера.
Пример конфигурационного файла:
{
"//node_type": "Тип узла: ACCESS, LOGIC, PROXY, CENTER и т.д., определяется бизнес-уровнем",
"node_type": "ACCESS",
"//host": "IP-адрес для внутренней связи между серверами (Server to Server)",
"host": "192.168.18.81",
"//port": "Порт для внутренней связи между серверами",
"port": 9987,
"//access_host": "Внешний IP-адрес для предоставления услуг (Client to Server), не требуется, если услуги не предоставляются",
"access_host": "192.168.18.81",
"//access_port": "Порт для предоставления внешних услуг",
"access_port": 9988,
"//access_codec": "Кодек для доступа, в настоящее время поддерживает CODEC_PRIVATE(4),CODEC_HTTP(3),CODEC_PROTOBUF(2)",
"access_codec": 4,
"gateway": "113.102.157.188",
"gateway_port": 9988,
"//server_name": "Асинхронный событийно-управляемый сервер",
"server_name": "AsyncServer",
"//worker_num": "Количество процессов",
"worker_num": 10,
"//worker_capacity": "Максимальная рабочая нагрузка для дочерних процессов",
"worker_capacity": 1000000,
"//cpu_affinity":"Привязка процессора (привязка процессора)",
"cpu_affinity":false,
"//config_path": "Путь к файлу конфигурации (относительный путь)",
"config_path": "conf/",
"//log_path": "Путь к файлам журнала (относительный путь)",
"log_path": "log/",
"//max_log_file_num": "Максимальное количество файлов журнала для ротации",
"max_log_file_num": 5,
"//max_log_file_size": "Ограничение размера отдельного файла журнала",
"max_log_file_size": 20480000,
"always_flush_log":true,
"log_levels": { "FATAL": 0, "CRITICAL": 1, "ERROR": 2, "NOTICE": 3, "WARNING": 4, "INFO": 5, "DEBUG": 6, "TRACE": 7 },
"log_level": 7,
"net_log_level": 6,
"//permission": "Ограничения. addr_permit ограничивает количество подключений от одного IP за период времени; uin_permit ограничивает количество сообщений, отправляемых каждым пользователем за единицу времени.",
"permission": {
"addr_permit": { "stat_interval": 60.0, "permit_num": 1000000000 },
"uin_permit": { "stat_interval": 60.0, "permit_num": 600000000 }
},
"//connection_protection": "Время защиты соединения (в секундах), устанавливается равным этому значению при создании нового соединения, изменяется на io_timeout после получения первого пакета данных",
"connection_protection": 0.0,
"//io_timeout": "Тайм-аут сетевого ввода-вывода (соединения) (в секундах) с точностью до одной цифры после десятичной точки",
"io_timeout": 300.0,
"//step_timeout": "Тайм-аут шага (в секундах) с точностью до одной цифры после десятичной точки",
"step_timeout": 1.5,
"boot_load": {
"cmd": [
"//step_timeout": "Тайм-аут шага (в секундах) с точностью до одной цифры после десятичной точки",
"step_timeout": 1.5,
"log_levels": { "FATAL": 0, "CRITICAL": 1, "ERROR": 2, "NOTICE": 3, "WARNING": 4, "INFO": 5, "DEBUG": 6, "TRACE": 7 },
"log_level": 7,
"net_log_level": 6,
"//with_ssl": "Конфигурация SSL (может быть пустой), путь относительно ${WorkPath}, файлы открытого ключа и закрытого ключа в формате PEM",
"with_ssl": {
"config_path": "conf/ssl",
"cert_file": "20180623143147.pem",
"key_file": "20180623143147.key"
},
"//data_report": "Интервал времени для отправки данных, данные не отправляются, когда нет статистики",
"data_report": 60,
"//refresh_interval": "Интервал обновления конфигурации сервера, проверка и загрузка плагинов динамических библиотек (период времени зависит от загруженности сервера)",
"refresh_interval": 60,
"load_config":{
"manager":{
},
"worker":{
"boot_load": {
"cmd": [
{ "cmd": 1001, "class": "neb::CmdHello" },
{ "cmd": 1003, "class": "neb::CmdDbAgent" }
],
"module": [
{ "path": "neb/switch", "class": "neb::ModuleSwitch" },
{ "path": "neb/hello", "class": "neb::ModuleHello" }
]
}
}
}
}
}
}
В этом примере конфигурационного файла представлены различные параметры, такие как тип узла, IP-адреса, порты, настройки безопасности и другие параметры конфигурации. Worker процессы, каждый узел состоит из одного Manager процесса и нескольких Worker процессов. Обычно, если на машине развёрнут только один сервис Nebula и он используется в основном для этого сервиса, то для более эффективного использования ресурсов машины worker_num настраивают равным количеству ядер процессора.
В данном случае под пользовательской конфигурацией понимается не конфигурация, определённая независимо для бизнес-целей, а конфигурация, встроенная в файл конфигурации фреймворка Nebula в виде JSON с ключом «custom».
Преимущество такой конфигурации заключается в том, что все классы бизнес-кода являются производными от класса Actor. Если пользовательская конфигурация встроена в файл конфигурации фреймворка, то для получения содержимого конфигурации достаточно вызвать метод GetCustomConf(). Этот метод является методом класса Actor и позволяет считывать конфигурацию так же легко, как обращаться к членам класса.
Хотя встраивание пользовательской конфигурации в файл конфигурации Nebula очень удобно, этим не следует злоупотреблять. Помещение всей конфигурации в этот файл может привести к его значительному увеличению, что ухудшит читаемость и удобство сопровождения.
Рекомендуется помещать в файл конфигурации только те настройки, которые используются многими бизнес-функциями или применяются очень часто. Остальные настройки, используемые лишь несколькими модулями или применяемые редко, либо имеющие большой объём, следует вынести в отдельные файлы пользовательских настроек. Конфигурацию в формате, отличном от JSON, также следует выносить в отдельный файл.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )