我可以使用数据库查询扩展什么dns服务器?

时间:2012-07-09 19:03:00

标签: c++ dns

基本上我想做以下事情:

string resolveDns(string host){
    string rootId = "SOME_ID";
    string id = rootId;
    string []zones = host.split('.');
    for (int i = zones.count() - 1; i >= 0; i--){
        id = getZoneId(id, zones[i]);
    }
    string []ips = getZoneIps(id);
    if (ips.count() == 1){
        return ips[0];
    } else {
        return getLeastLoadedIp(ips);
    }
}

string getZoneId(string rootId, string zoneName){
    return Sql.prepare("SELECT id FROM zones WHERE parent_id=%s AND name=%s", rootId, zoneName);
}

string getZoneIps(string id){
    return Sql.prepare("SELECT ip FROM zones WHERE parent_id=%s", id);
}

string getLeastLoadedIp(string []ips){
    if (inMem){
        int min = INT_MAX;
        string ip = null;
        for (int i = 0; i < ips->count(); i++){
            int count = HashTable.get(queue_length, ips[i]);
            if (count < min){
                ip = ips[i];
                min = count;
            }
        }
        return ip;
    } else {
        return Sql.prepare("SELECT ip FROM zones WHERE ip IN (%a) ORDER BY queue_length ASC LIMIT 1", ips);
    }
}

什么DNS服务器允许我这样做? (C或C ++很好)

1 个答案:

答案 0 :(得分:0)

我认为(不确定)PowerDNS支持自定义后端。另一种方法(只是做梦)可能是使用普通的数据库后端,并使用一些SQL存储过程,这将返回最少加载的IP。此外,许多DNS服务器都是开源的,因此您可以根据需要修改代码。此外,BIND10将成为模块化的东西并且将支持扩展(不记得如何调用它们),mabe这个功能可以作为这样的“扩展”添加。但我认为这个BIND10功能还没有准备好。

不要忘记TTL。可能你的方法只对低TTL有意义。

我认为一些商业解决方案有这个功能,probabl F5可以,但我想这不是你要做的。