java常见的架构设计方法 怎样才能自学Java集合框架?自己看源码能否学成?
怎样才能自学Java集合框架?自己看源码能否学成?
收集框架相当简单。如果你努力学习,肯定是可以的。集合应该属于JAVAS
Java互联网架构-如何设计服务接口API限流功能?
1限流的目的限流的目的是保护系统。当访问量剧增,超过系统所能承受的流量时,就要把多余的流量屏蔽掉,直接返回,没有业务逻辑。
2压力测量法用于估算系统流量的上限。对一个接口进行压力测试,逐渐增加并发量和持续时间,当并发量达到系统瓶颈(错误率高,响应时间长)时,记录并发量。该值是当前系统流量的上限。
3限流方案3.1系统维度分为单机限流和集群限流两种。
单机限流就是限制每台机器的电流。假设每台机器的电流限制为100QPS,集群有10台机器,则整个集群的容量为1000QPS。可以用Guava RateLimiter,Java,契约信号量实现单机限流。
集群限流是限制整个集群的电流,比如估计整个集群的容量是1000QPS,还有一种场景是限制次数,比如整个集群只能调用第三方接口多少次。Redis可用于实现完全受限流。
3.2方法维度限流常见的方法有三种:
counter方法维护一个计数器,它有一个时间窗口。在当前时间窗口内,每当有新的请求到来时,计数器就会自行增加,当计数器自行增加到设定的上限时,就不再提供服务。当滑动到下一个时间窗口时,计数器复位。这个方法简单,但是在时间窗的临界点,可能会出现超流的问题。
漏桶漏桶强制恒定的输出速率,而不管输入数据流的突发性如何。当输入空闲时,算法不执行任何动作,就像用底部有洞的漏桶接水一样。水进入漏桶,桶里的水通过下面的孔以固定的速度流出。当水的流入速度过快时,会直接溢出。
令牌桶算法我推荐这个方法。具有固定容量的桶以恒定的速率生成令牌。如果桶中的令牌已满,多余的令牌将被丢弃。每当有请求进来,先去桶里拿个令牌。当桶中的令牌完成时,您必须等待桶中生成令牌,然后才允许后续请求(或者直接拒绝它)。因为桶中可以累积一定量的令牌(一般是桶容量),令牌桶算法的优点是可以允许一定量的流量峰值。
Guava提供了一个电流限制工具RateLimit。Er基于令牌桶完成限流。还可以通过编写Lua脚本,通过Redis实现一个全局令牌桶。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。