Ruby on rails AWS上的MongoDB性能问题

Ruby on rails AWS上的MongoDB性能问题,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我对MongoDB的性能有几个问题。提前感谢您的帮助 DB架构 DB已按照以下说明安装: 它有一个堡垒和三个复制品 DB在MongoDB 4.09的Ruby on Rails 5应用程序中使用 问题 我想知道“hosts”参数应该包括所有副本还是只包括主副本 mongoid.yml配置 "mongoid": { "production": { "clients": { "de

我对MongoDB的性能有几个问题。提前感谢您的帮助

DB架构

DB已按照以下说明安装:

它有一个堡垒和三个复制品

DB在MongoDB 4.09的Ruby on Rails 5应用程序中使用

问题

  • 我想知道“hosts”参数应该包括所有副本还是只包括主副本
  • mongoid.yml配置

    "mongoid": {
                    "production": {
                        "clients": {
                            "default": {
                                "options": {
                                    "user": "USER",
                                    "password": "PASS****",
                                    "auth_source": "admin",
                                    "read": {
                                        "mode": "primary_preferred"
                                    },
                                    "max_pool_size": 200,
                                    "min_pool_size": 10,
                                    "ssl_verify": false
                                },
                                "database": "pro_db",
                                "hosts": [
                                    "PRIMARY_REPLICANODE.3.0.53:27017",
                                    "SECONDARY_NODE0.3.62.61:27017",
                                    "SECONDARY_NODE1.3.80.80:27017"
                                ]
                            }
                        }
                    }
                },
    
  • 最大池大小的最佳值是什么?每个Mongo DB节点大约有16 GiB的RAM和2个虚拟CPU。是否有其他相关参数需要从默认值修改

  • 具有不同参数的并发API请求存在性能问题。具有相同参数的API请求的平均响应时间为11毫秒,但一旦参数发生更改并并发,平均响应时间为8904毫秒。还有一些暂停。我想知道是什么导致了这个问题

  • 具有相同参数的API请求11ms

    具有不同参数的API请求8904 ms

  • 应用程序配置中应列出所有MongoDB主机。哪个服务器是主服务器会随着时间的推移而变化,例如在维护期间。如果应用程序仅引用一台服务器,并且此服务器正在重新启动,则应用程序将无法定位任何其他服务器(其中一台可能是当前主服务器),并且可能会遇到停机

    驱动程序执行群集中节点的发现,如果它能够联系种子列表中的节点(这是配置中的服务器列表),则将能够找到群集中所有其他节点的相关信息,并跟踪主要更改。但是,如果您碰巧重新启动了应用程序,而此时它只引用了一台服务器,而该服务器已关闭,则应用程序将无法找到其他服务器

  • Max pool size是每个客户端将保留的最大打开连接数。一个16 GB的RAM节点应该没有200个打开连接的问题。如果最大池大小设置得太低,应用程序可能会遇到错误,因为它将无法获得连接以执行操作

    请注意,max of 200大致表示您希望同时执行大约200个操作,这对于典型的Rails应用程序来说似乎不太可能。但是,将最大值设为200并没有什么错

  • 鉴于您提供的详细信息,具体的性能问题并非真正可以回答的。缩小时间是花在应用程序中还是花在数据库中;如果花在数据库中,查询是什么以及它们之间的区别。如果时间花在应用程序中,您通常必须自己分析应用程序,因为时间可能会花在很多方面


  • 在评论任何关于性能的事情之前,应该考虑的事情很少。哪些查询需要更多的时间?模式是什么?这些查询中使用了哪些参数?这些参数有索引吗?触发查询时RAM的用途是什么?磁盘IOPS、复制延迟、写入和读取吞吐量等不同参数表示什么?在考虑了所有这些之后,您还应该考虑是否对所期望的查询模式进行分词(线性或散列)。