ПРОЕКТЫ 


  АРХИВ 


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]

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


  • To: nginx-ru <nginx-ru@xxxxxxxxx>
  • Subject: Модуль для доступа к базе данных, но без ngx_http_upstream_t
  • From: Sergey Avseyev <sergey.avseyev@xxxxxxxxx>
  • Date: Wed, 19 Jun 2013 20:15:21 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type :content-transfer-encoding; bh=HUhr5boKrIv2YKPK10/cXmwfVnU3lOuibEFYT25nrYM=; b=wmLxUzdn4l0tsmGVvFe0hXTC2mB35fAYGD+rniMQdLrOrzU5S4AQFf4n0NgGSsq/rA 7Q/RV+azBZoc++p6s02vDXyiPA5+Y6I5A/9krEQqSx41cMAdp4opioWpKc3xO41JKqN/ m4qoto29ckR90gZSwH3jFZ3udaH4QINYiceFFOWljZzHMra4VESRpR/WKJuaAIiXGuRU 5lWRLgiLDOF1OCXES/sTxU8PM0ejUDWwlPhU49n12i2O6AIysdpWH1R2ZDw0nqeeeI68 z7foRpQxH35WM3EbGLJBlTXyRHATIgsVQNn81cNvM9auWaK5XQh+5Diu4lZQsRE/+5ZE 8Uhg==

Привет всем,

Я написал nginx модуль, для доступа к базе данных Couchbase[1]. Этот
модуль получился немного не обычным:

1) используется библиотека libcouchbase, которая сама рулит установкой
обработчиков на события, и выполнением собственно IO из них. Так что
пришлось написать плагин[3], который подставляет функции nginx в виде,
удобном для libcouchbase.

2) частично потому что IO выполняется внутри libcouchbase, как и
маршрутизация запроса в кластер (основанная на хешировании ключа),
пришлось отказаться от использования ngx_http_upstream_t (хотя тут я
могу ошибаться). Кроме того libcouchbase может асинхронно получить по
конфигурационному сокету информацию об изменении топологии кластера, и
закрыть часть рабочих сокетов, и подготовить к открытию по требованию
новые.

В ходе тестирование оказалось, что моя реализация неплохо работает как
с под-запросами из других модулей, так и обычными прямыми запросами.
Но всё же нашёлся случай, когда модуль (к его исходникам у меня нет
доступа) делает позапрос в мой, и рассчитывает, что в можно будет
получить содержимое результата через r->upstream->buffer или статус
через r->upstream->state->status.

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

[1]: https://github.com/couchbaselabs/couchbase-nginx-module
[2]: 
https://github.com/couchbaselabs/couchbase-nginx-module/blob/master/src/ngx_lcb_plugin.c

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


 




Copyright © Lexa Software, 1996-2009.