大数跨境
0
0

高并发流量的一些思考

高并发流量的一些思考 二进制跳动
2020-08-04
1
导读:对高并发流量的一些思考?


星星之火

可以燎原


从六月底到现在大概写了接近50篇文章,终于在第一次修改了公众号名称:进制跳动,以此来支持声援海外TikTok。打不死的我们,必将使我们更加坚强。



中国加油




所谓的大流量,我们可能会想到TPS(每秒事务数),QPS(每秒请求量),5000+,10000+,50000+....当然没有一个具体的数据,其实这么说吧,对你的系统造成了压力,影响了系统的性能,这个对于你的系统就叫做大流量。


那么应对大流量的手段有哪些呢?

万变不离其中:让数据尽早进入缓存,离程序近一点,不要频繁的访问DB。


下面就跟我们的RPC基本高级特征有关了。

降级:如果不是核心的作用,就把这个功能降级掉。比如说,我们做推荐系统,千人千面拿到数据后,做个性化排序,如果再大流量下,这个排序的功能就万全可以省去。


限流:这个我们就见得很多了,在现实生活中,在南京的地铁早高峰的时候,一段时间放一批人,这就是限流。说白了,就是在一定的时间段里面,保证系统不被击垮,同时还要尽量的保证系统的吞吐量。


有些比较特别的场景,很出名的就是双十一了,用户的购买,下单都是比较核心的功能,涉及到大量的读写,不能做降级,只能通过限流来保证系统的健壮性。


当然限流有很多种:计数器、滑动窗口、漏桶、令牌。


我今天就聊下令牌桶:

漏桶的出水速度是恒定的,意味着如果瞬时有大流量的话,将有大部分的请求被过滤掉,也就是说溢出。


生成令牌的速度是恒定的,去拿令牌的速度是没有限制的。如果有大量的请求过来的话,该算法可以让你快速拿到令牌,而且拿到令牌的过程不会内耗太大。这个中间虽然会过滤掉不少的正常请求,但是相比于系统的崩溃,还是值得去操作的。


限流神器:Guava RateLimiter(google出品 必属精品!鄙视facebook)

大家可以自行去google下。

这是典型的令牌桶算法,我们只需要告诉RateLimiter系统限制的QPS是多少,那么他就按这个速度往桶里放入令牌,然后请求的时候 调用tryAcquire()方法向RateLimiter获取许可。


那么分布式环境下的限流怎么做呢?

比如Nginx+Lua、Redis+Lua去实现


总结:

让系统的流量先去队列中排队、限流,不要讲流量直接打到系统上,这是关键。



【声明】内容源于网络
0
0
二进制跳动
15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
内容 739
粉丝 0
二进制跳动 15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
总阅读150
粉丝0
内容739