负载均衡器和多个数据库设计实例

时间:2018-02-14 06:18:28

标签: database concurrency server load-balancing

当前的单个应用程序服务器可以处理大约5000个并发请求。但是,用户群将超过数百万,我可能需要有两个应用程序服务器来处理请求。

所以设计是要有一个负载均衡器,希望它能处理超过10000个并发请求。但是,每个用户的数据都存储在一个数据库中。所以设计是有两个或更多服务器,我应该做以下几点吗?

  1. 拥有两个数据库实例
  2. 两个数据库之间的实时同步
  3. 这是对的吗?

    但是,如果是这样,同步过程是否会降低服务器的性能 因为数据库复制似乎很昂贵。

    谢谢。

2 个答案:

答案 0 :(得分:0)

您可能想要在“层”中考虑您的服务。在这种情况下,你有两层;应用程序层和数据库层。

通常,您的应用程序层将比数据库层更容易横向扩展(即通过在负载均衡器后面添加更多应用程序服务器)。

考虑到这一点,最好的方法可能是过度配置你的数据库(即把它放在自己的,多汁的服务器上)并让你的应用服务器都连接到同一个数据库。根据您使用的数据库软件,您还可以查看使用只读副本(AWS docs)来减轻数据库的压力。

您还可以通过Memcached / Redis查看缓存,以减少您在数据库上的负载量。

所以 - tl; dr - 把你的数据库放在自己的,大的,服务器上,并将你的应用程序代码分散到许多小型服务器上,所有小型服务器都连接到同一个数据库服务器。

答案 1 :(得分:0)

最佳选择可能是将备用节点与活动节点中的数据同步,这是一种经济高效的解决方案,因为可以使用开源关系数据库(例如Maria DB)来实现。

  • 请勿存储可在运行时轻松完成的可计算结果和统计信息,这可能有助于减小数据大小。

  • 如果不需要紧急查询历史数据,可以将其以易于导入的格式写入文本文件到数据库(例如.csv)。

  • 经常更新的数据对象可以作为键值对保存在内存数据库中,使用计划任务执行批处理更新/插入关系数据库以实现持久性

  • 用于数据库批处理更新任务的实施重试逻辑,以处理数据库停机时间或网络错误

  • 考虑将数据作为序列化对象写入关系数据库

  • 定期或通过API将配置数据从数据库缓存到内存中,以刷新更改的部分。