【问题标题】:Improve latency of findUsers query made by node js activedirectory module改善 node js activedirectory 模块进行 findUsers 查询的延迟
【发布时间】:2019-01-21 14:59:48
【问题描述】:

从 nodejs 中的活动目录中获取用户时,我遇到了高延迟。

我正在使用来自 npm 'activedirectry' 的节点库。 https://www.npmjs.com/package/activedirectory

用户量相对不大,大概1000人左右……

查询时间在 2 到 4 秒之间。

'activedirectory'库的函数findUsers提供的默认查询是(&(|(objectClass=user)(objectClass=person))(!(objectClass=computer))(!(objectClass=group ))).

我在 sAMAccountName 字段上添加了一个额外的过滤器。 sAMAccountName=*somePartOfName*

无论如何,无论有没有我的添加,查询时间仍然很慢。

我没有完整的活动目录服务器配置, 但似乎同一网络上的其他平台使用活动目录运行得更快,但它们可以使用其他框架,在 java 和 .NET 中。

这种高延迟的原因可能是什么?

谢谢

// ad is configured only with user, password, base dn and url

function findUsers(partOfsAMAccountName) {
    const additionalQuery = `sAMAccountName=*${partOfsAMAccountName}*`;

    return new Promise(resolve => {
        ad.findUsers(additionalQuery, false, (error, users) => {
            if(error) {
                console.error('%j', error);
            }

            resolve(users || []);
        })
    }
}

我想做的是根据活动目录的用户名创建一个自动完成机制。

在同一个网络上,我们将 bitbucket 服务器连接到同一个活动目录服务器。从 bitbucket 客户端看来,自动完成功能要快得多。距离客户端约 1 秒。

我已经搜索了 bitbucket 的开源,但没有找到。

【问题讨论】:

    标签: node.js performance networking active-directory


    【解决方案1】:

    我不知道node.js,也从未编写过相同的程序。但是,从问题中我觉得为 findUsers() 提供的默认查询可能是罪魁祸首。

    根据 Microsoft Docs,LDAP 过滤器 (&(objectClass=user)(objectCategory=person)) 足以确定用户。

    在函数findUsers(opts, callback) 的官方文档中,我可以看到关于可选参数扩展或覆盖功能的参数选择描述。

    所以,我认为您可以使用 findUsers 函数中的 opts 参数覆盖 LDAP 过滤器查询,以保留上述建议的 LDAP 过滤器,另外将您的 sAMAccountName 条件放在搜索查询中。请探索如何覆盖 opts 参数,因为我无法帮助您。

    我希望通过这种方式搜索后结果会相对更快。

    【讨论】:

    • 谢谢,这样更快了。
    • @OfekBenYaish - 太好了,很高兴知道这一点!您能否评论一下它的速度,以防它对未来的访问者有所帮助?
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2019-01-01
    • 2017-04-28
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多