Redis独立服务器或MySQL

时间:2015-11-02 21:51:45

标签: mysql redis server

我正在尝试构建一个需要服务器大量或读取请求的站点。用户没有写信。我想使用MySQL作为我的后端服务器,redis作为我的缓存层。

数据大小为60 GB。我有8个EC2,有2核和6GB RAM。我的想法是使用redis来存储尽可能多的数据。但是我想知道什么应该是正确数量的redis服务器和mysql服务器。由于数据的总站点只有60GB,如果我可以拥有8个redis服务器,可以容纳大约40GB的数据。所以不可能只使用redis。

选项1:将数据均匀分片到7台同时具有MySQL和redis的服务器。每个服务器在MySQL中存储大约10GB的数据,redis存储4-5GB的数据(该实例只有6 GB的RAM)。我将有一台服务器来进行负载平衡并指向存储该值的正确服务器。

选项2:使用MySQL将我的数据分成两个服务器,其他5个服务器是redis服务器,用于存储来自这两个服务器的数据。并且一个前端服务器负载均衡指向右侧redis服务器。如果redis服务器找不到任何东西,那么它会从MySQL服务器读取数据吗?

当我使用单个MySQL服务器时,延迟大约为100毫秒。我希望显着减少延迟,这就是我提出这些方法的原因。

我对后端架构没有多少经验。任何帮助或任何新的想法表示赞赏。

1 个答案:

答案 0 :(得分:2)

它不会像这样工作。

您在两种选择中都错过了一些后端软件。 Redis和MySQL是独立的数据存储。如果高速缓存未命中,Redis将不会从MySQL获取数据。

您还需要评估您的工作集:经常访问的数据百分比,因此必须从缓存中提供。

您需要一个负载均衡器。您还需要编写一个服务器软件,该软件首先尝试从Redis获取数据,如果未命中,则执行对MySQL的查询,然后向Redis提供结果。它可能还需要维持一些缓存失效流量。

就个人而言,我根本不会对MySQL进行分片。管理数据库非常耗时 - 在实际需要之前不要对其进行分片。由于您使用的是EC2,我只会使用RDS实例(这样可以保证数据的高可用性)。然后,我将使用Elastic Load Balancer将流量分配到n个节点,每个节点包含一个Redis实例,以及处理流量的后端软件。 Redis中的数据将使用一致的散列算法进行分片,以限制这些节点潜在故障的影响。

有很多方法可以实现您的要求 - 这只是一个例子。