我正在开发一个应用程序将通过API与数据库进行通信的项目,但是我在平衡此规模的服务器负载方面的经验是有限的。
我正在使用NDA,所以我会尝试尽可能详细地解释设置,如果您需要帮助理解任何详细信息,请告诉我们。
数据库将保存可能在30秒内更改的信息。
难度可扩展性 - 我们可能拥有数千个并发用户,因此确保服务器堆栈能够处理负载(并且可扩展)是一个优先事项。
出于解释目的,我简化了后端和前端的寿命:
返回端
前端
经过初步讨论,到目前为止这是服务器集群:
*此服务器将根据需要包含多个克隆
作为请求的生命周期说明:
App Request
|
CDN
|
Load
Balancer
|
Web head 1 (-- Web head 2 -- Web head 3 -- ...)
| \
| \
| \
| Session Server
|
Redis (-- Redis 2 -- Redis 3 -- ...)
|
Database
同样,如果您需要更多信息,请询问。如果有一个更好的StackExchange网站(我看过,但找不到一个)或者我应该发布的更好的论坛,请告诉我。
答案 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应承担大部分负担。如果它们不可缓存,那么任何架构都无济于事。