我最近认识了memcached。这对我提出了一些严肃的问题。假设我有一个新闻web应用程序。显然,最昂贵的工作是发送准备好的查询以从数据库中获取任何新闻内容。假设数据库本身缓存新闻内容和查询计划,那么使用单独的缓存服务器有什么好处?
更多申请详情(假想):
数据库大小大于300gb(最好是mysql或任何其他dbms)
ram内存为32gb
数据库可能驻留在Web服务器中,也可能不驻留在Web服务器中
===如果使用缓存服务器===
三台服务器,每台都有32gb内存
我知道像memcached这样的缓存服务器实际上让人觉得你有一个96gb的聚合缓存。但另一方面,至少应该有一些额外的请求从webserver land到cacheserver land。
我对客户提出的每个请求都需要经过的路径的理解是这样的:
如果使用缓存服务器:
web服务器=>缓存服务器==缓存服务器中是否存在数据?=>
是=>Web服务器=>客户端
否=>db服务器=>web服务器=>客户端;也是对缓存服务器的保存请求
如果不使用缓存服务器:
web服务器=>数据库服务器=>web服务器=>客户端
如果web服务器和db服务器都在同一台计算机上呢?这样我们就有了:web服务器=>客户端
所以我的主要问题是:
从web服务器向其他服务器发出额外请求而不是向数据库发出单个请求是否值得?
我错过什么了吗?
还有其他解决办法吗?像wikipedia这样的大系统在这个特定问题和缓存中使用什么方法?
我们是否可以使用另一种方法,比如使用任何特殊的缓存系统绑定到dbms,每个服务器保留数据库,但只在内存中缓存一小部分。这样,我们不仅可以使用其他服务器实现高可用性和复制,还可以减少请求数。
1条答案
按热度按时间qlvxas9a1#
首先,缓存用于提高系统的性能。缓存和数据库的区别主要是存储在数据库中的数据被持久化到磁盘上,而在缓存中则被存储到ram中。因为从ram访问数据比从磁盘访问要快。
一些数据库,比如mysql,内置了缓存,但是它也有一些问题,比如如果你对表进行任何更新,比如insert、delete和update,存储在mysql缓存中的数据将被自动删除。
如果只缓存几mb的数据,也不需要为缓存保留不同的服务器。一些缓存系统如memcached和redis,您可以根据需要为缓存分配内存大小。如果缓存达到内存限制,将根据我们配置的逐出策略删除现有数据。另外,我们使用cache不仅可以缓存db查询结果,还可以缓存一些use配置设置,而不是每次都从文件中读取。