1

我有一个动态 php(基于 Yii 框架)站点。用户必须登录才能在网站上执行任何操作。我正在尝试了解缓存和 CDN 的工作原理;我有点困惑。

缓存(内存缓存)

我的网站有大量的 css、js 和图像。我已经了解到启用缓存(“memcache”?)将大大加快我的网站速度。但这让我很困惑。缓存有什么帮助?我的意思是,如何分别为每个用户缓存从数据库中出来的东西?例如,用户 1 登录,他会看到他的控制面板。用户 2 登录,用户 2 将看到他们的控制面板。

如何确定要缓存的内容?另外,如何启用缓存(memcaching)?

CDN:

我被告知要使用像CloudFlare这样的内容交付网络。假设会自动缓存我的网站。那么,当我的 user-1 登录时,它会缓存什么?它会只缓存主页 CSS、JS 和主页图片吗?因为其他一切都需要登录?用户注销时会发生什么?我的意思是,“会话”会干扰 CDN 的工作吗?

通过 CDN 提供图像是否会显着减少我的服务器上的负载?我没有太多现金来获得集群服务器配置。所以,我只希望我的(共享)服务器能够将其所有资源用于处理 PHP 代码。那么,通过使用“缓存”(类似于 memcache)和/或“CDN”(类似于 CloudFlare)可以节省多少负载?

最后

在这种情况下实施缓存、cdn 和基本性能优化的一般策略是什么?我是否需要对我的 php 代码进行任何更改以启用像 CloudFlare 这样的 CDN 并启用/实施/配置缓存?我该怎么做才能花费最少的开发人员/编码时间,并使我的网站运行得更快?

哦,等等,我的一些页面,如“关于我们”页面等,也将是静态 html。但他们不会得到那么多的点击率。除了可能用于我的Facebook 页面的 iFrame 页面。

4

3 回答 3

3

我实际上为 CloudFlare 工作,并认为我会加入解决一些问题。

“我是否需要对我的 php 代码进行任何更改以启用像 CloudFlare 这样的 CDN 并启用/实施/配置缓存?我该怎么做才能花费最少的开发人员/编码时间,并使我的网站运行得更快?”

不,不需要重写 url 等。我们会自动按文件扩展名缓存静态内容。但是,这确实需要更改您的 DNS 以指向我们。

通过 CDN 提供图像是否会显着减少我的服务器上的负载?

是的,它还应该可以帮助大多数访问者更快地访问该站点并为您节省相当多的带宽。

“哦,等等,我的一些页面,如“关于我们”页面等,也将是静态 html。”

CloudFlare doesn't cache HTML by default. You use PageRules to setup more advanced caching options for things like static HTML.

于 2012-03-02T21:59:54.760 回答
1

Memcached 通过将数据库信息(通常来自远程服务器甚至同一服务器上的数据库引擎)以平面文件格式存储在 Web 服务器的文件系统中来工作。直接访问平面文件以检索以规范格式存储的数据比每次从远程查询访问该数据要快得多。当您拥有可以安全存储一段时间的数据时,这通常很有用,因为它不受定期更改的影响。

这样做的方式是,如果您想将用户的帐户信息存储在缓存中以加快加载该用户登录的页面。您将加载信息并将其缓存在本地。在对该数据的任何后续请求中,它将在通常从数据库本身加载该信息所需的时间的一小部分内加载。显然,如果用户在登录时更改信息,您将需要确保更新/重新缓存该信息,但是如果您实施一个可以最大限度地减少等待时间的缓存系统,您将大大减少提供页面所需的时间数据库。

我个人对 CloudFlare 并不熟悉,因此我无法就此提供任何建议,但就在您的应用程序中实现缓存而言,您应该查看:

http://code.google.com/p/memcached/wiki/NewOverview

并阅读其中涵盖安装/实施/等的其余 Wiki 条目。这应该让你开始走上正轨。

于 2012-03-02T18:09:41.817 回答
1

缓存有帮助,因为不是为每个用户执行磁盘 io,而是将数据存储在内存中,即 memcached。这显着提高了性能。

Memcache 一般用于缓存数据,即查询结果。 http://pureform.wordpress.com/2008/05/21/using-memcache-with-mysql-and-php/ 有很多教程。

我只用过不是cdn的亚马逊s3。它更像是一个存储平台,但在提供媒体服务时仍然有助于减轻我自己服务器的负载。

我会将您所有的静态资源放在 CDN 上,这样您自己的服务器就不必为这些资源提供服务。它不需要对您的 php 代码进行任何修改。这包括 JS 和 CSS。对于您的静态页面(您的关于页面),我会确保 php 没有处理它,因为没有理由这样做。您的网络服务器应该直接为它服务。

缓存将需要更改您的代码。对于缓存正常流程是:1)用户发出请求 2)检查数据是否在缓存中 3)如果它不在缓存中,则执行 DB 查询并将其放入缓存 4)如果它在缓存中检索它 5)返回数据。

您可以缓存任何需要磁盘 io 的内容,并且应该会看到速度加快。

于 2012-03-02T18:26:51.800 回答