#mysql #linux #shell
#mysql #linux #оболочка
Вопрос:
Серверу Asterisk необходимо запустить внешний скрипт («AGI», если вы хотите знать), который запрашивает базу данных MySQL. Этот скрипт будет выполняться часто, вероятно, около 50-100 раз в минуту, и он мало что делает (около 10-15 ВЫБОРОК, некоторые вычисления результатов и повторное отображение результата в Asterisk).
Если скрипт является сценарием оболочки PHP, во время нагрузочного тестирования он использует много ресурсов процессора (предположительно, поскольку он загружает всю библиотеку php при каждом запуске).
С другой стороны, если сценарий является сценарием оболочки bash, его выполнение занимает много времени, потому что bash не может (легко) поддерживать одно соединение с MySQL, а выполнение 10-15 подключений / отключений к удаленному серверу с согласованием SSL занимает несколько десятых секунды, поэтому сценарий в целом можетв результате занимает 3-4 секунды.
Какой язык лучше выбрать для этой задачи? Что-нибудь с низкими накладными расходами, но с простой поддержкой MySQL, предпочтительно интерпретируемое, а не компилируемое.
Комментарии:
1. синхронизированы ли 60-100 в минуту?
2. Будут случаи, когда один экземпляр скрипта все еще будет запущен, в то время как второй экземпляр скрипта должен запуститься, если это то, что вы спрашиваете.
3. Я имею в виду, блокирует ли он. В конце попробуйте поделиться с сообществом тем, что вы придумали, и его профилированием
Ответ №1:
Любой язык, для которого вы запускаете новый процесс 50-100 раз в минуту, имеет некоторые накладные расходы. Накладные расходы возникают просто для запуска процесса, независимо от того, на каком языке написана программа.
В идеале вы бы избежали накладных расходов на процесс, вместо этого отправив запрос в службу. Но похоже, что вам нужно использовать интерфейс AGI, поэтому вы не можете избежать этих накладных расходов.
Все языки сценариев (PHP / Ruby / Python / Perl) имеют интерпретаторы, которые необходимо запустить.
Даже в Java есть JVM во время выполнения, которая должна запускаться в каждом процессе, так что это пример скомпилированного языка, у которого все еще есть накладные расходы.
Скомпилированный язык, такой как C, C или Go, вероятно, является хорошим выбором для минимизации накладных расходов на языковую среду выполнения. Все они имеют программные интерфейсы для MySQL.