投资菜地

屋后的一亩三分绿色菜园地

2018-05-11

用 cairo 进行概念性绘图

spring cloud

引入jar包

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

Ribbon 的负载均衡策略类,可以实现随机策略、顺序策略等 7 中策略

策略名策略描述
BestAvailableRule选择一个最小的并发请求的 server
AvailabilityFilteringRule过滤掉那些因为一直连接失败的被标记为 circuit tripped 的后端 server,并过滤掉那些高并发的的后端 server(active connections 超过配置的阈值)
WeightedResponseTimeRule根据响应时间分配一个 weight,响应时间越长,weight 越小,被选中的可能性越低。
RetryRule对选定的负载均衡策略机上重试机制
RoundRobinRuleroundRobin 方式轮询选择 server
RandomRule随机选择一个 server
ZoneAvoidanceRule复合判断 server 所在区域的性能和 server 的可用性选择 server

熔断器

Hystrix 是由熔断器和线程池组成,用户请求是先到熔断器,熔断器根据开关状态,如果开关是打开状态,则不调用线程池,而调用降级服务, 熔断器的三个状态根据调用情况进行转换,熔断器根据状态产生对应的动作。

限流

网关总会面临高并发,限流就是在高并发情况下,限制请求总数,对于超出限流阈值的请求采用拒绝服务、降级服务手段,保证负荷不超过系统处理的上限。限流采用的算法包括计数器、漏斗桶和令牌桶。算法比较如下:

算法优缺点原理
滑动窗口计数器不能满足波动处理滑动窗口时间内发送数量 - 滑动窗口时间内接受数量<= 滑动窗口大小
漏斗桶只能按固定速率处理请求发送到漏斗中的请求不受限制,但是从漏斗中获取请求的速率是固定的
令牌漏斗桶可以处理突发流量,放入令牌的速率可以调整令牌桶大小固定,以一定速率产生令牌放入桶中,如果消耗令牌速率小于放入令牌速率,则填满令牌桶后的令牌会被丢弃

Bucket4j 是一款优秀的限流组件,他可以实现针对某个维度在集群中限流,例如,针对某个客户的一个特定接口请求限流,该客户的该接口请求可能被路由到集群中不同节点上,利用 Bucket4j 可以计算在集群中的总请求,进而实现限流。它还有其他优点例如可以通过插件实现日志和监控,有同步和异步接口,可以实现多个维度限流。

监控

网关系统是所有业务系统的门户,是核心系统,网关系统可靠运行是衡量网关系统建设成败的关键因素,通过系统监控可以及时了解系统运行状态,以及可以及时发现系统运行异常,因而系统监控可以提升网关的可用性。系统监控功能主要包括:监控数据采集、监控数据分析展现、监控报警等。 在网关系统中监控数据采集主要包括:接口成功、失败情况,为了使监控功能和网关核心功能松耦合,采用 metris 异步埋点技术或者用通过日志文件埋点等,数据分析可以采用 flume 收集日志 +kafka+storm(flink)等技术进行实时计算分析,通过计算分析可以了解系统运行状态,发现系统异常情况并进行报警。

安全

在网关中采用数据加密和签名机制,加密保证数据不会泄密,签名保证数据交互双方身份不可抵赖以及数据的完整性。

故障转移

网关访问下游服务集群,例如下游某个服务,分别部署在两个节点,如果其中一个节点服务异常,那么是希望网关能否发现有一个节点异常,并且能够不再请求异常节点,而是全部访问正常节点服务,这就是希望实现的故障转移。 由于微服务网关是采用 springcloud 的技术体系,所以可供选择的故障转移技术有 erueka 或者 consul。

开源项目(更多)