Меняем стул под пользователем
Меняем стул под пользователем
Меня попросили сделать доклад, чтобы всем было весело…
Итого
- Trunk Based Development
- Деплой каждые полчаса
- Все пайплайны идут почти час
- Если не собирается все ждут фикса или реверта
ЖД вайб это круто но
Что делают с теми кто останавливает поезда?
Привет @lekzd
Как дела?
Что делаешь?
Всмысле?
Куда раскидывается
Если кратко, то по всем серверам статики в инфраструктуре ВК
Evening freeze is comming…
Админ, можно задеплоить еще?
Нет!
Master Build failed: error…
Закрываю мастер, разбираемся
А мастер выйдет погулять?
Поезд на Staging
Эй, а что у вас там с фоном?
Это мое, ща кину фикс
В браузере…
- Кешируются файлы
- Некоторые браузеры кешируют html
- Очень сильно все кеширует WebView
На CDN…
- static/dist/common.111.js
- static/dist/common.222.js
- static/dist/common.333.js
- static/dist/common.444.js
- static/dist/common.555.js
Даже если часть статики обновилось
где-то в пещерах кеша живет…
ServiceWorker
Однажды я поймал комбинаторный взрыв
- Бекенд добавил префикс
- JS файл добавил префикс
- ServiceWorker добавил префикс
- …и снова пошел на бекенд
Че, как вам код?
function handleRequest(response) {
if (typeof response === 'string') {
response = JSON.parse(response);
}
return response.payload;
}
Это миграционный код
- ✅ Определяет "старую версию" данных
- ✅ Работает во всех случаях
- ✅ Должен быть задеплоен ДО релиза
Но лучше, конечно так
function handleRequest(response) {
if (switcherEnabled('backend_json')) {
response = JSON.parse(response);
} else if (switcherEnabled('backend_html')) {
// OMG;
}
}
Это важно
- ✅ Тестировать момент деплоя
- ✅ Думать о миграции заранее
- ✅ А о кеше браузера — еще раньше
В ИТ вообще не стоило заходить
А иногда статика меняется
Вот мы сбилдили…
- Новый пользователь
- Активный пользователь
Новый пользователь
сервер
common.111.js
player.222.js
new.111.js
Активный пользователь
сервер
common.111.js
player.222.js
new.111.js
клиент
common.111.js
player.111.js
VK это SPA
- Притом очень legacy-SPA
- Иногда даже слишком
При смене роута
- inline-скрипты
- новые бандлы
—>
А как заменять синглтоны?
location.reload()
Но это плохо
- Не делайте так
- Дайте пользователю досмотреть видосик
- 😇 Ну ладно, премия важнее
Большинство разработчиков и не знает, что менять статику на самом деле сложно
И это правильно, ведь есть команда инфраструктуры, которая делает сложные вещи простыми
Но есть проблема…
Команда инфраструктуры это последний рубеж, за которым уже никто не знает как это работает
Привет @lekzd
Как дела?
Там сборка падает у всего отдела
Однажды я решил переложить статику из одной папки в другую…
mv -r static/old static/new не?
Вроде все предусмотрели
- Заказали "Приватный поезд"
- С утра, когда деплоев меньше
- Я был в Новосибирске, утро было ОК
- У меня было полтора часа…
Далее…
- Кто-то умудрился завалить деплой
- С этим долго разбирались
- Мастер конечно-же закрыли
- Я был вынужден просить помощи коллег
Они пытались откатить
Но сделали только хуже, делали location.reload(), но ошибки валились и валились
Комбинаторный взрыв кеша
- Написал постмортем
- Придумал миграционный код
- Сделал симлинки
- Сделал редиректы в nginx
- Сделал ServiceWorker-убийцу
- Оставил все на месяц
Просто нужно соблюдать правила
Как я потом деплоился?
- ну, раза с 3-го…
- выбрал ночь пятницы
- придумал feature-ручку для сброса кеша
- деплоился, крутил, смотрел на графики
Итак, правила
- ✅ В пятницу вечером не надо
- ✅ Тестировать момент деплоя
- ✅ Выпускать только публичные апи
А то будешь месяц деплоиться
Спасибо 0.1% пользователей
Которые молчаливо попадают в тест группы
Можно опробовать решение на них
Увидеть графики, ужаснуться, откатить назад
Кеши пользователя это проблема
- Кеш файлов
- Кеш ServiceWorker
- Кеш html в WebView 0_0
Но больше всего удивили они…
Коллеги, которые использовали ВК через iframe и прокси
Новости появляются когда
- ВК не работает
- И даже, когда работает
- Особенно, если фича спорная
Короче, любой деплой это повод для новости в СМИ, в обход отдела PR
Привет
Как дела?
Что делаешь? Видел ВК сломался?
Быстро ломается, быстро чинится 😇 😇 😇
Но никто никого не ругает
Пока вы слушали этот доклад, статика ВК обновилась еще раз…
Спасибо!