В ходе своего доклада я хочу показать пару фокусов и попытаться ответить на следующие вопросы:
- Что такое Enterprise разработка?
- Зачем нужны бизнес-процессы и как их автоматизировать?
- Какие существуют платформы для построения корпоративных приложений?
- В чём особенности архитектуры промышленных приложений?
- Какую БД выбрать для вашего приложения?
- Как быть с тестированием и деплойментом?
- Что делать с нагрузками, и какие могут быть проблемы в корпоративных приложениях?
- Как сделать так, чтобы всё работало и никогда не ломалось?
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...DevDay
В своем докладе я расскажу о постановке цели и подготовительном этапе при проведении продуктовых исследований. Мы рассмотрим наиболее популярные виды исследований. Специфику исследований на локальном и междунароных рынках. Прикладную ценность результатов исследований. И это всё на примерах продуктов компании 2ГИС.
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоDevDay
За последние несколько десятков лет робототехника стала очень доступной. Настолько, что можно собрать робота и запрограммировать его даже в домашних условиях, имея подходящий инструментарий. С чего начать? Как попробовать? Именно об этом мы и поговорим на докладе на примере контроллера TI Stellaris Launchpad (аналог Arduino), управляемого с Android-смартфона.
Порой в погоне за созданием очередной классной штуки для продукта мы забываем о том, как будем выводить это на рынок. В идеальном мире задумываться о запуске мы должны еще до того, как задумались о фиче, ведь именно через потребность аудитории стоит проектировать функционал.
Что делать, если на дворе 2013 год, а вам предстоит запускать поиск проезда на общественном транспорте? Алгоритмы вашего поиска не являются революционными, да и все это уже давно реализовано у конкурентов. Как сместить акценты 4 миллионов пользователей и сделать так, чтобы они оценили ваши старания?
Мы нашли неплохое решение. Хочу рассказать, как это получилось — от подготовки концепции запуска и мотивации команды до самого процесса релиза и работы с обратной связью. Факапы, выводы, рекомендации. Максимально честно, на живых примерах.
Артём Кудзев «Делайте на работе то, что мотивирует»DevDay
Слышали же такое «в другой компании база более реляционнее, процессы более гибкие и тимлид встречает с кофе каждое утро»? В общем, рай для айтишника. Мы в свое время столкнулись с этой проблемой, когда нас стало достаточно много и «2ГИС перестал быть тортом». Я расскажу, что мы придумали, чтобы ребята не теряли мотивацию и увлечённо работали. Поговорим о фича и продакт-командах, «своих» проектах, опенсорсе и внутренних тусовках.
Поговорим, как и зачем функционально тестировать хайлоад, получать от тестов больше, чем «прошёл/не прошёл», а их количество превратить в качество продукта.
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...DevDay
В своем докладе я расскажу о постановке цели и подготовительном этапе при проведении продуктовых исследований. Мы рассмотрим наиболее популярные виды исследований. Специфику исследований на локальном и междунароных рынках. Прикладную ценность результатов исследований. И это всё на примерах продуктов компании 2ГИС.
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоDevDay
За последние несколько десятков лет робототехника стала очень доступной. Настолько, что можно собрать робота и запрограммировать его даже в домашних условиях, имея подходящий инструментарий. С чего начать? Как попробовать? Именно об этом мы и поговорим на докладе на примере контроллера TI Stellaris Launchpad (аналог Arduino), управляемого с Android-смартфона.
Порой в погоне за созданием очередной классной штуки для продукта мы забываем о том, как будем выводить это на рынок. В идеальном мире задумываться о запуске мы должны еще до того, как задумались о фиче, ведь именно через потребность аудитории стоит проектировать функционал.
Что делать, если на дворе 2013 год, а вам предстоит запускать поиск проезда на общественном транспорте? Алгоритмы вашего поиска не являются революционными, да и все это уже давно реализовано у конкурентов. Как сместить акценты 4 миллионов пользователей и сделать так, чтобы они оценили ваши старания?
Мы нашли неплохое решение. Хочу рассказать, как это получилось — от подготовки концепции запуска и мотивации команды до самого процесса релиза и работы с обратной связью. Факапы, выводы, рекомендации. Максимально честно, на живых примерах.
Артём Кудзев «Делайте на работе то, что мотивирует»DevDay
Слышали же такое «в другой компании база более реляционнее, процессы более гибкие и тимлид встречает с кофе каждое утро»? В общем, рай для айтишника. Мы в свое время столкнулись с этой проблемой, когда нас стало достаточно много и «2ГИС перестал быть тортом». Я расскажу, что мы придумали, чтобы ребята не теряли мотивацию и увлечённо работали. Поговорим о фича и продакт-командах, «своих» проектах, опенсорсе и внутренних тусовках.
Поговорим, как и зачем функционально тестировать хайлоад, получать от тестов больше, чем «прошёл/не прошёл», а их количество превратить в качество продукта.
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИСDevDay
В свое время, когда мы только запускали API, всё было скромно: небольшая команда, комфортные требования, да и бизнес не требовал от нас подвигов. Но всё коренным образом изменилось, когда API разрослось до 30 серверных компонент в трёх датацентрах, а бизнес «порекомендовал» успевать с ответом в 200 мс и выкатывать релизы раз в неделю. На фоне роста проекта, росла команда и остро встали вопросы «как экологично встроить тестирование в большую scrum-команду большого проекта».
Мы сфокусировались на трёх важных моментах:
Планирование
Большая команда → «большое» планирование. Тестирование планируется отдельно или вместе с разработчиками? Нужна ли выделенная роль крайнего за тестирование на проекте?
Релиз
Нужен ли крайний за релиз и кто отвечает за интеграционные зависимости? Когда надо остановиться и заморозить фичи? Кто и как мониторит продукт после релиза?
Автоматизация — наше всё ;)
Как не «захлебнуться» в регрессии: unit-тесты, json-схема. Как правильно выбрать фичи для автоматизации и как встроить автоматизацию в процесс тестирования.
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5DevDay
Григорий Рубцов — руководитель проектов SQLinfo.ru (http://sqlinfo.ru/) и Webew.ru (http://webew.ru/), автор онлайн-курса по MySQL (http://sqlinfo.ru/classes/) и спикер конференции РИТ++.
Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Обзор возможностей:
— новое для разработчика;
— новое для администратора;
— улучшения производительности;
— миграция и вопросы совместимости.
Технические детали:
— хранилище XtraDB;
— Percona Tools;
— алгоритмы оптимизации подзапросов в MariaDB.
Матвей Мальков «Ещё один поиск контактов на Android»DevDay
Многие дайлеры не умеют делать поиск по Т9 клавиатуре. Те, что умеют, в большинстве своем делают поиск только по имени/фамилии контакта или по началу номера, а кто-то только с использованием английского алфавита. В 2GIS Dialer нам хотелось искать все контакты по имени, фамилии, телефону (любому из списка и с любого символа), а так же по должности и месту работу (опционально: e-mail и вебсайт, адрес и группы контактов). Кроме того, нам хотелось, чтобы пользователь на любом языке мог найти свои контакты. И в завершение необходимо было, чтобы весь этот поиск работал быстро. О том, как мы добились прогресса в этом деле я и расскажу.
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
О том, как перестать вручную контролировать DOM, писать логику навигаций и почему DOM-шаблонизация — это классно, а так же немного самокритики и сравнительных тест-кейсов.
Тимофей Чаптыков «Верстальщик должен быть ленивый»DevDay
Большую часть рабочего времени мы занимаемся не написанием новой функциональности, а тестированием, исправлением ошибок, рефакторингом. При этом писать классные фичи всем нравится гораздо больше, чем искать причину очередного хитроумного бага. Как сделать так, чтобы ошибок стало меньше, и мы могли тратить время на то, что доставляет удовольствие?
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Ontico
Это реальный рассказ об архитектуре Единой Фронтальной Системы (ЕФС) - системы, которая будет обслуживать абсолютно всех клиентов Сбербанка во всех каналах (отделения, интернет-банки, мобильные приложения, АТМ и т.д.). Это означает: десятки миллионов активных клиентов, 24х7, и еще пара NFR'ов, от которых порой вздрагиваешь по ночам :)
С одной стороны мы должны гарантировать 99.99% доступность, с другой стороны мы должны сокращать time-to-market для новых продуктов и быть готовыми обновлять ЕФС очень часто и по кусочкам – и это малая часть вызовов, с которыми нам приходиться сталкиваться.
В моем докладе я расскажу:
· Как мы гарантируем 99.99% доступности для всего ЕФС, включая хранилище (и особенно включая хранилище).
· Как мы масштабируемся на миллионы пользователей, оставаясь внешнее единой системой.
· Как мы реализуем zero downtime deployment, чтобы оставаться в 99.99% в условиях частых обновлений.
Контроль и управление доступом к корпоративным ресурсам предприятияVERNA
01.05.2015. Семинар во Львове. Кирилл Карнаухов рассказал о преимуществах внедрения контроля сетевого доступа на предприятии и успешном проекте построения Cisco ISE в крупном украинском банке.
«Agile-тестирование по версии API 2ГИС» — Анастасия Огаркова, 2ГИСDevDay
В свое время, когда мы только запускали API, всё было скромно: небольшая команда, комфортные требования, да и бизнес не требовал от нас подвигов. Но всё коренным образом изменилось, когда API разрослось до 30 серверных компонент в трёх датацентрах, а бизнес «порекомендовал» успевать с ответом в 200 мс и выкатывать релизы раз в неделю. На фоне роста проекта, росла команда и остро встали вопросы «как экологично встроить тестирование в большую scrum-команду большого проекта».
Мы сфокусировались на трёх важных моментах:
Планирование
Большая команда → «большое» планирование. Тестирование планируется отдельно или вместе с разработчиками? Нужна ли выделенная роль крайнего за тестирование на проекте?
Релиз
Нужен ли крайний за релиз и кто отвечает за интеграционные зависимости? Когда надо остановиться и заморозить фичи? Кто и как мониторит продукт после релиза?
Автоматизация — наше всё ;)
Как не «захлебнуться» в регрессии: unit-тесты, json-схема. Как правильно выбрать фичи для автоматизации и как встроить автоматизацию в процесс тестирования.
SQL-ник DevDay. Рубцов. Новое в Percona Server и MariaDB в сравнении с MySQL 5.5DevDay
Григорий Рубцов — руководитель проектов SQLinfo.ru (http://sqlinfo.ru/) и Webew.ru (http://webew.ru/), автор онлайн-курса по MySQL (http://sqlinfo.ru/classes/) и спикер конференции РИТ++.
Новое в Percona Server и MariaDB в сравнении с MySQL 5.5
Обзор возможностей:
— новое для разработчика;
— новое для администратора;
— улучшения производительности;
— миграция и вопросы совместимости.
Технические детали:
— хранилище XtraDB;
— Percona Tools;
— алгоритмы оптимизации подзапросов в MariaDB.
Матвей Мальков «Ещё один поиск контактов на Android»DevDay
Многие дайлеры не умеют делать поиск по Т9 клавиатуре. Те, что умеют, в большинстве своем делают поиск только по имени/фамилии контакта или по началу номера, а кто-то только с использованием английского алфавита. В 2GIS Dialer нам хотелось искать все контакты по имени, фамилии, телефону (любому из списка и с любого символа), а так же по должности и месту работу (опционально: e-mail и вебсайт, адрес и группы контактов). Кроме того, нам хотелось, чтобы пользователь на любом языке мог найти свои контакты. И в завершение необходимо было, чтобы весь этот поиск работал быстро. О том, как мы добились прогресса в этом деле я и расскажу.
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
О том, как перестать вручную контролировать DOM, писать логику навигаций и почему DOM-шаблонизация — это классно, а так же немного самокритики и сравнительных тест-кейсов.
Тимофей Чаптыков «Верстальщик должен быть ленивый»DevDay
Большую часть рабочего времени мы занимаемся не написанием новой функциональности, а тестированием, исправлением ошибок, рефакторингом. При этом писать классные фичи всем нравится гораздо больше, чем искать причину очередного хитроумного бага. Как сделать так, чтобы ошибок стало меньше, и мы могли тратить время на то, что доставляет удовольствие?
Высокопроизводительная и отказоустойчивая архитектура фронтальных систем / Ма...Ontico
Это реальный рассказ об архитектуре Единой Фронтальной Системы (ЕФС) - системы, которая будет обслуживать абсолютно всех клиентов Сбербанка во всех каналах (отделения, интернет-банки, мобильные приложения, АТМ и т.д.). Это означает: десятки миллионов активных клиентов, 24х7, и еще пара NFR'ов, от которых порой вздрагиваешь по ночам :)
С одной стороны мы должны гарантировать 99.99% доступность, с другой стороны мы должны сокращать time-to-market для новых продуктов и быть готовыми обновлять ЕФС очень часто и по кусочкам – и это малая часть вызовов, с которыми нам приходиться сталкиваться.
В моем докладе я расскажу:
· Как мы гарантируем 99.99% доступности для всего ЕФС, включая хранилище (и особенно включая хранилище).
· Как мы масштабируемся на миллионы пользователей, оставаясь внешнее единой системой.
· Как мы реализуем zero downtime deployment, чтобы оставаться в 99.99% в условиях частых обновлений.
Контроль и управление доступом к корпоративным ресурсам предприятияVERNA
01.05.2015. Семинар во Львове. Кирилл Карнаухов рассказал о преимуществах внедрения контроля сетевого доступа на предприятии и успешном проекте построения Cisco ISE в крупном украинском банке.
Diasoft-«Мои платежи» - современная система сбора счетов и платежей за потреб...Николай Журин
Интернет-система «Мои платежи» предназначена для сбора коммунальных платежей населения и используется в управляющих компаниях коммунального сектора и в розничных банках. Система поставляется на условиях аутсорсинга программного обеспечения, или в виде лицензии на программное обеспечение (ПО) в двух вариантах:
Управляющим компаниям коммунального сектора (Организаторам), ТСЖ и их агентам по сбору платежей – как отдельная информационная система (ИС);
Банкам – как дополнительный модуль к АБС Диасофт или к АБС стороннего производителя.
III. Бизнес-функции
Основными бизнес-функциями данного решения, определяющими его востребованность на рынке, являются:
1. Агрегация в одном месте требований к плательщику коммунальных услуг со стороны различных поставщиков услуг;
2. Обратная связь с плательщиком в виде:
a) ввода плательщиком показаний счётчиков на газ, электроэнергию, водоснабжение и пр.,
b) корректировки плательщиком сумм выставленных ему счетов;
3. Выбор плательщиком способа оплаты – источника средств:
a) кредитная карта или банковский счёт,
b) внешний кошелёк в интернет-платёжной системе,
c) баланс мобильного телефона;
4. Оптимальный выбор каналов взаимодействия с плательщиком – способов доступа плательщика к выставленным ему счетам и к инструментам их оплаты:
a) офисы поставщиков услуг, банков или их агентов,
b) сеть Интернет,
c) мобильный телефон.
IV. Преимущества
Управляющим компаниям коммунального сектора (УК) и поставщикам коммунальных услуг (ПУ):
− уменьшение сумм задолженностей плательщиков коммунальных платежей за счёт предоставления плательщикам возможности дистанционно, без посещения банка или офиса УК оплачивать свои коммунальные услуги;
− быстрое, за 1-2- дня, поступление денежных средств на банковский счёт УК;
− уменьшение трудозатрат на ручную обработку извещений от плательщиков за счёт автоматической загрузки показаний счётчиков в ИС поставщика услуг;
Банкам, осуществляющим приём коммунальных платежей населения:
− уменьшение затрат времени на обслуживание одного плательщика в кассах банка за счёт автоматической загрузки в АБС сведений о задолженностях плательщиков поставщикам коммунальных услуг;
− увеличение остат
Фреймворк Slot, Good Parts, Александр БирюковDevDay
Расскажу о ключевых особенностях продукта: о какой изоморфности идёт речь, как мы управляем состоянием SinglePage-приложения и какой профит для SEO извлекли, с примерами кода. Посмотрим как быстро начать свой проект на Slot.
Devops-практики в разработке решений для бизнеса, Максим ПашукDevDay
Обычно разработчик успокаивается как только написан код, решающий задачи бизнеса. На самом деле есть ещё целый ряд вопросов, которые также необходимо решать.
Как донести изменения разработчика до тестирования в согласованном виде (база данных, приложение, конфиги)? Как донести эти же изменения до production и ничего не потерять по дороге? Что делать если продукт — распределённая многокомпонентная система, работающая в отказоустойчивом кластере? Тогда ситуация требует тесной совместной работы разработчиков и администраторов, а это, как известно, люди немного с разных планет.
Я расскажу на примере конкретного проекта на .NET стеке, как мы построили мост дружбы. Как свели воедино систему сборки, развёртывания и автоматизации, используя библиотеку psake и достигли взаимопонимания.
Inversion of Control в деталях, Дмитрий КожевниковDevDay
Казалось бы всё сказано об инверсии управления, особенно в .NET. Но нетривиальные квесты вокруг дизайна, построенного на DI, продолжают возникать из проекта в проект. Предлагаю поговорить немного о прописных истинах, а потом перейти к более любопытным вещам и болезненным вопросам.
Чем плох ServiceLocator? Почему IoC-контейнер — это фреймворк, а не библиотека? Как быть с множественными реализациями? Convention over configuration?
Отдельно поговорим об архитектуре enterprise решений в свете возможностей IoC-контейнеров.
Год от года многие программисты решают одни и те же задачи, но не всегда среди огромного многообразия решений можно найти что-то подходящее. Вот и мы не смогли найти ни одной библиотеки логирования для C++, которая удовлетворяла бы всем нашим требованиям. Теперь у нас есть свой велосипед, и мы расскажем, чем он лучше других.
Все мы привыкли писать программы, результаты работы которых можно увидеть и услышать. Хотите, чтобы их можно было ещё и потрогать? На примере создания электронной игры «Лабиринт» вы увидите, как не имея знаний и опыта сделать первый шаг в мир hardware.
Расскажу про первый продукт 2ГИС, который не совсем про организации – 2GIS Dialer. О трудностях создания, и почему их не нужно бояться. Делая что-то новое, вы обязательно с ними столкнетесь:
— Команда будет меняться.
— Конкуренты будут поджимать и опережать.
— Промо-кампании не будут стрелять.
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев DevDay
С чего начинается проектирование и дизайн новых продуктов — со сценариев. Продуктовые сценарии работы — ключевой элемент в пазле проектирования новых взаимодействий. В докладе покажу какое место сценарии занимают в 2ГИСе, почему они важны и какие сценарии бывают.
Олег Годовых «Страх и ненависть в Event Bus»DevDay
У нас было 500 страниц спецификаций, 40000 строк кода, 2 офиса, полдюжины разработчиков, а также целое множество андроидов всех сортов и расцветок. Не то, чтобы это был необходимый запас для приложения крупной торговой сети. Но если начал собирать софт, становится трудно остановиться. Единственное, что вызвало у меня опасение — это сетевая библиотека. Нет ничего более беспомощного, безответственного и испорченного, чем писать AsyncTask на каждый вызов. Я знал, что рано или поздно мы перейдём на Event Bus.
Распределенные приложения и Azure Service BusDevDay
Когда приложения перестают быть монолитными и разделяются на подсистемы, возникает много нюансов. Как спроектировать распределенную систему так, чтобы она оставалась управляемой? Как добиться того, чтобы процессы, в которых задействованы несколько подсистем, остаавалить прозрачными, а данные - согласованными? Какие принципы, технологии и инструменты могут нам помочь? Я расскажу о том, какие задачи мы решаем в одном из внутренних проектов 2ГИС, и почему мы остановились на Azure Service Bus как на инструменте обеспечения взаимодействия подсистем приложения.
Современный веб становится интерактивнее. Сейчас практически все браузеры поддерживают такую технологию как WebSocket, но современные веб-фремймоворки, такие как Django, Yii или RubyOnRails, не поддерживают работу с ними. Я расскажу, как мы сделали наши приложения интерактивным с использованием Erlang. А также что такое Erlang. Для чего он нужен.
Роман Акинфеев «Разработка RESTful API with all bells and whistles»DevDay
Каждый уважающий себя интернет-сервис, ориентированный больше чем на одну платформу, сегодня имеет RESTful API. Но мало кто понимает что такое REST, с чем его едят, как готовят и чем он полезен для здоровья. Кто-то считает, что RESTful API - это API использующее в качестве транспорта протокол HTTP, кто-то думает, что REST - это стандарт в рамках которого разработчики ограничены набором ресурсов и восьмью операциями над ними. Я расскажу о том как мы в Яндекс.Диске понимаем REST, как его готовим и какую пользу он нам приносит.
Александр Щепановский «Почему каждому языку нужен свой _»DevDay
Такие библиотеки как funcy и underscore часто связывают с функциональным программированием, но настоящий их фокус - это практичность. Задача их - упростить манипулирование данными, коллекциями, функциями и даже потоком управления, а также абстрагировать часто встречащиеся полезные поведения. В своём докладе я приведу жизненные примеры использования всего этого, а также расскажу об идеях заложенных в и продвигаемых funcy.
Картинка (?) Добрый день! Меня зовут Крестьянинов Михаил. Работаю я в компании Новотелеком, где занимаюсь системой биллинга и внутренней автоматизацией.
О себе. Для начала чуть-чуть скучной и никому неинтересной информации о себе. Вот небольшой список тех компаний, где мне платили зарплату (появляются компании). А так же всего, что я достиг в этой жизни (появляются сертификаты) . Вот. Ну а теперь начнём
Что такое Enterprise? Картинка (АСР ) . Кому-нибудь эта картинка что-нибудь напоминает? Нет? А я вот каждый день вижу . И так, все мы знаем (ну или по крайней мере догадываемся), что представляют собой такие направления разработки как webdev, gamedev... популярный в последнее время mobiledev. Однако, далеко не всем известно, что же представляет собой разработка enterprise (или в переводе на великий и могучий — корпоративных) приложений ? Как видно с этой картинки, занятие это довольно увлекательное, насыщенное разными технологиями, проблемами и их решениями :) Но что бы ответить на этот вопрос серьёзно, давайте представим себе, что у нас есть некая относительно крупная компания ... например, Новотелеком. Жизнь в этой компании бурлит, цветёт и пахнет: подключаются абоненты, оплачиваются услуги, предоставляется интернет, списывается абонентская плата... ну и всё по новой :) Однако, если бы всё это делалось вручную, с помощью специально обученных бабушек или иной биоробототехники, к успеху бы компания шла очень долго и скорее всего никогда бы не дошла. Что бы автоматизировать все эти бизнес процессы (и списывать ещё больше денег) как раз и используются приложения, именуемые корпоративными: биллинг, система учёта клиентов и т. д. Иначе говоря, корпоративные приложения — это ПО, призванное решать задачи автоматизации бизнес процессов компании.
Автоматизация БП . Давайте рассмотрим пример конкретного бизнес-процесса , что бы чуть более лучше понимать, что собой представляет бизнес-процесс, и так ли сильно его нужно автоматизировать .
Автоматизация БП. Картинка (Диаграмма подключения абонентов). В качестве примера возьмём процесс подключения абонента в НТК . Первым делом счастливый абонент ( появляется абонент ) звонит по телефону (или иным образом) сообщает оператору ( появляется оператор ), что хочет подключится. Его контактные данные сохраняются в CRM ( появляется CRM ) и на их основе создаётся заявка в Issue Tracker ( появляется Jira ). Заявка в трекере проходит некоторые бюрократические и технические этапы — например установку оборудования монтажником ( появляется монтажник ). После этого абонент заводится в биллинге ( появляется АСР ) и конфигурируется на оборудовании ( появляется оборудование ). Как вы видите, только в одном , довольно обобщённом, сценарии подключения абонента задействовано четыре системы . Четыре приложения которые нужно разработать/купить и сынтегрировать вместе . На первый взгляд, процесс довольно прост , и не совсем понятно, так ли здесь нужно что-то автоматизировать . Однако, если посмотреть на него более детально ...
Автоматизация БП. Картинка (Процесс подключения абонента из Jira ). Думаю, ответ становится очевиден :)
Платформа для корпоративных приложений . И так, мы ответили на вопрос – Зачем нам корпоративные приложения? Перейдём к вопросу – Откуда берутся корпоративные приложения?
Платформы для EA. Картинка (Рынок ПО). Современный рынок корпоративного ПО предлагает огромнейшее количество решений для автоматизации практически любых задач. Тем не менее практически в каждой более менее крупной компании есть свой отдел, занимающийся разработкой корпоративного ПО . Почему? Ответов тут два .
Платформы для EA. Картинка (Где-то в Oracle ). Во первых — это стоимость . Приложения из Oracle E-Business Suite стоят в среднем от 5 до 20 килобаксов , плюс поддержка где-то ешё на тысячу /полторы. С учётом того, что большая часть его функциональности вам не пригодится, покупка его может быть оправдана только в случае компаний неимоверных масштабов. Конечно же есть и более пролетарские решения . В качестве примера можно взять продукты компании N a umen из ЕКБ. Однако, в данном случае мы наступаем на другую сторону медали — …
Платформы для EA. Картинка (Кастомизация). … кастомизируемость, адаптируемость продукта под нужды компании . В случае с НТК система биллинга дорабатывается под нужды маркетинга практически непрерывно : каждую неделю внедряется какая-нибудь новая фича, порожденная богатым воображением наших внутренних заказчиков. Понятно, что ни одна сторонняя система не сможет обеспечить абсолютной гибкости настроек, а держать основное ПО компании на аутсорсе мягко говоря рискованно.
Архитектура корпоративных приложений . И так, мы решили писать своё enterprise- приложение. Какой подход выбрать? Вариантов тут на мой взгляд три.
Платформы для EA. Картинка (Банк). Первый подход я назвал «Банковским», потому что его реализацию можно встретить практически в любом банке . В основе него лежит святая святых — БД Oracle за несколько сотен килобаксов . Большая часть логики при этом реализована в виде хранимых процедур на PL/SQL. Говорить о недостатках этого подхода смысла нет , так как споры об эффективности процедурной разработки в свете наличия ООП вроде бы давно утихли и остались в прошлом . Понятно, что это наследие прошлого , которое необходимо поддерживать и развивать . Которое приносит деньги .
Платформы для EA. Картинка (Сервер Приложений). Далее идут сервера приложений . Довольно интересный подход, который тем не менее редко можно встретить на рынке НСК. Суть его заключается в использовании специального ПО — сервера приложений (типа Jboss, WebSphere), который берёт на себя все аспекты работы с БД, контроля транзакций, авторизации, кластеризации . Разработчику при это остаётся только самое главное — описывать бизнес-логику. Причина непопулярности данного подхода у нас скорее всего кроется в их цене (до $5К) и относительно невысокой производительности (обусловленной не всегда востребованными накладными расходами ). Поэтому зачастую их можно встретить только в крупных компаниях, которые покупали брендовые сервера «под ключ»: с заранее установленной брендовой ОС и сервером приложений . Например, IBM System I c AIX и WebSphere на борту. В качестве более-менее удачного примера использования можно рассмотреть АльфаКлик от АльфаБанка ( судя по их вакансиям работает на WebSphere под AS/400) . Ну а что же делать, если не хочется писать хранимые процедуры и нет веры в EE-сервера? Правильно, писать своё — с нуля. На самом деле — шучу. Почти с нуля.
Платформы для EA. Картинка ( Framework ). Для разработки корпоративных приложений прекрасно подходят языки со строгой типизацией и мощным фреймворком/комьюнити. Примерами таких языков являются Java с замечательным Spring FrameWork и C# с не менее замечательным .NET. У нас в НТК мы используем как раз Java + Spring, чему очень рады.
Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . Но бог с ней, с теорией — давайте перейдём к практике и попробуем спроектировать своё enterpri s e - приложение. С блэкджеком и прочими фичами. Как следует из заголовка доклада - это будет биллинг. Заодно я покажу, как он устроен у нас в НТК. Первым делом давайте определимся с тем, что же должен уметь биллинг. Как минимум хранить информацию об абонентах и предоставляемых им услугам ( появляется сервис Абоненты/Услуги ).Что бы предоставлять услуги, например, доступ в интернет, придётся научиться конфигурировать оборудование ( появляется сервис Оборудование ). Раз у нас появились абоненты, которым мы предоставляем услуги, — пора начинать списывать с них деньги! ( появляется сервис Тарификация ). Что бы абоненты могли пополнять свой баланс и приносить компании ещё больше денег, дадим им возможность пополнять баланс ( появляется сервис Приём Платежей ). Так же мы должны уметь оповещать абонентов ( появляется сервис Нотификации ). И предоставить web-интерфейсы для абонентов, операторов и администраторов ( появляется сервисы Интерфейсов ). И так мы декомпозировали наш биллниг на несколько относительно независимых служб, реализующих свой модуль бизнес логики. Каждая из них достаточно самостоятельна, что бы быть представлена отдельным приложением с 2х/3х-звенной архитектурой и, потенциально, со своей БД ( появляются базы данных ). Такой подход называется сервисно-ориентированным или SOA . Его преимущества достаточно очевидны: кластеризация бизнес-логики, упрощение доработок и рефакторинга, потенциальное масштабирование, и главная ценность для больших систем — порядок!
Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . Следующим шагом является связывание наших сервисов друг с другом. Интерфейс должен знать об абонентах и оказываемых услугах, Тарификатор должен уметь оповестить абонента об окончании денег на его счету. Связать службы можно несколькими способами: 1. Напрямую ( появляются прямые связи ). Самый простой и самый эффективный способ . По крайней мере при небольшом количестве служб . Спектр возможных протоколов тут крайне широк, но зачастую речь идёт об REST или SOAP . В нашем случае используется крайне специфичный бинарный протокол Hessian , но его наличие обусловлено чисто историческими причинами :)
Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . 2. Второй способ - Очереди Сообщений ( появляется схема с MQ ). Тут существует несколько возможных протоколов: Java Message Service, Advanced Message Queuing Protocol, ну и конечно же Microsoft Message Queuing – лозунг “Not invent here” никто не отменял У каждого протокола есть свои реализации (наиболее популярные приведены на слайде) , но суть у них одна - асинхронный обмен сообщениями без явного необходимости указания адресата и адресанта. Например, в нашем биллинге такая схема (на основе ActiveMQ ) используется для отработки события подключения абонента. Как только служба работы с оборудованием зафиксирует факт подключения абонента — она отправит сообщение об этом в соответствующий топик. Все другие службы и системы, которые хотят быть в курсе этого события (Учёт Абонентов, Нотификация, JIRA) получат это сообщение и сделают соответствующие выводы. Относительно предыдущего способа у данного есть 3 явных преимущества : - всегда можно подписать или отписать ещё одну службу на некоторое событие, - время работы вызывающей службы не зависит от времени работы вызываемых служб, - работа системы в целом не зависит от доступности вызываемых служб, в виду гарантии доставки сообщения.
Архитектура EA. Рисунок (Диаграмма поэтапного создания биллинга) . 3. И последний способ — через сервисную шину предприятия, Enterprise Service Bus ( появляется схема с ESB ). ESB , как и вариации Message Queuing является стандартом, но уже не обмена сообщениями, а интеграции корпоративных систем. Что бы понять его предназначение, давайте представим себе компанию в которой одна служба имеет интерфейс SOAP, другая — SMTP, а третья — вообще работает только по собственному XML протоколу поверх TCP. Что бы свести всё это к единой схеме, единой шине нам как раз и пригодится ESB приложение ( например , eMule) , на основе которого мы напишем коннекторы ( появляется JIRA и 1С с коннекторами ) ко всем службам по всем нужным протоколам, не изменяя при этом ни строчки кода этих служб . Какой же способ выбрать? Всё зависит от ваших задач. Мы в своей работе используем все три способа. Прямые связи, так как это дёшево и эффективно (тут правда стоит отметить, что большинство наших служб и сервисов самописаны и поддерживают единый протокол Hessian). JMS — в тех случаях, когда бизнес процесс явно подразумевает асинхронную модель поведения. ESB — в качестве моста между Hessian-службами и чужеродными нам Jira/1C.
База Данных . Вот мы, пожалуй и добрались до самого главного — БД. Данные — это пожалуй одна из самых главных ценностей любой IT компании, а способ из хранения — ценнейшая тайна :) На самом деле нет :) Но давайте к сути. Какую БД выбрать для вашего приложения?
Базы данных. Рисунок ( Oracle vs Postgres ) . Обычно всё уже давно выбрано за нас, причём давно :) Однако, если попытаться ответить на этот вопрос теоритически... Понятно, что модный пару лет назад NoSQL стоит оставить Хипстерам . Ограничения целостности и строгая структурированность данных — крайне важные вещи, при работе с серьёзными данными…
Базы данных. Рисунок (Реляционные БД) . … Что же касается реляционных БД... то тут почти у каждой есть своя Success Story в крупных проектах : MySQL — YouTube, Postgres — Skype, Sybase — SUP, MsSQL — все партнёры Microsoft, Oracle — так вообще корпоративный стандарт. В общем холиварить тут можно долго . Точно можно сказать, что количество success story и размер comunity у Oracle просто огромны . Однако, он стоит денег — 47 килобаксов за процессор (и это без поддержки!) . Что, согласитесь, не мало. Из бесплатных БД лично нам наиболее импонирует Postgres. ..
Базы данных. Рисунок ( PostgreSQL ) . Мы умеем с находить с ним общий язык. Он хорошо зарекомендовал себя в плане работой под нагрузкой в проекте CN.ru . Он умеет партицирование и репликацию , которые так же успешно опробованы как у нас, так и в других российских компаниях , в том же Яндексе. В общем – мы любим и верим в Postgres. Если же говорить о выборе, то уникального рецепта тут нет. Попробуйте всё сами, сравните и выберите наиболее удобное и эффективное для вас решение.
Базы данных. Рисунок (Структура сервисов биллинга НТК) . Однако, как я уже говорил выбирать зачастую не приходится — скорее всего всё уже выбрано за вас! :) Помните, пару слайдов назад я показывал вам, как выглядит структура сервисов нашего биллинга? Так вот - я соврал Мы хотим, что бы она так выглядела На самом деле все выглядит так ( Спецэффект ). В нашем случае в качестве основной БД мы имеем купленный много лет назад вместе в первым биллингом Sybase .
Базы данных. Рисунок (This is Sybase). Недавно у него было день рождение. Ему исполнилось 12 лет. Я в его возрасте в первый раз попробовал пиво :) Нет, это очень хорошая СУБД... для своего времени :) Количество параметров конфигурации и объёмы документации превышают пожалуй размеры любой современной open source БД. Там даже есть партицирование БД (правда только по первичному ключу). Но! В нём нём крайне скудны возможности SQL (минимум агрегатных функций, ни какой рекурсии или оконных функций), работы с триггерами и т. д. Но это не основная проблема — всегда можно найти какой-то workaround . Основная беда кроется в том, что архитектура БД устарела — нельзя заставить СУБД 12 летней давности эффективно использовать ресурсы современных серверов. Так как в качестве решения проблемы Sybase предлагает купить последнюю версию их БД по цене не сильно отличающейся от стоимости Oracle , мы решили медленно но верно переезжать на Postgres. Кстати о переезде . Более менее безболезненный переезд стал возможен как раз благодаря сервисно-ориентированной архитектуре биллинга . Поскольку логика работы с каким-то определённым аспектом инкапсулирована в одной службе , нам относительно безболезненно удалось взять часть таблиц, относящихся к финансам и тарификации и унести их из Sybase в Postgres — к производительности и партицированию, так что остальные службы даже ничего не заметили :)
Тестирование . И так, мы определились с архитектурой и БД. Давайте теперь подумаем, как же тестировать наше приложение?
Тестирование . Рисунок (Песочница). Когда приложение состоит из одного модуля — всё просто: установили, протестировали. Но что делать, если приложение, сервис зависит от других сервисов? Ответ прост, как и всё гениальное — для каждого тестировщика создавать собственное окружение с блекджеком и полным набором сервисов. Тоже самое будет касаться и различных БД для сервисов . Правда в нашем случае есть БД, чей объём превышает 1 00ГБ , что делает её актуализацию несколько затратной . В данном случае можно идти по пути обновления не всей базы, а отдельных таблиц или даже дельт этих таблиц.
Тестирование . Рисунок (Служба и моки вокруг). Отдельно хотел бы упомянуть модульные тесты... :) Мы все знаем, что TDD - это круто... но давайте смотреть правде в глаза :) Кто из вас положа руку на грудь, скажет что ведёт разработку полностью в рамках этой религии ? Писать моки для БД и множества соседних служб, конечно очень увлекательно, но имхо крайне неэффективно. Тем более, если учесть существование тестов интеграционных. В нашей разработке модульные тесты используются только для математики/алгоритмов и некоторых утилит . Всю остальную логику в случае сервисно-ориентированной архитектуры лучше возложить на интеграционные тесты – тут вам и проверка логики и работы с БД, плюс полная имитация всех внешних взаимодействий по всем протоколам, плюс проверка интерфейсов с помощью Selenium .
Тестирование . Рисунок (Hudson). Для того, что бы автоматизировать процесс тестирования до конца удобно использовать системы непрерывной интеграции, например Hudson . Однако его настройка, это тема для отдельного доклада . Скажу только, что самое сложное при работе с ним — это не забить на него и его репорты. Это требует действительно большой ответственности и силы воли :)
Прочее . Фух! Потихоньку подбираемся к концу
Деплоймент. Риунок (План внедрения). Вкратце затрону процесс выкладки служб на боевые сервера. Если бы у нас был сервер приложений — то вопрос выкладки и хостинга сервисов отпал бы автоматически. Но у нас OpenSource и Spring :) Поэтому каждую нашу службу мы оформляем виде самостоятельного приложения и пакуем в deb-пакет. Тем самым используя виртуалки с Linux'ом в качестве контейнеров для служб нашего биллинга. Подход немного нестандартен, но при наличии некоторых утилит для мониторинга весьма эффективен.
Нагрузки. Рисунок (Ослик). Я думаю, это печальная тема для многих из нас :) Как я уже говорил выше главная проблема в нашем случае это моральна устаревшая БД . Ну и чего уж греха таить, порой не всегда оптимальный код . Но что в обоих случаях мы идём к успеху: в первом случае к Postgres ’ у, во втором — к просветлению :) Если говорить о цифрах, то это примерно 150К абонентов, 300К финансовых проводок в сутки и 150ГБ данных. Кстати про данные. Мало кто знает, но одной из причин появление в 2008 году безлимитных тарифов на интернет в НСК стал тот факт, что с ростом числа абонентов обрабатывать и хранить данные по потреблению трафика стало довольно неоправданно напряжно :)
Проблемы. Рисунок (Троллфайс). Проблемы есть у всех. В случае enterprice-разработки они мало чем отличаются от общих по отрасли :) Самая главная проблема на мой взгляд — это внутренний заказчик . С одной стороны это хорошо: всегда можно в полной мере обсудить задачу и уточнить неясные моменты. С другой — это ад, потому что требования будут меняться каждый день, если не час: ведь продумать всё сразу необязательно — всегда можно подойти и сказать: «я тут подумал...» :) В любой компании есть быдлокод оставшейся с времён, когда компания только начинала развиваться и думать о качестве кода не приходилось . История НТК, например, начиналась с купленного биллинга средней руки на JSP и хранимых процедурах БД и bash скриптах. Сейчас от того биллинга уже ничего не осталось В мире корпоративной разработки есть очень много интересных технологий. Однако, далеко не все нужно использовать. А хочется, ибо круто :) Такую болезнь иногда называют Resume Driven Development. В своей компании видеть такого мне не приходилось, но вот в других порой встречается :)
Отказоустойчивость. Рисунок (Нет!). Ну и конце своего доклада хотелось бы ответить на вопрос, который наверное интересует всех — как сделать так, что бы всё работало и никогда не ломалось? Да никак! Чудеса бывают только в сказках и платных мастер-классах. Помните пару месяцев назад свалился процессинг СберБанка? Даже Сбер с его многомиллионными бюджетами, почти полной редакцией Oracle 11g, наикрутешим аккаунтом в саппорте Oracle словил вполне тривиальную ошибку. Не срабатывает процесс создания резервной копии (check point) БД, переполняется лог транзакций, встаёт запись в базу. Точка. Полностью защититься от беды нельзя, но можно значительно снизить риски. И рецепты тут давно известны — мониторинг с помощью того же Zabbix/Monit и резервирование !