加入收藏 | 设为首页 | 会员中心 | 我要投稿 莆田站长网 (https://www.0594zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

是否会忘记自己编写的代码细节

发布时间:2021-02-18 14:09:18 所属栏目:外闻 来源:互联网
导读:一个API接口有多个Consumer消费方,对于限流更多的是针对消费方+API这个粒度来说的,而对于熔断则是针对整个API Provider服务来说的。 一个限流策略既可以是让消费方的服务请求进行排队,也可以是对触发某个规则后直接对某个特定的消费方调用进行拒绝,比如

一个API接口有多个Consumer消费方,对于限流更多的是针对消费方+API这个粒度来说的,而对于熔断则是针对整个API Provider服务来说的。

一个限流策略既可以是让消费方的服务请求进行排队,也可以是对触发某个规则后直接对某个特定的消费方调用进行拒绝,比如上图仅拒绝Consumer2的调用,而对于其它消费方调用仍然放行。而对于熔断策略则一定是整个服务全部进行拒绝访问,注意这种熔断不一定必须是服务下线或状态变更,也可以是直接在限流熔断拦截器上对所有入口请求进行拒绝。

整体实现思路说明

在讲具体的实现方案的时候先讲下整体的实现思路。

从前面的分析我们也看到,实际上对于限流和熔断更多的是控制的资源单位和粒度不一样,因为我们希望的是构建一套算法来满足对所有的问题场景下的需求。由于服务限流熔断更多的是需要对服务进行拦截处理,我们也看到限流熔断器一般都会配合API网关,微服务网关等使用,而不是独立的存在。

01-对于资源粒度的考虑

在阿里的Sentinel的实现里面有几个重要的概念,一个是资源,一个是Slot,一个是实现机制中的滑动时间窗口,但是初步看好像无法配置到单个消费方+服务这个层面。

对资源粒度,初步分析应该包括了多个层次,从最粗的资源到最细化的资源,在传统的资源粒度考虑里面我们往往并不会考虑到某个微服务或业务系统这个粒度,但是如果从API网关的限流熔断,对API网关本身的性能保护来说,这个还是有必要。

比如用户中心这个微服务,实际上提供29个API服务接口。

当用户中心微服务模块本身出现问题的时候,这29个微服务可能都会出现性能访问缓慢,那么需要的是对整个用户中心接入的API服务全部限流和熔断。


 

图中的 PDG 表示全局页表,当创建一个新的进程时,都要为新进程创建一个新的页面目录,即 PGD。

要将虚拟地址转换为物理地址,处理器必须获取每个级别字段的内容,将其转换为包含页表的物理页的偏移量,并读取下一级页表的页框号。这样重复三次,直到找到包含虚拟地址的物理页面的页框号为止。

Linux 运行的每个平台都必须提供翻译宏,这些宏允许内核遍历特定进程的页表。这样,内核无需知道页表条目的格式或它们的排列方式。

页分配和取消分配

对系统中物理页面有很多需求。例如,当图像加载到内存中时,操作系统需要分配页面。

系统中所有物理页面均由 mem_map 数据结构描述,这个数据结构是 mem_map_t 的列表。它包括一些重要的属性

  • count :这是页面的用户数计数,当页面在多个进程之间共享时,计数大于 1
  • age:这是描述页面的年龄,用于确定页面是否适合丢弃或交换
  • map_nr :这是此mem_map_t描述的物理页框号。

页面分配代码使用 free_area向量查找和释放页面,free_area 的每个元素都包含有关页面块的信息。

页面分配

Linux 的页面分配使用一种著名的伙伴算法来进行页面的分配和取消分配。页面以 2 的幂为单位进行块分配。这就意味着它可以分配 1页、2 页、4页等等,只要系统中有足够可用的页面来满足需求就可以。判断的标准是nr_free_pages> min_free_pages,如果满足,就会在 free_area 中搜索所需大小的页面块完成分配。free_area 的每个元素都有该大小的块的已分配页面和空闲页面块的映射。

分配算法会搜索请求大小的页面块。如果没有任何请求大小的页面块可用的话,会搜寻一个是请求大小二倍的页面块,然后重复,直到一直搜寻完 free_area 找到一个页面块为止。如果找到的页面块要比请求的页面块大,就会对找到的页面块进行细分,直到找到合适的大小块为止。

因为每个块都是 2 的次幂,所以拆分过程很容易,因为你只需将块分成两半即可。空闲块在适当的队列中排队,分配的页面块返回给调用者。



 

(编辑:莆田站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读