Перейти к содержимому
Local

Рекомендованные сообщения

Проблема с отправкой смс...

судя по скрину дело в том, что на шлюз уходят данные с другим часовым поясом. у меня вот +7 на шлюзе судя по всему +2...

код поглядел, но ничего похожего на часовые пояса там не обнаружил.

 

Как поправить? Я не силён в PHP :)

 

В окне "Состояние", отображаются вопросительные знаки...

 

P.S.

Если используется тема отличная от KVT (в моём случае Plain Clean) и не отображаются иконки, необходимо скопировать недостающие(!!!) файлы из /skins/taskbar/ в /skins/%theme_name%/taskbar/

добрый день могу сказать что проблема скорее всего с подписью . судя по количеству вопросительных знаков там должно быть написано

 

влияет регистр и все знаки .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Проблема с отправкой смс...

судя по скрину дело в том, что на шлюз уходят данные с другим часовым поясом. у меня вот +7 на шлюзе судя по всему +2...

код поглядел, но ничего похожего на часовые пояса там не обнаружил.

 

Как поправить? Я не силён в PHP :)

 

В окне "Состояние", отображаются вопросительные знаки...

 

P.S.

Если используется тема отличная от KVT (в моём случае Plain Clean) и не отображаются иконки, необходимо скопировать недостающие(!!!) файлы из /skins/taskbar/ в /skins/%theme_name%/taskbar/

добрый день могу сказать что проблема скорее всего с подписью . судя по количеству вопросительных знаков там должно быть написано

attachicon.gif12.JPG

влияет регистр и все знаки .

Спасибо! С подписью разобрался (подсказали в суппорте TurboSMS), а вот с кодировкой и временем отправки беда... Сообщения на кириллице приходят битые и ответы от шлюза вопросительными знаками... у самого везде всё выставлено в UTF8 более негде проблем не возникает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Благодаря товарищу внесли в код рассылки следующие правки и всё заработало как надо:
 
Правим косяк с кодировками:
 
открываем /modules/general/turbosms/index.php
 
находим строку (71):

            $result = array();

после неё добавляем:

            $TsmsDB->query('SET NAMES utf8');

PROFIT!!! Теперь всё жестко-принудительно :)

 

 

Далее корректировка по часовому поясу (строки указаны с учетом правки кодировки):

 

находим строку (160):

            $date=date("Y-m-d H:i:s");

Заменяем/дописываем:

            $date=date("Y-m-d H:i:s", time()-5*3600);

Где "-5*3600" разница в часах между часовыми поясами сервера отправителя (в моём случае GMT +7) и шлюза TurboSMS (GMT +2).

 

Опять же PROFIT!!! :)

 

Колхозолизация конечно весьма высока, но за то работает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

обновился спасибо.

 

выздоравливай!

Изменено пользователем nlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

V27S

Опять же PROFIT!!! :)

Спасибо за указание на актуальные проблемы. В 0.4.0 начиная с ревизии 2471 сетнеймс воткнут как есть, а также можно указывать таймзону более-менее по-человечески:

post-4093-0-72318900-1364490608.png

 

Учитывая что 0.3.9 получился весьма п@зд#цбаговатым фичастым, думаю следует ожидать в скором времени 0.4.0 который будет направлен в первую очередь на "работу над ошибками". Так что с нетерпением жду радостных багрепортов :)

nlo

выздоравливай!

Спасибо :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

уже 2 недели тестируем смс модуль все отлично. и да выздоравливайте! 

Изменено пользователем Icelips

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

V27S

Опять же PROFIT!!! :)

Спасибо за указание на актуальные проблемы. В 0.4.0 начиная с ревизии 2471 сетнеймс воткнут как есть, а также можно указывать таймзону более-менее по-человечески:

attachicon.giftsms.png

 

Учитывая что 0.3.9 получился весьма п@зд#цбаговатым фичастым, думаю следует ожидать в скором времени 0.4.0 который будет направлен в первую очередь на "работу над ошибками". Так что с нетерпением жду радостных багрепортов :)

Вэлкам! Всегда рад помочь, чем могу :)

Спасибо огромное за ваш труд! :)

Крепкого здоровья вам! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Релиз Ubilling  0.3.9 - rev 2465

 

 

- Модуль «Консоль разработчика»: мерджнут патч от Den1xxx улучшающий обработку SQL запросов.

это правильно конечно, но заметил в демке, что выполненный SQL запрос не сохраняется в текстареа, что не есть труъ.

Я не правил это на этот раз в коде, т.к. показалось, что этот этап уже был готов:)

Небольшое замечание по Вики, стр. http://wiki.ubilling.net.ua/doku.php?id=openpayz

 

 

Либо так, если у вас полностью цифровые логины у пользователей:

op_customers_login.sql -- transform users.login -> users.login;

CREATE VIEW op_customers (realid,virtualid) AS SELECT users.login, users.login FROM `users`;

 

Насколько я понял, virtualid задуман как уник и цифровой причем.

 

Тогда лучше было бы так, снимая требования на логин по цифре:

 

CREATE VIEW op_customers (realid,virtualid) AS SELECT users.login, CRC32(users.login) FROM `users`;
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При попытке рассылки, высыпает варнинги, из всего списка отсылается только первое сообщение...

настройки php.ini смотрел, лимиты и таймауты расширены до приемлемых значений...

В чем еще может быть дело, куда копать? :(

post-14490-0-84234100-1364554247_thumb.png

Изменено пользователем V27S

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

post-4093-0-93309300-1364556190_thumb.png

Оно у вас пытается соединяться с локалхостом, без пароля.

А что у вас с 152 и 153 строках? В релизной версии там вообще дефайн  функции tsms_SendSMS($number,$sign,$message,$wappush).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

tsms.png

Оно у вас пытается соединяться с локалхостом, без пароля.

А что у вас с 152 и 153 строках? В релизной версии там вообще дефайн  функции tsms_SendSMS($number,$sign,$message,$wappush).

Если отправляю конкретному пользователю, то всё норм, а вот если массовая рассылка то вот такие варнинги...

           $number=  mysql_real_escape_string($number);
            $sign=  mysql_real_escape_string($sign);
Изменено пользователем V27S

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

  1. $number= mysql_real_escape_string($number);
  2. $sign= mysql_real_escape_string($sign);

Хм, аналогично. И как не сложно заметить здесь не происходит никаких вызовов mysql_connect порождающих ошибки выше.

 

Сейчас попробую повторить еффект у себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попытка повротить еффект у себя завершилась фейлом. В моем случае отсылка что массово, что поодиночно - происходит одинаково.

Оно у вас изначально вообще слало массово?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все, понял откуда растут ноги. Походу они растут из жопы "особенностей" работы mysql_real_escape_string() пытающегося соединяться с БД (Оо) , чтобы получать текущий чарсет.

 

Попробуйте выковырять модуль turbosms из Ubilling CURRENT 0.4.0 rev 2473.

Должно взлететь.

Изменено пользователем nightfly

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Все, понял откуда растут ноги. Походу они растут из жопы "особенностей" работы mysql_real_escape_string() пытающегося соединяться с БД (Оо) , чтобы получать текущий чарсет.

 

Попробуйте выковырять модуль turbosms из Ubilling CURRENT 0.4.0 rev 2473.

Должно взлететь.

Вытащил модуль TurboSMS из версии 0.4.0 rev 2475, отработал с косяками, но все смски ушли.

post-14490-0-77378800-1364571032_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Та блин, нету там mysq_real_escape_string() больше. Как так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Та блин, нету там mysq_real_escape_string() больше. Как так.

Так оно ж про mysql_escape_string пишет. Что он депрекейтед :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Млин. Моя старый и совсем слепой стал. Так и есть :(

Видимо PHP 5.4.

 

Оооокей, щас нагло хакну :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Млин. Моя старый и совсем слепой стал. Так и есть :(

Видимо PHP 5.4.

 

Оооокей, щас нагло хакну :)

Вот молодец! Работаешь не покладая рук! Памятник ставить пора! :)

Сегодня затестить не смогу, ибо 23:00, абоны не оценят ночного спама ))))

 

P.S.

убрал у себя в отслеживании сообщений колонку Msg ID, ибо не понятен смысл куда оно и зачем... + поскольку скин Plain Clear, в данном варианте нормально всё влезает.

Было бы круто, если можно было бы дропать из базы косячные строки, отсылки - т.е. рядом с сообщением красный крестик для удаления, а так же возможность массового удаления, если вдруг по запарке отправил, или отправил что-то не то и оно не ушло еще )

Изменено пользователем V27S

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот молодец! Работаешь не покладая рук!

Исходя из качества кода, непонятно, что он далеко не руками писан? :D

 

Памятник ставить пора! :)

...посмертно....

 

Сегодня затестить не смогу, ибо 23:00, абоны не оценят ночного спама ))))

Окей, корень зла понятен. Зафиксю - отпишусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Памятник ставить пора! :)

...посмертно....

 

 

/me прописал у nightfly в консоли IDDQD и нажал Enter! :)

Изменено пользователем V27S

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще раз отрихтовал в ревизии 0.4.0 rev 2480. Буду плакать кровавыми слезами если и это начнет у вас взрываться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Den1xxx

это правильно конечно, но заметил в демке, что выполненный SQL запрос не сохраняется в текстареа, что не есть труъ.

Да, походу на демке эта опция бай дефолт не включена просто

post-4093-0-71125500-1364986826_thumb.png

Я не правил это на этот раз в коде, т.к. показалось, что этот этап уже был готов :)

Да так и есть :)

 

Насколько я понял, virtualid задуман как уник и цифровой причем.

Правильно поняли - он просто для удобства пользования платежными системами.

Ну логины и так сами по себе уникальны - в случае если они имеют вид 00002, 00003 итд (опции генерации логинов), вариант приведенный в виках просто позволяет пользователю при пополнении счета, терминалом скажем, помнить меньше цифр (ну вместо там номера договора или еще чего-то типа того).  В таком случае CRC32('00002') даст юзеру шанс повводить на терминале что-то типа 2765239769. В случае же нецифровых логинов "изкоробки" да CRC32() вполне себе вариант, как и скажем INET_ATON() и даст вполне себе вменяемый результат. Спасибо, добавил в вику.

 

В общем как сказано в конце примеров "В общем все ограничено только вашей извращенной фантазией ;)"

 

 

 

 

 

 

Кстати, будете смеяться, но OpenPayz изначально планировался и писался как реализация взаимодействия с платежными системами для fnshop ;)

Собственно FastShop подразумевался в виде ромбовидного "Managers interface" на архитектурной схеме. Но как водиться, у кастомера как-то резко кончились деньги и этот самый OpenPayz на скорую руку переточился под Ubilling (а че ж добру пропадать?). Собственно в норме `realid` это должно было быть ничто иное как хорошо известный вам $system->user['username'] либо $order_id.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще раз отрихтовал в ревизии 0.4.0 rev 2480. Буду плакать кровавыми слезами если и это начнет у вас взрываться.

Спасибо огромное! Всё нормально работает :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

эта опция бай дефолт не включена просто

Упс. Не заметил.

 

 

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

Собственно такая же задача встала. Решил особо не изобретать велосипед, если есть рабочий вариант.

Правда пока не разобрался ещё.

Надеюсь разобраться и по итогам разработки закинуть что-либо и в Ваш репо, на очереди ipay.by и webmoney.

Изменено пользователем Den1xxx

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

  • Похожие публикации

    • Автор: livalera
      Помогите пожалуйста при нажатии иконки Nas  пишет (wrong data input: SELECT * from `mlg_clients` GROUP BY `nasname`)
      что он хочет и как исправить ?
    • Автор: bot
      Тестирование Linux на DROP сетевых пакетов. Разные методы и их эффективность. Тесты синтетические, но от этого не становятся менее интересными. Пример от Cloudflare.
       
      Для иллюстрации производительности методов будут продемонстрированы некоторые цифры. Тесты синтетические, т.е. не на реальной сети с реальными пользователями и трафиком, так что не воспринимайте цифры слишком серьезно. Будет использоваться один из Intel серверов c 10Gbps сетевым интерфейсом. Детали железа не особо важны, т.к. тесты будут показывать вопросы, связанные с операционкой, а не с ограничениями по железу.
       
      Что происходит при тестировании:
      передача большого количества мелких UDP пакетов, достигая уровня в 14Mpps этот трафик направляется на единственный CPU на сервере измеряется количество пакетов, обработанных ядром на этом CPU  
      Мы не пытаемся максимизировать ни скорость приложения в юзерспейсе (userspace), ни количество пакетов. Вместо этого мы пытаемся показать узкие места самого ядра.
       
      Синтетический трафик пытается максимально нагрузить conntrack - используется рандомный IP адрес источника и порт. Tcpducmp будет выглядеть примерно следующим образом:
      $ tcpdump -ni vlan100 -c 10 -t udp and dst port 1234 IP 198.18.40.55.32059 > 198.18.0.12.1234: UDP, length 16 IP 198.18.51.16.30852 > 198.18.0.12.1234: UDP, length 16 IP 198.18.35.51.61823 > 198.18.0.12.1234: UDP, length 16 IP 198.18.44.42.30344 > 198.18.0.12.1234: UDP, length 16 IP 198.18.106.227.38592 > 198.18.0.12.1234: UDP, length 16 IP 198.18.48.67.19533 > 198.18.0.12.1234: UDP, length 16 IP 198.18.49.38.40566 > 198.18.0.12.1234: UDP, length 16 IP 198.18.50.73.22989 > 198.18.0.12.1234: UDP, length 16 IP 198.18.43.204.37895 > 198.18.0.12.1234: UDP, length 16 IP 198.18.104.128.1543 > 198.18.0.12.1234: UDP, length 16 На другой стороне все пакеты будут направлены на одну очередь прерываний (RX), т.е. на один CPU. Делается это через ethtool:
      ethtool -N ext0 flow-type udp4 dst-ip 198.18.0.12 dst-port 1234 action 2  
      Оценочное тестирование всегда довольно сложное. Когда мы готовили тесты, мы обнаружили, что любые активные сырые сокеты (raw socket) сильно влияют на производительность. Это вполне очевидно, но легко не учесть. Перед тестами убедитесь, что у вас не запущен, к примеру, tcpdump.
      $ ss -A raw,packet_raw -l -p|cat Netid State Recv-Q Send-Q Local Address:Port p_raw UNCONN 525157 0 *:vlan100 users:(("tcpdump",pid=23683,fd=3))  
      В конце концов мы отключили Intel Turbo Boost:
      echo 1 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo Это классная функция, и увеличивает производительность по крайней мере на 20%, но она также очень сильно влияет на разброс показаний при замерах. Со включенным бустом разброс достигал +-1.5%. С выключенным - 0.25%.
       

       

      1. Отброс/DROP пакетов в приложении

      Начинаем с доставки пакетов к приложению и отбрасывании их уже с помощью него. Чтобы убедиться, что файервол не влияет на это делаем так:
      iptables -I PREROUTING -t mangle -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT iptables -I PREROUTING -t raw -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT iptables -I INPUT -t filter -d 198.18.0.12 -p udp --dport 1234 -j ACCEPT Код приложения - обычный цикл, который получает данные и сразу же их отбрасывает (в юзерспейсе):
      s = socket.socket(AF_INET, SOCK_DGRAM) s.bind(("0.0.0.0", 1234)) while True: s.recvmmsg([...]) Код приложения: https://github.com/cloudflare/cloudflare-blog/blob/master/2018-07-dropping-packets/recvmmsg-loop.c
      $ ./dropping-packets/recvmmsg-loop packets=171261 bytes=1940176 Тут мы получаем жалкие 175kpps:
      $ mmwatch 'ethtool -S ext0|grep rx_2' rx2_packets: 174.0k/s Железо нам дает 14Mpps, но мы не можем обработать это ядром на одном CPU с одной очередью прерываний. mpstat это подтверждает:
      $ watch 'mpstat -u -I SUM -P ALL 1 1|egrep -v Aver' 01:32:05 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 01:32:06 PM 0 0.00 0.00 0.00 2.94 0.00 3.92 0.00 0.00 0.00 93.14 01:32:06 PM 1 2.17 0.00 27.17 0.00 0.00 0.00 0.00 0.00 0.00 70.65 01:32:06 PM 2 0.00 0.00 0.00 0.00 0.00 100.00 0.00 0.00 0.00 0.00 01:32:06 PM 3 0.95 0.00 1.90 0.95 0.00 3.81 0.00 0.00 0.00 92.38 Как видите, код приложения не является узким местом, используя 27% системы + 2% юзерспейса на CPU #1, в то время как SOFTIRQ на CPU #2 сжирает 100% ресурсов.
      Кстати, использовать recvmmsg(2) довольно важно в наши пост-Спектровые дни (Spectre + Meltdown все же помнят?). Системные вызовы теперь требуют больше ресурсов. Мы используем ядро 4.14 с KPTI и retpolines:
      $ tail -n +1 /sys/devices/system/cpu/vulnerabilities/* ==> /sys/devices/system/cpu/vulnerabilities/meltdown <== Mitigation: PTI ==> /sys/devices/system/cpu/vulnerabilities/spectre_v1 <== Mitigation: __user pointer sanitization ==> /sys/devices/system/cpu/vulnerabilities/spectre_v2 <== Mitigation: Full generic retpoline, IBPB, IBRS_FW  
       
      2. Отключение conntrack

      Мы специально выбрали рандомные IP адреса и порты при тестировании для того чтобы нагрузить conntrack. Это можно проверить, посмотрев на заполненность conntrack таблицы:
      $ conntrack -C 2095202 $ sysctl net.netfilter.nf_conntrack_max net.netfilter.nf_conntrack_max = 2097152 И, конечно же, conntrack будет кричать в dmesg:
      [4029612.456673] nf_conntrack: nf_conntrack: table full, dropping packet [4029612.465787] nf_conntrack: nf_conntrack: table full, dropping packet [4029617.175957] net_ratelimit: 5731 callbacks suppressed Для ускорения наших тестов, давайте его отключим:
      iptables -t raw -I PREROUTING -d 198.18.0.12 -p udp -m udp --dport 1234 -j NOTRACK Запускаем тест:
      $ ./dropping-packets/recvmmsg-loop packets=331008 bytes=5296128 Теперь наше приложение получает 333kpps вместо 175kpps.
      P.S. с SO_BUSY_POLL можно добиться 470kpps, но об этом в другой раз.
       
       
      3. BPF дропание на сокете

      Далее мы подумали - зачем этот трафик вообще нужен на юзерспейсе? Мы можем с помощью setsockopt(SO_ATTACH_FILTER) присоединить классический BPF фильтр к SOCK_DGRAM сокету и отбрасывать пакеты на уровне ядра (kernel space).
      Код: https://github.com/cloudflare/cloudflare-blog/blob/master/2018-07-dropping-packets/bpf-drop.c
       
      Тест:
      $ ./bpf-drop packets=0 bytes=0 С таким подходом (у классического BPF схожая производительность с eBPF) у нас получилось 512kpps. При этом экономится CPU, т.к. не нужно дергать приложение в юзерспейсе.
       

      4. DROP с помощью iptables после роутинга

      В качестве следующего теста мы решили отбрасывать пакеты в цепочке INPUT в iptables:
      iptables -I INPUT -d 198.18.0.12 -p udp --dport 1234 -j DROP Conntrack отключен в предыдущем правиле. Эти два правила в файерволе дали нам 608kpps.
      $ mmwatch 'iptables -L -v -n -x | head' Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 605.9k/s 26.7m/s DROP udp -- * * 0.0.0.0/0 198.18.0.12 udp dpt:1234  

      5. DROP с помощью iptables в таблице PREROUTING

      Т.е. отбрасываем пакеты пока они не попали в роутинг:
      iptables -I PREROUTING -t raw -d 198.18.0.12 -p udp --dport 1234 -j DROP Получаем 1.688mpps
      Довольно существенный прирост при использовании таблички "raw".
      Не совсем понятно почему такой прирост, возможно потому, что у нас сложный роутинг или баг в настройке сервера.
       

      6. DROP с помощью nftables перед conntrack

      Т.к. iptables доживает свои дни, то теперь можно пользоваться nftables.
      Видео, объясняющее почему nftrack лучше: https://www.youtube.com/watch?v=9Zr8XqdET1c
      nft add table netdev filter nft -- add chain netdev filter input { type filter hook ingress device vlan100 priority -500 \; policy accept \; } nft add rule netdev filter input ip daddr 198.18.0.0/24 udp dport 1234 counter drop nft add rule netdev filter input ip6 daddr fd00::/64 udp dport 1234 counter drop Счетчики можно пронаблюдать так:
      $ mmwatch 'nft --handle list chain netdev filter input' table netdev filter { chain input { type filter hook ingress device vlan100 priority -500; policy accept; ip daddr 198.18.0.0/24 udp dport 1234 counter packets 1.6m/s bytes 69.6m/s drop # handle 2 ip6 daddr fd00::/64 udp dport 1234 counter packets 0 bytes 0 drop # handle 3 } } Получили 1.53mpps. Это немного медленнее iptables, хотя должно быть наоборот. В любом случае nftables рулит.
       

      7. Отбрасывание пакетов в tc ingress

      Неожиданным фактом стало то, что tc (traffic control) ingress обрабатывается перед PREROUTING. Т.е. можно управлять трафиком еще раньше.
      Синтаксис довольно неудобный, поэтому рекомендуется использовать скрипт: https://github.com/netoptimizer/network-testing/blob/master/bin/tc_ingress_drop.sh
      tc qdisc add dev vlan100 ingress tc filter add dev vlan100 parent ffff: prio 4 protocol ip u32 match ip protocol 17 0xff match ip dport 1234 0xffff match ip dst 198.18.0.0/24 flowid 1:1 action drop tc filter add dev vlan100 parent ffff: protocol ipv6 u32 match ip6 dport 1234 0xffff match ip6 dst fd00::/64 flowid 1:1 action drop проверяем:
      $ mmwatch 'tc -s filter show dev vlan100 ingress' filter parent ffff: protocol ip pref 4 u32 filter parent ffff: protocol ip pref 4 u32 fh 800: ht divisor 1 filter parent ffff: protocol ip pref 4 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1 (rule hit 1.8m/s success 1.8m/s) match 00110000/00ff0000 at 8 (success 1.8m/s ) match 000004d2/0000ffff at 20 (success 1.8m/s ) match c612000c/ffffffff at 16 (success 1.8m/s ) action order 1: gact action drop random type none pass val 0 index 1 ref 1 bind 1 installed 1.0/s sec Action statistics: Sent 79.7m/s bytes 1.8m/s pkt (dropped 1.8m/s, overlimits 0 requeues 0) backlog 0b 0p requeues 0 Получили 1.8mppps на одном CPU.
       

      8. XDP_DROP

      https://prototype-kernel.readthedocs.io/en/latest/networking/XDP/
      С помощью XDP - eXpress Data Path мы можем запустить eBPF код прямо в сетевом драйвере. Т.е. перед тем как skbuff выделяет память.
       
      Обычно в XDP две части:
      eBPF код, загруженный в ядро юзерспейсный загрузчик, который загружает код в нужную сетевую карту и управляет им  
      Написание загрузчика довольно трудное занятие, поэтому мы решили воспользоваться новой iproute2 фичей:
      ip link set dev ext0 xdp obj xdp-drop-ebpf.o https://cilium.readthedocs.io/en/latest/bpf/#iproute2
      Исходник программы: https://github.com/cloudflare/cloudflare-blog/blob/master/2018-07-dropping-packets/xdp-drop-ebpf.c
      Программа парсит IP пакеты и ищет заданные параметры: IP транспорт, UDP протокол, сеть, порт:
      if (h_proto == htons(ETH_P_IP)) { if (iph->protocol == IPPROTO_UDP && (htonl(iph->daddr) & 0xFFFFFF00) == 0xC6120000 // 198.18.0.0/24 && udph->dest == htons(1234)) { return XDP_DROP; } } XDP программа должна быть скомпилена с современным clang, который умеет делать BPF байткод. После этого загружаем и проверяем XDP программу:
      $ ip link show dev ext0 4: ext0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 xdp qdisc fq state UP mode DEFAULT group default qlen 1000 link/ether 24:8a:07:8a:59:8e brd ff:ff:ff:ff:ff:ff prog/xdp id 5 tag aedc195cc0471f51 jited И смотрим цифры в статистике интерфейса (ethtool -S)
      $ mmwatch 'ethtool -S ext0|egrep "rx"|egrep -v ": 0"|egrep -v "cache|csum"' rx_out_of_buffer: 4.4m/s rx_xdp_drop: 10.1m/s rx2_xdp_drop: 10.1m/s Итого получаем 10Mpps на одном CPU.
       

       

       
      Источник: cloudflare
    • Автор: bot
      Быстрая установка, безопасная работа, простота обновления, невероятная легкость использования и поддержки, - все эти свойства snap-приложений представляют огромный шаг вперед для разработки и установки ПО на Linux. Начиная с Ubuntu, а сейчас уже получив распространение и в Arch Linux, Debian, Fedora, Gentoo Linux и openSUSE, такие приложения дают множество преимуществ по сравнению с традиционными пакетами ПО. В отличие от стандартных пакетов ПО, snap-приложения:
      Более простые для разработки программистами; Быстрее устанавливаются; Автоматически обновляются; Автономны; Изолированы от других приложений; Более безопасны; Стабильны (их работа не нарушается другими приложениями);  

      Итак, что же такое snap-приложения?
      Изначально, snap-приложения были разработаны компанией Canonical для использования в Ubuntu. Этот сервис должен был называться "snappy", сама технология "snapcraft", фоновый процесс - “snapd” а пакеты - “snaps”, однако все это стало новым способом подготовки и установки приложений для Linux. Есши вы считаете, что приставка “snap” говорит о некоторой упрощенности в разработке приложений и процессе их установки? Это абсолютно так!
       
      Snap-приложения кардинально отличаются от других пакетов Linux. Другие пакеты в основном представляют собой архивы файлов, которые при установке помещают файлы в несколько директорий (/usr/bin, /usr/lib, и пр.). К тому же, другие инструменты и библиотеки, от которых зависит пакет, также необходимо установить или обновить, иначе возможен конфликт с более ранней версией. Snap-приложение, напротив, устанавливается как один независимый файл, включающий необходимые библиотеки и другие нужные файлы.  Его работа не будет влиять на работу других приложений, или менять какие-либо ресурсы, от которых также зависят и другие приложения.
       
      При разработке snap-приложения, все источники, необходимые для его работы, включаются в один файл. Такое приложение также изолированно от всей системы, обеспечивая тем самым то, что при изменении snap-приложения, остальные файлы системы не будут подвергаться каким-либо изменениям. Это также затрудняет доступ других программ к данным такого приложения.
       
      Другим важным отличием является то, что snap-приложения не могут являться частью пакетов программ, они рассматриваются и устанавливаются по отдельности, поговорим об этом чуть подробнее.
      Snap-приложения начали свое существования как Клик-пакеты (Click packages) - новый формат пакетов, разработанный для Ubuntu Mobile - а затем уже стали snap-приложениями.
       

      Как работают snap-приложения?
      Snap-приложения работают посредством множества дистрибутивов Linux таким образом, который иногда называют “дистро-агностикой” “distro-agnostic” , он дает разработчикам выйти за рамки своих представлений о совместимости ПО и предварительно установленных библиотек системы. Пакет snap-приложения уже содержит все, что ему нужно для запуска – сжатое, готовое к использованию. По сути, такими (сэатыми) они и остаются. Это позволяет им занимать мало места на диске, не смотря на их автономность.
      Работа таких приложений относительно незаметна. Ваша система может иметь несколько таких программ, а вы даже не будете знать об этом, например, если они входили в дистрибутивы, о которых мы говорили ранее.
       
      Если все же такие приложения присутствуют в вашей системе, для того, чтобы их найти вам нужно будет прописать в строке поиска /snap/bin. Если вы используете для работы оболочку bash users, эта строка будет добавлена автоматически.
      $ echo $PATH /home/shs/bin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/games:/snap/bin Проблемы не возникнут даже при автоматическом обновлении. Запущенное snap-приложение продолжает свою работу даже во время обновления. Просто, более новая версия станет активна при следующем запуске.
       

      Почему такие приложения более безопасны?
      Одной из причин повышения безопасности является то, что эти программы имеют существенно более ограниченный доступ к ОС, чем стандартные пакеты ПО. Они находятся в песочницах и контейнерах и не имеют широкого доступа к системе.
       

      Как snap-приложения помогают разработчикам?
       
      Они проще в разработке.
      Snap-приложения позволяют разработчикам больше не думать о необходимости разработки множества дистрибутивов и версий, которые могут понадобиться пользователям. Они просто помещают в пакет snap-приложение и все, что может понадобиться для его работы.
       
      Упрощение длительного процесса разработки
      С точки зрения разработчиков, запускать приложения в разработку довольно трудно. Сообщество открытого кода способно на такое только в ответ на давление по поводу выпуска новых релизов. К тому же, разработчики могут использовать новые библиотеки, не принимая во внимание то, что целевой дистрибутив ссылается на более старые библиотеки. И, даже если они пока новички в разработке snap-приложений, наверстать упущенное они смогут уже за неделю. Говорят, что обучение разработке snap-приложений намного легче, чем изучение новых языков. И, конечно, компаниям, выполняющим поддержку дистрибутива не будет нужно проводить каждое приложение через процесс разработки. Таким образом, выигрывают все.
       
      Пользу snap-приложений также оценят и системные администраторы, особенно то, что эти программы на наносят вред системе и не приводят к необходимости разбираться в дебрях поддержки.
       

      Имеет ли ваша система snap-приложения?
      Ваша система может иметь несколько таких программ, а вы даже не будете знать об этом, например, если они входили в дистрибутивы, о которых мы говорили ранее.
      Проверка работы:
      $ ps -ef | grep snapd root 672 1 0 Jun22 ? 00:00:33 /usr/lib/snapd/snapd где лежит запускающий файл:
      $ which snap /usr/bin/snap какие snap запущены:
      $ snap list Name Version Rev Tracking Developer Notes canonical-livepatch 8.0.2 41 stable canonical - core 16-2.32.8 4650 stable canonical core minecraft latest 11 stable snapcrafters -
      Куда установлены snap'ы?
      Обычно это /var/lib/snapd/snaps. Пакеты поставляются как файлы со .snap расширением
      $ sudo find / -name "*.snap" /var/lib/snapd/snaps/canonical-livepatch_39.snap /var/lib/snapd/snaps/canonical-livepatch_41.snap /var/lib/snapd/snaps/core_4571.snap /var/lib/snapd/snaps/minecraft_11.snap /var/lib/snapd/snaps/core_4650.snap  
      Установка snap'а
      $ sudo snap install hello hello 2.10 from 'canonical' installed $ which hello /snap/bin/hello $ hello Hello, world!  
      проверяем:
      $ snap list Name Version Rev Tracking Developer Notes canonical-livepatch 8.0.2 41 stable canonical - core 16-2.32.8 4650 stable canonical core hello 2.10 20 stable canonical - minecraft latest 11 stable snapcrafters - Для удаления есть snap remove
      Для обновления - snap refresh
      Для списка доступных - snap find
       

      Небольшая предыстория
      Идея snap-приложений родилась у Марка Ричарда Шаттерворта (Mark Richard Shuttleworth), основателя и директора компании Canonical Ltd., выпустившей операционную систему Ubuntu на основе Linux-based и имеющей десятилетия опыта работы с ней. Одной из составляющих мотивации был уход от возможных ошибок при установке – впервые эти программы были использованы на телефонах. Упрощение процесса разработки, простота техподдержки и повышение безопасности системы не оставили шансов забросить эту идею.
       
      источник: networkworld
    • Автор: ppv
      В 79 строці файлу https://github.com/nightflyza/Ubilling/blob/master/openpayz/frontend/ipayx/index.php
      79   $customerId = $transactionInfo->acc;
      Так не працює, але якщо acc замінити на order тоді все гуд.
×