View
229
Download
4
Category
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
Спасибо за внимание!
Recommended