
;世界上最痛苦的事情不是版本没有如期上线,而是上线后程序员被祭了天
。
安卓:折叠、挖孔、齐刘海

苹果:证书、上架、热更新

前端开发:IE 六、七、八、九、十

后端开发:并发、写库、做运维

有限的资源:例如当前一个很厉害的 88 核/710GB 的后台服务器,其实也就是宇宙第一强手机 HUAWEI P40Pro(8 核/8G)的十倍左右
海量的数据:就我们产品而言,随便挑一个数据库都已经有好几 T 的大小
高效地处理:后台处理一慢,用户体验就变的很糟糕,丝毫不敢懈怠
1 扩容能解决宕机的问题吗?
难题一:不是所有的资源都能简单的扩容
难题二:你永远不知道宕机和出轨哪一个先来
。所以,对于产品经理们来说,能够非常精准的预测到即将到来的流量就变的尤为重要。数据监控,模型推演,历史事件对比分析都是非常有效的方式。
特殊工艺的奶茶:制作工艺非常复杂,做一杯要 5min,那这个营业员这 5 分钟暂时不能接客
水龙头流的很慢:每次接杯水都要好久,处理一个用户的时间自然要变得很长
还有一批混混:不知道被谁雇佣过来的,过来排队但又不买
2 为什后台服务会挂?
单点系统可能会挂或者处理能力有限,典型:数据库、Redis 缓存(10W qps)
第三方依赖可能会故障,包括核心依赖、非核心依赖
后台程序员怎么做能让服务能更稳一点?
法宝 1:拆
水平拆分 这种方式比较常见,可以认为是简单的水平扩容,简单来说就是一台不行,多跑一台扛着
功能性拆分 这种方案是根据功能模块的不同,进行拆分后台服务,不把鸡蛋放在一个篮子里。如果有一个服务故障,不影响其它服务的运行。
数据拆分 前面有提到,数据库经常会成为单点的瓶颈。一般在功能性拆分的同时,我们也会做数据的拆分,不让一份数据变得超级大。
法宝 2:寻找更强的单点
法宝 3:牺牲时效性
法宝 4:让单个请求处理更快
法宝 5:提前计算好,不要等用户来的时候再计算
3 终极大招:有损服务与降级
-
牺牲用户体验 用静态化数据代替「千人千面」的动态数据;放缓流量进入的速率,增加验证码机制;简单粗暴的,直接挂一个页面显示「XX 功能在 XX 时间内暂时关闭」
-
牺牲功能完整性 有一些功能是「防御性」的,如果愿意冒险“裸奔”一段时间也会带来可观的资源节约;临时关闭「风控」;取消部分「条件是否满足」的判断
-
牺牲时效性 将一些原本就是异步进行的操作,处理效率放缓,甚至暂缓一段时间。如,送积分、送券等等
往期推荐

