SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин...

Preview:

Citation preview

ИнфраструктураИнфраструктура

Рождение "Мое Дело"(MD 0.1.alpha)

Инфраструктура "Мое Дело"

Основные "подходы" к разработке• Ручная сборка кода программистами

• Ручной деплой в production

• Скрипты по почте

• Отсутствие возможности отката "версии"

• Отсутствие должного тестирования

• Ручное отключение сервиса на релиз (раз в неделю)

Мелкие шалости(MD 0.2.alpha)

Инфраструктура "Мое Дело"

Что мы имели на тот момент...• Терминирование SSL трафика на Nginx

• Частичный перенос бизнес логики на Nginx

Не имели, но очень хотелось :)• Мониторинг

• Логирование ошибок

Подходы к разработке сохранялись :)

Первые шаги в большом мире(MD 1.0.RELEASE)

Инфраструктура "Мое Дело"

Темная сторона "Мое Дело"• Распределение нагрузки (IP hash)

• Синхронизация контента между узлами

• Обслуживание узлов "кластера"

• Долгие релизы продолжались :(

Светлая сторона "Мое Дело"• Выделение QA как отдельного направления разработки

• Значительный рост команды

• Каждой команде "по тестовому серверу"

• Новый офис!!!

• Ломались подходы к разработке :)

Новая игрушка (Teamcity)• Версионность сборок (pack)

• Автоматизированная выкладка (deploy)

• Автоматическое тестирование (unit тесты)

• Обслуживание инфраструктуры (maintenance)

• Централизованное хранилище nuget пакетов

• Выключение сервиса "для чужих"

Работа над ошибками (первая двойка в четверти)

(MD 1.0.1.BUGFIX)

Сколько времени потребуется

на синхронизацию 1 000 000 файлов

между 2 серверами?

Сколько времени потребуется

на синхронизацию 5 000 000 файлов

между 10 серверами?

Новая животинка "Мое Дело"

Кто это? монгогрид или гридомонг?

Давайте накормим нашего нашу животинку...

И что мы видим???

Животинка вдруг выросла, да еще мутировала

Вот теперь это точно породистый реплисетовый гридомонг.

Не ошибается лишь тот, кто ничего не делает

(MD 2.0.RELEASE)

Мы снова переехали :)

Инфраструктура "Мое Дело"

Continious integrationTeamcity

Где мы используем Teamcity?• Прогон Unit тестов

• Build, Pack, Deploy приложения

• Прогон миграций

• Небольшое обслуживание инфраструктуры (Recycle, Server maintenance)

• Continious Inspection (SonarQube)

• Сборка Nuget пакетов

• Сборка npm пакетов

• Прогон автоматизированных тестов (Selenium)

Разбираемся с возможностями Teamcity• MSBuild

• Bash

• Windows CMD

• Powershell

• Plugins (Artifact Deployer, Node.js build runner)

• MetaRunner

• Teamcity Rest API

Hot (Re)DeployMD 3.0.RELEASE

Мы больше не увидим Андрюшу :(

Back-endBack-end

• CVSC

• Сборка на локальных машинах

• Прямое изменение структуры БД + mail-sharing

• Нет системы логирования

• Нет мониторинга

VCS• SVN (1 repo)

VCS• SVN (1 repo)

VCS• SVN (1 repo)

• TFS (1 repo)

VCS• SVN (1 repo)

• TFS (1 repo)

VCS• SVN (1 repo)

• TFS (1 repo)

• TFS (10-12 repo)

VCS• SVN (1 repo)

• TFS (1 repo)

• TFS (10-12 repo)

• Git (10-12 repo)

VCS• SVN (1 repo)

• TFS (1 repo)

• TFS (10-12 repo)

• Git (10-12 repo)

• Git (50+ repo)

Repo• Функциональные репозитории (бизнес код, общая схема именования

проектов и sln-файлов)

• Нефункциональные репозитории (полезные скрипты, общие

конфигурации codestyle и т.п.)

md-ci• Обновление локальных репозиториев

• Сборка бекенда

• Сборка фронтенда

• Инициализация структуры БД

• Обновление структуры БД

• Маппинг приложений на сайты IIS

• Запуск IIS

Continuous Integration

TeamCity (http://www.jetbrains.com/teamcity)

Continuous Integration

Continuous Integration

Continuous Integration

Continuous Integration

Microservices

Microservices

Database migrations• ручное редактирование БД иключено

• обновление состояния БД на всех окружениях

• единоразовое выполнение каждого изменения

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

• получение изменений БД между версиями

• откат БД на более раннюю версию

Database migrationsFluent Migrations

http://www.github.com/schambers/fluentmigrator

Database migrations

Database migrations

Loggly (http://www.loggly.com)

NewRelic (http://www.newrelic.com)

Front-endFront-end

Новорожденный• Мало скриптов

• Мало стилей

• Js/css файлы лежат вместе с серверным кодом

• Js/css подключаются напрямую в html

• Нет ни ci, ни минификации, файлы загружатся по ftp

Мы идем в детский сад• Резкий рост количества файлов

• Combres - для минификации и бандлов

• Less вместо css

• Js/css файлы все еще в серверном проекте

• Подключение в html через api Combress

• Появляется ci. Файлы пакуются и диплоются вместе с серверным кодом.

Школьник• Нет Combres, Gulp - да

• Backbone

• Ядро статки(вендоры, общие стили, библиотеки и компоненты)

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

Студент• Добавили версионность статики и ядра

• Marionette.js

• CDN

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

• PostCss

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

• PostCss

• Компонентный подход

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

• PostCss

• Компонентный подход

• MD-framework

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

• PostCss

• Компонентный подход

• MD-framework

• JSCS / Eslint

Невеста• Для сборки нового кода используется Webpack

• ESnext (ES6)

• PostCss

• Компонентный подход

• MD-framework

• JSCS / Eslint

• Ядро 2.0

Мы съезжаем• Отдельный репозиторий и отдельная сборка в TC (back-end и front-end

независимые)

• Скрипты для сборки gulp/webpack - npm пакеты

• Ядро статики - npm пакет

• Npm скрипты

npm start

Спасибо за внимание!

Moё дело

job@moedelo.org

Recommended