nginx slab算法

nginx中实现了slab算法,只用在了管理共享内存的时候:



static ngx_int_t
ngx_init_zone_pool(ngx_cycle_t *cycle, ngx_shm_zone_t *zn)
{
    u_char           *file;
    ngx_slab_pool_t  *sp;

    sp = (ngx_slab_pool_t *) zn->shm.addr;

    if (zn->shm.exists) {

        if (sp == sp->addr) {
            return NGX_OK;
        }

        ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
                      "shared zone \"%V\" has no equal addresses: %p vs %p",
                      &zn->shm.name, sp->addr, sp);
        return NGX_ERROR;
    }

    sp->end = zn->shm.addr + zn->shm.size;
    sp->min_shift = 3;
    sp->addr = zn->shm.addr;

#if (NGX_HAVE_ATOMIC_OPS)

    file = NULL;

#else

    file = ngx_pnalloc(cycle->pool, cycle->lock_file.len + zn->shm.name.len);
    if (file == NULL) {
        return NGX_ERROR;
    }

    (void) ngx_sprintf(file, "%V%V%Z", &cycle->lock_file, &zn->shm.name);

#endif

    if (ngx_shmtx_create(&sp->mutex, &sp->lock, file) != NGX_OK) {
        return NGX_ERROR;
    }
	sp->size

    ngx_slab_init(sp);

    return NGX_OK;
}

其中sp是一个 ngx_slab_pool_t结构变量:


typedef struct {
    ngx_shmtx_sh_t    lock;

    size_t            min_size;
    size_t            min_shift;

    ngx_slab_page_t  *pages;
    ngx_slab_page_t   free;

    u_char           *start;
    u_char           *end;

    ngx_shmtx_t       mutex;

    u_char           *log_ctx;
    u_char            zero;

    void             *data;
    void             *addr;
} ngx_slab_pool_t;









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Nginx有多种负载均衡算法可供选择。其中一种智能的负载均衡算法是"fair"算法,它可以根据后端服务器的响应时间来分配请求,将响应时间短的服务器优先分配。然而,Nginx本身并不支持fair算法,如果需要使用这种调度算法,需要安装upstream_fair模块。 除了fair算法Nginx还提供了其他几种负载均衡算法,如以下所示: 1. 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果某个服务器不可用,Nginx会自动将其从分配列表中删除。 2. 权重(weight):可以指定多个后端服务器的轮询几率,权重和访问比率成正比,适用于后端服务器性能不均衡的情况。 3. IP哈希(ip_hash):将每个请求根据访问者的IP地址哈希结果进行分配,这样每个访客会固定访问一个后端服务器,可以解决会话保持的问题。 4. fair(第三方模块):可以根据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,将响应时间短的服务器优先分配。但需要通过安装upstream_fair模块来支持。 5. URL哈希(url_hash,第三方模块):根据访问URL的哈希结果来分配请求,使每个URL定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。但需要通过安装hash软件包来支持。 6. 最小连接数(least_conn):根据后端服务器的连接状况进行分配客户请求,连接最少的服务器将被优先分配客户端请求。 这些负载均衡算法可以根据实际需求选择合适的算法来实现分布式请求的负载均衡。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值