【问题标题】:How to implement a caching server?如何实现缓存服务器?
【发布时间】:2015-06-27 13:24:54
【问题描述】:

我今天有一个场景,大约 50,000 个 Windows 客户端(用户)全天定期轮询独立服务器。出于安全原因,我没有提及服务器在做什么,但它是内部安装的第三方供应商产品。因此,作为一名程序员,我对它如何管理不同的请求没有太多控制权,但我们知道在使用它提供的 API 时几乎没有性能问题。此外,由于各种原因,该产品是必不可少的,而且它的功能非常广泛,我们不能转移到不同的产品,即使我们转移了我要提到的主要问题也没有得到解决。

我们已经构建了一个供我们组织内的用户使用的客户端应用程序,这个应用程序除了需要对我上面提到的服务进行 API 调用之外,还需要进行其他操作。现在我们发现这个调用对于某些繁重的用例来说是昂贵的。我确信服务器已经实现了某种内置缓存逻辑,但考虑到对该 API 的输入查询的不同保真度,它并没有多大用处。

同样,此 API 的主要功能是查询全局数据库并返回唯一项。例如:=>

//Return all names in database that begin with the user entered text.
NameCollection GetNamesBeginningWith(string inputText);

现在这是一个示例,而不是原始 API。

现在我正在考虑在所有客户端和这个主服务器之间引入另一个缓存服务器。我最近了解了“redis”,并计划用它来缓存所有记录,比如说最多 200,000 条记录。因此,最初从我的 redis 实例中,我将读取该特定表的所有记录并将这些记录保存在缓存中,然后我的所有客户端现在都将与我的 redis 实例通信,而不是直接与此用例的主服务器通信。

我主要是一名客户端开发人员,只了解服务器端的细微差别。我走在正确的道路上吗?

'redis' 是推荐的解决方案吗?

此外,我正在获取的数据是不稳定的,因为它可能每月更改一次,或者某些数据可能在很长一段时间内都不会更改,因此为了安全起见,我计划安排一个每天早上刷新缓存的作业。我以前从来没有做过这样的事情。所以我问社区这是否是推荐的方法?

在这种情况下,我如何在最终用户没有注意到的情况下刷新缓存?

【问题讨论】:

    标签: architecture redis client-server memcached soa


    【解决方案1】:

    正如 Tom 已经说过的,您的解决方案总体上是可以的,Redis 是一个不错的选择。我只想提请您注意可用性问题。从您的问题看来,您的所有客户都将直接从 Redis 读取数据。问题是 Redis 服务器或其代理可能由于多种原因而关闭,此外一些服务器维护任务需要重新启动。如果您需要您的客户 24/7 全天候运行,您将不得不处理它。最常见的解决方案是为 Redis 复制配置至少一个从属服务器。请注意,这将需要一些 Redis 管理技能和基础设施的大部分额外费用。看起来有点复杂不是吗?如果我是你,我不会走这条路,我会先从简单的延迟加载开始。您始终可以先检查您的 Redis 缓存,然后如果它为空或不可用,则以旧方式从 API 读取数据。在这种情况下,如果 redis 关闭,您的客户端将在线,但速度很慢。当 Redis 启动时,您根本不需要接触 API。

    在这种情况下,我如何在最终用户不注意的情况下刷新缓存 吗?

    我认为这里没有问题。您的工作应该只是从 API 读取数据并按计划更新 Redis。 Redis 将处理所有并发的东西。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      我走对了吗?

      我认为总的来说,如果数据仅逐月更改而不是逐秒更改,则您的方法通常会奏效。

      'redis' 是推荐的解决方案吗?

      毫无疑问是 Redis 推荐的,它的用户很满意。如果你需要一个缓存,当然,Redis 可以工作。内存缓存也。

      在这种情况下,我如何在最终用户不注意的情况下刷新缓存 吗?

      许多缓存技术都内置了机制,允许您将源数据中的数据更改实时同步到构成缓存的所有节点,而不会中断。我知道 Oracle Coherence 就是这种情况。我不知道 Redis 是否支持这一点,但如果不支持,我会感到惊讶。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-24
        • 2020-09-12
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多