Русский
Русский
English
Статистика
Реклама

Нспк

Recovery mode От стартапа до тысяч серверов в десятке ЦОД. Как мы гнались за ростом Linux инфраструктуры

03.07.2020 20:16:17 | Автор: admin
Если ваша IT инфраструктура растёт слишком быстро, вы рано или поздно столкнётесь с выбором линейно увеличивать людские ресурсы на её поддержку или начинать автоматизацию. До какого-то момента мы жили в первой парадигме, а потом начался долгий путь к Infrastructure-as-Code.



Разумеется, НСПК не стартап, но такая атмосфера царила в компании в первые годы существования, и это были очень интересные годы. Меня зовут Корняков Дмитрий, более 10 лет я поддерживаю инфраструктуру Linux с высокими требованиями доступности. К команде НСПК присоединился в январе 2016 года и, к сожалению, не застал самого начала существования компании, но пришел на этапе больших изменений.

В целом, можно сказать, что наша команда поставляет для компании 2 продукта. Первый это инфраструктура. Почта должна ходить, DNS работать, а контроллеры домена пускать вас на сервера, которые не должны падать. IT ландшафт компании огромен! Это business&mission critical системы, требования по доступности некоторых 99,999. Второй продукт сами сервера, физические и виртуальные. За существующими нужно следить, а новые регулярно поставлять заказчикам из множества подразделений. В этой статье я хочу сделать акцент на том, как мы развивали инфраструктуру, которая отвечает за жизненный цикл серверов.

Начало пути

В начале пути наш стек технологий выглядел так:
ОС CentOS 7
Контроллеры домена FreeIPA
Автоматизация Ansible(+Tower), Cobbler


Всё это располагалось в 3х доменах, размазанных на нескольких ЦОДах. В одном ЦОД офисные системы и тестовые полигоны, в остальных ПРОД.

Создание серверов в какой-то момент выглядело так:



В шаблоне VM CentOS minimal и необходимый минимум вроде корректного /etc/resolv.conf, остальное приезжает через Ansible.

CMDB Excel.

Если сервер физический, то вместо копирования виртуальной машины на него устанавливалась ОС с помощью Cobbler в конфиг Cobbler добавляются MAC адреса целевого сервера, сервер по DHCP получает IP адрес, а дальше наливается ОС.

Поначалу мы даже пытались делать какой-то configuration management в Cobbler. Но со временем это стало приносить проблемы с переносимостью конфигураций как в другие ЦОД, так и в Ansible код для подготовки VM.

Ansible в то время многие из нас воспринимали как удобное расширение Bash и не скупились на конструкции с использованием shell, sed. В общем Bashsible. Это в итоге приводило к тому, что, если плейбук по какой-либо причине не отрабатывал на сервере, проще было удалить сервер, поправить плейбук и прокатить заново. Никакого версионирования скриптов по сути не было, переносимости конфигураций тоже.

Например, мы захотели изменить какой-то конфиг на всех серверах:

  1. Изменяем конфигурацию на существующих серверах в логическом сегменте/ЦОД. Иногда не за один день требования к доступности и закон больших чисел не позволяет применять все изменения разом. А некоторые изменения потенциально деструктивны и требуют перезапуск чего-либо от служб до самой ОС.
  2. Исправляем в Ansible
  3. Исправляем в Cobbler
  4. Повторяем N раз для каждого логического сегмента/ЦОД

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

  • Рефакторинг ansible кода, конфигурационных файлов
  • Изменение внутренних best practice
  • Изменения по итогам разбора инцидентов/аварий
  • Изменение стандартов безопасности, как внутренних, так и внешних. Например, PCI DSS каждый год дополняется новыми требованиями

Рост инфраструктуры и начало пути

Количество серверов/логических доменов/ЦОД росло, а с ними количество ошибок в конфигурациях. В какой-то момент мы пришли к трём направлениям, в сторону которых нужно развивать configuration management:

  1. Автоматизация. Насколько возможно, нужно избегать человеческого фактора в повторяющихся операциях.
  2. Повторяемость. Управлять инфраструктурой намного проще, когда она предсказуема. Конфигурация серверов и инструментов для их подготовки должна быть везде одинаковой. Это так же важно для продуктовых команд приложение должно гарантированно после тестирования попадать в продуктивную среду, настроенную аналогично тестовой.
  3. Простота и прозрачность внесения изменений в configuration management.

Осталось добавить пару инструментов.

В качестве хранилища кода мы выбрали GitLab CE, не в последнюю очередь за наличие встроенных модулей CI/CD.

Хранилище секретов Hashicorp Vault, в т.ч. за прекрасное API.

Тестирование конфигураций и ansible ролей Molecule+Testinfra. Тесты идут намного быстрее, если подключаете к ansible mitogen. Параллельно мы начали писать собственную CMDB и оркестратор для автоматического деплоя (на картинке над Cobbler), но это уже совсем другая история, о которой в будущем расскажет мой коллега и главный разработчик этих систем.

Наш выбор:

Molecule + Testinfra
Ansible + Tower + AWX
Мир Серверов + DITNET(Собственная разработка)
Cobbler
Gitlab + GitLab runner
Hashicorp Vault




Кстати про ansible роли. Сначала она была одна, после нескольких рефакторингов их стало 17. Категорически рекомендую разбивать монолит на идемпотентные роли, которые можно потом запускать отдельно, дополнительно можно добавить теги. Мы роли разбили по функционалу network, logging, packages, hardware, molecule etc. А вообще, придерживались стратегии ниже. Не настаиваю на том, что это истина в единственной инстанции, но у нас сработало.

  • Копирование серверов из золотого образа зло!

    Из основных недостатков вы точно не знаете, в каком состоянии образы сейчас, и что все изменения придут во все образы во все фермы виртуализации.
  • Используйте дефолтные файлы конфигурации по минимуму и договоритесь с другими подразделениями, что за основные системные файлы отвечаете вы, например:

    1. Оставьте /etc/sysctl.conf пустым, настройки должны лежать только в /etc/sysctl.d/. Ваш дефолт в один файл, кастом для приложения в другой.
    2. Используйте override файлы для редактирования systemd юнитов.
  • Шаблонизируйте все конфиги и подкладывайте целиком, по возможности никаких sed и его аналогов в плейбуках
  • Рефактория код системы управления конфигурациями:

    1. Разбейте задачи на логические сущности и перепишите монолит на роли
    2. Используйте линтеры! Ansible-lint, yaml-lint, etc
    3. Меняйте подход! Никакого bashsible. Нужно описывать состояние системы
  • Под все Ansible роли нужно написать тесты в molecule и раз в день генерировать отчёты.
  • В нашем случае, после подготовки тестов (которых больше 100) нашлось около 70000 ошибок. Исправляли несколько месяцев.


Наша реализация

Итак, ansible роли были готовы, шаблонизированы и проверены линтерами. И даже гиты везде подняты. Но вопрос надежной доставки кода в разные сегменты остался открытым. Решили синхронизировать скриптами. Выглядит так:



После того, как приехало изменение, запускается CI, создаётся тестовый сервер, прокатываются роли, тестируются молекулой. Если всё ок, код уходит в прод ветку. Но мы не применяем новый код на существующие сервера в автомате. Это своеобразный стопор, который необходим для высокой доступности наших систем. А когда инфраструктура становится огромной, в дело идёт ещё закон больших чисел даже если вы уверены, что изменение безобидное, оно может привести к печальным последствиям.

Вариантов создания серверов тоже много. Мы в итоге выбрали кастомные скрипты на питоне. А для CI ansible:

- name: create1.yml - Create a VM from a template  vmware_guest:    hostname: "{{datacenter}}".domain.ru    username: "{{ username_vc }}"    password: "{{ password_vc }}"    validate_certs: no    cluster: "{{cluster}}"    datacenter: "{{datacenter}}"    name: "{{ name }}"    state: poweredon    folder: "/{{folder}}"    template: "{{template}}"    customization:      hostname: "{{ name }}"      domain: domain.ru      dns_servers:        - "{{ ipa1_dns }}"        - "{{ ipa2_dns }}"    networks:      - name: "{{ network }}"        type: static        ip: "{{ip}}"        netmask: "{{netmask}}"        gateway: "{{gateway}}"        wake_on_lan: True        start_connected: True        allow_guest_control: True    wait_for_ip_address: yes    disk:      - size_gb: 1        type: thin        datastore: "{{datastore}}"      - size_gb: 20        type: thin        datastore: "{{datastore}}"

Вот к чему мы пришли, система продолжает жить и развиваться.

  • 17 ansible-ролей для настройки сервера. Каждая из ролей предназначена для решения отдельной логической задачи (логирование, аудит, авторизация пользователей, мониторинг и т.д.).
  • Тестирование ролей. Molecule + TestInfra.
  • Собственная разработка: CMDB + Оркестратор.
  • Время создания сервера ~30 минут, автоматизировано и практически не зависит от очереди задач.
  • Одинаковое состояние/именование инфраструктуры во всех сегментах плейбуки, репозитории, элементы виртуализации.
  • Ежедневная проверка состояния серверов с генерацией отчётов о расхождениях с эталоном.

Надеюсь мой рассказ будет полезен тем, кто в начале пути. А какой стек автоматизации используете вы?
Подробнее..

Как мы автоматизировали весь жизненный цикл серверов

15.07.2020 18:16:18 | Автор: admin

Привет, Хабр! Меня зовут Алексей Назаров. Я занимаюсь автоматизацией в отделе администрирования инфраструктурных систем в Национальной системе платежных карт (АО НСПК) и хотел рассказать немного о наших внутренних продуктах, которые помогают нам развиваться.
Если вы еще не читали пост про нашу инфраструктуру, то самое время! После прочтения этого поста я бы хотел рассказать о некоторых внутренних продуктах, которые мы разработали и внедрили.



В нашей компании, как и в любой другой, существуют свои регламенты и бизнес-процессы. Один из них это тот, по которому мы создаем сервера или стенд серверов по заявке Jira ServiceDesk. У сервера есть функциональный администратор, т.е. владелец. У серверов также имеется статус (Тестовый, Продуктивный, UAT и т.д.). Из-за статусов и других характеристик сервера должны находится в своем сегменте, датацентре, датасторе, сети и прочее. А значит, чтобы создать сервер сначала требуется: создать сервер в VMware, задать ему имя, ip, dns и другие немаловажные параметры, а потом уже прокатить ansible-playbook.


История развития


Я пришел в НСПК в январе 2015 года и работал в ситуационном центре дежурным линуксоидом. В наши основные обязанности входило создавать и настраивать сервера, поддерживать сервера в работоспособном состоянии. Когда система мониторинга показывала какие-то перебои c серверами, обращались к нам. 1-линии поддержки для эскалации требовалась информация о сервере: его назначение, за какую систему отвечает, кому он принадлежит и т.д. В случае срабатывания критичных триггеров в системе мониторинга 1-линия описывала подробную информацию о причинах и состоянии системы. Подробная информация о серверах на тот момент находилась у нас, так как серверами занимались мы. А значит мы также передавали подробную информацию о серверах 1-линии.


Для учета серверов мы использовали excel-файл. Для учета ip использовали phpIPAM https://phpipam.net/. phpIPAM open source продукт для учета адресным пространством. Еще некоторая информация могла находиться в самой системе мониторинга. Количество серверов насчитывалось не более 700.


В нашем отделе сотрудники отвечают за разные задачи: одни занимаются Виртуализацией и СХД, другие Windows, а мы Linux. Также есть отдел, где находятся сетевые инженеры и администраторы БД.


Создание серверов было не упорядочено. Продуктивные сервера создавались по заявкам, тестовые могли создаваться без них. Сервер создавался вручную. А значит:


1) Требовалось узнать в каком датацентре, датасторе, сети и прочее
2) Создать сервер в требуемом сегменте через Vcenter
3) Прогнать bash-скрипты и некоторые ansible-playbookи
4) Добавить корректные данные о сервере в excel-файл
5) Добавить ip в phpIPAM
6) Закрыть заявку, если она была


Через некоторое время стало понятно, требуется создавать все больше и больше серверов. И мы стали искать варианты систем для хранения информации и учета серверов.
На просторах интернета таких систем немало. Даже в phpIPAM можно хранить информацию о серверах. Но в таких системах неудобно смотреть и анализировать состояние серверов в разрезе. В них не было необходимых полей и связей, нет фильтров по полям как в excel, нет четкого разграничения прав на редактирование и просмотр определенных серверов.
Мне тогда нравился Python, и я хотел сделать что-то на Django. Поэтому решил написать свою CMDB для нужд отдела и компании. После ее создания мы решили автоматизировать процесс создания и настройки серверов. Что получилось? Об этом далее


Мир серверов


Основная система хранения серверов. На данный момент у нас уже больше 5000 серверов. Система постоянно дорабатывается, интегрируется с бизнес-процессами и другими системами.
Так выглядит главная страница:



При переходе на страницу сервера можно посмотреть более подробную информацию, отредактировать поля, посмотреть историю изменений.



Кроме хранения данных о серверах Мир серверов имеет функционал:


  • Разграничение прав доступа на просмотр и редактирование данных (по департаменту, по управлению, по отделу)
  • Удобный просмотр серверов в табличном виде, фильтр по любым полям, показ/скрытие полей
  • Разнообразные оповещения по почте
  • Актуализация информации о серверах
  • Ежедневный сбор данных о серверах и хранение для аналитики по ресурсам систем


  • Поиск и сравнение установленных приложений на серверах


Интеграция Мира серверов с другими системами:
1) Автоматическое обновление ip в phpIPAM
2) Выполнение заявок Jira ServiceDesk на предоставление нового сервера (стенда серверов) через Мир серверов
3) Просмотр расположения физического сервера и правильность заполнения информации в системе dcTrack (https://www.sunbirddcim.com/)
1) Передача информации о серверах через REST API для Zabbix и других систем мониторинга
2) Передача информации о ПО установленного на серверах через REST API для нужд ИБ
3) Синхронизация владельцев серверов из 1С и Active Directory для получения ФИО, рабочей почты, принадлежность к подразделению, статусе сотрудника. Надо написать, что такие данные требуется для разграничения прав, а также для автоматического оповещения владельцев серверов о ряде событий, связанных с их серверами.


DitNet


Наша инфраструктура на данный момент имеет более 10 ЦОД. Из этого понятно, что Мир серверов не сможет в любом сегменте создать и настроить сервер из-за понятных требований PCI-DSS.
Поэтому при выполнении заявок на предоставление сервера мы формируем json с данными, которые требуется для создания в среде VMware. Передача json реализована через защищенный rsync или ftps зависит от сегмента.
Надо заметить, что наш отдел провел очень большую работу. Убрали bashsible, переработали ansible на идемпотентные роли для настройки серверов, настроили molecule (https://molecule.readthedocs.io/), унифицировали все артефакты VMware и много чего другого. Стандартизация артефактов VMware потребовалась по большей части для серверных подсетей во всех ЦОДах (у нас их уже больше 900).
Как пример:
Раньше Distributed Switch мог называться test2, а теперь 192.168.1.0|24_test2. Данное переименование требовалось, чтобы можно было на этапе формирования json сделать матчинг подсетей из phpIPAM и VMware.


Выполнение заявок по предоставлению серверов:
1) DitNet ежедневно или по запросу собирает все артефакты из VMware (кластеры, датасторы, сети, шаблоны и т.д). Упаковывает всю информацию в json и отправляет в Мир серверов
2) Мир серверов принимает данные и наполняет данные БД артефактами VMware
3) В Мире серверов имеется страница, которая обращается к Jira ServiceDesk и по jql-запросу получает список заявок на предоставление серверов со статусом Очередь. На этой странице исполнитель заполняет таблицу артефактами VMware и другими ресурсами (Рис. Ниже). Часть данных автоматически заполняется данными, которые были указаны в заявке.



4) После заполнения и нажатия кнопки Сотворить, заявка меняет статус в Jira ServiceDesk В работе
5) В этот момент Мир серверов формирует json с данными о создании ВМ (артефакты, dns, ip и т.д.) и перекладывает его в папку для своего сегмента (определяется по домену сервера)
6) Каждый DitNet в своем сегменте запрашивает данные из своей папки и обогащает данными таблицу с серверами на установку. В БД имеются дополнительные поля с информацией по статусу установки (по умолчанию: готов к установке)
7) На DitNet каждые 5 минут отрабатывает Celery beat, который по статусу установки определяет количество серверов, которые требуется установить и настроить
8) Celery worker запускает несколько последовательных задач:
a. Создает сервер в VMware (используем библиотеку pyvmomi)
b. Скачиваем или обновляем проект gitlab по настройке сервера
c. Запускается Ansible-playbook (используем данный гайд https://docs.ansible.com/ansible/latest/dev_guide/developing_api.html)
d. Запускается Molecule
e. Отправка почты исполнителю и Миру серверов о статусе выполнения
9) После каждой задачи проверяется статус. Если все задачи выполнены оповещаем исполнителя с сформированной ссылкой для закрытия заявки Jira ServiceDesk. Если какая-нибудь из задач провалилась, то оповещаем исполнителя с логом Vmware или Ansible.


Что еще умеет Ditnet на данный момент:


  • Собирает все данные и ресурсы со всех серверов. Для данной задачи мы используем Ansible с модулем setup. На хостах кроме локальных фактов используем также кастомные. Перед каждым запуском формируем инвентарь для Windows и Linux.
  • Собирает информацию SNMP о физических серверах. Сканируем определенные подсети и получаем серийный номер, версию BIOS, версия IPMI и т.д.
  • Собирает информацию о группах серверов в Freeipa (HBAC, SUDO правила), о группах в Active Directory. Для сбора и контроля ролевой модели доступа пользователей к информационным системам
  • Переустановка серверов
  • А еще там на заднем фоне котики. Рисунок ниже:


Вся информация, которую собирает DitNet, отправляется в Мир серверов. А там уже и проходит вся аналитика и актуализация данных о серверах.


Как мы обновляемся


В данный момент над Миром серверов и DitNet тружусь уже не только я. Нас уже три человека.
Весь исходный код хранится в наших Gitlab для удобной параллельной разработки. В каждом из проектов имеется свой Ansible-playbook, который запускает Gitlab CI и обновляет приложение. Pipeline:



По pipeline видно, что не хватает unit-тестов. Но, думаю, мы в скором будущем это исправим.
Также Ansible-playbook можно запустить через Ansible Tower (AWX) на новых серверах, если требуется новая инсталляция.
В случае с DitNet мы используем docker, чтобы доставлять нужные библиотеки во все сегменты. Он описан docker-compose. А docker-compose services завернуты в systemd.


Планируется в будущем


  • Автоматическое выполнение заявок на установку серверов без исполнителя
  • Плановое автоматическое обновление серверов
  • Добавление в Мир серверов сущности СХД и автоматический сбор данных
  • Сбор информации с физических серверов о всех комплектующих для отправки в Мир серверов для контроля ЗИПа серверов
  • Автоматическое оповещение об уходе из компании владельца сервера для последующей привязки серверов к будущему владельцу
  • Продолжение интеграции с другими системами компании
    и много еще интересного!

P.S. Спасибо за Ваше время! Критика и комментарии приветствуются!

Подробнее..

Как устроен прикладной и бизнес-мониторинг сервисов НСПК

20.10.2020 12:19:01 | Автор: admin
image

НСПК сегодня это не просто операционно-клиринговый центр для карточных операций, но и современная технологическая платформа для продвижения и развития платёжных инструментов и сервисов, как на территории России, так и за её пределами. НСПК это платёжная система Мир, Система быстрых платежей и обработка внутрироссийских операций по картам международных платёжных систем. Мы обеспечиваем миллиарды транзакций в год при отказоустойчивости и доступности на уровне 99,999%.

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

Меня зовут Липкин Иван, в НСПК я руковожу управлением прикладного мониторинга, и сегодня я хочу поделиться опытом построения прикладного и бизнес-мониторинга, полученным нашей командой за несколько лет развития национальных платёжных сервисов.

Идеология


image

Идея, которой мы придерживаемся в подходах к построению процессов мониторинга, состоит в том, что сервис абстрактно раскладывается на три слоя: бизнес, прикладной и инфраструктурный. С каждого из слоёв экспортируются метрики, логи (в некоторых случаях данные трассировок приложений) для комплексного анализа работоспособности системы, создания аналитических панелей, настройки триггеров различных состояний и поведения метрик.

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

Разделение сервиса на уровни происходит по принципу отнесения снимаемых с него данных к описанным трём категориям:

Бизнес-слой данные, отражающие активность и опыт конечного пользователя или конечной точки подключения. По ним формируются количественные и качественные метрики оказания сервиса. Например, если говорить про платежную систему Мир, то метриками бизнес-уровня будут объемы успешных или неуспешных авторизационных запросов в единицу времени, их разбивка по конечным точкам подключения, типам операций и т.д. Как правило, метрики этого уровня (как и бизнес-лог) индивидуальны для каждого сервиса, их количество и состав формируются из потребностей в каждом конкретном случае.

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

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

Требования к системе мониторинга


Мониторинг это служебный сервис, который не зарабатывает деньги в явном виде. При этом все понимают, что без качественного мониторинга невозможно обеспечить требования по уровню доступности, времени восстановления после сбоев, различные SLA перед партнёрами, рынком, регулятором и т.д. Тут и возникает важная задача максимально покрыть все потребности в мониторинге бизнес-сервисов, минимизировав при этом расходы на создание такой системы.

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

Компактность
Конечно, хотелось бы иметь стек, покрывающий все домены обратной связи с сервисом (метрики, логи, прикладные трассы для профилирования запросов и мониторинга приложений). На рынке существуют десятки разных систем, работающих по каждому домену, но заводить зоопарк не хочется никому. С другой стороны, очевидно, что не существует универсальных решений, способных одинаково эффективно работать со всеми видами данных с сервиса.

Эффективность
Система должна решать широкий спектр задач: от самых базовых триггеров, реагирующих на статичные пороговые значения, до сложных аналитических концепций, таких как обнаружение аномалий и прогнозирование с использованием статистического анализа или машинного обучения.

Гибкость
Система должна уметь получать данные от сервисов в разных режимах (push\pull), иметь богатый набор экспортёров данных и встроенные механизмы интеграции с современным ПО. То есть любая поставленная перед мониторингом задача должна решаться максимально быстро и, по возможности, штатными средствами, без долгих интеграционных процессов или разработки.

Открытость
Идеально, если весь используемый стек это open source. Но тут нужно представить известную картинку с тремя пересекающимися кругами цена, качество и время. Эта характеристика имеет свои плюсы и минусы, не всегда имеется время и профессиональный ресурс для решения всего спектра задач с использованием открытого ПО. Здесь мы за здравый баланс, но с прицелом на идеал open source и компетенции его приготовления.

В настоящее время нам удалось достичь определённой гармонии в совмещении всех этих требований. За последние несколько лет сервис качественно изменялся по форме, содержанию и задачам, но обо всем по порядку.

Хронология развития прикладного стека


В 2015 году, когда всё только начиналось, мониторинг представлял собой всего лишь один элемент Zabbix, функциональных возможностей которого очень быстро стало не хватать. Во-первых, появилась потребность в централизованном сборе и хранении логов. Во-вторых, возникла необходимость визуализации и контроля качества прикладного авторизационного трафика. Очевидно, что решить такие задачи с помощью одного только Zabbix было невозможно и в инфраструктуру мониторинга добавился стек ELK (Elasticsearch, Logstash, Kibana), который прекрасно решает вопрос с централизованным сбором логов, и Grafana, хорошо справляющаяся с визуализацией данных. В итоге к середине 2016 года в стек уже входит: Zabbix, ELK, Grafana и много Perl-a.

По мере развития сервисов меняются требования и к контролю операционных процессов. В 2016 году описательной аналитики ELK + Grafana становится недостаточно. Возникают задачи по анализу тысяч метрик и не визуально на видео-стенах, а в фоновом режиме системы с использованием статистических анализаторов с динамическими базовыми линиями. Так же необходимо было обеспечить возможности быстрого реагирования на нештатные ситуации и оценки степени их воздействия на бизнес. Возникает потребность в платформе операционной и бизнес-аналитики, в которой можно делать сложные параметризованные отчеты, которыми бы пользовалась дежурная служба, выдавая коммуникацию с подготовленной по инциденту статистикой как внутри компании, так и внешним потребителям (на рынок).

В конце 2017 года мы открываем внутренний проект по выбору платформы операционной аналитики, и в фокусе нашего внимания оказывается Splunk.

В 2018 году Splunk уже внедрён в систему прикладного мониторинга НСПК. На текущий момент он по-прежнему остается аналитическим ядром в стеке, осуществляющим комплексный анализ данных, что позволяет фиксировать даже незначительные случаи деградации в процессах.

Все бы хорошо, но в начале 2019 года Splunk уходит с российского рынка, вынуждая нас искать альтернативу. Такой альтернативой видится ELK++ привычный нам стек, но с определёнными расширениями (про ++ дальше).

Уход Splunk из России не означает, что им нельзя пользоваться. У нас имеется постоянная лицензия, ограниченная только объёмом индексируемых данных в сутки. Понятно, что со временем это станет проблемой, поэтому у нас имеется стратегия по миграции на альтернативное решение.

Архитектура и прикладной стек


image atl

Представленная схема это упрощённый (сутейный) вариант, фактическая же схема гораздо сложнее. Приложения имеют кластерную архитектуру, все развёрнуто в нескольких дата-центрах и экземпляров системы тоже несколько. Но все сигналы и общий контроль выведены на консоли и видеостены дежурной службы в ситуационных центрах, тем самым глобальная картина по сервисам и их состояниям формируется в едином центре управления полётами.

Но вернемся к архитектуре. Как видно на схеме, система условно раскладывается на четыре слоя: источники данных, транспорт, хранение\анализ и клиентская часть.

Источники данных и транспорт

Ключевую роль в сборе и транспортировке данных играют компоненты ELK-stack, Zabbix, а также брокер Kafka с клиентской библиотекой обработки потоков Kafka Streaming (очень важно, что это полностью open source). Богатый набор экспортёров данных Beats data shippers и input\output плагинов Logstash покрывает практически весь набор потребностей по снятию данных с объектов мониторинга. Также Logstash выступает в качестве посредника между шиной или конечной аналитической системой и системой алертинга Zabbix. Таким образом Logstash выполняет функции агрегатора метрик и планировщика запросов в сторонние API, откуда получает результаты сложной аналитики данных (например, из Splunk) для передачи их в Zabbix.

Zabbix, по такому же принципу, использует готовые шаблоны для экспорта метрик с сервиса. Иногда одну и туже задачу можно решить, как средствами ELK, так и Zabbix. В зависимости от ситуации, выбор делается в пользу того или иного приложения в стеке.

Чтобы отдавать в несколько конечных аналитических систем одни и те же данные, в транспортном слое присутствует Apache Kafka. Брокер получает данные как от Logstash, так и через собственные коннекторы Kafka Connect или напрямую от приложений, которые подключаются к Producer API Kafka. Использование единой шины решает ряд проблем. В качестве потребителя можно поставить любое хранилище данных и со стороны транспорта ничего менять не нужно. Получается своего рода стандарт, где любая новая потребность в данных решается просто, используя готовые рельсы.

На слое транспорта происходит ещё и трансформация данных. Несложные преобразования и обогащения делаются на Logstash формирование новых вычислительных атрибутов в данных, приклеивание справочников и т.д. Более сложные концепции обработки потоков реализуются в Kafka Streaming. Пока у нас имеется только одно приложение, обрабатывающее поток бизнес-лога авторизационных систем, формируя на лету модель данных для мониторинга. Но мы активно работаем в этом направлении, усиливая компетенции в области инженерии данных.

Как отдельное направление мониторинга, но полностью интегрированное в стек, Elastic развивает APM (application performance monitoring профилирование запросов и мониторинг приложений), который мы пробуем применять под задачи сбора и анализа прикладных трасс. В транспортном слое этот элемент представлен APM-агентом (в нашем случае java) и APM-сервером, в задачи которого входит обработка данных от агентов и подготовка их для передачи в Elasticsearch.

Конечные аналитические системы

Аналитическим ядром системы является Splunk готовое коробочное решение: база данных, язык взаимодействия с данными и пользовательский интерфейс.

Это очень гибкий и универсальный инструмент, особенностью которого можно назвать сильный высокоуровневый язык SPL (search processing language). Он сочетает в себе возможности SQL и Unix pipeline syntax. На этом языке можно очень быстро писать аналитические запросы к данным, а в сочетании с UI конструировать сложнейшие параметрические отчёты.

Все настраивается так, чтобы дежурный затратил минимум сил и получил максимум понимания по инциденту. Вот пример панели для расчёта статистики по инциденту на авторизационном сервисе. На панели есть вся необходимая информация о затронутых эквайрерах, эмитентах, платежных системах и т.д. Можно все это фильтровать в зависимости от ситуации и проблемы.

image

Но действительно важную и сложную аналитическую задачу Splunk решает в фоновом режиме непрерывное обнаружение аномалий. Постоянно работающие статистические анализаторы выдают сигналы об аномальном поведении метрик контролируемого операционного процесса. В основе лежит алгоритм median absolute deviation, а ключевая особенность подхода заключается в том, что алгоритм в моменте применяется к десяткам тысяч метрик, анализируя многомерные временные ряды.

image

Есть довольно интересные приемы, когда нужно контролировать не интенсивность сигналов, а окна их отсутствия мы называем этот подход определение уровня тишины. В его основе также лежат статистические приемы. По исследуемым метрикам на исторических данных замеряются максимальные окна отсутствия сигналов внутри интересующих нас временных диапазонов (сутки или какие-то их части). Из значений этих окон строится медиана, и дальше мы в режиме реального времени измеряем уровень тишины. Если он превышает медиану с определенным коэффициентом, то включается триггер. Такие же подходы применяются в разных сервисах НСПК, мы отслеживаем активность участников на предмет получения всего необходимого объёма данных от них к нам и на качество получения этих данных конечными точками подключения.

Еще один пример интересного анализа это оценка объёма потерь по недополученным данным с использованием алгоритма прогнозирования временного ряда. Представьте ситуацию, когда банк ломается и перестает отправлять запросы в НСПК. В этом случае на мониторах видим просадку трафика и нам необходимо оценить количество данных, которое мы недополучаем, чтобы уведомить об этом участника или руководство компании (если речь идёт о крупном игроке рынка). В Splunk есть целое приложение с набором алгоритмов ML (в частности Forecast time series), которые делают прогноз трафика в системе и позволяют определить объем потерь.

Алгоритмы прогнозирования временных рядов также используются в методиках расчёта доступности сервисов. Когда происходит инцидент, то ключевая метрика (или метрики) производительности сервиса начинает деградировать, причем деградации бывают двух видов полная (Рис.1) или частичная (Рис.2). Очевидно, что считать временем недоступности сервиса весь интервал инцидента при частичной деградации это неправильно, потому что сервис свою задачу выполнял (в каком-то процентном отношении). Но деградация была и повлияла на определённую часть конечных пользователей. Splunk позволяет очень просто подсчитать область между прогнозом и фактом и сконвертировать это значение во время полной недоступности сервиса.

image
Рис.1

image
Рис.2

Описанные выше примеры показывают, как быстро и удобно можно делать сложное в Splunk, но есть с ним и определенные трудности. В паре cо Splunk работает Elasticsearch, который в стратегическом смысле видится как альтернатива, а в тактическом смысле имеет определенные преимущества перед ним. Ещё он выступает в роли резервной системы, если со Splunk что-то идет не так.

Сначала расскажу про плюсы с точки зрения аналитика и бизнес-заказчика. Сейчас для меня ключевым преимуществом Elasticsearch перед Splunk является то, что он умеет делать обновление документов в индексе. Отсутствие этой возможности в Splunk порождает на практике ряд трудностей. Например, в сервисе 3-D Secure имеется довольно сложный сценарий прохождения аутентификационных запросов. За одной бизнес-транзакцией стоит с десяток событий, предшествующих ей. Чтобы понимать качество оказания сервиса все события не нужны, только последние те, на которых конечные пользователи перестали взаимодействовать с сервисом. Elasticsearch делает обновление документов в индексе по ключевому полю, что дает на выходе нужный вид данных (последние статусы) и на порядок меньший объем хранимых данных, следовательно, быстрее и легче начинают работать статистические выборки. Splunk не умеет делать обновления записей, такова идеология решения, все индексируется как отдельные события. Чтобы вернуть только последние статусы, нужно делать дедупликацию событий по ключевому полю с сортировкой по времени, что при значительных RPS (количество запросов в секунду) вычислительно затратно.

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

Теперь про недостатки. У Elasticsearch нет гибкого аналитического языка взаимодействия с данными, такого как SPL в Splunk. Это ключевая проблема. Elastic предоставляет целую группу языков запросов (DSL, LQS, SQL, EQL), но все это пока очень далеко от возможностей SPL. ELK хорош, как инфраструктура сбора, транспорта и хранения, но мне, как аналитику, нужен язык для работы с данными.

Какое здесь может быть решение? Внешний framework для аналитики. Берем Python pandas и пишем в нём любую сложную обработку, взаимодействуя с Elasticsearch API как с источником данных. Концепция рабочая, но порог вхождения намного выше чем в случае с SPL, нужны другие профессиональные навыки для развития и эксплуатации подобной конструкции.

Когда я писал про альтернативу Splunk, то отметил, что альтернативой будет ELK++, где первый плюс это аналитика во внешнем framework. Без этого невозможно решать задачи аналогично тому, как мы их решаем в Splunk. Вторым плюсом приставки является подписка платное расширение функциональности, которое существенно усиливает бесплатный уровень basic. В подписке решаются вопросы ИБ (интеграция с IDM, ролевая модель доступа), alerting, reporting, machine learning, расширенный мониторинг стека и управление pipeline Logstash из Kibana, JDBC\ODBC, cross cluster replication и т.д. Подписка не снимает первого плюса (аналитика во внешнем framework), но при несложных аналитических концепциях (не наш случай) можно обойтись комплектом ELK subscription + BI Tableau.

В слое хранения и анализа данных та же присутствует Zabbix, который выполняет роль центральной консоли событий (триггеров) в системе мониторинга. Как было сказано выше, данные в Zabbix собираются через собственные агенты и с помощью Logstash, который взаимодействует с внутренними интерфейсами системы мониторинга и интерфейсами контролируемых сервисов. Всю активность по триггерам отслеживает дежурная служба, но для удобства эксплуатации и поддержки сервисов реализована маршрутизация нотификаций в корпоративном мессенджере.

Короткий вывод по слою конечных аналитических систем. Вся самая сложная аналитика делается сейчас в Splunk. Учитывая, что вендор ушел с российского рынка, мы сосредотачиваем усилия на альтернативном решении ELK++. Почему же ELK, а не что-то другое? Ответ в критерии компактности прикладного стека и задачах: Elastic покрывает все домены обратной связи с сервисом (метрики, логи, прикладные трассы), он легко масштабируется и конфигурируется, имеет богатый набор экспортеров данных и плагинов Logstash, что делает его наиболее универсальным и привлекательным для нас инструментом.

Интерфейсы пользователя

Пользовательские интерфейсы можно разделить на две части аппаратные и программные. К аппаратным относятся большие видеостены в ситуационных центрах НСПК (их у нас два) и отдельные панели, раскиданные по офисам у руководства в кабинетах, в командах эксплуатации конкретных сервисов и т.д.

К программным интерфейсам относятся Grafana, Kibana, Splunk, Zabbix и Telegram. Splunk и Zabbix для дежурной службы являются основными, Grafana выступает в качестве резерва. Zabbix центральная консоль событий в системе. Вкладка с триггерами постоянно открыта у каждого дежурного. В Splunk подготовлены все необходимые визуализации для анализа ситуаций по любому сервису, также дается возможность всем линиям работать с данными в режиме ad hoc, так как не всё можно заранее заложить в подготовленные аналитические панели.

Отдельно хочется сказать про маршрутизацию нотификаций в мессенджер, поскольку оказалось, что это очень удобная и эффективная концепция адресной доставки уведомлений по событиям в системе мониторинга и общего управления инцидентами. Как я писал ранее, у нас несколько экземпляров систем мониторинга в закрытых сетевых контурах. Все события, возникающие в Zabbix по разным сервисам, отстреливают уведомления в офисный контур, откуда всё это по средствам скрипта Python маршрутизируется в профильные группы корпмессенджера.

Этот подход сильно сокращает время реакции на инцидент. Было время, когда дежурная служба передавала информацию вручную. Сейчас первая линия контролирует, что все нотификации доходят корректно, отрабатывают инструкции к триггерам (если они определены), отслеживают поведение бизнес-метрик по сервису, занимаются коммуникацией между подразделениями компании, связываются с участниками рынка по инцидентам, эскалируют инциденты на руководство, взаимодействуют с контрагентами по нарушениям SLA и т.д.

Заключение


Хотелось бы закончить статью описанием главных качеств инженера SRE (Site Reliability Engineering). Знакомство с этой концепцией когда-то меня поразило очень интересная и сильная методология, снимающая абсолютно все барьеры между разработкой и эксплуатацией. В своей работе мы стараемся применять важные и полезные для нас части этой концепции.

Что же это за качества? По версии авторов книги Site Reliability Engineering. Надежность и безотказность как в Google это:

  • Обратное проектирование
  • Статистическое мышление
  • Импровизация в сложных\нестандартных ситуациях

Где во всём этом мониторинг? В статистическом мышлении! Высоконагруженные распределенные системы невозможно мониторить без этого качества. Десятки, сотни, тысячи хостов и приложений генерируют о себе какие-то метаданные, понимание которых нельзя сформировать без техник централизованного сбора и статистики это как минимум.
Мониторинг современного программного проекта это сам по себе программный проект
Очень точная формулировка. Техническая и логическая сложность мониторинга возникает не от того, что нечем заняться, а от того, что по мере развития задачи становятся всё сложнее. Необходимо отвечать на эти вызовы, потому что 99.999% доступности не просто красивая цифра, а тяжёлая работа большого числа специалистов компании и достичь её можно только максимальной отдачей и постоянным развитием.
Подробнее..

Обновление фронтальных систем НСПК без прерывания сервиса

23.12.2020 08:22:02 | Автор: admin

Фронтальные офисные (ФО) системы одни из основных MissionCriticalсистем, эксплуатируемых в НСПК сегодня. Они отвечают за обработку и маршрутизацию авторизационных запросов между Банком-эквайрером и Банком-эмитентом. Именно через них производят обмен данными банки пока вы проводите операцию по карте. Через ФО проходит до 60 миллионов авторизаций в сутки, при этом в пике они обрабатывают 1800TPS(transactionpersecond).

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

ФО обладают достаточно сложной архитектурой и имеют 4-кратное резервирование каждого сервера.

Мы используем 2 ЦОД для георезервирования. В каждом ЦОД расположены ноды, принимающие соединения и обрабатывающие трафик от банков. Каждая нода обслуживает часть банков. Имеются следующие резервирования нода, обслуживающая трафик участников (нода А), имеет копию внутри ЦОД (нода В), а также копии этих двух нод существуют и в другом ЦОД.

Существует 3 типа подключения участников:

  • Участник имеет одно активное соединение к 1 ЦОД (Active-Passive);

  • Участник имеет два активных соединения к 2 ЦОД (Active-Active);

  • Участник имеет четыре активных соединения к 2 ЦОД (4Active).

Как и любые другиеIT-системы, ФО требуют периодических обновлений. Мы разделяем обновления на следующие типы:

  • Релиз;

  • Hotfix.

Релиз рождается в рамках 2-недельных спринтов и может содержать в себе следующие изменения:

  • Businessfeatures внедрение новой бизнес-функциональности в платежную систему. Например, такие сервисы какПокупка с выдачей наличных, возможность использования новыхWalletproviders(MirPay,Samsungpay,etc.);

  • Technicalfeatures внедрение технических изменений, упрощающих сопровождение системы, повышающих ее скорость работы, переход на новые технические решения;

  • Bugfixing устранение багов, не оказывающих влияния на бизнес компании.

Изменения в видеhotfixмогут устанавливаться между релизами и предназначены для исправления ситуаций, когда есть влияние на бизнес компании, и часть трафика не может быть корректно обслужена. При этом это могут быть не только ошибки в нашей системе бывает, что после установки новых версий системы на стороне банка возникают ошибки в обработке его трафика, так как некоторые поля авторизационного протокола участник заполняет неверно. Если участник не может оперативно решить проблему, то мы производим, если это возможно, корректировку ошибок на нашей стороне до того момента, как банк решит проблему на своей стороне.

Как правило, все изменения в виде релиза илиhotfixтребуют полной остановки приложений, отвечающих за обработку трафика на ноде. Это требуется для дистрибуции новых библиотек, перезапуска приложений, а также контроля по логам и через систему мониторинга, что ошибок при старте не образовалось, и модули ФО запущены в полном составе. Но мы не можем останавливать обработку трафика от банков, так как их клиенты не могут ждать у кассы и/или банкоматов, когда мы завершим обновление, и они смогут совершить покупку или снять наличные. Также мы стремимся к доступности нашего сервиса в 99,999%.

Обновление происходит следующим образом:

  1. Остановка приклада на резервных нодах В, где нет трафика от участников.

  2. Обновление ФО на нодах В.

  3. Перевод трафика с активных нод А на обновленные ноды В путем остановки нод А.

  4. Контроль правильности обработки трафика, отсутствия возросших отказов, ошибок в логах.

  5. Обновление нод А.

  6. Ноды В теперь становятся активными, а ноды А резервными.

Участники обмениваются авторизационными сообщениями по прикладному протоколу, основанному на ISO 8583. Он описывает формат финансовых сообщений и процесс передачи системами, обрабатывающими данные банковских платежных карт. Транспортным протоколом выступаетTCP/IP. Участник имеет только дваIPдля подключения (по одному на каждый ЦОД) и не знает, на какую ноду (А или В) уходит его трафик. Раньше мы использовали так называемый балансировщик, который проверял доступность ноды А при установке соединения со стороны банка. В случае ее доступности, устанавливалось соединение с нодой А, при недоступности ноды А, происходило установление соединения с нодой В.

Схема с балансировщиком имела следующий вид:

Использование балансировщиков было удобным и простым для сопровождения, при выключении нод происходило переустановление сессий на резервные ноды, однако опыт эксплуатации выявил следующие недостатки:

  • доступность ноды определяется балансировщиком только во время установления сессии от банка;

  • невозможность проведения обновлений ФО без разрывов соединений. Чтобы перевести трафик на резервные ноды В, происходит разрыв всех соединений, и всему рынку необходимо заново устанавливать свои сессии. Так как после установления сессий на транспортном уровне необходимо также установление прикладного уровня. Большинство банков умеют восстанавливать свои соединения в автоматическом режиме, но разные ПО банков это делают с разной скоростью. Неизбежно происходят потери авторизаций на время переключения. Это негативно влияет на нашу доступность.

  • в случае некорректной обработки трафика на нодах В во время обновления, обратное переключение на ноды А требует времени.

Мы стремимся к доступности 99,999% для наших ФО,поэтомув компании было принято решение и запущен проект разработки нового комплекса по управлению трафиком участника. К нему предъявлялись следующие требования:

  • возможность быстрого ручного или автоматического переключения трафика между нодами А и В;

  • переключение между нодами не должно порождать разрыв существующейTCPсессии с банками;

  • отказоустойчивость. Новый модуль должен быть зарезервирован, его падение также не должно вызывать разрываTCP-сессии с банками;

  • удобный графический web-интерфейс управления с разграничением доступов.

В итоге мы получили новую подсистему управления соединениями с участниками МУПС/ПУПС.

Схема подключения преобразилась следующим образом:

Название система получила от имени двух модулей, из которых она состоит:

  • ПУПС Прокси управления прикладными соединениями;

  • МУПС Модуль управления прикладными соединениями.

Мы вывели точки терминации трафика от банков из ЦОД в точки обмена трафиком М9 и М10, где располагается наше коммуникационное оборудование. Оборудование для реализации нового умного балансировщика мы также расположили на этих площадках.

В каждой точке обмена трафиком М9/М10 мы расположили по активной и резервной паре МУПС/ПУПС. Перейдем к описанию этих компонент и принципа работы нового комплекса. Серверы с этими парами объединены в VRRP-кластер с помощью keepalived и делят между собой один виртуальный IP.

ПУПС отвечает за TCP-взаимодействие узла балансировки с процессинговым ПО банков. Реализует механизм репликации и прозрачного восстановления TCP-соединений с организацией-участником на случай штатного переключения:

  • принимает TCP-соединения;

  • инициирует обмен данными между МУПС, ПУПС и банком;

  • отправляет и получает прикладные сообщения;

  • обрабатывает управляющие соединения между МУПС и ПУПС;

  • восстанавливает TCP-подключения и обеспечивает переключение между основными и резервными МУПС/ПУПС.

МУПС, второй компонент системы, предназначен для:

  • поддержания соединений с нодами ФО;

  • управления соединениями банков (включить/выключить, подключиться к ноде А или ноде B);

  • оборачивания сообщения ISO 8583 (авторизационная информация от банка) в свой протокол взаимодействия МУПС и ноды ФО;

  • получения сообщений от ноды ФО, разворачивания сообщения ISO 8583 и отправка в ПУПС;

  • подачи команды ПУПС о миграции на резервный сервер.

Одна из самых важных функций МУПС, ради чего он создавался, это переключение обработки трафика на резервную ноду ФО и обратно без разрыва соединения с банком-участником. Это работает благодаря тому, что МУПС стоит между ПУПС, который "держит" соединение с банком, и ФО, который обрабатывает трафик. МУПС управляет тем, куда именно этот трафик направляется в данный момент, и по команде от администратора осуществляет незаметное для банка и безопасное для обработки операций переключение между серверами.

Происходит это следующим образом:

  • фронтальные модули по команде от МУПС переходят в состояние синхронизации

  • активный модуль, который в данный момент обрабатывает операции, загружает контексты in-flight операций (для которых он ожидает, но ещё не получил ответных сообщений от банка) из своей памяти в общий in-memory data grid

  • резервный модуль забирает к себе эти контексты

  • по завершении выгрузки МУПС деактивирует активный модуль и передаёт на резервный его новый статус и ряд runtime-параметров, с которым работал прошлый активный модуль

  • с этого момента МУПС начинает направлять трафик от участника на новый активный модуль

Для передачи данных и управления МУПС используется два соединения. Первое это Data-соединение. Используется для передачи данных по авторизациям от банка (ISO8583) в ФО и обратно. Второе соединение это Control-соединение. Используется для обмена управляющими сообщениями между ПУПС и МУПС. В управляющем соединении используются команды для проверки жива ли активная пара МУПС/ПУПС командаheartbeat, а также ряд команд для осуществления переезда соединений на резервную пару МУПС/ПУПС в рамках площадки.

В узле балансировки активный ПУПС взаимодействует только с МУПС, установленном на том же сервере, что и ПУПС.

Если сигналы heartbeat от МУПС отсутствуют в течение заданного времени, ПУПС на активном узле начинает процедуру активации второго узла в кластере (при его доступности), а затем деактивируется.

Процесс миграции с основного сервера на резервный сервер происходит следующим образом:

  • ПУПС на основном сервере устанавливает флаг готовности к миграции;

  • на основном сервере создается дамп процесса, далее ПУПС переносит его образ на резервный сервер, а также устанавливает флаг готовности к миграции и восстановлению на резервном сервере;

  • ПУПС на резервном сервере при обнаружении образа переносит правила iptables и увеличивает приоритет Keepalived на узле, тем самым запускается процедура переноса IP-адреса;

  • после переноса IP-адреса Keepalived на резервном сервере из образа восстанавливается работающий процесс. Также восстанавливается приоритет самого Keepalived.

Таким образом, обеспечивается отказоустойчивость пары МУПС/ПУПС в рамках одной площадки.

Взаимодействие МУПС и ноды ФО происходит по собственному протоколу. В протоколе передается как платежная информация, так и проверяется доступность нод ФО с помощьюheartbeat, а также может передаваться ряд команд, необходимых для переезда трафика на неактивные ноды ФО. Очень важно: при переезде из активной ноды необходимо получить всю платежную информацию и передать ее уже в резервную нодуB. Наличие постоянныхheartbeatмежду МУПС и нодами ФО позволяет в автоматическом режиме диагностировать проблему с нодой и осуществлять мгновенные переводы трафика участника на резервную ноду без разрыва соединения с участником.

В основном работа администраторов системы происходит черезWEB-консоль управления МУПС. В ней отображен список банков, имеющих подключение к нам, статус их коннекции. Мы в удобном интерфейсе можем наблюдать, установлено ли подключение только на транспортном уровне, или имеется подключение на прикладном. Также мы видим, к какой именно ноде (А или В) подключен банк. По клику мыши мы можем переносить соединения выбранного банка или всех сразу между нодами А и В. При этом участник не видит для себя никаких разрывов и пропадания авторизационного трафика.

Заключение

Созданный комплекс МУПС/ПУПС позволил решить ряд существенных вопросов компании по управлению прикладными соединениями банков с компанией:

  • все работы на ФО остаются незамеченными для участников, не происходит разрыва соединений и потери транзакций;

  • при проблеме на ноде ФО, перевод трафика на резерв осуществляется автоматически и мгновенно, банк также не видит разрыва соединения;

  • дежурные службы и администраторы ФО получили удобный и наглядный инструмент для управления соединениями. Вывод ноды из работы для обновления ОС, замены железных компонент также не замечается участником и не приводит к транзакционным потерям.

Подробнее..

Архитектура экосистем

15.12.2020 10:11:51 | Автор: admin

Термин Экосистема появился в бизнес-лексиконе в 1993 году. Американский ученый Джеймс Мур в статье Хищники и жертва: новая экология конкуренции так обозначил модель объединения компаний вокруг решения единой стратегической задачи. Последнее время термин особенно популярен. Упоминаемость экосистемной бизнес-модели на пике в деловых новостях, бизнес-публикациях, финансовых отчетах и программах развития корпораций. Бизнес-экосистемам посвящаются деловые форумы и конференции.

Экосистемная бизнес-модель обычно рассматривается и обсуждается в контексте конкурентного противостояния корпораций, продуктового и сервисного наполнения, клиентского опыта. Меньше внимания уделяется исследованию технических и организационных аспектов ресурсам, инструментам, подходам и технологиям. Поэтому предлагаю совместно восполнить пробел - заглянуть за фронтенд экосистемы и обсудить архитектурную специфику этой бизнес-модели.

Для начала все-таки придется посвятить пару слов лирике - природе и этапам становления экосистем. Это поможет выровняться в понимании самого термина.

В ретроспективе 25-30 лет экосистемная бизнес-модель эволюционировала. На этапе зарождения этого понятия под экосистемой понималось в большей степени объединение вокруг одного продукта конкурирующих между собой поставщиков и производителей. Пример - разработчики клиентского ПО для компьютеров Apple или производители аппаратных компонентов для ПК IBM. Превалировала классическая платформенная модель, которая решала задачу расширения и максимизации ассортиментного состава клиентских продуктов или составных компонентов одного продукта. Сегодня экосистемы приобрели сложный сетевой характер.Бизнес-экосистема выполняет роль источника ресурсов и знаний для развития компаний-участников. Синергетический эффект от участия в экосистеме стал проявляться в намного большем объеме. Продукты и сервисы этой бизнес-модели обогащают друг друга технологиями, функциями и операционными данными.Технологии - главный драйвер эволюции и становления экосистемной бизнес-модели. Тридцать лет назад в розничном бизнесе преобладал Product-centric подход. Главной задачей было грамотно сегментировать клиентскую аудиторию, правильно позиционировать товар, сформировать стратегию продвижения и дистрибуции. С ростом популярности персональных компьютеров, развитием телекоммуникаций, Интернет-технологий и появлением смартфонов возникла ориентация на каналы продаж - WEB-first, Mobile-first, Voice-first. Появилась электронная торговля и продвижение. Золотая полка, статичная и ограниченная в размерах в офлайн-ритейле по причине расположения на уровне глаз покупателя, в электронных каналах продаж стала безграничной и кастомизируемой под каждого клиента. Бизнес представил взору клиента весь товарный ассортимент. Взрывной рост и отрыв от конкурентов получили компании, которые быстро освоили новые каналы продаж и переориентировались на платформенную электронную бизнес-модель. Netflix и Zappos вырвались вперед в конкурентной борьбе, когда предложили клиентам больший ассортимент через онлайн-каналы. Крупнейшим розничным банкам взаимодействие через личные кабинеты клиентов помогло расширить набор финансовых продуктов.

Дальнейший рост вычислительных возможностей, доступности хранилищ данных и их логистики привели к появлению клиенто-центричного подхода в розничном бизнесе. Каждый клиент компании стал отдельным самостоятельным сегментом. Благодаря технологиям регистрации, обработки и анализа неструктурированных операционных данных, бизнес научился предугадывать клиентское поведение и предвосхищать ожидание клиента. Дополнительным катализатором послужило появление CEP (Complex Event Processing) и RTDM (Real-Time Decision Manager) -решений, которые обеспечили анализ информации на лету. Большие данные перестали анализировать по ночам. Интернет-компании за мгновения узнают пользователя и отображают таргетированную рекламу или цену товара уже после обращения к WEB-странице. Благодаря предиктивной аналитике физическое формирование посылки с товарами начинается одновременно с наполнением корзины на сайте - до момента оплаты товара клиентом. А предложение международной страховки направляется клиенту финансовой компании сразу после оплаты покупки в аэропорту.

Скорость реакции на действия клиента, как фактор успеха розничного бизнеса, вышла на первый план. Часто стал побеждать не умный и лучший, а более быстрый.

Накопленные подходы и технологии позволили бизнесу создать новые способы конкуренции и, как следствие, новые бизнес-модели. Если раньше корпорации конкурировали с помощью технологий, то теперь - с помощью инновационных бизнес-моделей. Онлайн-магазины становятся Маркетплейсами, поставщики услуг и контента создают мультисервисные Онлайн-платформы, мобильные приложения трансформируются в Супераппы, а поставщики life-style сервисов объединяются вокруг клиента в единую электронную микросреду.

Эти профильные бизнес-модели и объединяет понятие Экосистема.

К текущему моменту сложилось две модели появления экосистем Европейская и Американо-Китайская. Первая модель предполагает децентрализованное объединение компаний - чаще стартапов - на основе единых правил, утверждаемых глобальным государственным или межгосударственным регулятором Центральным банком. Вторая модель предполагает объединение вокруг одного глобального финтех или бигтех игрока десятков меньших по объему бизнеса продуктов и сервисов. Примеры таких экосистем - Facebook, Amazon, Microsoft, Google, Apple (FAMGA) и Baidu, Alibaba, Tencent (BAT).

Не редко корпорации, которые реализуют экосистемную бизнес-модель, создают для себя принципиально новые источники дохода. Так, у крупнейших международных авиакомпаний, эффективно выстроивших программу лояльности и посредством начисления электронных миль окруживших клиентов экосистемой повседневных life-style сервисов, доход от программ лояльности может превышать доход от продажи пассажирских билетов. Посещая любимый ресторан или кинотеатр, приобретая одежду своего бренда, пользуясь услугами банка клиент не только накапливает мили на бесплатный перелет, но и помогает авиакомпании извлечь выгоду от направления клиентского трафика в торговые и сервисные предприятия.

Трансформируясь в экосистемную бизнес-модель, корпорации научились зарабатывать на собственной клиентской аудитории. Как говорится, если вы не платите за продукт, значит вы и есть продукт.

Для экосистем характерен ряд свойств, которые отличают их от стратегических альянсов, а также вертикально- и горизонтально-интегрированных компаний:

  • Наличие больших ресурсов для регулярных исследований, опытов и развития решений

  • Использование новых технологий, архитектуры и подходов к разработке ПО

  • Регулярная работа с большими данными

  • Цифровые бизнес-процессы

  • Отсутствие бюрократии в производственном процессе, сокращенный Time-to-market

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

Для клиента такая бесшовная мультисервисная среда включает, например:

  • Возможность использовать единый логин и пароль в разных продуктах

  • Возможность не вводить многократно свои данные в профилях разных сервисов

  • Доступность нужных сервисов в разных интерфейсах (каналах, продуктах) экосистемы

  • Использование единого платежного инструмента, подписки, бонусной программы

  • Просмотр релевантного контента и предложений

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

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

Среди таких глобальных технологических сервисов и подходов можно выделить:

  • Сервисы обеспечения омниканальности.

  • Единую учетную запись.

  • Единый ID клиента и клиентский профиль.

  • Доступность основных сервисов и функций через API.

  • Централизованный клиентский биллинг экосистемы.

  • Ориентацию на событийную модель интеграции (Event-Driven Architecture).

  • Единый контакт центр и службу поддержки.

  • Единый аналитический и операционный CRM.

Рассмотрим некоторые из них подробней.

Омниканальность

Клиент должен иметь доступ к единому набору сервисов независимо от канала взаимодействия. Задача экосистемы не только в том, чтобы предоставить пользователю единый состав сервисов в разных интерфейсах - приложении для смартфона, на сайте, в информационном терминале или офисе продаж. Необходимо внутри одного сервиса обеспечить для клиента возможность обращения к релевантным функциям других продуктов экосистемы. Поэтому под каналом взаимодействия важно понимать не столько виды интерфейсов, сколько сами сервисы и продукты экосистемы. Например, возможность оплатить заправку или включить любимый трек, не выходя из приложения-навигатора.

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

Для НСПК банковская карта это одновременно продукт и канал обслуживания клиента. Омниканальный подход реализуется набором клиентских сервисов, которые поставляются Платежной системой внутри данного клиентского канала. НСПК выступает платформой, связывающей держателей карты Мир с поставщиками финансовых и около-финансовых сервисов. Например, с банками-эмитентами, компаниями-партнерами программы лояльности, сторонними сервисами лояльности, государственными организациями, с собственным продуктом MirPay.

Единая учетная запись

Продукты экосистемы включают большой набор профильных функций. Например, банковское приложение содержит ряд инструментов для работы с текущими счетами, а приложение для инвестирования той же финансовой организации - другой широкий состав доступных операций. Совмещение двух функционалов в одном приложении было бы нецелесообразным с точки зрения UX/UI. При этом вынуждать клиента использовать разные логин и пароль для двух и более сервисов было бы отступлением от принципов экосистемы. Поэтому клиенты экосистемы используют единый логин и пароль.

С точки зрения архитектуры важно использовать единый для продуктов экосистемы сервис аутентификации и авторизации. Это условие выглядит очевидным в случае, когда компоненты экосистемы создаются одновременно. Но часто сама экосистема собирается из разрозненных самостоятельных клиентских сервисов, которые уже располагают авторизующими решениями. В этом случае возникает дилемма. C одной стороны в разных сервисах уже зарегистрированы одни и те же клиенты, которые на момент регистрации не давали согласия и не ожидали, что учетная запись в сервисе A в какой-то момент заработает в сервисе B. С другой стороны, новым клиентам должна быть доступна регистрация сразу во всех бизнес-доменах экосистемы. Оптимальный вариант - создание дополнительного глобального универсального для всей экосистемы способа регистрации и аутентификации, доступного клиентам наряду со стандартной регистрацией в отдельных сервисах (продуктах).

Единый ID клиента и клиентский профиль

Как уже говорилось, важнейший принцип экосистемы - максимизация знаний о клиенте. Здесь важным является взаимный обмен данными о клиентах между сервисами. Эту задачу сложно решить без уникального идентификатора клиента, единого для всех информационных систем и сервисов экосистемы. Если одна информационная система знает клиента по номеру паспорта, а другая по номеру телефона, то синхронизация данных возможна только с реализацией справочников соответствий идентификаторов на стороне каждой из систем. Если информационных систем много, то задача репликации клиентских данных усложняется, а нагрузка на системы возрастает кратно. Поэтому важно формировать уникальный ID клиента централизованно и в момент его регистрации в любом продукте экосистемы.

По той же причине критически важно централизованное хранение клиентского профиля. Информационные системы бизнес-доменов должны сохранять пользовательские данные в едином хранилище. При этом само хранилище предоставляет данные и для онлайн-обслуживания клиента - например, для загрузки профиля в личный кабинет, и для офлайн-аналитики. Отдельной задачей здесь стоит обеспечение оперативного обновления клиентского профиля системами-источниками.

Для платежной системы Мир единый ID клиента и клиентский профиль важен по нескольким причинам. Во-первых, контакт-центр должен иметь возможность оказать поддержку держателю карты по различным вопросам от начисления кэшбэка до токенизации карты в мобильном кошельке MirPay. Для этого информация о клиентских событиях должна сохраняться централизованно и привязываться к единому сквозному клиентскому идентификатору. Во-вторых, в рамках программы лояльности важно уметь предвосхищать клиентские ожидания и понимать, какие категории товаров и услуг интересны клиенту. Данные задачи как раз и помогает решать единый клиентский профиль, сквозной для всех доменов ID клиента и единый аналитический CRM. Новые клиентские продукты проектируются также с учетом использования кросс-доменных глобальных сервисов ID, профиля, учетной записи.

Единый платежный инструмент и централизованный клиентский биллинг экосистемы

Использование одного продукта экосистемы упрощает клиенту пользование другими продуктами. Это справедливо и для способа финансовых расчетов. Участник экосистемы должен иметь возможность оплатить разные сервисы с помощью одного инструмента и получать финансовую выгоду от одновременного пользования продуктами экосистемы. Легкий способ решения задачи - привязка (токенизация) банковской карты к разным сервисам. В этом случае клиент действительно будет использовать единый платежный инструмент. Но становится практически нереализуемой задача создания механик финансовой мотивации к пользованию разными продуктами экосистемы. Пользователю сложно будет начислить повышенные бонусные баллы за приобретение ряда услуг, оформить единую подписку, показывать в разных сервисах актуальный баланс и единую историю операций, отслеживать пользование услугами, проводить тарификацию в режиме реального времени. Клиент потеряет в бесшовности финансовых выгод, а продукты экосистемы в синергетическом эффекте. Поэтому такие задачи решаются с помощью единого клиентского счета или кошелька, которые обслуживаются в централизованной биллинговой системе. AliPay наиболее яркий пример такого финансового экосистемного сервиса.

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

Событийная интеграция систем (Event-Driven Architecture)

Используя перекрестное обогащение знаниями о клиенте компании создают сложные механики анализа клиентского поведения. Они помогают предвосхищать желания и потребности клиентов и предлагать релевантную продукцию товары, контент, услуги. На таком подходе построены концепции Next Best Offer (NBO) и Next Best Action (NBA). В рамках этих решений определяется, какой товар клиент с высокой вероятностью приобретет в конкретный момент (или период) времени. И, соответственно, какое действие клиент будет готов совершить в следующий момент. Для принятия таких решений компании анализируют в режиме real-time до тысячи триггеров клиентского поведения состав покупок, суммы, тип ТСП, запрашиваемый контент, проставленные в соцсетях лайки, среднее время просмотра роликов, контакты и многое другое. Но главное, решение на основе такого анализа необходимо принимать на лету, так как спустя время готовность клиента к приобретению товара или действию может сильно снизиться и предложение станет не актуальным. Поэтому для такого рода задач важна событийно-ориентированная интеграционная архитектура. Каждый домен экосистемы (как совокупность информационных систем) должен уведомлять другие домены о событиях в жизни клиента. Поэтому необходима организация супермаркета операционных данных - решения, которое позволяет информационной системе в онлайн-режиме получать важные для себя данные (например, на базе брокера сообщений Apache Kafka). Прямая интеграция систем для получения данных по запросу или рассылки сообщений о событиях создаст спагетти-архитектуру и, как следствие: существенный прирост нагрузки на системы, более сложное сопровождение, а также предпосылки для большего количества доработок в случае расширения атрибутного состава клиентских данных.


Такие технологические кросс-доменные сервисы могут включать экосистемные бизнес-модели. Данный список не является полным. Но перечисленные инструменты и подходы позволяют крупнейшим международным экосистемам обеспечивать множество клиентских решений, которые в совокупности создают превосходный клиентский опыт. При этом сами продукты экосистемы посредством перечисленных сервисов достигают главной цели получают синергетический эффект от взаимного обогащения знаниями и клиентской аудиторией.

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

Поэтому включение нового клиента в экосистему происходит по заранее и детально спроектированному клиентскому пути (Customer Journey). А работа с одним сервисом упрощает клиенту работу с другими сервисами.

Резюмируя, стоит также отметить, что с точки зрения ИТ продукты экосистемы связывает и множество других сервисов и подходов. Например, синхронизация разработки и релизного цикла, унификация стандартов информационной безопасности, технологического стека, пользовательских интерфейсов и клиентского опыта, единая логическая модель данных, консолидация и аналитика данных и многое другое.

Подробнее..

Системный подход к переменным в Ansible

07.08.2020 12:20:56 | Автор: admin

ansible devops codestyle


Hey! Меня зовут Денис Калюжный я работаю инженером в отделе автоматизации
процессов разработки. Каждый день новые сборки приложений раскатываются на сотнях
серверов кампании. И в этой статье я делюсь опытом использования Ansible для
этих целей.


Этот гайд предлагает способ организации переменных в деплое. Рассчитан данный
гайд на тех кто уже использует роли в своих плейбуках и читал Best
Practices
, но сталкивается с подобными проблемами:


  • Найдя переменную в коде, невозможно сходу понять за что она отвечает;
  • Есть несколько ролей, и переменные нужно связать одним значением, но никак
    не получается;
  • Возникают трудности в объяснении другим, как устроена логика переменных в
    ваших плейбуках

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



Переменные в ролях


Роль это отдельный Объект системы деплоя. Как и любой объект системы, он
должен иметь интерфейс взаимодействия с остальной системой. Таким интерфейсом
являются переменные роли.
Возьмём, для примера, роль api, которая устанавливает Java приложение на
сервер. Какие переменные у неё могут быть?



Переменные роли можно разделить на 2 вида по типу:


1. Свойства    a) независимые от среды    б) зависимые от среды2. Связи    a) слушатели     б) запросы внутри системы    в) запросы в среду

Переменные свойства это переменные, которые определяют поведение роли.


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


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


С другой стороны, 1а, 2а, 2б это переменные, которые не зависят от среды
(железо, внешние ресурсы и т.д.) и могут быть заполнены дефолтными значениями в
defaults роли. Однако переменные типа 1.б и 2.в заполнить кроме как 'example'
значениями невозможно, так как они будут меняться от стенда к стенду в
зависимости от окружения.


Code style


  • Название переменной обязательно должно начинаться с названия роли. Это позволит
    в дальнейшем легко разобраться, из какой роли переменная и за что она отвечает.


  • При использовании переменных в ролях вы должны обязательно следовать принципу
    инкапсуляции и использовать переменные определённые либо в самой роли, либо
    в ролях, от которых текущая зависит.


  • Старайтесь не использовать словари для переменных. Ansible не позволяет
    удобно переопределять отдельные значения в словаре.
    Пример плохой переменной:


    myrole_user:    login: admin    password: admin
    

    Здесь login средонезависимая переменная, а password зависимая. Но
    поскольку они объединены в словарь, вам придётся задавать её полностью
    всегда. Что очень неудобно. Лучше так:


    myrole_user_login: adminmyrole_user_password: admin
    


Переменные в плейбуках деплоя


При составлении плейбука деплоя (далее плейбук), мы придерживаемся правила, что
он должен размещаться в отдельном репозитории. Так же, как и роли: каждая в своем
git репозитории. Это позволяет осозновать, что роли и плейбук это разные
независимые объекты системы деплоя, и изменения в одном объекте не должны влиять
на работу другой. Достигается это изменением дефолтных значений переменных.


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


mydeploy                        # Каталог деплоя deploy.yml                  # Плейбук деплоя group_vars                  # Каталог переменных плейбука  all.yml                 # Файл для переменных связи всей системы  myapi.yml               # Файл переменных свойств группы myapi inventories                 #     prod                    # Каталог окружения prod       prod.ini            # Инвентори файл       group_vars          # Каталог для переменных инвентори         myapi           #           vars.yml    # Средозависимые переменные группы myapi           vault.yml   # Секреты (всегда средозависимы) *

* Variables and Vaults


Разница в том, что переменные плейбука используются всегда при вызове
плейбуков, расположенных с ним на одном уровне. А значит, эти переменные отлично
подходят для изменения дефолтных значений переменных, не зависящих от среды. И,
наоборот, переменные инвентори будут использоваться только для конкретного
окружения, что идеально для переменных зависящих от среды.


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


Например, в одном проекте переменная, отвечающая за включение SSL долго была
средозависимой, поскольку мы не могли включить SSL по независящим от нас
причинам на одном из стендов. После того, как мы устранили эту проблему, она
стала средонезависимой и переместилась в переменные плейбука.


Переменные свойств для групп


Расширим нашу модель на рисунке 1, добавив 2 группы серверов с другим Java
приложением, но с разными настройками.



Представим, как будет выглядить плейбук в этом случае:


- hosts: myapi  roles:    - api- hosts: bbauth  roles:    - auth- hosts: ghauth  roles:    - auth

У нас есть три группы в плейбуке, поэтому сразу рекомендуется создать столько же
файлов групп в group_vars переменных инвентори, и переменных плейбука. Один
файл группы в этом случае, является описанием одной компоненты вышего приложения
в плейбуке. Открывая файл группы в переменных плейбука вы сразу видите все
отличия от дефолтного поведения ролей установленных на группу. В переменных
инвентори: отличия поведения группы от стенда к стенду.


Code Style


  • Старайтесь вообще не использовать host_vars переменные, поскольку они не
    описывают систему, а только частный случай, что в перспективе приведёт к
    вопросам: "А почему этот хост отличается от остальных?", ответ на который не
    всегда легко найти.

Переменные связи


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


По началу была идея использовать монструозную конструкцию вида:
hostvars[groups['bbauth'][0]]['auth_bind_port'], но от неё сразу отказались
поскольку она имеет недостатки. Во-первых, громоздкость. Во-вторых, зависимость
от определенного хоста в группе. В-третьих, необходимо перед началом деплоя
собрать факты со всех хостов, если мы не хотим получить ошибку неопределённой
переменной.


В итоге решено было использовать переменные связи.


Переменные связи это переменные, которые принадлежат плейбуку, и нужны для
связи объектов системы.


Переменные связи заполняются в общих переменных системы group_vars/all/vars и
образуются путём выноса всех переменных слушателей из каждой группы, и
добавлением в начало переменной название группы откуда слушатель был вынесен.
Таким образом обеспечивается однотипность и непересекаемость имён.


Попробуем связать переменные из примера выше:



Представим, что у нас есть переменные, которые друг от друга зависят:


# roles/api/defaults:# Переменная запросаapi_auth1_address: "http://example.com:80"api_auth2_address: "http://example2.com:80"# roles/auth/defaults:# Переменная слушательauth_bind_port: "20000"

Вынесем в общие переменные group_vars/all/vars всех слушателей, и добавим в
название имя группы:


# group_vars/all/varsbbauth_auth_bind_port: "20000"ghauth_auth_bind_port: "30000"# group_vars/bbauth/varsauth_bind_port: "{{ bbauth_auth_bind_port }}"# group_vars/ghauth/varsauth_bind_port: "{{ ghauth_auth_bind_port }}"# group_vars/myapi/varsapi_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"

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


Code Style


  • Поскольку роли и группы это разные объекты системы, нужно чтобы они имели
    разные названия, тогда переменные связи будут точно показывать, что они
    принадлежат конкретной группе серверов, а не роли в системе.

Средозависимые файлы


В ролях могут использоваться файлы, которые отличаются от среды к среде.
Примером таких файлов можно назвать SSL-сертификаты. Хранить их в текстовом виде
в переменной не очень удобно. Зато удобно хранить путь до них внутри переменной.
Например, используем переменную api_ssl_key_file: "/path/to/file".


Поскольку очевидно, что сертификат ключа будет меняться от среды к среде, то это
средозависимая переменная, а значит она должна расположиться в файле
group_vars/myapi/vars инвентори переменных, и содержать значение 'для примера'.


Удобнее всего в этом случае положить файл ключа в репозиторий плейбука по пути
files/prod/certs/myapi.key, тогда значение переменной будет:
api_ssl_key_file: "prod/certs/myapi.key". Удобство же заключается в том, что
люди отвечающие за разворачивание системы на конкретном стенде, так же имеют
своё выделенное место в репозитории для хранения своих файлов. В то же время
остаётся возможность указать абсолютный путь до сертификата на сервере, на
случай если сертификаты поставляются другой системой.





Несколько стендов в одной среде


Часто возникает потребность развернуть несколько практически идентичных стендов
в одной среде с минимальными различиями. В этом случае мы делим средозависимые
переменные на те, что не меняются в рамках этой среды и те, что меняются. И
выносим последние непосредственно в сами инвентори файлы. После этой манипуляции
становится возможным создать ещё один инвентори прямо в каталоге окружения.
Он будет переиспользовать инвентори group_vars, а также иметь возможность
переопределить некоторые переменные непосредственно под себя.





Окончательная структура каталогов для проекта деплоя:


mydeploy                        # Каталог деплоя deploy.yml                  # Плейбук деплоя files                       # Каталог для файлов деплоя  prod                    # Католог для средозависимых файлов стенда prod   certs               #        myapi.key       #  test1                   # Каталог для средозависимых файлов стенда test1 group_vars                  # Каталог переменных плейбука  all.yml                 # Файл для переменных связи всей системы  myapi.yml               # Файл переменных свойств группы myapi  bbauth.yml              #   ghauth.yml              # inventories                 #     prod                    # Каталог окружения prod      group_vars          # Каталог для переменных инвентори       myapi           #        vars.yml    # Средозависимые переменные группы myapi        vault.yml   # Секреты (всегда средозависимы)       bbauth          #         vars.yml    #        vault.yml   #       ghauth          #           vars.yml    #           vault.yml   #      prod.ini            # Инвентори стенда prod     test                    # Каталог окружения test         group_vars          #          myapi           #           vars.yml    #           vault.yml   #          bbauth          #           vars.yml    #           vault.yml   #          ghauth          #              vars.yml    #              vault.yml   #         test1.ini           # Инвентори стенда test1 в среде test         test2.ini           # Инвентори стенда test2 в среде test

Подведение итога


После организации переменных в соответствии со статьёй: каждый файл с
переменными отвечает за определённую задачу. А раз у файла есть определённые
задачи, то стало возможным назначить ответственного за правильность каждого
файла. Например, за правильность заполнения переменных плейбука ответственным
становится разработчик деплоя системы, в то время как за заполнение инвентори
переменных отвечает непосредственно администратор, стенд которого описан в
инвентори.


Роли стали самостоятельной единицей разработки с собственным интерфейсом, что
позволило разработчику роли разрабатывать возможности, а не подстраивать роль
под систему. Особенно эта проблема касалась общих ролей для всех систем в
кампании.


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


Литература


  1. Документация

Автор


Калюжный Денис Александрович

Подробнее..

Как мы поощряем и развиваем ключевых сотрудников

04.02.2021 10:09:11 | Автор: admin

Третий год в нашей компании действует проект Ключевые люди. Проект, который дает возможность высокопотенциальным сотрудникам осознанно подходить к своему развитию, получая персональные рекомендации по развитию и персональный бюджет на обучение. Высокоэффективные сотрудники имеют дополнительные льготы и систему мотивирования. А носители экспертных знаний помогают коллегам этими знаниями овладеть, тем самым высвободить свое время на спокойный отдых и новые проекты.

А с чего все началось?

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

Анализируя полученную обратную связь, мы запустили проект Ключевые люди (Key People). Благодаря ему желающие развиваться и обучаться могли бы получить конкретные рекомендации по своему развитию и уверенно двигаться к намеченной цели. Сотрудники, демонстрирующие прорывные результаты работы, поняли, что компания ценит их вклад, выражая им признание и индивидуальный подход в системе премирования. А сотрудников носителей уникальной экспертизы компания готова поощрять за передачу знаний коллегам.

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


High Potential (HiPo) высокопотенциальные сотрудники. Они проактивны в собственном развитии, инициативны, с лидерскими задатками;

Best Performers сотрудники, регулярно достигающие очень высоких результатов работы в своем подразделении. Они могут решить любую сложную, нестандартную задачу;

Key Expert сотрудники, обладающие уникальными знаниями не только в рамках компании, но на рынке труда в целом.


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

После этого мы провели интервью с руководителями, спросив их о конкретных качествах High Potential, Best Performers и Key Experts. Что эти люди должны делать, чтобы руководитель увидел в одном большой потенциал, а в другом большую эффективность? Как описать их поведение?

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

Таким образом, мы не стали использовать чужие наработки, а получили перечень компетенций, который был максимально про нас. Дальнейший отбор мы также вели собственными силами. Каждый руководитель структурного подразделения определял своих номинантов, а после этого представлял его на общей встрече руководителей. Все участники встречи обсуждали, соответствует ли данный сотрудник разработанным критериям или нет.

Для HiPo мы проводим дополнительный этап оценки, помогающий ребятам понять свои сильные стороны и зоны развития. Важно, что только в категорию HiPo сотрудники могли сами выдвинуть свою кандидатуру.

Итак, к сентябрю 2018 года мы провели большой отборочный этап и определили пул ключевых сотрудников по трем категориям. В рассмотрении участвовали 196 уникальных номинантов.

Один человек мог попасть в несколько категорий сразу.

В 2018 году мы решили запустить пилотный проект (обкатать концепцию, понять, что сработает, а что нужно доработать, собрав обратную связь), а в следующем 2019 году внести необходимые корректировки.

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

High Potential:
Для каждого участника, прошедшего отбор:

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

Планируем индивидуальное обучение. Для каждого HiPo мы выделяем свой персональный бюджет на обучение (помимо того, что планируем на профессиональное обучение в рамках общей программы компании);

Проводим единую модульную программу обучения для всех HiPo по их западающим компетенциям, выявленным в ходе оценки.

Best Performer:

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

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

Key Expert:

Обучаем экспертов навыкам передачи знаний. Как правильно составить программу передачи знаний, как работать с подопечным и т.д.;

Награждаем наставников по результатам передачи знаний;

Пишем про коллег в корпоративных СМИ. Рассказываем о том, что они делают в компании, в чем уникальность их опыта и экспертизы.

Прошедшие 2 года программы принесли много позитивных отзывов. Мы не стоим на месте и постоянно совершенствуем проект. Очень радует, что каждый год количество желающих выдвинуть свою кандидатуру в HiPo прирастает. Наша самая первая группа HiPo сейчас уже работает над полезным для компании проектом, на подходе следующая группа, которая будет реализовывать своей проект. Также мы видим, что результаты обучения и развития сотрудников положительно влияют на их продвижение в компании (30% HiPo получили продвижение за последние 2 года).

Наши наставники продолжают делиться своими знаниями, это позволило подготовить себе бэкап и наконец-то спокойно уходить в отпуск или подключаться к новым проектам. На наших ключевых экспертах завязаны важнейшие технологические процессы и раньше им приходилось работать даже из отпуска. Мы в компании считаем это неправильно, нам очень важно, чтобы у сотрудника была возможность переключаться и полноценно отдыхать. Поэтому проект помог решить эту задачу.

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

И самое главное, что даже если кто-то из коллег не попал в проект, он может попасть в него на следующий год. Но и до этого любой сотрудник может воспользоваться большими возможностями для обучения, которые предоставляет компания. Это и наш портал дистанционного обучения и общекорпоративные регулярные вебинары, тренинги, книги в электронной библиотеке. Также компания оплачивает сотрудникам посещение внешних профессиональных тренингов, вебинаров и конференций.

Мы видим интерес со стороны сотрудников к проекту, поэтому каждый год проводим новый отбор, таким образом, возможность поучаствовать в нем есть у всех наших сотрудников.

Подробнее..

Recovery mode Что безопаснее PIN Online или PIN Offline?

22.06.2020 20:08:04 | Автор: admin

С появлением на рынке микропроцессорных платежных карт наряду с хорошо и давно знакомым к этому времени методом для верификации держателя карты PIN Online, когда значение ПИН проверяется эмитентом карты на его хосте, начал повсеместно применяться метод PIN Offline.


Суть метода PIN Offline состоит в том, что эмитент карты делегирует проверку ПИН своей карте. Сама карта проверяет значение ПИН, введенного пользователем на терминальном устройстве, сравнивая его с референсным значением, защищенным образом хранимым в платежном приложении карты.

Несмотря на то, что оба метода верификации параллельно используются вот уже 15 лет, до сих пор иногда приходится слышать вопросы: какой метод обеспечивает более высокую безопасность при обработке операции- PIN Online или PIN Offline? И вообще- можно ли эмитенту (банку, выпустившему карту) обойтись только одним из указанных методов проверки ПИН? Например, методом PIN Online. Очевидно, с точки зрения эмитента этот метод проще метода PIN Offline при реализации процедур персонализации карты, изменения ПИН держателем карты, контроля лимита на число попыток ввода неверных значений ПИН, поскольку в этом случае перечисленные процедуры выполняются только на хосте эмитента и не требуют применения дополнительных действий на стороне платежного приложения карты.



Понятно, что приведенные выше вопросы могут задаваться людьми, знакомыми с карточными технологиями. Для обычного держателя карты оба метода его верификации неразличимы, и он может даже не знать об их существовании. Независимо от используемого метода держатель карты просто вводит на клавиатуре терминала значение ПИН, а уж каким образом этот ПИН потом проверяется, держателя карты мало интересует.


Проще всего ответить на вопрос о том, можно ли на практике обойтись одним методом верификации. Более универсальным для применения является метод PIN Online, который поддерживается практически всеми терминалами, обеспечивающими верификацию ПИН-кода. Исключение составляют терминалы, способные функционировать только в офлайновом режиме (Offline Only терминалы).


Заметим, что отказ от применения метода PIN Offline не приводит к отказу от использования офлайновых операций. Для офлайновых транзакций можно применять альтернативные методы верификации держателя карты- подпись и/или биометрическую верификацию (справедливости ради отметим, что биометрия на картах сегодня практически не используется).
Метод PIN-offline не применяется в банкоматах и в операциях с использованием бесконтактных карт может возникнуть ситуация, когда карта блокируется из-за превышения лимита неуспешных попыток ввода ПИН, а клиент об этом даже не знает. Кроме того, из-за необходимости шифрования ПИН-блока открытым ключом карты время выполнения операции существенно увеличивается, что плохо отражается на бесконтактных платежах, выполняемых в режиме Tap&Go. Поэтому обойтись только методом PIN Offline для обработки карточных транзакций не получается.


Может быть, имеет смысл ограничиться использованием метода PIN Online?
Мне, Igorgold, эта идея кажется плохой.


PIN Offline надежный инструмент для верификации держателя карты в офлайновых операциях и менять его на подпись (единственный альтернативный массово доступный метод верификации для офлайновых операций) заметная потеря уровня обеспечиваемой безопасности операции.

Таким образом, оба метода верификации держателя карты востребованы в карточных технологиях, и можно вернуться к первому вопросу: какой метод проверки ПИН обеспечивает более высокую безопасность карточной операции?


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

При использовании метода PIN Offline проверка ПИН делегируется эмитентом карте. В отличие от метода PIN Online, когда ПИН шифруется на банкомате/POS-терминале и в зашифрованном виде (после нескольких перешифрований на пути к хосту эмитента) попадает на проверку к эмитенту, в случае PIN Offline эмитент сам значение ПИН не проверяет и может пользоваться только информацией карты и терминала относительно результатов верификации держателя карты. Заметим, что этими данными эмитент может воспользоваться только в случае онлайновой авторизации операции. При офлайновой транзакции все решения по ее авторизации делегируются эмитентом своей карте (точнее платежному приложению на карте).


Ниже рассмотрим две угрозы, которые могут возникнуть при таком делегировании проверки ПИН, т.е. при использовании метода PIN Offline. Еще раз заметим, что речь пойдет об угрозах второго порядка малости. На практике реализация этих угроз не фиксировалась, и они носят в основном академический характер. Их внедрение слишком дорого и сложно в сравнении с другими известными методами мошенничества


Первая угроза связана с попыткой мошенника, у которого оказалась карта с неизвестным ему ПИН, обойти проверку ПИН. Для этого мошенник вживляет в карту специальный микропроцессор (т.н.wedge device), который с одной стороны подключен к контактной площадке карты, а с другой- работает с настоящим чипом карты, полностью контролируя APDU-команды терминала и ответы карты на эти команды (атака типа Man-in-the-Middle). В результате построенной конструкции все команды терминала попадают на чип карты через wedge device. Для проверки PIN Offline терминал передает карте команду Verify с зашифрованным значением ПИН, которая попадает на wedge device. Значение ПИН вводится мошенником, а потому с высокой вероятностью оно не совпадает (мошенник не знает значение ПИН) с референсным значением, хранимым на карте.


Далее мы покажем, что на правильной карте, каковой является, например, карта Мир, обойти проверку ПИН возможно только по решению эмитента, готовому взять на себя риски, связанные с отсутствием проверки ПИН или даже со знанием факта о проваленной проверке PIN Offline. Я не стану здесь утруждать читателя номерами байт и бит используемых для этого объектов данных и терминала, а также детальным описанием выполняемых картой проверок.


Для понимания дальнейшего читателю понадобится минимальное знание о следующих объектах данных:
Card Verification Results (CVR) объект данных карты, в том числе фиксирующий факт проверки картой PIN Offline, а также результат проверки PIN Offline (успешная/неуспешная). Кроме того, объект CVR содержит 4 младших бита двоичного представления количества доступных держателю карты проверок PIN Offline;
Terminal Verification Results объект данных терминала, в том числе указывающий на результат верификации держателя карты, факт использования метода PIN Online при обработке транзакции и факт превышения лимита на ввод неверных значений ПИН;
CVM Results объект данных терминала, указывающий на способ верификации держателя карты (например, PIN Offline, PIN Online, Подпись, No CVM) и результат верификации.


Все перечисленные объекты данных попадают к эмитенту в авторизационном запросе и используются им при принятии решения по авторизации транзакции.


Отметим, что ключевую роль в предотвращении атаки по обходу проверки PIN Offline играет также ряд специальных проверок, выполняемых на стороне карты, и поддержка картой метода комбинированной офлайновой аутентификации карты CDA.


Метод CDA обеспечивает целостность данных, передаваемых карте в командах терминала AC и данных, возвращаемых картой терминалу в ответе на команду Generate AC (команда, требующая у карты решения по способу продолжения обработки операции и криптограмму (криптографическую подпись) данных транзакции и терминала, на котором транзакция была инициирована).


Далее, в зависимости от злонамеренного поведения устройства wedge device, возможны следующие случаи.


Случай 1. Устройство wedge device не меняет содержание команды Verify, проверка PIN Offline оказывается проваленной. Этот факт будет зафиксирован в объекте CVR и CVM Result, и эмитент карты вряд ли решится в этом случае авторизовать транзакцию на существенную сумму. Чаще всего в подобных случаях эмитент транзакцию отклоняет независимо от размера транзакции.
Поэтому во всех описанных далее случаях wedge device пытается изменить диалог терминала с картой с тем, чтобы обмануть эмитента и не продемонстрировать ему факта незнания держателем карты ПИН.


Случай 2. Устройство wedge device на команду Verify отвечает терминалу подтверждением факта успешной проверки ПИН и не передает команду карте. После этого возможны варианты a-c, описанные ниже.


2a. Команда Generate AC не содержит объекта CVM Results (для карты Мир этот объект является обязательным). В этом случае карта на основании того, что проверка PIN Offline не выполнялась, формирует криптограмму ARQC, требующую обработки операции в онлайновом режиме, или криптограмму ААС (отклонение операции) в случае, если терминал имеет тип Offline only (функционирует только в офлайновом режиме).
Эмитент, получив авторизационный запрос, сравнивает флаги CVR (PIN Offline not performed) и CVM Results (PIN offline successful) и из-за противоречия данных в этих объектах отклоняет транзакцию.


2b. Команда Generate AC содержит CVM Results, и wedge device передает его карте без искажения (PIN offline successful).
Карта фиксирует противоречие с данными CVM Results (терминал ошибочно считает проверку PIN offline успешной) и либо отклоняет операцию в случае Offline Only терминала, либо отправляет авторизационный запрос эмитенту на его решение. Эмитент на основании своих процедур управления рисками принимает решение. Конечно, учитываются данные карты PIN Offline not Performed и того, что была попытка обмануть карту при принятии ею решения.


2с. Команда Generate AC содержит CVM Results, и wedge device передает этот объект данных на карту измененным (например, указывает в нем в качестве метода верификации держателя карты Подпись).


Если карта поддерживает CDA (карта Мир всегда поддерживает метод CDA), то терминал отклонит операцию в офлайновом режиме, поскольку объект CVM Results был изменен, и это обнаружится после расшифрования подписанных картой данных.


Если CDA не поддерживается, то операция уйдет эмитенту или будет отклонена в офлайновом режиме для терминалов типа Offline Only. Здесь имеет место полная аналогия с п.2a.


Случай 3. Устройство wedge device сообщает терминалу в ответ на команду Get Data с указанием тэга объекта PIN Try Counter (9F17) о том, что PIN Try Limit Exceeded. Команда Get Data всегда используется терминалом до начала проверки PIN Offline, чтобы узнать о возможности проведения этой проверки- если PIN Try Limit превышен, выполнение проверки PIN Offline невозможно и не проводится.


Карта должна ответить отказом из-за противоречия в данных объектов TVR (PIN Try Limit Exceeded) и CVR (PIN Try Counter не равен 0).


Изменить значение TVR устройство wedge device не может, так как при попытке это сделать либо провалится CDA (если карта поддерживает CDA, как в случае карты Мир), либо неуспешно завершится проверка ARQC на стороне эмитента, если карта CDA не поддерживает.


Случай 4. Устройство wedge device посылает карте серию команд Verify с неверным значением ПИН, пока в ответ на команду Get Data не получит в ответ PIN Try Limit Exceeded.


В этом случае карта потребует выполнения онлайновой авторизации эмитентом. Честно говоря, шансы на одобрение транзакции эмитентом в этом случае не намного выше, чем в случае, когда провалилась проверка PIN Offline. Но теоретически при обработке операции на незначительную сумму такое событие может произойти.


Обобщая сказанное выше, в некоторых случаях мошенник имеет шанс обойти проверку PIN Offline, хотя потери эмитента при его разумном поведении будут весьма умеренными.

Другой способ обойти проверку PIN Offline использование виртуального клонирования карты. Суть этой схемы мошенничества состоит в следующем.


Мошенники контролируют терминал в некотором торгово-сервисном предприятии (например, ресторане). Кроме того, они изготавливают специальную микропроцессорную карту, имеющую стандартный контактный интерфейс ISO 7816 и радиоинтерфейс, функционирующий в соответствии с одним из коммуникационных протоколов, обеспечивающих связь на расстоянии от нескольких десятков сантиметров до нескольких метров (например, ISO 15693, ISO 18000). С помощью такого радиоинтерфейса карта может обмениваться данными со специальным оборудованием, которое помимо поддержки связи с картой обеспечивает организацию удаленного радиоканала (например, в соответствии с протоколом Wi-Max (IEEE 802.16), см. рис.1) с контролируемым мошенниками терминалом.


Мошенник, вооружившись описанными выше картой и специальным оборудованием, приходит, например, в ювелирный магазин и выбирает там украшение стоимостью 200 000 рублей. В это время в ресторане завершает обед ничего не подозревающий держатель карты, которую он предъявляет официанту для оплаты обеда стоимостью 200 рублей. Официант является сообщником нашего любителя ювелирных украшений. Он звонит ему и предупреждает, что у него в руках действующая карта посетителя.


Дальше мошенники действуют следующим слаженным образом. Мошенник-официант вставляет карту посетителя в контролируемый мошенниками терминал и вводит в терминал стоимость обеда. В это же время мошенник в ювелирном магазине передает кассиру для оплаты украшения свою поддельную карту, которую кассир вставляет в настоящий терминал. Далее все команды терминала, установленного в ювелирном магазине, через карту мошенника, его специальное оборудование и мошеннический терминал транслируются реальной карте пообедавшего в ресторане господина. При этом ответы реальной карты на команды реального терминала по тому же маршруту, но в обратном направлении возвращаются реальному терминалу.


При этом некоторые команды требуют преобразования содержащихся в них данных. Например, если реальная карта требует выполнения проверки ПИН, то мошенник в ювелирном магазине введет на терминале произвольную последовательность. После того, как команда VERIFY от реального терминала будет транслирована на мошеннический терминал, теперь уже этот терминал затребует ПИН у посетителя ресторана, который введет его на мошенническом терминале. Далее мошеннический терминал передаст реальной карте команду VERIFY со значением ПИН ее держателя, а ответ карты будет передан реальному терминалу в ювелирном магазине. Важно отметить, что команду VERIFY с правильным значением ПИН необходимо довести до карты, чтобы факт проверки PIN Offline был зафиксирован в объекте CVR, предназначенном для эмитента.


Очевидно, что даже онлайновая авторизация операции не помешает успешному выполнению операции по описанной выше схеме. В этом случае в ответ на команду GENERATE AC реального терминала реальная карта сгенерирует криптограмму ARQC, которая будет возвращена терминалу ювелирного магазина и далее передана на хост эмитента. Наоборот, ответ эмитента, содержащий Issuer Authentication Data, будет транслирован реальной карте, вставленной в мошеннический терминал.


В результате операция может закончиться печально для посетителя ресторана и ювелирного магазина. Банковский счет посетителя может уменьшиться на 200 000 рублей. При этом посетитель ресторана получит чек на стоимость обеда и, вероятнее всего, будет находиться в неведении о случившемся до получения справки о состоянии своего банковского счета или SMS-уведомления от эмитента о выполненной мошенником онлайновой операции. Более того, возможно сделать так, что и на чеке, выданном мошеннику в ювелирном магазине, будет красоваться часть номера его карты, так что бдительный продавец ювелирного магазина и здесь не увидит проблем с безопасностью операции.


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



Рис.1. Виртуальное клонирование карты


Очевидно, что приведенная выше схема не работает в случае применения метода PIN Online. Если проанализировать описанное выше мошенничество, то станет ясно, что оно оказалось возможным из-за отсутствия прямого взаимодействия (диалога) держателя карты и карты. Между держателем и картой стоит посредник в виде терминала, способный исказить информацию об операции таким образом, что держатель карты в процессе обработки операции этого искажения не увидит. Этот посредник, помимо прочего, может и украсть важную информацию карты, включая ПИН ее держателя.


Следует заметить, что метод офлайновой аутентификации CDA для борьбы с искажением данных терминалом не помогает, поскольку он обеспечивает целостность информации, отправленной терминалом карте, но не верифицирует эти данные. Также понятно, что криптограмма является средством доказательства факта выполнения держателем карты операции с точностью до степени доверия к терминалу- карта подписывает данные, предоставленные ей все тем же терминалом.


Таким образом, если говорить о величинах второго порядка малости, то метод PIN Online является более безопасным с точки зрения транзакционной безопасности.

Тем не менее, в заключение все-таки хочется сказать несколько слов в поддержку метода PIN Offline. Оказывается, что если для проверки ПИН методом PIN Online эмитент применяет метод Visa PVV (самый распространенный на практике случай), то вероятность угадать правильный ПИН карты у мошенника выше аналогичной вероятности при использовании метода PIN Offline.


Ниже будем рассматривать ПИН-коды длиной 4 цифры. Обозначим через N и M-соответственно мощности множеств всех возможных значений ПИН и PVV соответственно. Очевидно, N=M=10^4. Кроме того, обозначим p=1/M=10^(-4) и q=1-p.


Очевидно, что вероятность того, что значению PVV карты соответствует ровно k значений различных ПИН (очевидно, это количество ПИН является случайной величиной, которую мы обозначим через ) равна
P{=k1}=(P{=k})/(P{1})=(C_N^k p^k q^(N-k))/(1-q^N ), откуда вероятность угадать ПИН за одну попытку равна p/(1-q^N )p(1+q^N)1,36810^(-4).


При использовании метода PIN Offline вероятность с помощью m попыток угадать ПИН равна mp=m10^(-4), а при применении PIN Online эта вероятность приблизительно равна mp(1+q^N)=1,36810^(-4)m, т.е. на 0.0368% выше, чем в методе PIN Offline. Это, конечно, смешное увеличение вероятности компрометации ПИН, но тем не менее к величине второго порядка малости его вполне можно отнести.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru