понедельник, 28 марта 2016 г.

Снести очереди Rabbitmq в работающей среде

1) Отгородиться от пользователей, потому что удалить очереди для открытых соединений нельзя:
$ iptables -I INPUT  -p tcp --dport 5672 -j DROP
$ rabbitmqctl list_connections pid port state user vhost recv_cnt send_cnt send_pend name | awk '{print "rabbitmqctl close_connection \"" $1 "\" \"manually closing idle connection\"" | "/bin/bash" }'

2) Удалить очереди:
$ rabbitmqadmin -f tsv -q list queues name | while read queue; do rabbitmqadmin -q delete queue name=${queue}; done

3) Вернуть миру Rabbitmq
3.1. Узнать на какой строке живет правило блокировки входящих пакетов на реббит:
iptables -L INPUT -n --line-numbers
3.2. Удалить это правило:
iptables -D INPUT [LINE_NUMBER]

iptables статьи вроде коротко и понятно

Нужно наконец-то это выучить:)
http://vasilisc.com/21-examples-iptables
http://www.k-max.name/linux/netfilter-iptables-v-linux/

четверг, 24 марта 2016 г.

Узнать на Linux количесто процессоров/ядер

$ cat /proc/cpuinfo
$ lscpu

Подключить сетевой диск в Mac OS


sudo mount -t nfs -o resvport,rw 192.168.11.175:/home/data /Volumes/pap_doclib

Чтобы он подключался на стартапе нужно произвести манипуляции


/path/to/scripts/mount_disk.sh
#!/bin/sh
mkdir /Volumes/pap_doclib
sudo mount -t nfs -o resvport,rw 192.168.11.175:/home/data /Volumes/pap_doclib


/Library/LaunchDaemons/com.coreer.mount_disk.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.coreer.mount_pap_doclib</string>
    <key>Disabled</key>
    <false/>
    <key>UserName</key>
    <string>aieremenko</string>
    <key>ProgramArguments</key>
    <array>
      <string>/path/to/scripts/mount_disk.sh</string>
    </array>
    <key>KeepAlive</key>
    <dict>
      <key>SuccessfulExit</key>
      <false/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <false/>
  </dict>
</plist>


Запуск не дожидаясь перегрузки:
sudo launchctl load /Library/LaunchDaemons/com.coreer.mount_disk.plist

среда, 23 марта 2016 г.

Понятие Quality of Service на примере протокола MQTT

QoS

MQTT is designed to work well on unreliable networks and as such provides three levels of Quality of Service for different situations. These allow clients to specify the reliability they desire.

QoS Level 0:

The simplest level of QoS, it requires no acknowledgment from the client and the reliability will be the same as that of the underlying network layer, TCP/IP.

QoS Level 1:

This ensures that the message is delivered to the client at least once, but it could be delivered more than once. It relies on the client sending an ACK packet when it receives a packet. This is commonly used for guaranteed delivery however developers must make sure that their systems can handle duplicate packets.

QoS Level 2:

This is the least common QoS, and ensures that a message is delivered once and only once. This method requires an exchange of four packets, and will decrease performance of the broker. This level is also often left out of MQTT implementations due to its relative complexity. Make sure you check this before choosing a library or broker.


Протокол AMQP

Advance Messaging Queuing Protocol - протокол уровня приложения(на ряду HTTP, SSH, LDAP), который позволяет обмениваться сообщениями между подмодулями системы или даже между разными приложениями, работа происходит через посредник-брокер, который умеет маршрутизировать, создавать очереди, подписывать клиентов на определенный тип сообщений.
Был написан как стандартизирующее обьединение протоколов JMS(jvm) и NMS(.net).

В его основе лежит три основных понятия:
1) Сообщение (message) - вольного содержания, но может содержить также предопределенные заголовки.
2) Точка обмена (exchange) - сюда присылаются сообщения клиентами, сообщения распределяются в очередя, сообщение в зависимости от условий может попадать или в одну очередь или в несколько, сообщения не хранятся в точках обмена они хранятся только в очередях. Клиенты забирают свои сообщения из очередей. Точки обмена есть трех типов:
    - fanout - такой ексчендж размножает сообщения во все присоединенные к нему очередя, обеспечивая таким образом клоны очередей;
   - direct - сообщение попадает в очередь с именем совпадающим с ключем маршрутизации(routing key) сообщения;
   - topic - к ключам маршрутизации применяется некие маски-правила которые привязаны к очередям, таким образом ексчендж ведет себя как fanout, но при этом каждая очередь имеет определенный фильтр, позволяющий толи принимать, толи отвергать присланное сообщение.
3) Привязка(binding) - именно эта штука привязывает конкретную очередь к конкретному типу точки обмена, обьявляя фильтры под которые конкретное сообщение будет подходить для попадания в очередь.
4) Очередь (queue) - хранилище сообщений для клиентов, сообщения пропадают из очереди после того как клиет забирает его, клиенты могут кормиться на нескольких очередях.
Могут быть нескольких типов:
 - классические;
 - round-robin (несколько приложений подымаются и обьявляют одну и ту же очередь для потребления(по сути это одно приложение с которого создается несколько процессов, которые выполняют одну и ту же задачу), таким образом все они будут потреблять с нее. В эту очередь приходят сообщения, которые запускают долгоирающие задачи в потребителях, таким образом, первый кто свободен и берет на себя выполнение задачи, по скольку их много задачи не залеживаются, а решаются клонами-воркерами паралельно);
 - store;
 - forward


Путевое объяснение на сайте RabbitMQ - реализация протокола.

AMQP вспомнить по картинке принцип работы


вторник, 8 марта 2016 г.

Анализ JVM Thread Dumps and Heap Dumps

http://www.eclipse.org/mat/
http://javaeesupportpatterns.blogspot.com/2011/09/gc-overhead-limit-exceeded-java-heap.html