Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 week, 2 days ago
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 months, 3 weeks ago
Как развивать лидеров внутри IT-команды и команды и где искать сильных управленцев: https://clck.ru/3E2mGg.
Осенний сезон полезных митапов продолжается. На этот раз соберемся в нашем офисе 1 ноября и обсудим, как прокачать лидерские качества в вашей команде.
Главные темы митапа:
- как вырастить лидера внутри IT-команды и чем его мотивировать;
- в каких случаях лучше использовать аутстафф;
- как избежать выгорания у руководителей;
- какие стратегии помогут сделать управленческие решения более системными и человечными.
Это важные стратегические вопросы, с которыми часто сталкиваются руководители больших команд.
Но мы не ограничимся только теорией, а попробуем сразу применить все инсайты на практике. Для этого устроим круглый стол с экспертами из X5, Альфа-Банка, Лемана Про, AGIMA и др., а затем закрепим знания на воркшопе с Алексеем Кельиным, исследователем и бизнес-тренером.
Также обещаем приятную атмосферу, вкусную еду, напитки и много нетворкинга. Подробности и обязательная регистрация — по ссылке выше.
Ждем СТО, руководителей IT-департаментов, IT-рекрутеров, IT-лидов и CPO — всех, кто отвечает за управление и развитие команд в IT.
Когда: 1 ноября, 17:30.
Где: оффлайн, Петровка, 19/4, офис AGIMA.
Регистрация: https://clck.ru/3E2mGg
Как включение JIT в PHP 8 ускоряет парсинг CSV-файла
С выходом PHP 8 появилась одна из самых мощных функций — JIT компиляция. Эта технология позволяет значительно ускорить выполнение PHP-скриптов, компилируя код в машинные инструкции на лету. Одной из задач, где JIT может проявить себя особенно эффективно, является парсинг больших CSV-файлов.
Рассмотрим классическую задачу: у вас есть объёмный файл и вам нужно его обработать — например, просуммировать все транзакции выше определенной суммы.
Типичный код для решения этой задачи:
```
$file = fopen('large_file.csv', 'r');
$totalSum = 0;
if ($file !== false) {
fgetcsv($file);
while (($row = fgetcsv($file)) !== false) {
$amount = (float)$row[2];
if ($amount > 1000) {
$totalSum += $amount;
}
}
fclose($file);
}
echo "Total sum of large payments: " . $totalSum . "\n";
```
Мы построчно обрабатываем файл, выполняем простую логику и добавляем сумму в общую. Если файл очень большой, то цикл будет исполнен много раз. Что в этом случае будет делать интерпретатор?
Интерпретатор PHP читает исходный код построчно и создаёт набор инструкций opcode. Opcode это не машинный код, а только набор инструкций для виртуальной машины Zend Engine. Затем виртуальная машина исполняет каждую инструкцию opcode последовательно, вызывая в режиме реального времени соответствующие операции на уровне системы.
При этом, когда интерпретатор Zend встречает в opcode цикл, он каждую итерацию заново интерпретирует и исполняет инструкции opcode.
Это и есть нашей с вами платой за использование интерпретируемых языков программирования 🙂**
Получается, что один и тот же фрагмент кода интерпретируется несколько раз.
Как JIT Ускоряет работу циклов
JIT позволяет сократить значительное количество интерпретаций opcode виртуальной машиной, за счёт компиляции opcode в машинный код, который выполняется напрямую на процессоре. Скомпилированный машинный код сохраняется и уже многократно используется в итерациях цикла, без необходимости повторной интерпретации.
Как это отразится на нашей задаче обработке файла?
Ускорение циклов: Основное время тратится на выполнение цикла, где каждая строка файла разбирается и обрабатывается. С JIT этот цикл будет выполняться быстрее за счет компиляции его тела в машинный код.
Эффективность работы со строками: Функции, такие как fgetcsv
, которые активно работают со строками и массивами, получают прирост в производительности благодаря JIT, за счет того что её не нужно интерпретировать на каждой итерации. Это особенно заметно, если в строке много столбцов или данные требуют интенсивной обработки.
Уменьшение накладных расходов: Каждый вызов функции в PHP сопровождается определенными накладными расходами. JIT минимизирует эти расходы, поскольку часть функций может быть оптимизирована и выполнена быстрее на уровне машинного кода.
Настройка и включение JIT
Добавим в конфигурацию PHP:
```
opcache.enable=1
opcache.enable_cli=1
opcache.jit_buffer_size=100M
opcache.jit=1255
```
Сравнение производительности: С JIT и Без JIT
Проведем небольшой эксперимент. Подготовим CSV-файл с 10 миллионами строк. Мы запускаем вышеуказанный скрипт — с включенным JIT и без него.
Без JIT: Среднее время выполнения 120 секунд.
С JIT: Средне время выполнения 80 секунд.
Получается, что включение JIT позволило сократить время на парсинг файла на ~33%.
Вопрос читателям: Использовали ли вы JIT для ускорения обработки данных в PHP? Какие результаты вы получили? Поделитесь своим опытом в комментариях!
Шаблон "Сага" является одним из ключевых шаблонов проектирования, который используется в микросервисной архитектуре для управления распределенными транзакциями. В отличие от традиционных монолитных приложений, где транзакции могут выполняться в рамках одной базы данных, в микросервисной архитектуре транзакции могут охватывать несколько сервисов, что требует особого подхода для обеспечения целостности данных.
Например вы разработали систему для покупки билета на самолёт. Предположим у вас 3 сервиса: Оплата, Уведомление, Бронирование. Сервис успешно списал деньги, выслал уведомление о покупке, но возникла ошибка на этапе бронирования. Как вернуть всё в исходное состояние когда у нас 3 независимых сервиса? В монолитном приложении нас бы спасли транзакции ACID. А в случае с микросерисами - Саги.
Основная идея шаблона "Сага"
Сага — это последовательность транзакций, каждая из которых обновляет данные в отдельном микросервисе. Каждая из этих транзакций является локальной и независимой, но вместе они формируют одну логическую транзакцию. В случае неудачи одной из транзакций система должна выполнить компенсирующие действия, чтобы откатить изменения, сделанные предыдущими транзакциями.
Принципы работы саги
1️⃣ Разбиение на шаги: Сага состоит из нескольких шагов (транзакций), каждый из которых выполняется в рамках одного микросервиса. В процессе покупки билета на самолёт, это могут быть шаги: списание средств, уведомление о списании, проверка доступности рейса и его бронирование.
2️⃣ Компенсирующие транзакции: Для каждого шага определяется компенсирующая транзакция, которая откатывает изменения в случае ошибки. Например, если возникла ошибка на этапе бронирования, то нужно его отменить и запустить компенсирующие транзакции для предыдущих шагов.
3️⃣ Асинхронное выполнение: Шаги в саге могут выполняться асинхронно. После успешного выполнения одного шага инициируется следующий. Если какой-либо шаг не удался, запускаются компенсирующие транзакции. Компенсирующее действие для этапа оплаты - вернуть средства. Для этапа уведомления - отправить новое уведомление с информацией, что бронирование не удалось.
Стратегии реализации саги
Оркестрация: В этой стратегии один из сервисов (или специальный оркестратор) управляет выполнением всей саги. Он инициирует каждый шаг и отслеживает их выполнение, принимая решения о запуске компенсирующих транзакций при необходимости. Этот подход проще в реализации и контроле, но создает единую точку отказа.
Хореография: В этой стратегии отсутствует центральный оркестратор. Каждый микросервис знает, что делать после выполнения своей локальной транзакции, и сам инициирует следующий шаг саги или компенсирующую транзакцию при неудаче. Такой подход более децентрализованный и устраняет единую точку отказа, но может быть сложнее в управлении и отладке.
Необычный факт из работы тимлида: Тимлиды, которые играют в шутеры, обычно более эффективно управляют командой. Это связано с развитием навыков принятия решений в динамичных и часто нестандартных ситуациях, а также способностью оперативно реагировать на переменные и координировать действия группы в условиях ограниченного времени.
Таким образом, время, проведенное за игрой, может принести пользу не только в развлекательных целях, но и в профессиональном аспекте руководителя команды.
Недавно я играл в настольную игру “По шкале от одного до Тирекса”, где игроки сначала показывали друг другу какое-то действие, а затем должны были угадать интенсивность этого действия по шкале от 1 до 10. И это напомнило мне методику Покер планирования, используемую в Agile для определения времени выполнения задач и планирования итераций. Когда все члены команды принимают участие в общем обсуждении задач и дают оценку, с которой согласен каждый.
Для тех кто не знаком с таким методом оценки, вкратце расскажу основные этапы:
1️⃣ Подготовка списка задач: Задачи должны иметь достаточную детализацию и быть понятными для всех исполнителей. Подразумевается, что беглое ознакомление с задачей, даёт достаточно информации для ее реализации и не вызывает блокирующих вопросов;
2️⃣ Выбор единиц измерения: Согласовываются единицы измерения сложности задачи. Практично пользоваться числами Фибоначчи (1, 2, 3, 5, 8, 13 и т. д.). Они увеличиваются экспоненциально, что помогает подчеркнуть неопределенность оценки и уменьшить вероятность установки точных значений, в отличие от строгой оценки часами. Числа 1, 5 - это не 1 и 5 часов. Это некая абстрактная величина, например “вес” задачи, для сравнения с другими задачами;
3️⃣ Сессия игры в покер: Команда обсуждает задачу, её детали, задает вопросы и делает предположения. Затем каждый участник записывает оценку, которая, по его мнению, соответствует сложности задачи и скрывает ее от других. Это позволяет избежать влияния лидеров мнений и субъективных оценок;
4️⃣ Обсуждение и согласование оценки: После того как все участники записали свою оценку, они одновременно разглашают их. Как будто выкладывают свою карту в покере на игровой стол. Если оценки отличаются, задача считается не оцененной. Участники обсуждают причины различий, уточняют понимание задачи и повторяют сессию оценки. По итогу все члены команды должны согласовать оценку с которой согласен каждый.
В результате вы получаете полностью оцененный бэклог. И имеете согласие в команде относительно каждой задачи. Осталось конвертировать “вес” задачи в реальные трудозатраты. Если вы планируете покером первый раз, то потребуется провести экспертную оценку, чтобы сформировать матрицу сопоставления оценки покером с оценкой в трудозатратах.
Канал для поиска исполнителей для разных задач и организации мини конкурсов
Last updated 1 week, 2 days ago
Новые и перспективные Web3 игры с добычей токенов.
Чат: https://t.me/Crypto_Wolf_Chat
Правила чата смотрите в описании чата.
Все свои вопросы направляйте в чат или главному модератору чата: @Exudna_118
По теме сотрудничества: @Zombini
Last updated 2 months, 3 weeks ago