РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 13:00
Тезисы:
http://backendconf.ru/2017/abstracts/2735.html
С релизом .NET Core для программистов, использующих .NET-стек, открылись все возможности Unix-мира. .NET-приложения могут отлично работать на Linux, а значит, мы можем использовать Docker и Kubernetes для развертывания сервисов.
В своем докладе я расскажу, как сделать REST-сервис на ASP.NET Core и запустить его в продакшн на платформе Kubernetes.
Мы погрузимся в детали инфраструктуры ASP.NET Core и нескольких популярных библиотек, поговорим про многопоточность, оптимизацию и кэширование для уменьшения времени ответа сервиса. Обсудим, как решать задачи билда приложения и сборки Docker-образов. И, конечно же, подробно остановимся на том, что такое Kubernetes, как эта технология может быть нам полезна и как ее использовать.
10. Почему Linux
-Cуществующая on-premise платформа
•GitLab CI
•CI starting kit на основе make
•Docker hub & docker images
-Компоненты на любом технологическом
стеке
-Kubernetes
10
11. The Twelve-Factor App (1-6)
-Одно приложение – один репозиторий
-Зависимости – вместе с приложением
-Конфигурация через окружение
-Используемые сервисы как ресурсы
-Фазы билда, создания образов и
исполнения разделены
-Сервисы – отдельные stateless процессы
11
https://12factor.net
12. The Twelve-Factor App (7-12)
-Port binding
-Масштабирование через процессы
-Быстрая остановка и запуск процессов
-Среды максимально похожи
-Логирование в stdout
-Административные процессы
12
https://12factor.net
94. 94
var data =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 1);
var result = new List<string>[data.Count];
foreach (var item in data)
{
var detailed =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 5);
result.Add(string.Join(", ", detailed));
}
95. 95
var data =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 1);
var result = new List<string>[data.Count];
foreach (var item in data)
{
var detailed =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 5);
result.Add(string.Join(", ", detailed));
}
96. 96
var data =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 1);
var result = new string[data.Count];
var tasks = data.Select(
async (item, index) =>
{
var detailed =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 5);
result[index] = string.Join(", ", detailed)
});
await Task.WhenAll(tasks);
97. 97
var data =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 1);
var result = new string[data.Count];
var tasks = data.Select(
async (item, index) =>
{
var detailed =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 5);
result[index] = string.Join(", ", detailed)
});
await Task.WhenAll(tasks);
98. 98
var data =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 1);
var result = new string[data.Count];
var tasks = data.Select(
async (item, index) =>
{
var detailed =
await _remoteService.IOBoundOperationAsync(timeoutInSec: 5);
result[index] = string.Join(", ", detailed)
});
await Task.WhenAll(tasks);
101. Нагрузочное тестирование
-Лимиты по памяти и процессору
•384Mb и 1,5 CPU
-Синхронный (capacity) тест
•~24 RPS (без кэша)
•~400 RPS (включен серверный кэш)
101
102. Нагрузочное тестирование
-Лимиты по памяти и процессору
•384Mb и 1,5 CPU
-Синхронный (capacity) тест
•~24 RPS (без кэша)
•~400 RPS (включен серверный кэш)
-Асинхронный (load) тест
•Прошёл
102
106. Вместо заключения
-Не бойтесь использовать .NET Core в
продакшене
-Не бойтесь использовать Linux и .NET Core
-Docker и Kubernetes сильно упрощают жизнь
106
107. Вместо заключения
-Не бойтесь использовать .NET Core в
продакшене
-Не бойтесь использовать Linux и .NET Core
-Docker и Kubernetes сильно упрощают жизнь
-Оптимизируйте приложения
107
108. Вместо заключения
-Не бойтесь использовать .NET Core в
продакшене
-Не бойтесь использовать Linux и .NET Core
-Docker и Kubernetes сильно упрощают жизнь
-Оптимизируйте приложения
•Многое есть из коробки
•Думать все равно надо
108