Что MS стоит open source построить или как .NET разработчики linux осваивали.pptx
- Количество слайдов: 45
Что MS стоит open source построить или как. NET разработчики Linux осваивали Александр Спицын Александр Ложкин ГК Экстрим
План Первые попытки перехода на СПО . NET Core - краткое описание платформы Задачи и риски перехода на ASP. NET Core Преимущества нового стека Обретенный опыт
Стек разработки Классический стек разработки нашей команды: Backend: ASP. NET MVC 5 DB & ORM: MS SQL Server, Entity Framework 5/6 (db/model first) Frontend: j. Query, редко knockoutjs Unit tests: n. Unit CI/CD: teamcity + octopus deploy Хорошо бы переехать на СПО! 4
Эльпас на СПО Mono Postgre. SQL
Эльпас на СПО Переход на Mono невозможен (без существенный трудозатрат) Для перехода на Postgre. SQL нужно было ~2 -3 человеко-недели Возможно результат был бы другим если требования были известны на старте проекта
РГИС Нужно делать РГИС на СПО
. NET Core - краткое описание платформы
. NET – набор вертикалей
Недостатки. NET, как набора вертикалей Рост различий в API, которые когда-то начинались из единой базы кода. Проблема, если необходимо сделать что-то горизонтальное, затрагивающее несколько вертикалей. Фреймворки для всей машины против фреймворков для приложения Центральное обслуживание Уменьшает размер требуемого места на диске Позволяет разделять нативный код между приложениями Но трудно переходить на недавно вышедший фреймворк.
. NET Core – модульная реализация, которая может использоваться широким набором вертикалей, с открытым исходным кодом и поддерживаемая на различных платформах.
. NET Core – это форк. NET Framework, чья реализация была оптимизирована с учетом задач декомпозиции . NET Core – код, не специфичный ни для. NET Native, ни для ASP. NET 5. Основа для будущих вертикалей. NET.
Nu. Get как механизм доставки . NET Core доставляется в виде набора пакетов Nu. Get Позволяет доставлять. NET Core в гибкой манере Стирает разницу между собственными зависимостями от. NET и сторонними зависимостями. Каждое приложение логически имеет свой собственный фреймворк. Обновление не будет затрагивать другие приложения на той же машине. Дистрибуции. NET Core – набор Nu. Get-пакетов, поддерживаемых как единое целое
. NET Core. Итоги Платформа. NET Core – это новый. NET-стек, оптимизированный для разработки с открытым исходным кодом Гибкой доставкой через Nu. Get Поддерживаемый Microsoft для Windows, Linux и Mac
ASP. NET Core – это новый фреймворк без CLR (ставится отдельно) и без BCL (превратилась в набор Nu. Get пакетов) Отделение CLR от Framework выполнено через DNX -. NET Execution Environment(сейчас часть CLI -. NET Command Line Interface).
Достоинства платформы ASP. NET Core Кросс-платформенная среда выполнения – Windows, Linux, Mac Open Source – https: //github. com/aspnet/home Возможность вести разработку в MS Visual Studio на Windows Использование различных версий. NET Упрощенное управление зависимостями Хостинг в любом месте– IIS, Self-hosting, Docker Единая программная модель. Устранение дублирования в MVC, Web API, Web Pages Новый механизм конфигурации Производительность – нет зависимости от System. Web Настраиваемый цикл обработки запросов – Use. Identity(), Use. Mvc … Возможность вернуться к. NET Framework и Windows, если что-то пойдет не так…
Новый проект на СПО! Приложение с Web интерфейсом и сервисами обработки СУБД - Postgre. SQL Организация доступа к приложению по ssl на ГОСТ алгритмах Вызов сторонних сервисов по https Криптография на ГОСТ алгоритмах
Риски использования нового стека Технические проблемы Работа с СУБД Криптография Новый, нестабилизированный framework Хостинг приложения Организация цикла разработки Написание и отладка кода Тестирование CI Взлетит?
Написание кода Первый вопрос команды: мы будем работать в linux? ! 19
Проблема #1: beta Мало информации в интернете. Не соблюдаются Roadmap. Большое количество рефакторинга, в т. ч переименований ns, классов и методов Новый паттерн от MS: Rename, Rebrand, Repeat Release Candidate не всегда тру RC Баги ASP. NET v. Next -> ASP. NET 5 -> ASP. NET Core 20
Проблема #2: mono dnx Не корректно работает валидация XML. Не корректно работает парсинг времени. Проблемы с криптографией и шифрованием. Решение: Вариант #1: ждать выхода Core. CLR Вариант #2: использовать сторонние библиотеки: Saxon-HE для работы с XML. Bouncy. Castle-PCL для работы с криптографией. 21
Проблема #3: Entity Framework Изначально было решено реализовывать использовать: Postgres Entity Framework 7 Npgsql Нюансы: EF 7 поддерживает dnx, но в связке с Npgsql 3 не умеет накатывать миграции. EF может генерировать корректные скрипты миграции. EF 6 работает корректно, но миграции требуют Power. Shell. В EF 7 не реализованы некоторые требуемые «фишки» , есть баги. EF 7 и EF 6 по разному «реагируют» на атрибуты/fluent настройки для классов. DB/Model First подходы не поддерживаются в EF 7. 22
Проблема #3: Entity Framework Npgsql + EF 6 + liquibase = миграции EF 6 используется для работы с Postgres в рантайме. EF 6 генерирует SQL скрипты миграции. Liqui. Base используется для «накатывания» миграций. 23
Проблема #4: Криптография Mono DNX и ГОСТ криптография Сервис на Java!
Проблема #5: Вызов сторонних сервисов по https Криптопро. net Nginx Apache Trusted. TLS Stunnel
Проблема #6: Отладка Большая часть кодовой базы работает одинаково в windows и linux*. Нет Visual Studio, но есть варианты: Свеженький Project Rider от Jet Brains (EAP); Visual Studio Code. В Stack. Trace куча хлама. 26
Проблема #6: Отладка 27
Проблема #7: Тестирование n. Unit не поддерживает dnx; о выживании без n. Unit поговорим в другой раз; 28
Проблема #7: Тестирование Команда разработки ASP. NET Core портировала x. Unit для тестирования фреймворка. No More MS Tests! R# не поддерживает dnx тесты по сей день Решение: использовать x. Unit; запускать тесты VS Test Runner… или Console Test Runner.
Breaking news
Проблема #8: CI & CD Teamcity + docker: Вариант #1: Teamcity ничего не знает о docker. На целевой машине присутствует docker контейнер с необходимым окружением. Teamcity собирает приложение, подготавливает скрипт для запуска. Приложение «монтируется» в контейнер. Вариант #2: Teamcity подготавливает docker контейнер. Teamcity собирает приложение. Teamcity подготавливает docker контейнер с приложением внутри. 31
Проблема #9: Хостинг приложения, SSL Настройка nginx для работы с Крпито. ПРО CSP 4. 0 на Linux: http: //www. cryptopro. ru/forum 2/default. aspx? g=posts&m=57216&find=lastpost
Риски использования нового стека Организация цикла разработки Тестирование Написание и отладка кода CI Технические проблемы Новый, нестабилизированный framework Работа с субд Криптография Хостинг приложения
Плюсы использования ASP. NET core Более «прямой/правильный/прозрачный» фреймворк. Хороший встроенный Io. C. Мощный механизм конфигурации, работы с окружениями и т. д. Поддержка богатой frontend инфраструктуры. Более низкая стоимость для клиента за счет СПО.
MVC 6 http: //proudmonkey. azurewebsites. net/asp-net-5 -getting-started-with-mvc-6/
. xproj & project. json 36
Pipeline Сервер Хост окружение Браузер Pipeline приложения Middleware 1 Middleware 2 Middleware N Сессия Авторизация по ЕСИА MVC 37
Pipeline Точка входа в приложение: класс Startup{Environment. Name}, метод startup Настройка Io. C контейнера: необязательный метод Configure. Services Настройка приложения: обязательный метод Configure Startup. Windows. IIS() Startup. Windows. DNX 451() Startup. Linux. General() • • • IApplication. Environment, IHosting. Environment, ILogger. Factory. Configure. Services IService. Collection Configure • • IApplication. Builder, IHosting. Environment, ILogger. Factory, IApplication. Environment. 38
Хороший Io. C из коробки Нет статических зависимостей и Service. Locator. Добавление зависимостей – IService. Collection. Получение зависимостей – IService. Provider. Активация объектов – статический класс Activator. Utilities. 39
Механизмы конфигурации Построение конфигурации – класс Configuration. Builder. Получение конфигурации – IConfiguration. Источники конфигурации – IConfiguration. Source: Файловые источники (JSON, XML, INI). In-memory источники. Переменные окружения, параметры командной строки. Кастомные источники. Получение конфигурации через Io. C – IOptions
NPM, bower, grunt NPM – менеджер пакетов основанный на Node. js Bower – менеджер пакетов для фронтенда (CSS, JS и т. д. ) Grunt – javascript таск ранер. Имеет большое количество плагинов, среди которых минификаторы CSS/JS, компиляторы LESS/SASS и пр. 41
Gulp – потоковый сборщик проектов на JS. 42
Итоговая картина Ubuntu ASP. NET Core Postgre. SQL(EF+npgsql) NGINX Криптография на Java Stunnel для вызова внешних https сервисов Основная разработка и отладка на window, deploy на Linux Teamcity+docker
РГИС на Тест-сессии 2016 РГИС внесен в качестве предложения на Тест-сессию 2016. Сроки проведения ~25 -26 июня. Место проведения ГК Экстрим Про.
Конец…


