Да, с этим пакетом было получше, но все равно некорректная информация проскакивала регулярно. Например на staging можно было наблюдать транзакции по 150 секунд. Кто-то начинал транзакцию, но она не заканчивалась, пока кто-то еще не присылал request. Под нагрузкой было не заметно, но осадок остается — как после такого данным верить?
Сейчас мы скооперировались с разработчиками RR и родили плагин для RR, который из golang части позволяет мерить со 100% аккуратностью, это для нас стало значительным плюсом по сравнению со swoole, где всё в NR вроде выглядит хорошо, но полного доверия как то нет… :)
Увидел что вы используете newrelic и swoole и очень удивлен — в таком режиме он ведь не может гарантировать, что в рамках одного request будет завершена та же транзакция, что и
была начата. В нашем случае это происходило рандомно и это было очень хорошо заметно, особенно по вкладке Errors, где на «endpoint A», был выкинут «EndpointBException», который встречается только на «endpoint B».
Могу поделиться своим опытом. Был проект на Phalcon, решили двигаться в сторону Swoole. Медленно перешли на Laminas/mezzio. Медленно т.к. пришлось значительно переделать проект под то, чтобы понимать, что мы оставляем в памяти. Зарелизили swoole на продакшен — выявились проблемы с APM (newrelic), решили что буст по перфомансу не стоит некачественной APM информации. Вернулись в phpfpm. Сейчас пытаемся в Roadrunnner, доработки проекта, за исключением кастомного worker.php из документации не потребовалось вообще — работает из коробки. RR показывает значительный прирост по большинству endpoint, но не на всех, на текущий момент изучаем, что именно тормозит.
Swoole еще не понравился довольно скудной документацией и тем, что шаг вправо, шаг влево — китайская дока.
Спасибо за статью!
Подскажите, сколько по факту получилось сэкономить времени при реализации Reverse-proxy стратегии?
Т.е. например есть endpoint, он отдает инфу за 100мс, из них 80мс это http запрос к другому сервису. Сколько в таком случае получается сэкономить?
Это компания, предлагающая построить дом за указанную цену. С землей написано невнятно, вроде как входит в цену, но даже если и да, это по прежнему в деревне, вдалеке от крупного города.
400к за дом — это действительно можно найти, но 400к за «Трёхэтажный дом с гаражом и сауной» — имхо, такого на рынке нет вообще.
за 400к действительно можно найти дом*, но это 100% в деревне, в лучшем случае километрах в 30 от крупного города.
*Под домом — я подразумеваю новостройку (4-5 комнат, 100-120m2) или близкую к нему, развалюху 1850 года можно найти значительно дешевле. Вдоль польской границы можно найти что-нибудь начиная от 30.000 евро.
Для себя я выработал следующее правило:
— Все классы должны быть final
— Если удается достичь 100% покрытия этого и всех зависимых классов несмотря на final — интерфейс не нужен.
Обычно, увы, такого не получается, поэтому интерфейсы нужны чуть менее, чем всегда.
Чтобы жизнь была проще, в PhpStorm есть Ctrl+T по имени классу и Extract Interface, с галочкой «заменить все использования». Это позволяет ОЧЕНЬ легко проводить рефакторинг старого кода.
Говоря о процентах по ипотеке — не забывайте о теле кредита, в РФ оно в десятки раз меньше. Среднестатичная 3кк квартира в городе из топ10, в новостройке стоит 400к евро — таких цен в РФ нет.
Красивая многоходовочка однако.
Акт 1. Говорим «забаним nginx» — бурления 146%
Акт 2. Говорим «забаним твитч» — бурления 20%, ибо в первом акте уже отбурлили
Акт 3. Баним твитч. Бурления минимальные, ненуачо, nginx же не тронул!
С одной стороны мотивирует, с другой стороны, когда у тебя стандартный 5\2 рабочий график, то записать 10 минутный туториал = 10 часов работы = почти все выходные… Вот так и выходит что работаешь круглосуточно, а отдыхать когда?:) work-life-balance все дела…
Лечебный? Значит врач прописал? Тогда страховка покроет.
Сами диагностировали или лечебный=тайский? Тогда это развлечение, а развлечения в европе значительно дороже :)
У меня Upper-intermediate, есть сертификат выданный 5 лет назад. На работе язык общения английский, владею «свободно». Тем не менее, читать книги, смотреть фильмы и подкасты
«свободно» — я не могу. Много незнакомых слов. Тупо словаря не хватает. Если вы можете — у вас уже явно не Upper-intermediate :)
P.S. Живу не в англоязычной стране, вероятно это тоже решает.
Вам из Омска надо в Москву. На выбор — дорогой и быстрый самолет (погружение в среду), медленный поезд\автобус (курсы языка), пешком — бесплатно, медленно, можно сдохнуть не дойдя до цели.
В целом можно делать примерно так же, как и LaravelCollective/annotations.
Получаем список классов контроллера. Получаем список методов. Вызываем их все, внедряя туда «Роутер*». В контроллере проверяем, если есть внедренный роутер, то получаем маршрут для этого метода. Если маршрут подходит — вызываем этот маршрут, без внедрения роутера.
Костыльно? Да. Более чем. Я бы даже сказал, что звучит еще ужаснее :)
Хуже\медленнее чем вариант с аннотациями? Едва ли.
Сейчас мы скооперировались с разработчиками RR и родили плагин для RR, который из golang части позволяет мерить со 100% аккуратностью, это для нас стало значительным плюсом по сравнению со swoole, где всё в NR вроде выглядит хорошо, но полного доверия как то нет… :)
была начата. В нашем случае это происходило рандомно и это было очень хорошо заметно, особенно по вкладке Errors, где на «endpoint A», был выкинут «EndpointBException», который встречается только на «endpoint B».
Swoole еще не понравился довольно скудной документацией и тем, что шаг вправо, шаг влево — китайская дока.
github.com/composer/composer/issues/10382
Много чего посыпалось на самом деле, но т.к. у всех рождество, никто не горевал особо =)
Подскажите, сколько по факту получилось сэкономить времени при реализации Reverse-proxy стратегии?
Т.е. например есть endpoint, он отдает инфу за 100мс, из них 80мс это http запрос к другому сервису. Сколько в таком случае получается сэкономить?
400к за дом — это действительно можно найти, но 400к за «Трёхэтажный дом с гаражом и сауной» — имхо, такого на рынке нет вообще.
за 400к действительно можно найти дом*, но это 100% в деревне, в лучшем случае километрах в 30 от крупного города.
*Под домом — я подразумеваю новостройку (4-5 комнат, 100-120m2) или близкую к нему, развалюху 1850 года можно найти значительно дешевле. Вдоль польской границы можно найти что-нибудь начиная от 30.000 евро.
100% покрытие — это действительно так себе цель, но код должен иметь такую возможность :) В реальности, 30% в проекте — уже хорошо :pepe:
— Все классы должны быть final
— Если удается достичь 100% покрытия этого и всех зависимых классов несмотря на final — интерфейс не нужен.
Обычно, увы, такого не получается, поэтому интерфейсы нужны чуть менее, чем всегда.
Чтобы жизнь была проще, в PhpStorm есть Ctrl+T по имени классу и Extract Interface, с галочкой «заменить все использования». Это позволяет ОЧЕНЬ легко проводить рефакторинг старого кода.
Акт 1. Говорим «забаним nginx» — бурления 146%
Акт 2. Говорим «забаним твитч» — бурления 20%, ибо в первом акте уже отбурлили
Акт 3. Баним твитч. Бурления минимальные, ненуачо, nginx же не тронул!
Сами диагностировали или лечебный=тайский? Тогда это развлечение, а развлечения в европе значительно дороже :)
«свободно» — я не могу. Много незнакомых слов. Тупо словаря не хватает. Если вы можете — у вас уже явно не Upper-intermediate :)
P.S. Живу не в англоязычной стране, вероятно это тоже решает.
не та ветка =(
Вам из Омска надо в Москву. На выбор — дорогой и быстрый самолет (погружение в среду), медленный поезд\автобус (курсы языка), пешком — бесплатно, медленно, можно сдохнуть не дойдя до цели.
Получаем список классов контроллера. Получаем список методов. Вызываем их все, внедряя туда «Роутер*». В контроллере проверяем, если есть внедренный роутер, то получаем маршрут для этого метода. Если маршрут подходит — вызываем этот маршрут, без внедрения роутера.
Костыльно? Да. Более чем. Я бы даже сказал, что звучит еще ужаснее :)
Хуже\медленнее чем вариант с аннотациями? Едва ли.