У меня есть C-сервер (обработчик фида данных), который может отправлять миллионы крошечных сообщений в секунду через несколько тысяч долгоживущих процессов Erlang. За один день некоторые из этих процессов получат несколько тысяч сообщений, в то время как другие получат десятки миллионов . Мои интересы тройные:
для минимизации задержки - сокращение времени, с которого сервер C отправляет сообщение, до того момента, когда процесс Erlang его получает. Можно проделать большую работу над вещами, которые происходят за до сообщения или после сообщения, но этот вопрос касается связи между C и Erlang.
для увеличения пропускной способности - чем быстрее, тем лучше; если сервер C может отправлять на 10% больше сообщений в секунду во всех процессах Erlang, это большой выигрыш.
для обеспечения максимальной предсказуемости - если задержка или пропускная способность могут внезапно ухудшиться на несколько порядков из-за чего-то вроде перегрузки сети, это большой сбой.
Как я могу отправлять сообщения из программы на C процессу Erlang высокопроизводительным способом? Какие приемы я могу сделать, чтобы минимизировать задержки, максимизировать пропускную способность или сделать связь между Erland и C более предсказуемой? Есть много аспектов этого. Мы можем выбрать протокол для связи между программой Erlang и другими программами. Мы можем использовать Distributed Erlang с «C-узлом» для связи между Erlang и C. Мы можем использовать порты или связанные драйверы.