Холивара для. API vs шина сообщений
Мысли, почему система, где сервисы общаются через общую шину сообщений проще, чем где общение идет через API.
В системе с API/REST системы синхронно друг к другу обращаются, для этого:
- требуется обработка ошибок на всех уровнях (допустим процесс А вызывает Б а тот вызывает В)
- плюс обработка таймаутов
- плюс логгирование ошибок (pl7: логированием занимается вызывающая сторона) т.е в вызывающей стороне должно быть понимание какие ошибки могут произойти на вызываемой стороне как об этом лучше сообщить и что делать вообще
В системе с сообщениями, у процесса есть шина, он кладет в нее запрос. В результате может появится:
- ответ с результатом
- ошибка (уже сформированная обрабатывающей стороной, в едином формате более менее)
- или таймаут (который, как мне кажется, будет более естественно выглядеть в этой конфигурации). А процесс, который обрабатывает сообщения, сам занимается из получением, сам их обрабатывает, сам обрабатывает свои внештатные ситуации (про которые он в курсе), сам ведет свои логи и знает куда и как сообщать об ошибках.
Поэтому мне и кажется, что система на общей шине будет проще и легче, чем система построенная на API.
~~OWNERAPPROVE~~
Прочитал обсуждения.blog Холивара для. API vs шина сообщений |
Приоритеты
Правило 1.4 Priority: Users, Developpers, Machine
Приоритет при выборе решений: сначала удобство для пользователей, потом удобство для программистов, и только при самой крайней необходимости, оптимизация для компьютера.
Куда отнести техническую поддержку? В программистов или пользователей? Или в отдельную сущность?
Например:
юзеры > техподдержка > программисты > машина
Инструменты разработки
Для bash crab_indent, crab_syntax
Может быть усилим это PyCharm + BashSupport + External Tools (crab_indent, crab_syntax)?
У BashSupport много подсветок очевидных ошибок синтаксиса, на которые могут не реагировать crab_indent/crab_syntax, но он не такой придирчивый, как ShellCheck.
+ шаблон strongbash скрипта - https://gist.github.com/strizhechenko/2cfd4e0ce006cbc4e5f8f7054a8d76f9 заменить стандартный, чтобы Add new bash script добавляло сразу готовый код, который сразу работает по стронгбашу и не надо делать одну и ту же работу каждый раз.
~~OWNERAPPROVE~~
strongbash
Я думаю что от strongbash будет немного больше пользы, если помимо «как делаем» добавится «зачем это нужно».
Мне к примеру не нравится вот такой подход: http://opencarbon.ru/соглашения_кода:strongbash#strongbash010
Причины:
если файл используется многократно (1 запись, 10 чтений)
автокомплит
читаемость
~~OWNERAPPROVE~~
Новый crab_example
crab_example - набор примеров, на которые ушло много времени на поиск или часто забываются.
crab_example - это и утилиты командной строки и примеры кода и краткие инструкции.
crab_example - позволяет сэкономить огромное колво часов.
crab_example - использование и развитие утилиты является обязательным для всех.
Если Вы потратили время на гуглопоиск или чтение man добавляйте пример в http://opencarbon.ru/example:example_новые_сюда
Есть поддержка кастомных статей, точнее их url.
new* Добавлена поддержка многостраничных примеров и автоматический парсинг всех статей http://opencarbon.ru/example
УСТАНОВКА
Ставим crab wget 'http://opencarbon.ru/html/crab_install.sh' -O - | bash или обновляем через crab_update для уверенности можно обновить кеш статей crab_example update, кеш устаревает через день и сам обновится при первом использовании
ИСПОЛЬЗОВАНИЕ crab_example tag1|word1 [tag2|word2]
Пример
crab_example mdadm
или
crab_example mdadm сохранить
или
crab_example bash substring
или
crab_example bash init
или
crab_example debug php
crab_example debug oprofile
или
crab_example git
НОВЫЕ СТАТЬИ добавляйте в
http://opencarbon.ru/example:example_новые_сюда
Админ отсортирует.
Внимание!!! Все утилиты написанные в стиле Open Carbon7 должны содержать встроенный example в –help
~~OWNERAPPROVE~~
Изменить echo START SUCCESS
Предлагается заменить
#!/bin/bash echo "$0 START" >&2 echo "$0 SUCCESS" >&2 exit 0
на
#!/bin/bash echo "$0 $@ [$$] START" >&2 echo "$0 $@ [$$] SUCCESS" >&2 exit 0
~~OWNERAPPROVE~~
Что такое include /bin/crab_sys.sh
crab_sys.sh - это унификация удобных функций для ускорения разработки на bash.
Способ распространения и место расположения не регламентировано, рекомендуется тем же способом, что и сам скрипт.
0. Включает set -euEo pipefail
1. SIC! Отлавливает ошибки и показывает номер строки и контекст с ошибкой, что ускоряет отладку в разы
2. Автоматически пишет START SUCCESS FAIL для соблюдения stronbash, можно отключить
__SILENT=TRUE
3. Содержит встроенный sys::usage
Пример использования:
#!/bin/bash set -eu . /opt/crab/crab_utils/bin/crab_sys.sh sys::usage "$@" ### --help утилита поиска примеров http://www.opencarbon.ru и можно свои добавлять списки ### --help Usage: ### --help crab_example sed - примеры sed ### --help crab_example bash string - примеры bash подпримеры работы со строками ### --help crab_example update - обновить кеш всех списков echo TODO exit 0
### version 30.03.2017 set -euEo pipefail __ARGV= # revers argv for __ARG in ${BASH_ARGV[@]:1}; do __ARGV="$__ARG $__ARGV" done __BASH_SOURCE=${BASH_SOURCE[1]} [ "${__SILENT:-}" = "" ] && echo "START ${__BASH_SOURCE} $__ARGV" >&2 trap '__exit $? CMD=${BASH_COMMAND// /%%%%%} $@' ERR __exit(){ set +eu local STATUS=$1 local CMD= local ARGV= shift if [[ "${1}" == "CMD="* ]]; then CMD=${1//CMD=/} CMD=${CMD//%%%%%/ } shift ARGV="$@" else echo "" echo "__exit $STATUS $@" CMD="__exit" ARGV= fi echo "" echo "ERROR_PROG=$__BASH_SOURCE $__ARGV ERROR_STACK=${BASH_SOURCE[@]:1}" echo "ERROR_SOURCE=${BASH_SOURCE[@]:1:1} $ARGV ERROR_CMD=\"${CMD}\" ERROR_STATUS=$STATUS LINENO=${BASH_LINENO[@]:0:${#BASH_LINENO[@]}-1} FUNC: ${FUNCNAME[@]:1}" echo "" #echo grep -n "${CMD}" ${BASH_SOURCE[@]:1:1} -B 5 -A 5 grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 #grep -n "${CMD}" ${BASH_SOURCE[@]:1:1} -B 5 -A 5 | grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 grep -n . "${BASH_SOURCE[@]:1:1}" -B 5 -A 5 | grep "^${BASH_LINENO[@]:0:1}:" -B 5 -A 5 --color exit ${STATUS:-0} } trap '__trapexit $?' EXIT __trapexit(){ set +eu if [ $1 = 0 ]; then [ "${__SILENT:-}" = "" ] && echo "SUCCESS ${__BASH_SOURCE} $__ARGV" >&2 else echo "FAILED ${__BASH_SOURCE} $__ARGV" >&2 fi exit $1 } sys::usage(){ [ "${1:---help}" != "--help" ] && return 0 ( set +e echo grep -H '# [-][-]help' ${__BASH_SOURCE} | sed -n 's/^.*[/]\(.*\)[ ]*[ #]*--help[ ]*\(.*\)/\1 \2/p' exit 0 ) [ "${1:-}" = "--help" ] && exit 0 || exit 255 }
~~OWNERAPPROVE~~
Спасибо за исправления в strongbash
Принято все кроме #!/usr/bin/env bash
Нужно использовать shebang #!/bin/bash
Не нужно использовать shebang переносимости #!/usr/bin/env bash
Если кто хочет подискутировать - давайте аргументы.
Также добавлено исправлено два новых правила которые скоро попадут в crab_syntax
bashxxx
Запрещено удалять tmp в trap EXIT. создание временного файла это своего рода with file и его удаление это end with, чтоб было понтяно где он более не нужен аля область работы с файлом. И если файл остался в тмп то это признак, что есть ошибка в логике.
bashxxx+1
Запрещено в утилитах передавать результаты через промежуточные файлы. Только errno stdout stderr. В исключительных случаях имя файла должно быть в argv или конфиг в argv.
bashxxx+2
Выборочно использовать
spellshell
~~OWNERAPPROVE~~
Новое правило. Запрещено передавать данные через промежуточный файлы между утилитами
Нужно все выводить в стдаут и стдерр и использовать коды возврата.
В исключительных случаях, если утилита работает с файлами они должны быть указаны в argv или в конфиге который указывается в argv.
~~OWNERAPPROVE~~
Все новые bash файлы(и сильно рефакторенные) файлы с 04.04.2017 обязательно проверяются crab_syntax
Если не знаете как решить указанную crab_syntax проблему, создайте коммент здесь
http://opencarbon.ru/соглашения_кода:strongbash
~~OWNERAPPROVE~~
~~OWNERAPPROVE~~