Привет) Ниже — исключительно про команду, не про компанию в целом, у нас все-таки специфика.
Вторая линия помогла перенастроить мониторинг и автоматизацию и в этом она надежды оправдала. Но потом с выделенной второй линией получалось, что система отдельно у админов, а мониторинг и автоматизация той же системы — отдельно, у саппорта. Эффективно взаимодействовать получалось не всегда, обмен знаниями в обе стороны был достаточно ограниченным. Кроме того, были проблемы с приоритизацией, когда что-то было нужно друг от друга, ощущение единой команды тоже то было то нет. Ну и у ребят из саппорта было непонимание куда и как расти и развиваться.
В итоге через достаточно тяжелый для всех период пришли к «you build it, you run it» и по ощущениям стало сильно проще. Наверное, все проблемы, о которых я писал выше, тоже можно было бы решить как-то иначе, без смены подхода. Но пока кажется, что этот переход был удачным — летаем так уже больше двух лет и желания вернуться не возникало.
Возможно ) Но я очень плохо представляю, как его можно было бы устроить, чтобы оно это поймало. Для полного воспроизведения ситуации нам нужно было бы в один из прогонов произвести на стенде те же манипуляции, которые мы делали на проде за неделю до дня X (из-за которых коннекшны подвисли). И тогда следующий прогон дал бы искомый результат. Но вот как сообразить заранее в тест-планы вписать эту первую манипуляцию — не представляю.
Вот это очень хорошие вопросы и достаточно сложная тема.
Написать автоматику, которая бы прибивала только «вредные» долгие запросы, при этом не трогая те, которые долго работают ожидаемо, не очень тривиально. Написать что-то простое для использования во время подобных сбоев — можно, но пользы от этого будет не очень много.
Про процессы и людей. Мы пробовали жить с выделенной второй линией, которая как раз обрабатывала поток сервис-деска, что-то автоматизировала, что-то чинила вручную. Не зашло. Сейчас админы сами дежурят, сами автоматизируют, сами настраивают мониторинг и следят за ним. Все это, как мне кажется, стимулирует изначально делать более надежные системы, потому что все ошибки прилетают тебе же и это прям идеальный вариант обратной связи. У такого подхода есть свои недостатки, он наверняка применим далеко не в каждой команде и не в каждой компании, но нам сейчас норм
У нас идет большое количество проектов, направленных на отдачу техдолга (в вводной части поста были ссылки про это: раз, два). Другое дело, что всегда (как мне кажется) технари будут считать, что этого недостаточно, и что нужно переделать еще в паре мест, а бизнес — что слишком много и что технари не вылезают из рефакторингов. Просто разные взгляды и разные подходы, нужно уметь договариваться )
Простите, пожалуйста, эта ветка совсем оффтопная от темы статьи. Просто когда-то давно мы с lexxair играли в спортивное «что? где? когда?» в одной команде и я был ее капитаном.
Моя мысль — именно следить внимательно, это не равно «сразу накатывать». И не только из бизнесовых соображений, хотя они тоже есть, но и из технических — на каждый починенный баг может приходиться новый посаженный, проявляющийся примерно в настолько же редких краевых случаях. И как все эти краевые случаи выловить не на продакшене, а раньше — большой вопрос.
Paul M. Jones — один из создателей фреймворка Aura. Его посты часто попадают на phpdeveloper.org (хотя насколько фреймворк и автор популярны в англоязычном сообществе в целом — не знаю)
class Model_Controller
{
...
public function editAction()
{
if ($this->_hasEditAction()) {
$this->_editActionHelper();
} else {
throw new Zend_Controller_Action_Exception('страница не найдена' , 404);
}
}
protected function _hasEditAction()
{
return true;
}
...
}
а в наследниках при необходимости переопределять _hasEditAction() для запрета или сам editAction() для совсем специфического поведения. Количество дублирования кода должно сильно уменьшиться.
Не в основную тему поста, но так, предостережение. Если Вы блокируете в основной ветке, а снимаете блокировку только под некоторыми if'ами — можете получить проблемы.
1. пропускает вызов конструктора без параметров и скобок и дальнейшие вызовы методов созданного инстанса
class test {
public function method($a) {
echo $a;
}
}
$test = new test;
$test->method('in method');
2. пропускает статические вызовы через
class test {
public static function stat() {
echo 'static';
}
}
$class = 'test';
$class::stat();
В совокупности с наличием ООПных системных интерфейсов типа SplFileInfo указанные выше пункты кажутся потенциально опасными, хотя сходу что-то плохое не придумывается.
Зануда мод он: MITM это слегка другое. Зануда мод офф.
А так да, такая атака возможна и при использовании обычных сессий. Но там она становится нереальной после выхода пользователя. А в Вашем варианте, к сожалению, все зависит только от lifetime, и принудительно выйти невозможно.
Если придумаете, как это обойти — пишите, будет интересно попробовать.
Вторая линия помогла перенастроить мониторинг и автоматизацию и в этом она надежды оправдала. Но потом с выделенной второй линией получалось, что система отдельно у админов, а мониторинг и автоматизация той же системы — отдельно, у саппорта. Эффективно взаимодействовать получалось не всегда, обмен знаниями в обе стороны был достаточно ограниченным. Кроме того, были проблемы с приоритизацией, когда что-то было нужно друг от друга, ощущение единой команды тоже то было то нет. Ну и у ребят из саппорта было непонимание куда и как расти и развиваться.
В итоге через достаточно тяжелый для всех период пришли к «you build it, you run it» и по ощущениям стало сильно проще. Наверное, все проблемы, о которых я писал выше, тоже можно было бы решить как-то иначе, без смены подхода. Но пока кажется, что этот переход был удачным — летаем так уже больше двух лет и желания вернуться не возникало.
Написать автоматику, которая бы прибивала только «вредные» долгие запросы, при этом не трогая те, которые долго работают ожидаемо, не очень тривиально. Написать что-то простое для использования во время подобных сбоев — можно, но пользы от этого будет не очень много.
Про процессы и людей. Мы пробовали жить с выделенной второй линией, которая как раз обрабатывала поток сервис-деска, что-то автоматизировала, что-то чинила вручную. Не зашло. Сейчас админы сами дежурят, сами автоматизируют, сами настраивают мониторинг и следят за ним. Все это, как мне кажется, стимулирует изначально делать более надежные системы, потому что все ошибки прилетают тебе же и это прям идеальный вариант обратной связи. У такого подхода есть свои недостатки, он наверняка применим далеко не в каждой команде и не в каждой компании, но нам сейчас норм
paul-m-jones.com/
twitter.com/pmjones
paul-m-jones.com/feed
а в наследниках при необходимости переопределять _hasEditAction() для запрета или сам editAction() для совсем специфического поведения. Количество дублирования кода должно сильно уменьшиться.
не пропускается, а по сути аналогичный код без скобок — пропускакется.
и это как-то странно на мой взгляд.
вот это пропускает:
1. пропускает вызов конструктора без параметров и скобок и дальнейшие вызовы методов созданного инстанса
2. пропускает статические вызовы через
В совокупности с наличием ООПных системных интерфейсов типа SplFileInfo указанные выше пункты кажутся потенциально опасными, хотя сходу что-то плохое не придумывается.
А так да, такая атака возможна и при использовании обычных сессий. Но там она становится нереальной после выхода пользователя. А в Вашем варианте, к сожалению, все зависит только от lifetime, и принудительно выйти невозможно.
Если придумаете, как это обойти — пишите, будет интересно попробовать.