Welcome! Log In Create A New Profile

Advanced

Re: Cache revalidation using If-None-Match

July 17, 2014 06:23PM
> Причина в бекенде, да. Но переписать весь софт "правильно"
> - не хватит времени и сил. Например, вот та же MediaWiki.

Кстати MediaWiki, использует переменую $_SERVER['HTTP_HOST'] без всякой проверки.
Если вы используете MediaWiki, советую поискать в коде $_SERVER['HTTP_HOST'] и изучить степень угрозы.

> Если все делать на бекенде - тогда вам nginx просто не нужен.

У нас изначально РНР фрейворк проектировался как REST приложения, в нем очень приятно реализовывать логику на уровне HTTP.

По этому мне привычней и удобней это делать имино на бекенде.
Наверно ваше мнения было таким же, если вместо MediaWiki, вы использовали что-то более подходящее на роль REST приложения.

Я ничего не имею против MediaWiki но именно из-за таких фрейморков удобней что-то дописать в конфиге вебсервера, вместо реализации этой логики на уровне HTTP протокола, в самом приложении, что дает возможность понимать вашу логику приложения, всем кто понимает HTTP заголовки.

> Оптимальный вариант - это все-таки делать на стороне nginx то, что
> он умеет делать лучше всего (SSL, gzip, кеширование, отдача статики)
> а на стороне backend`а - только генерирование контента для динамики.

Мы со временем пришли к тому что и контент сжимаем в gzip, сразу на бекенде.
Если есть Nginx кеширования, такая схема работает намного эффективней.
Папка кеша занимает меньше места, считывания происходит быстрей, Nginx не тратит проц время на сжатия.

Главное не забыть включить gunzip, он нужен для клиентов которые не понимают gzip, для них Nginx отдаст несжатый ответ, таких клиентов мало, 10% - 15%.

Таким образом мы один раз сжали ответ на бекенде, потеряли там 2-5ms времени, но Nginx будет сотни раз отдавать этот ответ из своего кеша, таким образом мы сэкономили в сотни раз больше процессорного времени и в несколько раз сэкономили место на диске под файл кеша.

> И он даже быстрее, чем https://github.com/kakserpom/phpdaemon ?

PhpDaemon - это не лучший пример, в плане производительности, он слишком универсален и тяжелый.
На роль, легкого простого демона, он не подходит однозначно, но сам проект вызывает уважения и многие вещи нами были подсмотрены и сделаны по своему.

В это плане, более интересный ReactPHP.
Вот не плохая статья на русском.
http://habrahabr.ru/post/220393/


> Выложить свой phpd в open source не планируете?

Это зависит не только от меня, сейчас в планах этого нет.
Даже моё желания написать статью про ревалидацию кеша через ETag, и отдать ответ c 304 статусе и уложится за 5ms, мои колеги встретили неоднозначно, некоторые даже посчитали что это нарушает их автор право, но принципиально особо никто не против.

Если хотите проверить на что способен, PHP модуль Event, можете создать простой скрипт, который будет что-то отдавать на HTTP запрос.
В самом модуле есть простой встроенный вебсервер, его вполне достаточно, чтобы потестить в ab.
Я был приятно удивлен, но в простом синтетик тесте, который выдаёт строку Ok, этот модуль оказался быстрей встроенного net/http который используется в Golang.

<?php

$base = new EventBase();
$http = new EventHttp($base);

$http->bind('0.0.0.0', 8080);
$http->setDefaultCallback('App\responseHTTP');

$base->loop();

?>

Ваша функция App\responseHTTP, принимает объект request и отдает через него заголовки и тело ответа.
Скрипт работает в одном потоке, Libevent сам держит пул конектов и асинхроно отвечает.
РНР просто синхроно, обрабатывает запросы один за другим, на один простой запрос уходит 2-7 ms.
Очень советую, надеюсь РНР будет развиватся в этом направлении, и когда-то мы получим ApplicationServer из коробки, который будет работать действительно на FastCGI модели.
Subject Author Posted

Cache revalidation using If-None-Match

S.A.N June 26, 2014 10:36AM

Re: Cache revalidation using If-None-Match

Anatoly Mikhailov June 26, 2014 04:28PM

Re: Cache revalidation using If-None-Match

S.A.N July 14, 2014 11:37PM

Re: Cache revalidation using If-None-Match

Maxim Dounin July 15, 2014 06:54PM

Re: Cache revalidation using If-None-Match

S.A.N July 15, 2014 08:09PM

Re: Cache revalidation using If-None-Match

S.A.N July 15, 2014 08:44PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 05:50AM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 09:46AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 02:46PM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 06:23PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 18, 2014 07:16AM

Re: Cache revalidation using If-None-Match

S.A.N July 18, 2014 01:01PM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 07:36AM

Re: Cache revalidation using If-None-Match

S.A.N April 01, 2015 12:04PM

Re: Cache revalidation using If-None-Match

Валентин Бартенев April 02, 2015 03:14AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 05:10AM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 08:17AM

Re: Cache revalidation using If-None-Match

Gena Makhomed July 17, 2014 02:08PM

Re: Cache revalidation using If-None-Match

S.A.N July 17, 2014 04:48PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 170
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready