我的服务器集群/数据库解决方案是否可以工作还是有更好的选择?

时间:2016-09-12 14:37:40

标签: database server

我正在开发一个应用程序将通过API与数据库进行通信的项目,但是我在平衡此规模的服务器负载方面的经验是有限的。

我正在使用NDA,所以我会尝试尽可能详细地解释设置,如果您需要帮助理解任何详细信息,请告诉我们。

数据库将保存可能在30秒内更改的信息。

难度可扩展性 - 我们可能拥有数千个并发用户,因此确保服务器堆栈能够处理负载(并且可扩展)是一个优先事项。

出于解释目的,我简化了后端和前端的寿命:

返回端

  1. 外部源发送包含最新数据的XML文件
  2. CRON作业每30秒运行一次,查看文件是否已更新,然后解析并将更新的数据插入数据库A
  3. CRON作业每隔30秒运行一次(a)从数据库A中提取数据(b)使用算法根据数据库A(c)中的数据计算数据将此新数据输入数据库B
  4. 前端

    1. 用户运行并登录应用
    2. App定期调用API以检索/推送数据到数据库B
    3. 群集

      经过初步讨论,到目前为止这是服务器集群:

      • CDN
      • 负载均衡器(将请求分发给最开放的Web头)
      • Web Head *(处理API请求)
        • 会话服务器(仅用于处理应用程序身份验证)
      • Redis *(用于存储缓存查询并减少数据库负载)
      • 数据库(存储数据库)

      *此服务器将根据需要包含多个克隆

      作为请求的生命周期说明:

      App Request
          |
         CDN
          |
        Load
      Balancer
          |
      Web head 1   (--   Web head 2   --   Web head 3   --   ...)
          |  \
          |   \
          |    \
          |    Session Server
          |
        Redis      (--    Redis 2     --    Redis 3     --   ...)
          |
       Database
      

      问题

      1. 这是一种可行且有效的方法来布局我的服务器以实现可扩展性吗?我的步骤中是否缺少某些东西,或者我是否有剩余?
      2. 为了每30秒将XML数据解析到数据库A,PHP是否胜任,还是应该使用其他语言(例如Python)?
      3. 对于读取,修改然后输入数据库B的数据,PHP是最好的解决方案,还是应该使用其他语言呢?
      4. 我研究了多个服务器/ NoDB解决方案和数据库缓存解决方案(Elasticsearch,Redis,Memcached等)。什么对这种设置最有效?
      5. 同样,如果您需要更多信息,请询问。如果有一个更好的StackExchange网站(我看过,但找不到一个)或者我应该发布的更好的论坛,请告诉我。

1 个答案:

答案 0 :(得分:0)

我写这是一个答案,而不是评论 - 但实际上,你的问题几乎无法回答。

您的可伸缩性取决于缓存 - 缓存又取决于缓存命中率。如果每个用户都在

  

前端

User runs and signs into app
App periodically makes calls to API to retrieve/push data to database B
     

运行相同的查询,你的缓存命中率将是惊人的,你可以做你想要的,因为你的CDN应该能够处理所有。如果它们都运行不同的查询,那么您的CDN不会给您带来许多好处(同一用户多久会重新运行相同的查询),并且您有潜在的可扩展性噩梦。

PHP非常适合解析XML - 大多数解释语言都使用原生XML解析器,因此在大多数情况下切换语言不会带来太多好处。

问题3:这取决于转型是什么。如果它只是格式翻译,那么PHP很好;如果你正在做复杂的数学工作,你可能会从编译语言(如C / C ++)中受益 - 但复杂性会大大增加。

问题4:这一切都取决于缓存命中率。如果您正确设计应用程序,并且您的查询确实可以缓存,那么您的CDN应承担大部分负担。如果它们不可缓存,那么任何架构都无济于事。