【微服务】概要

在这里插入图片描述
还有一点很重要, 并不是任何类型的服务都适合Failover 的,比如写服务,由于
需要考虑幕等性,因此笔者建议调用失败后不应该进行重试,否则将导致数据被重
复写人。只有读服务开启Failover 才会显得有意义,既然不需要考虑幕等性,就可以
通过Failover 来提升服务质量。

在这里插入图片描述
在这里插入图片描述

架构师重点需要考虑的问题是服
务如何拆分、粒度如何把控,以及服务或服务之间的RPC 调用应该如何实现

服务治理的三个基础
要素如下所示:
服务的动态注册与发现5
服务的扩容评估:
服务的升/降级处理。
关于服务黑白名单、服务权限控制、服务负责人,以及服务资源调度等其他的
服务治理问题,大家可以参考Dubbo 的用户指南。而关于服务调用跟踪的问题,大
家可以直接阅读1.3 节。


1.failover:失效转移
Fail-Over的含义为“失效转移”,是一种备份操作模式,当主要组件异常时,其功能转移到备份组件。其要点在于有主有备,且主故障时备可启用,并设置为主。如Mysql的双Master模式,当正在使用的Master出现故障时,可以拿备Master做主使用

2.failfast:快速失败
从字面含义看就是“快速失败”,尽可能的发现系统中的错误,使系统能够按照事先设定好的错误的流程执行,对应的方式是“fault-tolerant(错误容忍)”。以JAVA集合(Collection)的快速失败为例,当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常(发现错误执行设定好的错误的流程),产生fail-fast事件。

3.failback:失效自动恢复
Fail-over之后的自动恢复,在簇网络系统(有两台或多台服务器互联的网络)中,由于要某台服务器进行维修,需要网络资源和服务暂时重定向到备用系统。在此之后将网络资源和服务器恢复为由原始主机提供的过程,称为自动恢复

4.failsafe:失效安全
Fail-Safe的含义为“失效安全”,即使在故障的情况下也不会造成伤害或者尽量减少伤害。维基百科上一个形象的例子是红绿灯的“冲突监测模块”当监测到错误或者冲突的信号时会将十字路口的红绿灯变为闪烁错误模式,而不是全部显示为绿灯。
在这里插入图片描述

令牌桶( Token Bucket )算法主要用于限制流量的平均流人速率,并且还允许出现一定程度上的突发流量,
每秒会有r 个令牌被放人桶内,也就是说, 会以llr 秒的平均速率向桶中依次放人令牌(比如每秒共放人10 个令牌,那么每0 . 1 秒放人1 个令牌):· 桶的容量是固定不变的,假设桶中最多只允许存放b 个令牌,如果桶满了再放人令牌,则溢出(新添加的令牌被丢弃) ;
· 当一个n 字节的请求包到达时,将消耗n 个令牌,然后再发送该数据包;· 若桶中的可用令牌数小于n ,则该数据包将会被执行限流处理(被抛弃或缓存)。

令牌桶( Token Bucket )算法主要用于限制流量的平均流人速率,并且还允许出
现一定程度上的突发流量,如图2 - 3 所示。基于令牌桶算法的限流场景较多,比如
Nginx 的限流模块就是一个典型的采用令牌桶算法的实现。令牌桶算法限流的基本流
程如下所示:
· 每秒会有r 个令牌被放人桶内,也就是说, 会以llr 秒的平均速率向桶中依次
放人令牌(比如每秒共放人10 个令牌,那么每0 . 1 秒放人1 个令牌):
· 桶的容量是固定不变的,假设桶中最多只允许存放b 个令牌,如果桶满了再
放人令牌,则溢出(新添加的令牌被丢弃) ;
· 当一个n 字节的请求包到达时,将消耗n 个令牌,然后再发送该数据包;
· 若桶中的可用令牌数小于n ,则该数据包将会被执行限流处理(被抛弃或缓存)。


漏桶算法( Leaky Bucket )也可以高效地实现流量管制,如图2-4 所示。漏桶算
法限流的基本流程如下所示:
·可以以任意速率向桶中流人水滴;
·桶的容量是固定不变的,如果桶满了则溢出(新流人的水滴被丢弃) I
·按照固定的速率从桶中流出水滴。


从本质上来说,令牌桶算法和漏桶算法都可以用于在高并发、大流量场景下对
流量实施管制,让系统的负载处于比较均衡的水位,不会因为峰值流量过大,导致
系统被击垮。但是需要注意,这两种算法的限流方向是截然相反的。令牌桶算法限
制的是流量的平均流人速率,并且可以允许出现一定程度上的突发流量,当桶中令
牌数量不足扣减时,新的请求将被执行限流处理;而漏桶算法限制的是流量的流出
速率,而不是流入速率,并且这种流出速率还是保持固定不变的,不允许像令牌桶
算法那样出现突发流量,当流人的水滴超过桶的容量时,新的请求将被执行限流处理。

Apache 的Commons 类似, Guava 是Google

使用Nginx 实现接入层限流

#定义每个IP 的session 空间大小
limit z。ne one $binary remote addr 20m;
#与limit zone 类似,定义每个IP 每秒允许发起的请求数
limiter ne $binary_remote_addr zone=req_one : 20m rate=!Or/s;
#定义每个IP 能够发起的并发连接数
limit c。nn one 10;
#缰存还没来得及处理的请求
limit_req zone=req one burst=lOO ;


基于时间分片的淌峰万案

Key 作为路由条件会先进行CRC16 运算,然后再mod 16384 ,以此路由到指定Redis 节点的Slot 区间内,如

pu.blic static int getSlot ( Str 工ng key) {
key= JedisClusterHashTagUtil . getHashTag(key);
II opt imization with modulo operat or w 工th power of 2
II equivalent to getCRC16 (k ey )毛16384
return getCRC16(key) & (16384 - 1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值