Symfony 3 - 登录时的防火墙监听器性能
Posted
技术标签:
【中文标题】Symfony 3 - 登录时的防火墙监听器性能【英文标题】:Symfony 3 - Firewall Listener Performance at Login 【发布时间】:2018-04-02 07:54:00 【问题描述】:回复了我自己的问题并在此处发布以供其他人参考。
设置
我的应用程序开箱即用,运行速度非常快:
Symfony 3
与 Doctrine2
php 5.6.*
与 CGI/FastCGI
作为 PHP 处理程序(甚至不是 php 7)
mysql 5.6.*
然后,进一步优化:
Zend OpCache
通过操作码缓存和优化获得更快的 PHP 执行
Memcached
将user sessions
存储在内存缓存中
Memcached
充当 metadata cache driver
和 query 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 - 登录时的防火墙监听器性能的主要内容,如果未能解决你的问题,请参考以下文章