说说限流那些事
限流就是限制流量。原来是物理名词。限流是通过限流电阻使得电路中的某一段电流不超过一个上限。
后面限流使用到多个场景,道路限流、接口限流、景区限流等。直观理解,就是控制流量,那么其它流量如何处理呢?常见的处理方式就是拒绝请求。比如道路限流,超过限流值的车辆就不允许上路;接口限流,超过限流值的请求就直接丢弃返回失败;景区限流,超过限流值的人就阻挡在景区外。
一般来说,限流更为关注如何限制流量,至于超过限流的处理方式一般不在限流范围内讨论。基本上可以根据具体业务选择丢弃或者降级处理。
一个雪崩的问题产生
一个生产推送系统,除了正向的推送外,超过一定员工数量的组织变无法全员推达,涉及到一个写扩散的问题,即一次无法推达所有用户,此时需要有另外的策略来实现数据推送。
写扩散,即通过写入的方式将数据存储到用户的存储空间中,不再依赖服务提供方的数据。比如邮箱就是一种写扩散的模式,公司老板给全员写了一封邮件,全员每个人的收件箱都会收到一封信,无论老板或者其他员工对信件如何处理,不影响用户自己的信件数据。
那么问题来了,写扩散对于任何系统来说都有一个上限,如果一封邮件同时发给100万的员工,相信哪个系统也顶不住。对于邮箱来说,可以做一些异步的优化。但是对于实际推送系统来说,往往还依赖很多的系统,比如100万的用户名就不大可能能查出来。
那么这里可以使用一个非常常见也经典的模式,就是推拉结合。那就是利用用户客户端上线等时机来调用服务端数据增量计算,然后下发到客户端。
开始跑的正常,但是突然某一天业务量暴涨,系统就崩溃了,正向推送成功率极具下跌