众所周知,Node.js 是一种非常流行的 JavaScript 后端框架。然而,由于它是一种基于事件驱动的技术,它可以很容易地遭受流量问题。这里介绍了 Varnish 这个流量控制工具,它可以提高响应速度和安全性。
什么是 Varnish?
Varnish 是一个用于大流量网站的 HTTP 缓存。它允许缓存数据而不会完全关闭数据库或其他数据源。它可以处理数百万请求并返回缓存的结果,因此能够大大提高响应时间。Varnish非常适合负载高延迟请求的应用程序,特别是 web 网站。
Varnish 的作用是将应用程序从直接处理 HTTP 请求中解绑。在收到相同请求时,它可以从缓存中快速返回请求结果,而不必每次都向数据库服务端发出请求。例如,如果您运行的是电子商务网站,客户常常会搜索您网站上的相同商品。Varnish 可以缓存这些请求并在一定时间内返回缓存的搜索结果,而不必重复执行每个查询,从而减少数据库的负载。
Varnish 如何缓存 Node.js 应用程序的 URL 路由
首先,让我们看一下所需的 Node.js 应用程序和 Varnish 配置。这里有个基本示例:
在路由文件中:
----- ------- - ------------------- ----- ------ - ----------------- --------------- ------------- ---- ----- - ------------------- - ------ --------- --- --- -------------------- ------------- ---- ----- - ------------------- - ------ ------- --- --- -------------- - -------
安装 Varnish 并在其配置文件中添加以下条目:
------- ------- - ----- - ------------ ----- - ------- - --- -------- - --- --------------- - -------- -- -------- - ---------- -- ------- -- ---- - --- ------- - ---- ------------- - - --- --------- - -- ---------------- -- --- - --- ---------- - --- --- ------------ - --- - - --- ----------- - -- ---------------- -- --- - ----- ------------------------ - -
上面的配置文件指定了默认后端,并将应用程序的端口设置为 3000。为了缓存所有的路由路径,我们需要指定正则表达式来匹配每个路由。在这个例子中,我们指定了“/about” URL。
vcl_recv
函数用于检查当前请求是否与缓存的 URL 匹配。如果 URL 匹配,则将请求 URL 设置为 "/about"。
vcl_fetch
函数用于设置缓存的 TTL(Time To Live)以及指定 Varnish 进行高效缓存的最长时间。在这个例子中,我们将缓存时间设置为 5 分钟,且在缓存页过期前一小时内再次进行更新。
最后,vcl_deliver
函数用于清除缓存控制标头(Cache-Control header)以便最终用户浏览器能够理解缓存的响应内容。
如何实现 Node.js 应用程序路由缓存
将 Varnish 应用于 Node.js 应用程序的路由非常简单。只需通过以下步骤即可开始:
步骤 1:安装 Varnish
通过以下命令安装 Varnish:
---- ------- ------- -------
步骤 2:修改 Varnish 配置文件
修改 Varnish 配置文件 default.vcl
(一般在 /etc/varnish/default.vcl)并添加上文的示例配置文件。
步骤 3:启动 Varnish
通过以下命令启动 Varnish 服务:
---- ------- ------- -----
步骤 4:启动 Node.js 应用程序
在 Varnish 工作并监听端口3000之后,启动您的 Node.js 应用程序:
---- ------
步骤 5:测试路由缓存
现在,您已成功将 Varnish 应用于 Node.js 应用程序中的所有路由,可以打开浏览器,访问您的应用程序并检查是否存在缓存。在 /about 路由上进行测试。
结论
Node.js 应用程序的路由缓存是实现优秀性能、高速响应的重要组成部分。Varnish 可以通过使用较少的系统资源来提高应用程序的性能并减少服务器的负载,从而提高用户的满意度。在缓存上线之前,请记得仔细测试以确保合理的 TTL 时间,以从缓存系统中获得最大的收益。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66ed8724bc9e1890c5e1edf1