最近玩Discours,因为服务器性能比较差,经常会出现下面的提示。
由于负载过大,暂时向所有人显示未登录用户可以看到的内容
正好前段时间学习了一些分布式高并发架构,对这种行为有一点自己的认知。这就是降级保证可用性的典型例子。
查了查相关的资料,官方的描述是这样。
当服务器的负载过高时,为了防止整个网站彻底崩溃,Discourse 会自动触发降级策略。
此时,系统会暂停处理消耗资源较大的动态请求,例如验证登录状态、加载个性化时间线、发帖回复等,降级转而向所有人展示消耗极小的静态缓存页面。
说直白点就是,服务器罢工了,你登录与否,服务器都给你展示静态内容。
当一个已登录用户访问论坛时,服务器需要为他进行大量的个性化定制:
- 检查该用户的 Session/Token 是否有效,读取其角色权限。
- 查询数据库:哪些帖子是他读过的?哪些是新发的?他有没有被私信?他关注的话题有没有更新?
相反,当一个未登录用户访问时,所有人看到的界面是一模一样的。未登录用户看到的是标准的公共页面,类似于静态缓存
Discourse 的后端主要基于 Ruby,并在其前面挡了一层高性能的 Nginx。
系统内部有一个定时监控器,会频繁检查当前服务器的平均负载或响应延迟。当负载超过预设的阈值,系统会立刻启动“熔断”保护,暂时关闭消耗资源的“动态认证路由”。
无论传入的请求是否带有登录 Cookie,系统一律对外宣称卡了,大家凑合看吧。

Comments NOTHING