17. Пример: Система типов – C#
var j = 1 + "100";
Console.WriteLine(j); //1100
var k = 1 + "100foo";
Console.WriteLine(k); //1100foo
var l = 1 + "foo";
Console.WriteLine(l); //1foo
var n = 1 * "foo"; //syntax error
Console.WriteLine(n);
18. Асинхронность
PHP
• Из коробки – нет
• PCNTL
• Pthreads (CLI)
• Curl
C#
• Доступно из коробки
• Основа ASP.NET Core
• Широкий набор API
• Async/Await
19. Пример: Async/Await
public async Task<int> GetProjectsCount()
{
var projects = await
_dbContext.Projects
.ToListAsync();
var count = projects.Count;
return count;
}
20. LINQ
• Встроенный язык запросов
• Удобный синтаксис работы с коллекциями
• Можно строить строгие запросы к БД
• «Портирован» на PHP, JS, TS
23. PHP is meant to die
PHP
• «Запустился – обработал
запрос – умер»
• PHP-FPM
• Opcode-кэш
• phpDaemon, PHP-PM
ASP.NET Core
• Долгоживущее приложение
• Асинхронная обработка
запросов
• Общая память
• Общие статические свойства
и классы
35. Где используем
• 6 проектов
• В основном – микросервисы
• Причины для выноса:
– Latency. Внешние API
– Асинхронность. Обработка потоков данных
– Стабильность. Финансовые транзакции
36. Процесс разработки
Минусы
• Уровень входа
• Молодость .NET Core
• Сложности в работе
с внешними данными
Плюсы
• С#
• Инструменты
• Статический анализ
• Рефакторинг
• Асинхронность
37. Производительность
Было
• 50-100мс, 200-300мс
под нагрузкой
• 96 процессов PHP-FPM
• 100MB/процесс
• Redis
• Воркеры
Стало
• 99% – 13мс, 90% – 7мс,
50% – 1мс
• 1 процесс
• 100-150MB всего
• In-memory кэш
• Фоновые потоки
38. Деплой и мониторинг
Минусы
• Обновление только
перезапуском
• Дебаг на линуксе
пока не очень
• Есть «детские болезни»
Плюсы
• Сборка в 3 команды
• Образы для докера – ОК
• Размер – ~20MB,
быстрые push и pull
• Gitlab, Graylog, Prometheus