Я пытаюсь улучшить производительность записи между клиентской программой C и одним узлом InfluxDB .
В настоящее время моя запись составляет 2,526 КБ записи в секунду, как показано на скриншоте ниже.:
Моя программа на C представляет собой бесконечный цикл, который генерирует HTTP-запросы POST с использованием libcurl .
Вот код, отвечающий за POST-запросы:
int configure_curl_easy_operation(CURL *curl_easy_handler)
{
// using this doc page https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
// behavior options
curl_easy_setopt(curl_easy_handler, CURLOPT_VERBOSE, 1L);
// callback options
// error options
// network options
//curl_easy_setopt(curl_easy_handler, CURLOPT_URL, "http://localhost:8086/ping"); an old test
curl_easy_setopt(curl_easy_handler, CURLOPT_URL, "http://localhost:8086/write?db=XXX_metrics");
curl_easy_setopt(curl_easy_handler, CURLOPT_HTTP_CONTENT_DECODING, 0L);
curl_easy_setopt(curl_easy_handler, CURLOPT_TRANSFER_ENCODING, 0L);
//curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPHEADER, )// work here
curl_easy_setopt(curl_easy_handler, CURLOPT_PROTOCOLS, CURLPROTO_HTTP);
curl_easy_setopt(curl_easy_handler, CURLOPT_POST, 1L);
curl_easy_setopt(curl_easy_handler, CURLOPT_REDIR_PROTOCOLS, 0L);
curl_easy_setopt(curl_easy_handler, CURLOPT_DEFAULT_PROTOCOL, "http");
curl_easy_setopt(curl_easy_handler, CURLOPT_FOLLOWLOCATION, 0L);
//curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPHEADER, NULL);
// NAMES and PASSWORDS OPTIONS
// HTTP OPTIONS
// curl_easy_setopt(curl_easy_handler, CURLOPT_HTTPGET, 0L);
// SMTP OPTIONS
// TFTP OPTIONS
// FTP OPTIONS
// RTSP OPTIONS
// PROTOCOL OPTIONS
if (curl_easy_setopt(curl_easy_handler, CURLOPT_POSTFIELDS, "metrics value0=0,value1=872323,value2=928323,value3=238233,value4=3982332,value5=209233,value6=8732632,value7=4342421,value8=091092744,value9=230944\nmetrics value10=0,value11=872323,value12=928323,value13=238233,value14=3982332,value15=209233,value16=8732632,value17=4342421,value18=091092744,value19=230944") != CURLE_OK)
return (1);
//curl_easy_setopt(curl_easy_handler, CURLOPT_MIMEPOST, mime);
// CONNECTION OPTIONS
// SSL and SECURITY OPTIONS
// SSH OPTIONS
// OTHER OPTIONS
// TELNET OPTIONS
return (0);
}
int do_things(t_contexts_handlers *ctxts_handlers)
{
while (g_running)
{
if ((configure_curl_easy_operation(ctxts_handlers->curl.curl_easy_handler)) != 0)
{
fprintf(stderr, "Stop running after an error occured before making a curl operation\n");
g_running = 0;
continue;
}
if (curl_easy_perform(ctxts_handlers->curl.curl_easy_handler) != CURLE_OK)
fprintf(stderr, "an error occured\n");
}
return (0);
}
- Я не использую потоки (пока)
- Я использую простой API (пока)
- Я изменил некоторые параметры конфигурации (но они не улучшили производительность):
access-log-path : "/dev/null"
pprof-enabled : false
unix-socket-enabled : false
[ifql] enabled : false
[subscriber] enabled : false
У вас есть какие-нибудь идеи по улучшению производительности?
РЕДАКТИРОВАТЬ: Как вы можете видеть, первый скриншот не тот, который соответствует C-код выше.Вот правильный: