novactive / ezaccelerator
Novactive eZ Accelerator 是一个针对性能优化的 eZ Platform 套件。
Requires
- php: ^7.3
- ext-dom: *
- ext-json: *
- ext-pdo: *
- ezsystems/ezplatform-kernel: ~1.1.0
- symfony/messenger: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpmd/phpmd: ^2.7
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.4
- symfony/panther: ^0.7.1
This package is auto-updated.
Last update: 2024-09-19 11:59:46 UTC
README
这个仓库是我们所说的“子树分割”:主仓库中一个目录的只读副本。它由 Composer 使用,以便开发者依赖于特定的包。
如果您想报告或贡献,请改在主仓库中打开问题: https://github.com/Novactive/Nova-eZPlatform-Bundles
文档可通过本仓库中的 .md
文件获取,但也在此打包: https://novactive.github.io/Nova-eZPlatform-Bundles/master/Accelerator/README.md.html
加速您的 Ibexa DXP (eZ Platform)
此套件有助于并旨在加速
- 整体性能
- 您的开发
- 营销/内容创作团队的效率
- 您的业务
eZ Accelerator 利用 Symfony Messenger 并为 eZ Platform 添加异步性,允许许多事情无需开销,并且正好相反,加速原生操作。
目前,eZ Accelerator 允许您
- 异步地捕获和分发任何 事件。(但请注意,并非所有事件都可以异步处理)
- 异步处理 HTTP 缓存清除
- 异步处理搜索索引
额外功能!您可以将中间件注入其中!
这是如何工作的
首先,您需要了解 Symony Messenger 组件。
异步 HTTP 缓存清除
eZ Accelerator 装饰了 eZ Platform 清除器以分发相应的消息。要启用异步性,您只需要知道消息 FQDN
- 标签清除:Novactive\Bundle\eZAccelerator\Message\PurgeHttpCacheTags
- 全部清除:Novactive\Bundle\eZAccelerator\Message\PurgeAllHttpCache
就是这样!请看下面的配置示例
异步搜索索引
eZ Accelerator 装饰了 eZ Platform 搜索处理器以分发相应的消息。要启用异步性,您只需要知道消息 FQDN
- 索引内容:Novactive\Bundle\eZAccelerator\Message\Search\IndexContent
- 索引位置:Novactive\Bundle\eZAccelerator\Message\Search\IndexLocation
- 删除内容:Novactive\Bundle\eZAccelerator\Message\Search\UnindexContent
- 删除位置:Novactive\Bundle\eZAccelerator\Message\Search\UnindexLocation
- 全部清除:Novactive\Bundle\eZAccelerator\Message\Search\PurgeIndex
就是这样!请看下面的配置示例
异步事件处理
概念很简单,每当 eZ Platform 做任何事情时,都会触发一个事件。eZ Accelerator 给您通过总线处理事件的机会,这使您有机会通过您选择的传输同步或异步地处理该事件。
一切都是可选的,您仍然可以使用默认的事件调度器,或者您可以切换到总线方法。
配置示例
通过总线同步处理事件:eZ\Publish\API\Repository\Events\Bookmark\CreateBookmarkEvent
nova_ezaccelerator: system: default: # default_bus: a.default.bus.for.this.siteaccess.config event_to_message: eZ\Publish\API\Repository\Events\Bookmark\CreateBookmarkEvent: message: Novactive\Bundle\eZAccelerator\Message\VoidEventMessage # should be your own # stop_propagation: false # default # bus: a.specific.bus.for.this.siteaccess.config.and.that.event
您还可以决定停止事件传播,如果这样做有意义的话。
传输配置
framework: messenger: buses: my.bus: # could be anything and you can have many middleware: - Novactive\Bundle\eZAccelerator\Core\SiteAccessAwareMiddleware transports: ezaccelerator: 'doctrine://default?queue_name=nova_ezaccelerator' # you decide the name does not matter routing: Novactive\Bundle\eZAccelerator\Message\VoidEventMessage: ezaccelerator Novactive\Bundle\eZAccelerator\Message\HTTPCache\PurgeAllHttpCache: ezaccelerator Novactive\Bundle\eZAccelerator\Message\HTTPCache\PurgeHttpCacheTags: ezaccelerator Novactive\Bundle\eZAccelerator\Message\Search\IndexContent: ezaccelerator Novactive\Bundle\eZAccelerator\Message\Search\IndexLocation: ezaccelerator Novactive\Bundle\eZAccelerator\Message\Search\UnindexContent: ezaccelerator Novactive\Bundle\eZAccelerator\Message\Search\UnindexLocation: ezaccelerator Novactive\Bundle\eZAccelerator\Message\Search\PurgeIndex: ezaccelerator
使用此配置,您可以在需要时异步处理任何您想要处理的事情。
再次提醒,当所有 AfterEvent 都可以异步处理时,主要工作在大多数情况下必须同步。(例如:内容创建等。)
注意事项
在复杂的多站点访问情况下,消费者和 SiteAccesses
当运行消费者时,你可能会通过 1 个站点访问(可能是 default
)来运行它们。
但是,你可能想了解原始的站点访问。这就是为什么 eZ Accelerator 注入了 SiteAccessAwareMiddleware
,它给消息添加了原始站点访问的标签。
尽管如此,更重要的是,在你的处理器中,你需要根据正确的配置来处理。
让我们设想一个你拥有 2 个站点访问的情况
- A:Varnish 服务器是
V.IP.A
,数据库是DB.A
(默认) - B:Varnish 服务器是
V.IP.B
,数据库是DB.B
当你运行你的消费者时,它将使用 default
站点访问,这是为 Varnish 服务器 V.IP.A
设置的。来自站点访问 B
的消息被分发,它将由唯一运行的与站点访问 A
内存连接的消费者处理。因此,在这种情况下,V.IP.B
将永远不会被清除。
为了处理这些情况,你可以运行和设置不同的消费者和传输,并调整 eZ Accelerator / Messenger 配置。
例
- 所有默认的
config bin/console messenger:consume
- 站点访问
A
bin/console messenger:consume --siteaccess=A
但你也可以指定 bus
和 receiver
bin/console messenger:consume ezaccelerator --siteaccess=A --bus=something