提升 Rails 应用性能:抽象层与服务提取的实践指南
1. 实现无关的监测系统
在代码中,可通过如下逻辑利用 Yabeda 进行监测数据收集:
if _1.payload[:exception]
Yabeda.gh_stars_call_failed_total.increment({})
else
Yabeda.gh_stars_call_duration.measure({}, _1.duration)
end
最后,你需要为监测系统安装 Yabeda 导出器插件,这样就拥有了一个实现无关的监测系统。值得注意的是,尽管 Yabeda 提供了收集监测数据的抽象方法,但我们并不直接在代码中使用它,而是通过 Active Support Notifications。这种方式将通用监测与特定指标更新分离,同时让应用代码仅依赖于 Rails,更符合 Rails 开发方式。
2. 服务提取的优势
将底层实现通过中间抽象与应用层接口分离,有一个有趣的积极效果:当抽象距离足够高时,不仅可以在 Ruby 应用中从一个实现库切换到另一个,还能将实现甚至一些基础设施抽象迁移到单独的服务中,而不影响应用的其他代码库。拆分大型单体 Rails 应用为多个服务的主要动机是性能,在某些负载场景下,Rails 和 Ruby 并非最佳性能表现者。将底层无逻辑功能提取到经过高度优化的服务中,可显著提高应用的可扩展性,而合理的抽象能使迁移过程透明化。
3. 分离 WebSockets 与 Action Cable
AnyCable(https
超级会员免费看
订阅专栏 解锁全文
23

被折叠的 条评论
为什么被折叠?



