Welcome! Log In Create A New Profile

Advanced

Re: nginx и несколько memcached серверов

March 23, 2010 02:24PM
Здравствуйте,

nginx по умолчанию использует остаток от деления?
Или все тот же memcached_hash, но с дефолтными опциями?
Пробовал без ketama_points в memcached_hash и OPT_LIBKETAMA_COMPATIBLE ставил на false, результат был 40% не найдено.
Не сильно изменилось :-/.
Есть подозрение, что memcached_hash вообще не работает, т.к. если убрать эту опцию, то процент промахов тот же.
Патчи нгинкса от memcached_hash пришлось встраивать самому в nginx 0.7.65. Собственно diff

--- nginx_orig/nginx-0.7.65/src/http/modules/ngx_http_memcached_module.c 2009-10-27 01:09:27.000000000 +0800
+++ nginx-0.7.65/src/http/modules/ngx_http_memcached_module.c 2010-03-22 22:22:52.000000000 +0800
@@ -12,6 +12,7 @@
typedef struct {
ngx_http_upstream_conf_t upstream;
ngx_int_t index;
+ ngx_int_t ns_index;
} ngx_http_memcached_loc_conf_t;


@@ -148,6 +149,7 @@


static ngx_str_t ngx_http_memcached_key = ngx_string("memcached_key");
+static ngx_str_t ngx_http_memcached_ns = ngx_string("memcached_namespace");


#define NGX_HTTP_MEMCACHED_END (sizeof(ngx_http_memcached_end) - 1)
@@ -221,11 +223,11 @@
ngx_http_memcached_create_request(ngx_http_request_t *r)
{
size_t len;
- uintptr_t escape;
+ uintptr_t escape, ns_escape = 0;
ngx_buf_t *b;
ngx_chain_t *cl;
ngx_http_memcached_ctx_t *ctx;
- ngx_http_variable_value_t *vv;
+ ngx_http_variable_value_t *vv, *ns_vv;
ngx_http_memcached_loc_conf_t *mlcf;

mlcf = ngx_http_get_module_loc_conf(r, ngx_http_memcached_module);
@@ -240,7 +242,15 @@

escape = 2 * ngx_escape_uri(NULL, vv->data, vv->len, NGX_ESCAPE_MEMCACHED);

- len = sizeof("get ") - 1 + vv->len + escape + sizeof(CRLF) - 1;
+ ns_vv = ngx_http_get_indexed_variable(r, mlcf->ns_index);
+
+ if (ns_vv != NULL && !ns_vv->not_found && ns_vv->len != 0) {
+ ns_escape = 2 * ngx_escape_uri(NULL, ns_vv->data,
+ ns_vv->len, NGX_ESCAPE_MEMCACHED);
+ }
+
+ len = sizeof("get ") - 1 + ns_vv->len + ns_escape
+ + vv->len + escape + sizeof(CRLF) - 1;

b = ngx_create_temp_buf(r->pool, len);
if (b == NULL) {
@@ -263,6 +273,16 @@

ctx->key.data = b->last;

+ if (ns_vv != NULL && !ns_vv->not_found && ns_vv->len != 0) {
+ if (ns_escape == 0) {
+ b->last = ngx_copy(b->last, ns_vv->data, ns_vv->len);
+ } else {
+ b->last = (u_char *) ngx_escape_uri(b->last, ns_vv->data,
+ ns_vv->len,
+ NGX_ESCAPE_MEMCACHED);
+ }
+ }
+
if (escape == 0) {
b->last = ngx_copy(b->last, vv->data, vv->len);

@@ -517,6 +537,9 @@
* conf->upstream.temp_path = NULL;
* conf->upstream.uri = { 0, NULL };
* conf->upstream.location = NULL;
+ *
+ * conf->index = 0;
+ * conf->ns_index = 0;
*/

conf->upstream.connect_timeout = NGX_CONF_UNSET_MSEC;
@@ -626,6 +649,12 @@
return NGX_CONF_ERROR;
}

+ mlcf->ns_index = ngx_http_get_variable_index(cf, &ngx_http_memcached_ns);
+
+ if (mlcf->ns_index == NGX_ERROR) {
+ return NGX_CONF_ERROR;
+ }

--- nginx_orig/nginx-0.7.65/src/http/ngx_http_variables.c 2010-02-01 23:20:43.000000000 +0800
+++ nginx-0.7.65/src/http/ngx_http_variables.c 2010-03-22 21:06:26.000000000 +0800
+static ngx_int_t
+ngx_http_optional_variable(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ *v = ngx_http_variable_null_value;
+ return NGX_OK;
+}
+
+
ngx_int_t
ngx_http_variables_init_vars(ngx_conf_t *cf)
{
@@ -1785,6 +1794,12 @@
continue;
}

+ if (ngx_strncmp(v[i].name.data, "memcached_namespace", 19) == 0) {
+ v[i].get_handler = ngx_http_optional_variable;
+
+ continue;
+ }
+
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
"unknown \"%V\" variable", &v[i].name);


Спасибо
Subject Author Posted

nginx и несколько memcached серверов

Andrey Zloy October 25, 2009 05:48AM

Re: nginx и несколько memcached серверов

Maxim Dounin October 25, 2009 06:22AM

Re: nginx и несколько memcached серверов

Andrey Zloy October 25, 2009 06:46AM

Re: nginx и несколько memcached серверов Attachments

Deomid Ryabkov October 25, 2009 01:14PM

Re: nginx и несколько memcached серверов

Andrey Zloy October 25, 2009 01:56PM

Re: nginx и несколько memcached серверов Attachments

Deomid Ryabkov October 25, 2009 04:24PM

Re: nginx и несколько memcached серверов

Andrey Zloy October 25, 2009 05:04PM

Re: nginx и несколько memcached серверов

Peter A Leonov October 25, 2009 08:04PM

Re: nginx и несколько memcached серверов

Andrey Zloy October 26, 2009 04:10AM

Re: nginx и несколько memcached серверов

Peter A Leonov October 26, 2009 05:54AM

Re: nginx и несколько memcached серверов

Andrey Zloy October 26, 2009 06:26AM

Re: nginx и несколько memcached серверов Attachments

Deomid Ryabkov October 26, 2009 09:36AM

Re: nginx и несколько memcached серверов

Andrey Zloy October 26, 2009 10:40AM

Re: nginx и несколько memcached серверов

mente March 23, 2010 01:51PM

Re[2]: nginx и несколько memcached серверов

Михаил Монашёв March 23, 2010 02:06PM

Re: nginx и несколько memcached серверов

mente March 23, 2010 02:24PM

Re[2]: nginx и несколько memcached серверов

Михаил Монашёв March 23, 2010 03:34PM

Re[2]: nginx и несколько memcached серверов

Михаил Монашёв March 23, 2010 03:40PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 289
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