官术网_书友最值得收藏!

5.4.2 Varnish核心指令之director

director是后端服務(wù)器控制組。前文提到通過backend可定義多個(gè)后端服務(wù)源,那么如何實(shí)現(xiàn)負(fù)載均衡呢?可以通過director來管理,Varnish提供多種算法,具體如下。

  • round-robin:采用循環(huán)的方式依次選擇backend。
  • random:根據(jù)所設(shè)置的權(quán)重來選擇backend。
  • client:根據(jù)請(qǐng)求的客戶端屬性(IP、cookie、session)來選擇backend。
  • hash:根據(jù)hash表來選擇。
  • dns:根據(jù)DNS解析來選擇。

1. round-robin

round-robin是Varnish輪詢算法,其實(shí)現(xiàn)如代碼清單5-5所示。

代碼清單5-5 Varnish輪詢算法

director zachary round-robin {
    {
        .backend=zachary;        // 引用已存在的backend

    }
    {
        .backend=resource;       // 引用已存在的backend

    }
    {
        .backend={               // 定義新的backend
        }

    }
}

Varnish輪詢的代理示意如圖5-3所示。

109-1

圖5-3 Varnish/director輪詢代理圖

注意

Nginx發(fā)送請(qǐng)求到Varnish后,Varnish會(huì)根據(jù)策略匹配,如已緩存到數(shù)據(jù),直接返回,否則會(huì)通過輪詢方式去后端服務(wù)器獲取數(shù)據(jù)。

2. random

Varnish random算法,如代碼清單5-6所示。

代碼清單5-6 Varnish random算法

director zachary random{        // 隨機(jī)
    .retries=5;                 // 查找可用后端次數(shù)
    {                           
        .backend=zachary;       // 引用已存在的backend
        .weight=6;
    }
    {
        .backend=resource;      // 引用已存在的backend
        .weight=2;              // 類似Nginx權(quán)重
    }
    {
        .backend={              // 定義新的backend

        }
        .weight=2;
    }
}

Varnish random的代理示意如圖5-4所示。

110-1

圖5-4 Varnish/director random的代理圖

3. client

Varnish client算法如代碼清單5-7所示。

代碼清單5-7 Varnish client算法

director zachary client{
    {
        .backend=zachary;       // 引用已存在的backend

    }
    {
        .backend=resource;      // 引用已存在的backend

    }
    {
        .backend={              // 定義新的backend
        }

    }
}

4. hash

通過hash算法,Varnish會(huì)選擇后端服務(wù)器中壓力最小的一臺(tái)服務(wù)器來承擔(dān)消費(fèi)。Varnish hash算法如代碼清單5-8所示。

代碼清單5-8 Varnish hash算法

director zachary hash {
    {
        .backend=zachary;       // 引用已存在的backend

    }
    {
        .backend=resource;      // 引用已存在的backend

    }
    {
        .backend={              // 定義新的backend
        }

    }
}

5. dns

Varnish會(huì)通過DNS策略引用后端服務(wù)器列表。Varnish dns算法如代碼清單5-9所示。

代碼清單5-9 Varnish DNS算法

director zachary dns {
    .list = {
            .host_header = "www.zachary.com";
            .port = "80";
            .connect_timeout = 0.4;
            "192.168.15.0"/24; # IP段 0~255
            "192.168.16.128"/25;
    }
    .ttl = 5m;                 #查找緩存時(shí)間
    .suffix = "xxx.com";       #主機(jī)名后綴
}
主站蜘蛛池模板: 普安县| 浦北县| 新乡县| 若尔盖县| 梅河口市| 阳泉市| 寿宁县| 龙川县| 柳州市| 祥云县| 曲周县| 涿州市| 昭苏县| 灵武市| 甘泉县| 灌阳县| 天长市| 祥云县| 柘荣县| 东辽县| 闻喜县| 密云县| 区。| 福安市| 宜兴市| 庄浪县| 石城县| 金秀| 休宁县| 云南省| 封丘县| 夏河县| 禄劝| 新化县| 松溪县| 微博| 龙岩市| 马关县| 阿拉善左旗| 郸城县| 玉溪市|