Symfony 3 - 登录时的防火墙监听器性能

Posted

技术标签:

【中文标题】Symfony 3 - 登录时的防火墙监听器性能【英文标题】:Symfony 3 - Firewall Listener Performance at Login 【发布时间】:2018-04-02 07:54:00 【问题描述】:

回复了我自己的问题并在此处发布以供其他人参考。


设置

我的应用程序开箱即用,运行速度非常快:

Symfony 3Doctrine2 php 5.6.*CGI/FastCGI 作为 PHP 处理程序(甚至不是 php 7) mysql 5.6.*

然后,进一步优化:

Zend OpCache 通过操作码缓存和优化获得更快的 PHP 执行 Memcacheduser sessions 存储在内存缓存中 Memcached 充当 metadata cache driverquery cache driver 充当 doctrine 2

瓶颈

但是,当我通过登录表单进行身份验证时,一条路由非常慢,那就是 fos_user_security_check 路由。

它显示Symfony\Bundle\SecurityBundle\EventListener\FirewallListener 是罪魁祸首——虽然我不知道为什么会这样,因为这条路线在我的本地机器上快速亮起,但在我的生产机器上却没有。

我尝试过的事情

[x] 使用 Memcached 缓存 PHP 会话 -> 没有区别 [x] 使用 Memcached 缓存 Doctrine 的东西 -> 没有区别 [x] 用skip-name-resolve 运行mysql -> 没有区别

我看过的相关帖子

SecurityBundle Configuration ("security")

What is the Symfony Firewall doing that takes so long?

Why does the Symfony 2 firewall take so long to load?

【问题讨论】:

【参考方案1】:

两个字!! “加密算法”。

There is a compromise between 'speed' and 'security'.

见Using the pbkdf2 Encoder Security and Speed。


一个例子展示了 2 种不同的加密如何影响速度。

配置A:

# Login in 3.5s in my case
security:
    FOS\UserBundle\Model\UserInterface:

        # . Use `bcrypt` algorithm
        algorithm: bcrypt
        cost: 13

配置B:

# Login in 400ms in my case
security:
    FOS\UserBundle\Model\UserInterface:
    # . Use `pdkdf2` algorithm
    algorithm:            pbkdf2
    hash_algorithm:       sha512
    encode_as_base64:     true
    iterations:           1000
    key_length:           40

请注意,您必须在数据库中重新创建用户以测试不同的加密机制。


这说明:

... this route lights up quickly on my local machine but doesn't on my production machine. 
我的本地机器有一个Intel Core i7-7820HQ @ 2.90GHz 我的生产机器有一个Intel Xeon E5-2620 v2 @ 2.10GHz

【讨论】:

以上是关于Symfony 3 - 登录时的防火墙监听器性能的主要内容,如果未能解决你的问题,请参考以下文章

symfony 2 在防火墙检查之前在事件监听器中添加角色

Symfony2 安全不同的防火墙不能正确重定向到登录

Symfony:在 SecurityContext 中找不到用于防火墙后路由的令牌

Symfony2 - 将当前登录的用户注入监听器

如果我没有登录,Symfony 防火墙不会重定向我

symfony2 安全 - 禁用登录路径并显示禁止