SlideShare a Scribd company logo
Инструкция по созданию
самопального биллинга



                 Крестьянинов Михаил
                        Новотелеком
О себе
Автоматизация
бизнес-процессов
Подключение абонента

                     Биллинг

  Абонент




                        Монтажник




Оператор           Оборудование
Подключение абонента
Платформа для
корпоративных
 приложений
Архитектура
Корпоративных
 Приложений
Архитектура биллинга


 Абоненты/Услуги    Тарификация      Приём платежей   Нотификация




  Интерфейс
администратора                                        Оборудование
                 Интерфейс
                 оператора
                             Интерфейс
                              абонента
Архитектура биллинга

       Тарификация
                                        Приём платежей




                                               Нотификация

Абоненты/Услуги



                  Интерфейсы   Оборудование
Архитектура биллинга

         Тарификация                   Приём платежей




Абоненты/Услуги                               Нотификация




                  Интерфейсы   Оборудование
Архитектура биллинга

Абоненты/Услуги Тарификация Приём платежей Нотификация Оборудование




                             ESB
База Данных
Базы данных
Архитектура биллинга

 Абоненты/Услуги      Тарификация        Приём платежей   Нотификация




                              Das Sybase

  Интерфейс
администратора
                 Интерфейс
                 оператора                            Оборудование
                             Интерфейс
                              абонента
Тестирование
Mock them all!


  Mock для                             Mock для
Тарификация                           Нотификация


                  Абоненты/Услуги




   Mock для                         Mock для работы
приёма платежей                     с оборудованием
Прочее
Вопросы?

 email: mikhail.krestjaninoff@gmail.com
 www: krestjaninoff.ru

More Related Content

Viewers also liked

«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
DevDay
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
DevDay
 
Веб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и ITВеб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и IT
DevDay
 
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012Хочу делать игры, пусть меня научат — DevDay, 06.06.2012
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012DevDay
 
Lua vs c++_desyatov
Lua vs c++_desyatovLua vs c++_desyatov
Lua vs c++_desyatovDevDay
 
Взаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangВзаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangDevDay
 
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
DevDay
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
DevDay
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияDevDay
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
DevDay
 
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
DevDay
 
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Ontico
 

Viewers also liked (12)

«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИС
 
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
 
Веб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и ITВеб 3.0. Футуристический рассказ о будущем интернета и IT
Веб 3.0. Футуристический рассказ о будущем интернета и IT
 
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012Хочу делать игры, пусть меня научат — DevDay, 06.06.2012
Хочу делать игры, пусть меня научат — DevDay, 06.06.2012
 
Lua vs c++_desyatov
Lua vs c++_desyatovLua vs c++_desyatov
Lua vs c++_desyatov
 
Взаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и ErlangВзаимодействие Go и C-библиотек. Go и Erlang
Взаимодействие Go и C-библиотек. Go и Erlang
 
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использования
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»Тимофей Чаптыков «Верстальщик должен быть ленивый»
Тимофей Чаптыков «Верстальщик должен быть ленивый»
 
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...
 

Similar to Инструкция по созданию самопального биллинга, Михаил Крестьянинов (Новотелеком)

Особенности интеграционного тестирования биллинговой системы банка
Особенности интеграционного тестирования биллинговой системы банкаОсобенности интеграционного тестирования биллинговой системы банка
Особенности интеграционного тестирования биллинговой системы банка
SQALab
 
Profiland - Service desk
Profiland - Service desk Profiland - Service desk
Profiland - Service desk
Sergey Polazhenko
 
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...Cisco Russia
 
Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...
 Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ... Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...
Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...Cisco Russia
 
Контроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятияКонтроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятия
VERNA
 
Виртуализация рабочих мест с использованием технологий Cisco
Виртуализация рабочих мест с использованием технологий CiscoВиртуализация рабочих мест с использованием технологий Cisco
Виртуализация рабочих мест с использованием технологий Cisco
MUK
 
Identity Services Engine overview
Identity Services Engine overviewIdentity Services Engine overview
Identity Services Engine overviewNazim Latypayev
 
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
NAUMEN. Информационные системы управления растущим бизнесом
 
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...Cisco Russia
 
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
Николай Журин
 
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
E-Money News
 

Similar to Инструкция по созданию самопального биллинга, Михаил Крестьянинов (Новотелеком) (13)

Особенности интеграционного тестирования биллинговой системы банка
Особенности интеграционного тестирования биллинговой системы банкаОсобенности интеграционного тестирования биллинговой системы банка
Особенности интеграционного тестирования биллинговой системы банка
 
Lic.i banking
Lic.i bankingLic.i banking
Lic.i banking
 
Profiland - Service desk
Profiland - Service desk Profiland - Service desk
Profiland - Service desk
 
188 barcamp
188 barcamp188 barcamp
188 barcamp
 
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...
Интеграция сервисов идентификациии контроля доступа. Решение Cisco Identity S...
 
Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...
 Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ... Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...
Практика оказания услуги Managed UC, реальный бизнес-кейс, требования Cisco ...
 
Контроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятияКонтроль и управление доступом к корпоративным ресурсам предприятия
Контроль и управление доступом к корпоративным ресурсам предприятия
 
Виртуализация рабочих мест с использованием технологий Cisco
Виртуализация рабочих мест с использованием технологий CiscoВиртуализация рабочих мест с использованием технологий Cisco
Виртуализация рабочих мест с использованием технологий Cisco
 
Identity Services Engine overview
Identity Services Engine overviewIdentity Services Engine overview
Identity Services Engine overview
 
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
Автоматизация ключевых элементов OSS/BSS телекоммуникационных компаний на осн...
 
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...
Интеграция сервисов идентификации и контроля доступа. Решение Cisco Identity ...
 
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...
 
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
Razvitie seteiy samoobslujivanija klientov banka na osnove informacionno-plat...
 

More from DevDay

«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
DevDay
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
DevDay
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
DevDay
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
DevDay
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь КудринDevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
DevDay
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
DevDay
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
DevDay
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
DevDay
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
DevDay
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
DevDay
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
DevDay
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
DevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
DevDay
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
DevDay
 
Распределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service BusРаспределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service Bus
DevDay
 
Frontend
FrontendFrontend
FrontendDevDay
 
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
DevDay
 
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Роман Акинфеев «Разработка RESTful API with all bells and whistles»Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
DevDay
 
Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»
DevDay
 

More from DevDay (20)

«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
Devops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим ПашукDevops-практики в разработке решений для бизнеса, Максим Пашук
Devops-практики в разработке решений для бизнеса, Максим Пашук
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
Распределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service BusРаспределенные приложения и Azure Service Bus
Распределенные приложения и Azure Service Bus
 
Frontend
FrontendFrontend
Frontend
 
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
Илья Беда «Как Erlang сделает ваши приложения реалтаймовыми»
 
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Роман Акинфеев «Разработка RESTful API with all bells and whistles»Роман Акинфеев «Разработка RESTful API with all bells and whistles»
Роман Акинфеев «Разработка RESTful API with all bells and whistles»
 
Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»Александр Щепановский «Почему каждому языку нужен свой _»
Александр Щепановский «Почему каждому языку нужен свой _»
 

Инструкция по созданию самопального биллинга, Михаил Крестьянинов (Новотелеком)

Editor's Notes

  1. Картинка (?) Добрый день! Меня зовут Крестьянинов Михаил. Работаю я в компании Новотелеком, где занимаюсь системой биллинга и внутренней автоматизацией.
  2. О себе. Для начала чуть-чуть скучной и никому неинтересной информации о себе. Вот небольшой список тех компаний, где мне платили зарплату (появляются компании). А так же всего, что я достиг в этой жизни  (появляются сертификаты) . Вот. Ну а теперь начнём 
  3. Что такое Enterprise? Картинка (АСР ) . Кому-нибудь эта картинка что-нибудь напоминает?  Нет? А я вот каждый день вижу  . И так, все мы знаем (ну или по крайней мере догадываемся), что представляют собой такие направления разработки как webdev, gamedev... популярный в последнее время mobiledev. Однако, далеко не всем известно, что же представляет собой разработка enterprise (или в переводе на великий и могучий — корпоративных) приложений ? Как видно с этой картинки, занятие это довольно увлекательное, насыщенное разными технологиями, проблемами и их решениями :) Но что бы ответить на этот вопрос серьёзно, давайте представим себе, что у нас есть некая относительно крупная компания ... например, Новотелеком. Жизнь в этой компании бурлит, цветёт и пахнет: подключаются абоненты, оплачиваются услуги, предоставляется интернет, списывается абонентская плата... ну и всё по новой :) Однако, если бы всё это делалось вручную, с помощью специально обученных бабушек или иной биоробототехники, к успеху бы компания шла очень долго и скорее всего никогда бы не дошла. Что бы автоматизировать все эти бизнес процессы (и списывать ещё больше денег) как раз и используются приложения, именуемые корпоративными: биллинг, система учёта клиентов и т. д. Иначе говоря, корпоративные приложения — это ПО, призванное решать задачи автоматизации бизнес процессов компании.
  4. Автоматизация БП . Давайте рассмотрим пример конкретного бизнес-процесса , что бы чуть более лучше понимать, что собой представляет бизнес-процесс, и так ли сильно его нужно автоматизировать .
  5. Автоматизация БП. Картинка (Диаграмма подключения абонентов). В качестве примера возьмём процесс подключения абонента в НТК . Первым делом счастливый абонент ( появляется абонент ) звонит по телефону (или иным образом) сообщает оператору ( появляется оператор ), что хочет подключится. Его контактные данные сохраняются в CRM ( появляется CRM ) и на их основе создаётся заявка в Issue Tracker ( появляется Jira ). Заявка в трекере проходит некоторые бюрократические и технические этапы — например установку оборудования монтажником ( появляется монтажник ). После этого абонент заводится в биллинге ( появляется АСР ) и конфигурируется на оборудовании ( появляется оборудование ). Как вы видите, только в одном , довольно обобщённом, сценарии подключения абонента задействовано четыре системы . Четыре приложения которые нужно разработать/купить и сынтегрировать вместе . На первый взгляд, процесс довольно прост , и не совсем понятно, так ли здесь нужно что-то автоматизировать . Однако, если посмотреть на него более детально ...
  6. Автоматизация БП. Картинка (Процесс подключения абонента из Jira ). Думаю, ответ становится очевиден :)
  7. Платформа для корпоративных приложений . И так, мы ответили на вопрос – Зачем нам корпоративные приложения? Перейдём к вопросу – Откуда берутся корпоративные приложения?
  8. Платформы для EA. Картинка (Рынок ПО). Современный рынок корпоративного ПО предлагает огромнейшее количество решений для автоматизации практически любых задач. Тем не менее практически в каждой более менее крупной компании есть свой отдел, занимающийся разработкой корпоративного ПО . Почему? Ответов тут два .
  9. Платформы для EA. Картинка (Где-то в Oracle ). Во первых — это стоимость . Приложения из Oracle E-Business Suite стоят в среднем от 5 до 20 килобаксов , плюс поддержка где-то ешё на тысячу /полторы. С учётом того, что большая часть его функциональности вам не пригодится, покупка его может быть оправдана только в случае компаний неимоверных масштабов. Конечно же есть и более пролетарские решения . В качестве примера можно взять продукты компании N a umen из ЕКБ. Однако, в данном случае мы наступаем на другую сторону медали — …
  10. Платформы для EA. Картинка (Кастомизация). … кастомизируемость, адаптируемость продукта под нужды компании . В случае с НТК система биллинга дорабатывается под нужды маркетинга практически непрерывно : каждую неделю внедряется какая-нибудь новая фича, порожденная богатым воображением наших внутренних заказчиков. Понятно, что ни одна сторонняя система не сможет обеспечить абсолютной гибкости настроек, а держать основное ПО компании на аутсорсе мягко говоря рискованно.
  11. Архитектура корпоративных приложений . И так, мы решили писать своё enterprise- приложение. Какой подход выбрать? Вариантов тут на мой взгляд три.
  12. Платформы для EA. Картинка (Банк). Первый подход я назвал «Банковским», потому что его реализацию можно встретить практически в любом банке . В основе него лежит святая святых — БД Oracle за несколько сотен килобаксов . Большая часть логики при этом реализована в виде хранимых процедур на PL/SQL. Говорить о недостатках этого подхода смысла нет , так как споры об эффективности процедурной разработки в свете наличия ООП вроде бы давно утихли и остались в прошлом . Понятно, что это наследие прошлого , которое необходимо поддерживать и развивать . Которое приносит деньги .
  13. Платформы для EA. Картинка (Сервер Приложений). Далее идут сервера приложений . Довольно интересный подход, который тем не менее редко можно встретить на рынке НСК. Суть его заключается в использовании специального ПО — сервера приложений (типа Jboss, WebSphere), который берёт на себя все аспекты работы с БД, контроля транзакций, авторизации, кластеризации . Разработчику при это остаётся только самое главное — описывать бизнес-логику. Причина непопулярности данного подхода у нас скорее всего кроется в их цене (до $5К) и относительно невысокой производительности (обусловленной не всегда востребованными накладными расходами ). Поэтому зачастую их можно встретить только в крупных компаниях, которые покупали брендовые сервера «под ключ»: с заранее установленной брендовой ОС и сервером приложений . Например, IBM System I c AIX и WebSphere на борту. В качестве более-менее удачного примера использования можно рассмотреть АльфаКлик от АльфаБанка ( судя по их вакансиям работает на WebSphere под AS/400) . Ну а что же делать, если не хочется писать хранимые процедуры и нет веры в EE-сервера? Правильно, писать своё — с нуля. На самом деле — шучу. Почти с нуля.
  14. Платформы для EA. Картинка ( Framework ). Для разработки корпоративных приложений прекрасно подходят языки со строгой типизацией и мощным фреймворком/комьюнити. Примерами таких языков являются Java с замечательным Spring FrameWork и C# с не менее замечательным .NET. У нас в НТК мы используем как раз Java + Spring, чему очень рады.
  15. Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . Но бог с ней, с теорией — давайте перейдём к практике и попробуем спроектировать своё enterpri s e - приложение. С блэкджеком и прочими фичами. Как следует из заголовка доклада - это будет биллинг. Заодно я покажу, как он устроен у нас в НТК. Первым делом давайте определимся с тем, что же должен уметь биллинг. Как минимум хранить информацию об абонентах и предоставляемых им услугам ( появляется сервис Абоненты/Услуги ).Что бы предоставлять услуги, например, доступ в интернет, придётся научиться конфигурировать оборудование ( появляется сервис Оборудование ). Раз у нас появились абоненты, которым мы предоставляем услуги, — пора начинать списывать с них деньги! ( появляется сервис Тарификация ). Что бы абоненты могли пополнять свой баланс и приносить компании ещё больше денег, дадим им возможность пополнять баланс ( появляется сервис Приём Платежей ). Так же мы должны уметь оповещать абонентов ( появляется сервис Нотификации ). И предоставить web-интерфейсы для абонентов, операторов и администраторов ( появляется сервисы Интерфейсов ). И так мы декомпозировали наш биллниг на несколько относительно независимых служб, реализующих свой модуль бизнес логики. Каждая из них достаточно самостоятельна, что бы быть представлена отдельным приложением с 2х/3х-звенной архитектурой и, потенциально, со своей БД ( появляются базы данных ). Такой подход называется сервисно-ориентированным или SOA . Его преимущества достаточно очевидны: кластеризация бизнес-логики, упрощение доработок и рефакторинга, потенциальное масштабирование, и главная ценность для больших систем — порядок!
  16. Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . Следующим шагом является связывание наших сервисов друг с другом. Интерфейс должен знать об абонентах и оказываемых услугах, Тарификатор должен уметь оповестить абонента об окончании денег на его счету. Связать службы можно несколькими способами: 1. Напрямую ( появляются прямые связи ). Самый простой и самый эффективный способ . По крайней мере при небольшом количестве служб . Спектр возможных протоколов тут крайне широк, но зачастую речь идёт об REST или SOAP . В нашем случае используется крайне специфичный бинарный протокол Hessian , но его наличие обусловлено чисто историческими причинами :)
  17. Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . 2. Второй способ - Очереди Сообщений ( появляется схема с MQ ). Тут существует несколько возможных протоколов: Java Message Service, Advanced Message Queuing Protocol, ну и конечно же Microsoft Message Queuing – лозунг “Not invent here” никто не отменял  У каждого протокола есть свои реализации (наиболее популярные приведены на слайде) , но суть у них одна - асинхронный обмен сообщениями без явного необходимости указания адресата и адресанта. Например, в нашем биллинге такая схема (на основе ActiveMQ ) используется для отработки события подключения абонента. Как только служба работы с оборудованием зафиксирует факт подключения абонента — она отправит сообщение об этом в соответствующий топик. Все другие службы и системы, которые хотят быть в курсе этого события (Учёт Абонентов, Нотификация, JIRA) получат это сообщение и сделают соответствующие выводы. Относительно предыдущего способа у данного есть 3 явных преимущества : - всегда можно подписать или отписать ещё одну службу на некоторое событие, - время работы вызывающей службы не зависит от времени работы вызываемых служб, - работа системы в целом не зависит от доступности вызываемых служб, в виду гарантии доставки сообщения.
  18. Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . 3. И последний способ — через сервисную шину предприятия, Enterprise Service Bus ( появляется схема с ESB ). ESB , как и вариации Message Queuing является стандартом, но уже не обмена сообщениями, а интеграции корпоративных систем. Что бы понять его предназначение, давайте представим себе компанию в которой одна служба имеет интерфейс SOAP, другая — SMTP, а третья — вообще работает только по собственному XML протоколу поверх TCP. Что бы свести всё это к единой схеме, единой шине нам как раз и пригодится ESB приложение ( например , eMule) , на основе которого мы напишем коннекторы ( появляется JIRA и 1С с коннекторами ) ко всем службам по всем нужным протоколам, не изменяя при этом ни строчки кода этих служб . Какой же способ выбрать? Всё зависит от ваших задач. Мы в своей работе используем все три способа. Прямые связи, так как это дёшево и эффективно (тут правда стоит отметить, что большинство наших служб и сервисов самописаны и поддерживают единый протокол Hessian). JMS — в тех случаях, когда бизнес процесс явно подразумевает асинхронную модель поведения. ESB — в качестве моста между Hessian-службами и чужеродными нам Jira/1C.
  19. База Данных . Вот мы, пожалуй и добрались до самого главного — БД. Данные — это пожалуй одна из самых главных ценностей любой IT компании, а способ из хранения — ценнейшая тайна :) На самом деле нет :) Но давайте к сути. Какую БД выбрать для вашего приложения?
  20. Базы данных. Рисунок ( Oracle vs Postgres ) . Обычно всё уже давно выбрано за нас, причём давно :) Однако, если попытаться ответить на этот вопрос теоритически... Понятно, что модный пару лет назад NoSQL стоит оставить Хипстерам . Ограничения целостности и строгая структурированность данных — крайне важные вещи, при работе с серьёзными данными…
  21. Базы данных. Рисунок (Реляционные БД) . … Что же касается реляционных БД... то тут почти у каждой есть своя Success Story в крупных проектах : MySQL — YouTube, Postgres — Skype, Sybase — SUP, MsSQL — все партнёры Microsoft, Oracle — так вообще корпоративный стандарт. В общем холиварить тут можно долго . Точно можно сказать, что количество success story и размер comunity у Oracle просто огромны . Однако, он стоит денег — 47 килобаксов за процессор (и это без поддержки!) . Что, согласитесь, не мало. Из бесплатных БД лично нам наиболее импонирует Postgres. ..
  22. Базы данных. Рисунок ( PostgreSQL ) . Мы умеем с находить с ним общий язык. Он хорошо зарекомендовал себя в плане работой под нагрузкой в проекте CN.ru . Он умеет партицирование и репликацию , которые так же успешно опробованы как у нас, так и в других российских компаниях , в том же Яндексе. В общем – мы любим и верим в Postgres. Если же говорить о выборе, то уникального рецепта тут нет. Попробуйте всё сами, сравните и выберите наиболее удобное и эффективное для вас решение.
  23. Базы данных. Рисунок (Структура сервисов биллинга НТК) . Однако, как я уже говорил выбирать зачастую не приходится — скорее всего всё уже выбрано за вас! :) Помните, пару слайдов назад я показывал вам, как выглядит структура сервисов нашего биллинга? Так вот - я соврал  Мы хотим, что бы она так выглядела  На самом деле все выглядит так ( Спецэффект ). В нашем случае в качестве основной БД мы имеем купленный много лет назад вместе в первым биллингом Sybase .
  24. Базы данных. Рисунок (This is Sybase). Недавно у него было день рождение. Ему исполнилось 12 лет. Я в его возрасте в первый раз попробовал пиво :) Нет, это очень хорошая СУБД... для своего времени :) Количество параметров конфигурации и объёмы документации превышают пожалуй размеры любой современной open source БД. Там даже есть партицирование БД (правда только по первичному ключу). Но! В нём нём крайне скудны возможности SQL (минимум агрегатных функций, ни какой рекурсии или оконных функций), работы с триггерами и т. д. Но это не основная проблема — всегда можно найти какой-то workaround . Основная беда кроется в том, что архитектура БД устарела — нельзя заставить СУБД 12 летней давности эффективно использовать ресурсы современных серверов. Так как в качестве решения проблемы Sybase предлагает купить последнюю версию их БД по цене не сильно отличающейся от стоимости Oracle , мы решили медленно но верно переезжать на Postgres. Кстати о переезде . Более менее безболезненный переезд стал возможен как раз благодаря сервисно-ориентированной архитектуре биллинга . Поскольку логика работы с каким-то определённым аспектом инкапсулирована в одной службе , нам относительно безболезненно удалось взять часть таблиц, относящихся к финансам и тарификации и унести их из Sybase в Postgres — к производительности и партицированию, так что остальные службы даже ничего не заметили :)
  25. Тестирование . И так, мы определились с архитектурой и БД. Давайте теперь подумаем, как же тестировать наше приложение?
  26. Тестирование . Рисунок (Песочница). Когда приложение состоит из одного модуля — всё просто: установили, протестировали. Но что делать, если приложение, сервис зависит от других сервисов? Ответ прост, как и всё гениальное — для каждого тестировщика создавать собственное окружение с блекджеком и полным набором сервисов. Тоже самое будет касаться и различных БД для сервисов . Правда в нашем случае есть БД, чей объём превышает 1 00ГБ , что делает её актуализацию несколько затратной . В данном случае можно идти по пути обновления не всей базы, а отдельных таблиц или даже дельт этих таблиц.
  27. Тестирование . Рисунок (Служба и моки вокруг). Отдельно хотел бы упомянуть модульные тесты... :) Мы все знаем, что TDD - это круто... но давайте смотреть правде в глаза :) Кто из вас положа руку на грудь, скажет что ведёт разработку полностью в рамках этой религии ? Писать моки для БД и множества соседних служб, конечно очень увлекательно, но имхо крайне неэффективно. Тем более, если учесть существование тестов интеграционных. В нашей разработке модульные тесты используются только для математики/алгоритмов и некоторых утилит . Всю остальную логику в случае сервисно-ориентированной архитектуры лучше возложить на интеграционные тесты – тут вам и проверка логики и работы с БД, плюс полная имитация всех внешних взаимодействий по всем протоколам, плюс проверка интерфейсов с помощью Selenium .
  28. Тестирование . Рисунок (Hudson). Для того, что бы автоматизировать процесс тестирования до конца удобно использовать системы непрерывной интеграции, например Hudson . Однако его настройка, это тема для отдельного доклада . Скажу только, что самое сложное при работе с ним — это не забить на него и его репорты. Это требует действительно большой ответственности и силы воли :)
  29. Прочее . Фух! Потихоньку подбираемся к концу 
  30. Деплоймент. Риунок (План внедрения). Вкратце затрону процесс выкладки служб на боевые сервера. Если бы у нас был сервер приложений — то вопрос выкладки и хостинга сервисов отпал бы автоматически. Но у нас OpenSource и Spring :) Поэтому каждую нашу службу мы оформляем виде самостоятельного приложения и пакуем в deb-пакет. Тем самым используя виртуалки с Linux'ом в качестве контейнеров для служб нашего биллинга. Подход немного нестандартен, но при наличии некоторых утилит для мониторинга весьма эффективен.
  31. Нагрузки. Рисунок (Ослик). Я думаю, это печальная тема для многих из нас :) Как я уже говорил выше главная проблема в нашем случае это моральна устаревшая БД . Ну и чего уж греха таить, порой не всегда оптимальный код . Но что в обоих случаях мы идём к успеху: в первом случае к Postgres ’ у, во втором — к просветлению :) Если говорить о цифрах, то это примерно 150К абонентов, 300К финансовых проводок в сутки и 150ГБ данных. Кстати про данные. Мало кто знает, но одной из причин появление в 2008 году безлимитных тарифов на интернет в НСК стал тот факт, что с ростом числа абонентов обрабатывать и хранить данные по потреблению трафика стало довольно неоправданно напряжно :)
  32. Проблемы. Рисунок (Троллфайс). Проблемы есть у всех. В случае enterprice-разработки они мало чем отличаются от общих по отрасли :) Самая главная проблема на мой взгляд — это внутренний заказчик . С одной стороны это хорошо: всегда можно в полной мере обсудить задачу и уточнить неясные моменты. С другой — это ад, потому что требования будут меняться каждый день, если не час: ведь продумать всё сразу необязательно — всегда можно подойти и сказать: «я тут подумал...» :) В любой компании есть быдлокод оставшейся с времён, когда компания только начинала развиваться и думать о качестве кода не приходилось . История НТК, например, начиналась с купленного биллинга средней руки на JSP и хранимых процедурах БД и bash скриптах. Сейчас от того биллинга уже ничего не осталось  В мире корпоративной разработки есть очень много интересных технологий. Однако, далеко не все нужно использовать. А хочется, ибо круто :) Такую болезнь иногда называют Resume Driven Development. В своей компании видеть такого мне не приходилось, но вот в других порой встречается :)
  33. Отказоустойчивость. Рисунок (Нет!). Ну и конце своего доклада хотелось бы ответить на вопрос, который наверное интересует всех — как сделать так, что бы всё работало и никогда не ломалось? Да никак! Чудеса бывают только в сказках и платных мастер-классах. Помните пару месяцев назад свалился процессинг СберБанка? Даже Сбер с его многомиллионными бюджетами, почти полной редакцией Oracle 11g, наикрутешим аккаунтом в саппорте Oracle словил вполне тривиальную ошибку. Не срабатывает процесс создания резервной копии (check point) БД, переполняется лог транзакций, встаёт запись в базу. Точка. Полностью защититься от беды нельзя, но можно значительно снизить риски. И рецепты тут давно известны — мониторинг с помощью того же Zabbix/Monit и резервирование !
  34. На этом у меня всё. Вопросы?