规模化微服务

故障

与其为防止故障做上一百个准备,不如定制一个快速从故障中恢复过来的流程

测量

对于响应时间的测量,有时候网络是有异常情况的,所以使用百分比来测量连接的响应时间

对于24/7小时服务,可接受停机报告只有在历史报告的角度才有用

数据应该保持多久,能容忍多少丢失?

功能降级

微服务系统是的功能是由多个服务合作提供的,所以某些不重要的服务即使不可用,也不该让整个系统不可用

架构性安全

也就说必须实现接口隔离,如果一个服务的请求都是共享同一个连接池,那很有可能某一接口会导致阻塞的请求越来越多,从而导致不可用

一些情况

超时设置的太短或者太长都不好,尝试着设置一个默认的超时时间,记录日志,看超时的时候发生了什么

如果发生一定量的失败请求后,断路器会打开,在断路器打开后任何调用都会快速失败,此后,客户端会发一些请求给生产者看服务是否恢复,如果恢复,就关闭断路器

可以把熔断器当做接口隔离服务不可用时的一种隔离手段

所以幂等就是调用一次与调用多次的结果都是一样的,这种情况,在基于事件的协作下可能很好用

扩展

数据库

对于数据来说,大部分数据读取的次数远远比写的次数要多得多

对于许多关系型数据库,可以设置在单个节点进行写操作,写入的这些数据将在某一时刻被同步到所有数据库节点,而读取操作可以被分发到各个节点上,但这可能会读取到不一致数据,虽然最终结果是一致的,这杯称为最终一致性

可以对要被写的数据进行分片,存到不同的数据库上,但会引入对数据库查询的复杂性

这会很节省主机资源,但是也会影响一个重要的单点故障

类似于日志数据库,通过存取一系列的操作日志,来计算出某一具体时刻的数据

缓存

缓存控制在客户端,所以如果想控制缓存是很困难

HTTP缓存

好处是对客户端透明的,但会引入额外的网络跳数

对客户端完全透明,而且想要控制缓存也必将容易

后写式缓存,有些情况会对同一数据执行许多次写操作,此时就可以先将数据缓存在内存中,待到特定时刻再写到数据源中

缓存过期的数据,当服务不可用时,可以返回这些过期的版本

当缓存大量击穿时,不应该采取同步的方法,而应该对客户快速失败,后台异步调用服务增加缓存

缓存应该保持简单

自动伸缩

可以一些规则,让运维系统自动增减服务实例

CAP定理

这三个条件无法同时满足,当一个上去了,另外两个就要下来了

服务发现

动态的服务注册

文档