Постановка задачи: у клиента понадобилось повысить размеры таблицы conntrack и таблицы маршрутов в ядре для повышения производительности. При этом, текущие значения уже регулируются скриптами. Решение: В продукт добавляются 2 опции с размерами:
firewall['ipv4.route.max_size.widget']='inputbox "Максимальный размер кеша IPv4 маршрутов" ""' firewall['ipv4.route.max_size']='2621440' firewall['netfilter.nf_conntrack_max.widget']='inputbox "Максимальное количество conntrack" ""' firewall['netfilter.nf_conntrack_max']='1048576'
В скриптах константа меняется на значение параметра в конфиге.
Другой пример: тест доступности DNS-серверов не успевал получить ответ за timeout по-умолчанию. Решили ввести опцию корректировки:
app['dns_timeout']='1'
Ошибка: Опции продукта предназначены для решения проблем клиентов, а не для экспериментов с настройками параметров и тонкого тюнинга. Какой параметр указать - решает наша система сама, причем несколько параметров в комплексе, рассинхронизация параметров может привести к нестабильности системы. Клиент не должен выбирать системные параметры - это зона ответственности продукта. А у клиента должна быть большая кнопка «Сделать хорошо», причем желательно автоматическая.
Другая, менее очевидная проблема: гибкая конфигурация на клиенте, либо использование кастомных hook-файлов со спец.настройками на клиентах приводит к тому, что экспертиза, которую получают инженеры тех. поддержки или разработчики, отлаживая клиенсткую систему, остаются у клиента и не попадают в продукт, не делают продукт лучше, не развивают его. Даже внутри компании из-за этого данная, уже решенная проблема, может решаться несколько раз разными людьми, из-за того, что экспертиза недостаточно хорошо распространилась.
Как нужно: Допустим: разработчик нашел проблему, поняв что у некоторых клиентов нужно повышать параметры буфера из-за высокой сетевой нагрузки. Тогда: если изменения подходят всем клиентам - добавляем изменения без опций, если некоторым - делаем 1 опцию типа boolean, которую называем одноименно с проблемой, которую она решает (желательно в продуктовом формате): «Включить оптимизацию для большого количества трафика (более 10 гигабит/сек)». Если опция еще не отлажена, т.е. не собрано достаточно примеров что эта опция хорошо работает на разных конфигурациях, можно указать что опция экспериментальная. Если это спец.конфигурация для нагруженных инсталляций, потом к ней могут привязываться другие изменения.
Что нужно было сделать с DNS: нужно сделать опцию «DNS сервера могут долго отвечать», если нам нужно это контроллировать или просто поднять таймаут в самом скрипте без опции.
~~OWNERAPPROVE~~
Прочитал правила разработки 2018-12-11 непродуктовые опции в конфигурации |