ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Модуль для доступа к базе данных, но без ngx_http_upstream_t


  • To: nginx-ru@xxxxxxxxx
  • Subject: Re: Модуль для доступа к базе данных, но без ngx_http_upstream_t
  • From: Maxim Dounin <mdounin@xxxxxxxxxx>
  • Date: Wed, 19 Jun 2013 21:39:58 +0400
  • In-reply-to: <CAMB21XS63zBEsS8ERpdb-UVs=P2oC-EHxBTqy9VfvUoBi0hCtg@mail.gmail.com>
  • References: <CAMB21XS63zBEsS8ERpdb-UVs=P2oC-EHxBTqy9VfvUoBi0hCtg@mail.gmail.com>

Hello!

On Wed, Jun 19, 2013 at 08:15:21PM +0300, Sergey Avseyev wrote:

> Привет всем,
> 
> Я написал nginx модуль, для доступа к базе данных Couchbase[1]. Этот
> модуль получился немного не обычным:
> 
> 1) используется библиотека libcouchbase, которая сама рулит установкой
> обработчиков на события, и выполнением собственно IO из них. Так что
> пришлось написать плагин[3], который подставляет функции nginx в виде,
> удобном для libcouchbase.
> 
> 2) частично потому что IO выполняется внутри libcouchbase, как и
> маршрутизация запроса в кластер (основанная на хешировании ключа),
> пришлось отказаться от использования ngx_http_upstream_t (хотя тут я
> могу ошибаться). Кроме того libcouchbase может асинхронно получить по
> конфигурационному сокету информацию об изменении топологии кластера, и
> закрыть часть рабочих сокетов, и подготовить к открытию по требованию
> новые.
> 
> В ходе тестирование оказалось, что моя реализация неплохо работает как
> с под-запросами из других модулей, так и обычными прямыми запросами.
> Но всё же нашёлся случай, когда модуль (к его исходникам у меня нет
> доступа) делает позапрос в мой, и рассчитывает, что в можно будет
> получить содержимое результата через r->upstream->buffer или статус
> через r->upstream->state->status.

Видимо, речь идёт про функциональность subrequest_in_memory, 
которая в коробке используется для ssi-команды include с 
параметром set 
(http://nginx.org/en/docs/http/ngx_http_ssi_module.html#commands).

Оно имеет ограниченную область применимости (читай: работает 
только с proxy и memcached).

> Собственно вопрос, может ли существовать модуль в экосистеме nginx,
> который не заполняет r->upstream в обработчике?

Да.  Более того - большинство модулей даже и не пытаются этого 
делать, простой пример - модуль static.

Если хочется, чтобы упомянутый выше случай правильно отражался в 
логах - можно подсмотреть соответствующую проверку e.g. в модуле 
fastcgi.

-- 
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.