Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека

21 views

Published on

Microsoft Azure, пожалуй, самый очевидный выбор для .NET разработчиков, когда они (или их клиенты) внезапно решают, что им нужен клауд. Но при этом мы все равно используем подходы и техники из до-облачного мира, иногда и не подозревая о тех сервисах и удобствах, которые нам дает Azure. На этом докладе Сергей покажет, как быстро и эффективно можно разрабатывать современное веб приложение. Мы затронем разные аспекты -- от организации кода до деплоя и мониторинга приложений, работающих в проде. Документация API, поддержка рабочих процессов, инициализация приложений, полезные инструменты и библиотеки -- все это, и не только, ждет вас на нашем докладе.

Published in: Education
  • Be the first to comment

  • Be the first to like this

.NET Fest 2018. Сергей Калинец. Azure веб разработка здорового человека

  1. 1. Azure веб разработка здорового человека Сергей Калинец System Architect Playtika
  2. 2. Но почему так мало сайтов на .NET?
  3. 3. Hello world, go package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, you've requested: %sn", r.URL.Path) }) http.ListenAndServe(":80", nil) }
  4. 4. Hello world, python import tornado.ioloop import tornado.web application = tornado.web.Application([ (r"/(.*)", tornado.web.StaticFileHandler, {"path": ".","default_filename": "index.html"}) ]) if __name__ == "__main__": application.listen(8080,"0.0.0.0") tornado.ioloop.IOLoop.instance().start()
  5. 5. Hello world, Node.js var http = require('http'); var handleRequest = function (request, response) { console.log('Received request for URL: ' + request.url); response.writeHead(200); response.end('Hello World!'); }; var www = http.createServer(handleRequest); www.listen(8080);
  6. 6. Java wins Patterns Bingo easily
  7. 7. Empty folders in Java
  8. 8. Жертвы Паттернов
  9. 9. DDD in Real Life Ну у нас агрегат рут из одного баундед контекста ссылается на ентити, которая относится к другому контексту, и мы добавили антикорапшн лейер, а потом... Какой баундед контекст?!? Вы же разрабатываете сайт – визитку!!! В-И-З-И-Т-К-У!!! Вам даже база данных не нужна!!
  10. 10. Поймут не только лишь все
  11. 11. Олды здесь?  SOAP WSDL WS-* COM CORBA
  12. 12. Создавайте меньше Кода Файлов Папок Пространств имен Проектов / сборок
  13. 13. Nest Models Into Controllers [Route("api/[controller]")] public class SampleDataController : Controller { [HttpGet("[action]")] public IEnumerable<WeatherForecast> WeatherForecasts() { // .... } public class WeatherForecast { // ... fields } }
  14. 14. Nest AutoMapper Profiles Into Models public class AccountViewModel { // ... properties public class MappingProfile : Profile { public MappingProfile() { CreateMap<Account, AccountViewModel>(); } } }
  15. 15. Магия Просто не учите физику в школе, и вся ваша жизнь будет наполнена чудесами и волшебством
  16. 16. Инфраструктура
  17. 17. Преимущества ARM Версионирование инфраструктуры Скорость развертывания Переиспользование
  18. 18. Проблемы / особенности ARM Не всегда работает с первого раза, возможны конфликты, нужно повторять Дефолтные шаблоны могут быть дорогими, но их можно оптимизировать
  19. 19. Деплоймент
  20. 20. Из студии, правой кнопкой Быстро Нельзя быть уверенным, что имено залилось (поменял код, не вкомитил / не пушнул) Нельзя воспроизвести
  21. 21. CI / CD Сервер Унифицирует процесс сборки и развертывания Скрипты предпочтительнее, чем UI инструменты Можно воспроизвести с любого места Быстрый старт для новичков
  22. 22. Сервисы Azure
  23. 23. Простая миграция в cloud IIS, SQL Server, ASP.NET Right Click Deployment Intuitive UI in Azure Portal Support from Visual Studio
  24. 24. Хранилище
  25. 25. SQL Server Задачи
  26. 26. Проблемы Ненужная нормализация Декомпозиция на классы SQL миграции Масштабирование Надежность
  27. 27. No SQL Document DBs Column wide storage Key value storage Graph DBs
  28. 28. Cosmos DB Multi-Model APIs Table API Cassandra API Gremlin API SQL API MongoDB API
  29. 29. Azure Storage Queues Table Storage Blobs
  30. 30. Конфигурация
  31. 31. Не храним с кодом Все берем из конфига .NET Core Явки / пароли можем генерить в ARM и сразу передавать Можем добавить Azure Key Vault для секретов Можем переконфигурить на лету через app settings Нужно следить за очередностью добавления configuration sources
  32. 32. How to Add Key Vault private static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration(b => { var configurationRoot = b.Build(); var vaultName = configurationRoot["Vault:Name"]; if (!String.IsNullOrEmpty(vaultName)) { b.AddAzureKeyVault( $"https://{vaultName}.vault.azure.net/", configurationRoot["Vault:AppId"], configurationRoot["Vault:Secret"]); } }) ....
  33. 33. Мониторинг
  34. 34. Application Insights
  35. 35. Анализ аномалий
  36. 36. Alerts
  37. 37. Query Language
  38. 38. Application Insights Мониторинг и клиентов и сервисов Бесплатное (до определенный пределов) Интеграция с популярными логгерами Интеграция со студией
  39. 39. Background workers
  40. 40. Проблемы Долгая обработка запросов Пропускная способность
  41. 41. Пользователи... ... не парятся, сколько занимает операция ... не любят ждать
  42. 42. Azure Tools for Background Services Queues Web Jobs Functions
  43. 43. Web Jobs SDK public void PreProcessWebhook( [QueueTrigger("requests")] SomeType message, [Queue("items-to-process")] out SomeType outMessage) { logger.Information("got message: {@Message}", message); outMessage = message; } public async static Task ProcessQueueMessageAsyncCancellationToken( [QueueTrigger("blobcopyqueue")] string blobName, [Blob("textblobs/{queueTrigger}",FileAccess.Read)] Stream blobInput, [Blob("textblobs/{queueTrigger}-new",FileAccess.Write)] Stream blobOutput, CancellationToken token) { await blobInput.CopyToAsync(blobOutput, 4096, token); }
  44. 44. Web Jobs SDK more: https://github.com/Azure/azure-webjobs-sdk/wiki public static void CopyBlob( [BlobTrigger("input/original-{name}")] TextReader input, [Blob("output/copy-{name}")] out string output) { output = input.ReadToEnd(); }
  45. 45. Документация
  46. 46. Open API / Swagger
  47. 47. Консоль вместо UI Студия тормозит Портал глючит Можно выбирать Powershell или azure cli Скрипт можно всегда сохранить и переиспользовать или поделиться
  48. 48. Выводы Пишем меньше кода Постигаем магию Знакомимся с инфраструктурой Azure Больше консоли в жизни
  49. 49. Спасибо! kalinets@gmail.com @skalinets

×