• Объясните как работает php-fpm?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Для начала почитайте что такое SAPI. Затем представьте что apache + mod_php разделили на web-сервер, который проксирует запросы на php-fpm и отдает статику, и собственно отдельный web-сервер который имплементит SAPI и выполняет запросы связанные только с php. То есть статику отдавать мы можем только через php. Суть примерно та же что и у apache2 + prefork + mod_php но оптимизированный только для работы с php. Так же можно поставить на фронт более быстрый и легковесный сервер который умеет проксировать запросы.

    То есть php-fpm это эдакий fast-cgi сервер который постоянно держит готовые для работы пул-процессов (сколько в пуле процессов настраивается, так же как и от какого пользователя их запускать и все такое прочее). Каждый новый запрос уходит в какой-либо процесс из пула, запрос отрабатывает, возвращаем результат тому кто попросил (web-серверу обычно). Если процесс падает (fatal допустим) - поднимаем новый.

    Принципиальной разницы между apache2+mod_php нету, просто упрощается инфраструктура. Наш web-сервер должен только уметь проксировать запросы и отдавать статику, а php-frpm вообще может быть на разных машинах (балансировщиком можно раскидывать запросы). Ну и сами понимаете, nginx + php-fpm будет быстрее обрабатывать запросы чем apache2+mod_php какой бы мы менеджер процессов не использовали в апаче. Минусов по сравнению с apache+mod_php я даже не могу предложить.

    А php-runtime не зависит от этого. Он один на всех, CLI, FPM, mod_php...
    Ответ написан
    7 комментариев
  • Как начать работать на западном фрилансе?

    opium
    @opium
    Просто люблю качественно работать
    Про работу на одеске и как начать довольно подробно описал в блоге
    pumainthailand.com/category/rabota-2
    Ответ написан
    Комментировать
  • Что такое ассоциация,агрегация и композиция в php?

    dmitriylanets
    @dmitriylanets
    веб-разработчик
    вот тут популярно рассказано в примерах
    Ответ написан
    2 комментария
  • Что выбрать: Ubuntu 14.04 x64 или CentOS 7 x64?

    akubintsev
    @akubintsev
    Опытный backend разработчик
    Конечно это мифы о производительности.
    Выбирайте то, с чем привычнее/удобнее работать.
    Влияние ОС на производительность с одной и той же файловой системой и ядром стремится к нулю.
    Кто вам мешает собраться кастомное ядро или скомпилировать mysql так, как вам кажется лучше?
    Ответ написан
    Комментировать
  • Мнение по поводу недавних нововведений oDesk?

    mbelskiy
    @mbelskiy
    Software Developer
    Они бы начали грести меньше 10% за проект и пусть хоть законнектятся
    Ответ написан
    Комментировать
  • Мнение по поводу недавних нововведений oDesk?

    bit_rainbow
    @bit_rainbow
    Говно, потому что бабок хотят.
    Ответ написан
    Комментировать
  • Мнение по поводу недавних нововведений oDesk?

    opium
    @opium
    Просто люблю качественно работать
    гавно сказать честно
    это полная калька с еланса, так как теперь одеск возглавляет сео еланса
    это однозначно усложнит жизнь новичкам
    ну и теперь одеск будет как еланс
    Ответ написан
    4 комментария
  • Мнение по поводу недавних нововведений oDesk?

    Скорее отрицательно, напоминает не слишком давнюю историю с fl.ru...
    Ответ написан
    Комментировать
  • Мнение по поводу недавних нововведений oDesk?

    begemot_sun
    @begemot_sun
    Программист в душе.
    Все бабки хотят. Нормальному исполнителю беспокоится не о чем.
    Ответ написан
    Комментировать
  • Зачем в PHP нужна рефлексия?

    @Nc_Soft
    <?php
    
    class Stp008 {
       /**
        * Вытащи этот текст проще, че это сделал я
        */
    	public function get() {
    
    	}
    }
    
    $reflection = new ReflectionClass('Stp008');
    $method = $reflection->getMethod('get');
    echo $method->getDocComment();
    Ответ написан
    Комментировать
  • Yii2 и deploy на сервер?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    правильно организовывать "выкладку" на сервер

    У каждого свои подходы. В общем случае, выделяют следующее:

    Есть ветка master, в которой находится production код, есть ветка staging, в которой находятся фичи, которые нужно тестить. Есть кучи feature-бренчей, которые можно мерджить только со staging, а после того как код в стэйджинге стабилизировался, можно мерджить ветку в продакшен.

    Подробнее о таком подходе можно почитать у фаулера, feature-branch. Есть еще другие методологии, типа feature-switch, а еще можно вообще не париться. Все от проекта зависит, количества разработчиков и все такое.

    По поводу же выкладки на сервер - самый пожалуй правильный способ, использовать ansible или подобные штуки, и запускать сборку на CI сервере после успешного прогода тестов (что куда лить можно вешать по пушу в соответсвующую ветку).

    Миграции в контексте yii придется делать руками, причем сразу при реализации каких-то фич. Миграции все же создавались для версионизации структуры данных, так что это даже больше для разработчика, нежели для деплоя. Сразу хочу заметить, что лучше писать такие миграции, которые не ломают логику работы более старой версии приложений (то есть стараться не удалять поля у таблиц, а только разрешать ничего туда не писать, или таблицы не удалять). Хотя опять же зависит от проекта и команды. Автоматизировать создание миграций для схемы данных будет проблематично, ибо модели не дают надежной инфы о схеме (то есть из модели не сгенерить таблицу, хотя можно это реализовать).
    Ответ написан
    Комментировать
  • Yii2 и deploy на сервер?

    Первый деплой:
    git clone
    composer install
    yii init
    #правите локальные конфиги (прописываете базу)
    yii migrate


    следующие деплои:
    git pull
    composer install
    yii migrate


    миграции создаем ручками
    yii migrate/create createUserTable
    и правим файл миграции
    Ответ написан
    10 комментариев
  • Как правильно работать на oDesk?

    Ambrose
    @Ambrose
    Ух, что ж вы так обстоятельно и с такой опаской к этому подошли-то? Это же всего лишь фриланс, здесь всё проще)

    Расскажу свою маленькую историю. Работа у меня неплохая, в принципе устраивает, было интересено просто попробовать себя на одеске развлечения ради. Прочёл пару статей, зарегистрировался, прошёл тест на знание английского (натыкал только на below average :( ) и начал глядеть простенькие задачки «на вечер».
    Никакую почасовую ставку даже не рассматривал, только fixed price. Зачем загонять себя, если опыта пока маловато?

    Далее про выбор задачек. Смотрим цену, если она устраивает, ставим предложение процентов на 10 ниже, чтобы обратили внимание. И самый основной шаг — правильно составить cover letter. Минимум общих фраз о том, какой вы хороший (я вообще об этом писал одно предложение в начале), основное внимание уделяем задаче. Надо показать заказчику, что вы прочли задание и прониклись им. Задаём пару уточняющих вопросов или предложений по вариантам решения. Только не переборщите, письмо размером с этот ваш вопрос никто читать не будет. Помните, вводное письмо — это то, по чему оценит вас заказчик в первую очередь. Это то, что отличает нас от индусов, которые просто штампуют своё письмо, даже не читая текст задания. Наверняка замечали, что во многих вакансиях специально стоит такая «защита от дурака» :)

    В конце, конечно же, следует указать примерные сроки выполнения. Я, как уже говорил, выбирал задачки на один-два вечера плотной работы с учётом моих скиллов. При этом писал заказчику, что, прямо сейчас я сильно загружен, но в уикенд у меня будет достаточно времени, чтобы завершить работу. Вам ведь никто не мешает предложить комфортный срок выполнения с учётом основной работы, шашлычков, семьи и проч.? Любые вакансии со словом urgent закрывал даже не дочитывая, нервотрёпка мне не нужна.

    В таком режиме примерно 25-30% моих писем находили отклик. Дальше — предварительное согласование с заказчиком. Тут важно понять, какой он человек, дабы не напороться на неадеквата. Если общается в стандартном английском деловом стиле, отвечает на поставленные вопросы — всё скорее всего будет хорошо. Однажды мне попался человек, которые дважды не ответил на конкретный вопрос, продолжать общение с таким не было никакого смысла. Либо некомпетентен, либо невнимателен, а зачем нужен человек, из которого потом придётся тянуть клещами? И да, лучше конечно выбирать европейцев/американцев, общаться с малограмотными азиатами не слишком приятно.

    На некоторые вакансии я отвечал только для тренировки — обмозговывал задачу и составлял письмо. Было интересно, ответят или нет. Потом просто отклонял предложение, ведь до заключения контракта вы никому ничего не обязаны. После одного из таких отклонений (с пометкой «слишком маленькая цена»), ко мне снова обратился заказчик с предложением заплатить больше. Пришлось всё таки взяться и сделать :)

    В общем, у меня к вам один совет: относитесь проще. Начинайте с простого, не нужно рубить с плеча и уходить во фриланс с основной работы. Уйти вы всегда успеете. А за то время, пока вы читали уйму книжек, зачем-то проходили кучу тестов и писали огромный вопрос на хабр, вы могли просто взять и сделать несколько простых задачек на одеске, получить немного звёздочек и практический опыт вместо голой теории.

    P. S. Всё вышенаписанное воспринимать как поток сознания дилетанта с тремя выполненными задачками и парой сотен баксов на счету)
    Ответ написан
    2 комментария
  • Использовать ли ActiveRecord в высоконагруженных проектах?

    p4s8x
    @p4s8x
    ActiveRecord это очень удобный и полезный инструмент и его можно и нужно использовать, одна из замечательнейших частей фреймворка, делающих разработку действительно быстрой и легкой.

    Если возникают проблемы с производительностью:

    1) Во всех проектах используем:CProfileLogRoute с настройкой CDbConnection.enableProfiling=true
    Расскажет много полезного.

    2) Если видим lazy Loading — не забываем добавлять в with("") нужных релейшинов, используем together() принудительно где нужно.

    3) Если используем findAll() на большом количестве записей — используйте CDbCriteria.select и перечисляйте только необходимые колонки, это поможет значительно повысить производительность.

    Рекомендую детально изучить изнутри — как работает CActiveRecord, CActiveFinder
    Используйте расширения типа XDebug для детального профайлинга проекта.
    Основные потери производительности происходят внутри метода
    CActiveRecord.populateRecord — посмотрите — что происходит внутри.

    4) Все редкообновляемые данные очень легко кэшировать связкой:
    CTimestampBehavior + CDbCacheDependency('SELECT MAX(update_time) .... where...');
    Если таблица редко обновляется, то и этот запрос будет отрабатывать мгновенно. Mysql тоже сам кэширует результаты таких запросов.

    В результате — мест, где приходится отказываться от ActiveRecord остается очень мало.
    Скорость отдачи страниц держим на уровне не более 0.1 с.

    Если у Вас будут действительно высокие нагрузки, Вас врятли спасет один только отказ от ActiveRecord:
    Посмотрите:
    Yii: устройство ActiveRecord и Шардинг
    Шардинг MySQL на Yii Framework

    Также задумываем для одного проекта попробывать www.yiiframework.com/extension/yiimongodbsuite/ с auto-sharding
    Ответ написан
    Комментировать
  • Какие англоязычные аналоги «Хабрахабра» существуют?

    neyronius
    @neyronius
    www.dzone.com — сборник ссылок + часто пишут эксклюзивные статьи
    Ответ написан
    Комментировать
  • Какие англоязычные аналоги «Хабрахабра» существуют?

    xyu
    @xyu
    Hacker News — news.ycombinator.com/
    Ответ написан
    Комментировать