Внимание!
Эта wiki об устаревших версиях
Документация к актуальной версии интеграции 1С и телефонии доступна по ссылке

Инструменты пользователя

Инструменты сайта


astpanel:optimization

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
astpanel:optimization [2019/08/05 08:24]
apor
astpanel:optimization [2019/12/16 11:11] (текущий)
apor [Настройка Nginx]
Строка 3: Строка 3:
 ===== Оптимизация запросов GetVar ===== ===== Оптимизация запросов GetVar =====
  
 +Для получения расширенных данных по телефонному звонку панель телефонии активно запрашивает информацию по каналам,​ существующим на телефонной станции. ​
 +
 +По умолчанию,​ панель телефонии пыталась обратиться через [[https://​wiki.asterisk.org/​wiki/​x/​aIFJ | AJAM]] интерфейс к Aterisk. Но со временем стало ясно, что время ответа сервера увеличивается с увеличением количества одновременных звонков,​ и увеличением количества клиентских соединений со стороны 1С:​Предприятие. ​
 +
 +Следующим витком развития механизма было описание дополнительного HTTP сервиса,​ работа которого осуществляется в обход AJAM интерфейса. Для FreePBX это ресурс:​ **http://​127.0.0.1/​admin/​1c/​getvar/​index.php?​event=Ping**. Производительность этого варианта работы оказалась выше, но при крупных внедрениях и ее оказалось мало. Вот пример нагрузочного теста:
 +
 +<​code>​ab -c 400 -n 10000  '​http://​127.0.0.1/​admin/​1c/​getvar/​index.php?​event=Ping'​
 +This is ApacheBench,​ Version 2.3 <​$Revision:​ 1430300 $>
 +Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://​www.zeustech.net/​
 +Licensed to The Apache Software Foundation, http://​www.apache.org/​
 +
 +Benchmarking 127.0.0.1 (be patient)
 +Completed 1000 requests
 +Completed 2000 requests
 +Completed 3000 requests
 +Completed 4000 requests
 +Completed 5000 requests
 +Completed 6000 requests
 +Completed 7000 requests
 +Completed 8000 requests
 +Completed 9000 requests
 +
 +apr_pollset_poll:​ The timeout specified has expired (70007)
 +Total of 9985 requests completed</​code>​
 +
 +Видно, что сервер просто "​**упал**"​ и все 10000 запросов обработать не в состоянии,​ обработка 9985 запросов заняла более минуты. ​
 +
 +В текущей статье описывается вариант оптимизации,​ позволяющий многократно увиличить пропускную способность. В искуственном тесте **10000** запросов обрабатывается за **1.456** секунды. ​
 ==== Настройка Nginx ==== ==== Настройка Nginx ====
  
Строка 12: Строка 40:
 </​code>​ </​code>​
  
-Правим порт в конфиг **[[https://​files.miko.ru/​s/​8N4KeY805dN61m3 ​| /​etc/​nginx/​nginx.conf]]**. Параметр "​**listen**"​.+Правим порт в конфиг **[[https://​files.miko.ru/​s/​dnrxCWZG6hrjbXk ​| /​etc/​nginx/​nginx.conf]]**. Параметр "​**listen**"​.
 <​code>​ <​code>​
 +
 user  nginx; user  nginx;
 worker_processes ​ 1; worker_processes ​ 1;
Строка 19: Строка 48:
 pid        /​var/​run/​nginx.pid;​ pid        /​var/​run/​nginx.pid;​
 load_module modules/​ndk_http_module.so;​ load_module modules/​ndk_http_module.so;​
-load_module modules/​ngx_http_lua_module.so;​+load_module ​"modules/​ngx_http_lua_module.so";
  
 events { events {
Строка 31: Строка 60:
     keepalive_timeout ​ 65;     keepalive_timeout ​ 65;
  server {  server {
-     listen ​      89;+     listen ​      23600;
      server_name ​ localhost;      server_name ​ localhost;
   
      location /​pbxcore/​api/​miko_ajam/​getvar {      location /​pbxcore/​api/​miko_ajam/​getvar {
 +         default_type '​text/​plain';​
 +         content_by_lua_file /​etc/​nginx/​http_get_variables.lua;​
 +         keepalive_timeout 0;
 +     }
 +     location /​admin/​1c/​getvar/​index.php {
          default_type '​text/​plain';​          default_type '​text/​plain';​
          content_by_lua_file /​etc/​nginx/​http_get_variables.lua;​          content_by_lua_file /​etc/​nginx/​http_get_variables.lua;​
Строка 43: Строка 77:
 </​code>​ </​code>​
  
-Заливаем файл на сервер **[[https://​files.miko.ru/​s/​TPmJxuX5mZCZfRc ​| /​etc/​nginx/​http_get_variables.lua]]**+Заливаем файл на сервер **[[https://​files.miko.ru/​s/​fjCXEdFUd7fQ6La ​| /​etc/​nginx/​http_get_variables.lua]]**
 Устанавливаем права доступа к файлу Устанавливаем права доступа к файлу
 <​code>​chown nginx:nginx /​etc/​nginx/​http_get_variables.lua <​code>​chown nginx:nginx /​etc/​nginx/​http_get_variables.lua
Строка 61: Строка 95:
 Смотрим статус сервера:​ Смотрим статус сервера:​
 <​code>​systemctl status nginx.service</​code>​ <​code>​systemctl status nginx.service</​code>​
- 
 ==== Проверка работы сервиса ==== ==== Проверка работы сервиса ====
  
 Из локальной консоли выполните команду:​ Из локальной консоли выполните команду:​
-<​code>​curl -u admin:​secret '​http://​127.0.0.1:​89/​pbxcore/​api/​miko_ajam/​getvar?​event=Ping'</​code>​+<​code>​curl -u admin:​secret '​http://​127.0.0.1:​23600/​pbxcore/​api/​miko_ajam/​getvar?​event=Ping'</​code>​
 Должен вернуть:​ Должен вернуть:​
 <​code>​true</​code>​ <​code>​true</​code>​
Строка 72: Строка 105:
  
 Дополнительная проверка получения переменных канала:​ Дополнительная проверка получения переменных канала:​
-<​code>​curl -u admin:​secret '​http://​127.0.0.1:​89/​pbxcore/​api/​miko_ajam/​getvar?​channel=SIP/​201-00000009&​variables=CDR(linkedid),​EXTEN'</​code>​+<​code>​curl -u admin:​secret '​http://​127.0.0.1:​23600/​pbxcore/​api/​miko_ajam/​getvar?​channel=SIP/​201-00000009&​variables=CDR(linkedid),​EXTEN'</​code>​
 Должен венуть:​ Должен венуть:​
 <​code>​New Structure("​Result",​ true)</​code>​ <​code>​New Structure("​Result",​ true)</​code>​
Строка 78: Строка 111:
 <​code>​New Structure("​Result,​Msg",​ false, "AMI auth failed..."​)</​code>​ <​code>​New Structure("​Result,​Msg",​ false, "AMI auth failed..."​)</​code>​
  
-Не забудьте открыть на фаерволе порт ​89.+Тест производительности:​ 
 +<​code>​[root@freepbx ~]# ab -c 400 -n 10000 '​http://​127.0.0.1:​23600/​pbxcore/​api/​miko_ajam/​getvar?​event=Ping'​ 
 +This is ApacheBench,​ Version 2.3 <​$Revision:​ 1430300 $> 
 +Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://​www.zeustech.net/​ 
 +Licensed to The Apache Software Foundation, http://​www.apache.org/​ 
 + 
 +Benchmarking 127.0.0.1 (be patient) 
 +Completed 1000 requests 
 +Completed 2000 requests 
 +Completed 3000 requests 
 +Completed 4000 requests 
 +Completed 5000 requests 
 +Completed 6000 requests 
 +Completed 7000 requests 
 +Completed 8000 requests 
 +Completed 9000 requests 
 +Completed 10000 requests 
 +Finished 10000 requests 
 + 
 + 
 +Server Software: ​       nginx/​1.15.7 
 +Server Hostname: ​       127.0.0.1 
 +Server Port:            23600 
 + 
 +Document Path:          /​pbxcore/​api/​miko_ajam/​getvar?​event=Ping 
 +Document Length: ​       30 bytes 
 + 
 +Concurrency Level: ​     400 
 +Time taken for tests: ​  1.216 seconds 
 +Complete requests: ​     10000 
 +Failed requests: ​       0 
 +Write errors: ​          0 
 +Total transferred: ​     1730000 bytes 
 +HTML transferred: ​      ​300000 bytes 
 +Requests per second: ​   8225.49 [#/sec] (mean) 
 +Time per request: ​      ​48.629 [ms] (mean) 
 +Time per request: ​      0.122 [ms] (mean, across all concurrent requests) 
 +Transfer rate:          1389.66 [Kbytes/​sec] received 
 + 
 +Connection Times (ms) 
 +              min  mean[+/-sd] median ​  max 
 +Connect: ​       0   18 119.3      4    1008 
 +Processing: ​    ​4 ​  ​13 ​ 15.0     ​12 ​    626 
 +Waiting: ​       1   ​10 ​ 15.0      9     621 
 +Total: ​         8   31 126.0     ​15 ​   1208 
 + 
 +Percentage of the requests served within a certain time (ms) 
 +  50%     15 
 +  66%     16 
 +  75%     16 
 +  80%     17 
 +  90%     19 
 +  95%     21 
 +  98%     27 
 +  99%   ​1019 
 + ​100% ​  1208 (longest request) 
 + 
 +</​code>​ 
 + 
 +Не забудьте открыть на фаерволе порт ​23600.
  
 Например для iptables под управлением CENTOS это делается добавлением строчки в файл /​etc/​sysconfig/​iptables ​ Например для iptables под управлением CENTOS это делается добавлением строчки в файл /​etc/​sysconfig/​iptables ​
 <​code>​ <​code>​
--A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp   ​--dport ​89 -j ACCEPT+-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp   ​--dport ​23600 -j ACCEPT
 </​code>​ </​code>​
  
  
 [[:​astpanel|Обратно к инструкциям...]] [[:​astpanel|Обратно к инструкциям...]]
astpanel/optimization.1564993468.txt.gz · Последние изменения: 2019/08/05 08:24 — apor