站长网 系统 微服务架构的四大金刚工具

微服务架构的四大金刚工具

副标题#e# 缓存的使用可以说无处不在,从应用请求的访问路径来看,用户 user – 浏览器缓存 – 反向代理缓存- WEB服务器缓存 – 应用程序缓存 – 数据库缓存等,几乎每条链路都充斥着缓存的使用,缓存最直白的解释就是用空间换时间的算法。缓存就是把一些数据暂

副标题#e#

缓存的使用可以说无处不在,从应用请求的访问路径来看,用户 user -> 浏览器缓存 -> 反向代理缓存-> WEB服务器缓存 -> 应用程序缓存 -> 数据库缓存等,几乎每条链路都充斥着缓存的使用,缓存最直白的解释就是“用空间换时间”的算法。缓存就是把一些数据暂时存放于某些地方,可能是内存,也有可能硬盘。总之,目的就是为了避免某些耗时的操作。我们常见的耗时的操作,比如数据库的查询、一些数据的计算结果,或者是为了减轻服务器的压力。其实减轻压力也是因查询或计算,虽然短耗时,但操作很频繁,累加起来也很长,造成严重排队等情况,服务器抗不住。

distributed-tools 组件提供了一个 CacheEngine 接口,基于 Tair、Redis 分别有不同的实现,具体 CacheEngine 定义如下:

public String get(String key); 

/** 

 * 获取指定的key对应的对象,异常也会返回null 

 * 

 * @param key 

 * @param clazz 

 * @return 

 */ 

public <T> T get(String key, Class<T> clz); 

/** 

 * 存储缓存数据,忽略过期时间 

 * 

 * @param key 

 * @param value 

 * @return 

 */ 

public <T extends Serializable> booleanput(String key, T value); 

/** 

 * 存储缓存数据 

 * 

 * @param key 

 * @param value 

 * @param expiredTime 

 * @param unit 

 * @return 

 */ 

public <T extends Serializable> booleanput(String key, T value, int expiredTime, TimeUnit unit); 

/** 

 * 基于key删除缓存数据 

 * 

 * @param key 

 * @return 

 */ 

publicbooleaninvalid(String key); 

get 方法针对 key 进行查询, put 存储缓存数据, invalid 删除缓存数据。

限流

在分布式系统中,尤其面对一些秒杀、瞬时高并发场景,都需要进行一些限流措施,保证系统的高可用。通常来说限流的目的是通过对并发访问/请求进行限速,或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以 拒绝服务(定向到错误页或告知资源没有了)、排队 或 等待(比如秒杀、评论、下单)、降级(返回托底数据或默认数据,如商品详情页库存默认有货)。

常见的一些限流算法包括固定窗口、滑动窗口、漏桶、令牌桶,distributed-tools 组件目前基于计数器只实现了固定窗口算法,具体使用方式如下:

/** 

 * 指定过期时间自增计数器,默认每次+1,非滑动窗口 

 * 

 * @param key 计数器自增key 

 * @param expireTime 过期时间 

 * @param unit  时间单位 

 * @return 

 */ 

publiclongincrCount(String key, int expireTime, TimeUnit unit); 

 

/** 

 * 指定过期时间自增计数器,单位时间内超过最大值rateThreshold返回true,否则返回false 

 * 

 * @param key 限流key 

 * @param rateThreshold 限流阈值 

 * @param expireTime 固定窗口时间 

 * @param unit 时间单位 

 * @return 

 */ 

 

#p#副标题#e#

publicbooleanrateLimit(final String key, finalint rateThreshold, int expireTime, TimeUnit unit); 

基于 CacheEngine 的 rateLimit 方法可以实现限流, expireTime 只能设定固定窗口时间,非滑动窗口时间。

另外 distributed-tools 组件提供了模板 RateLimitTemplate 可以简化限流的易用性,可以直接调用 RateLimitTemplate 的 execute 方法处理限流问题。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/fuwuqi/xt/2021/0525/6200.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部