示例代码请访问:github.com/wenjianzhan…
面向错误的设计
“Once you accept that failures will happen, you have the ability to design your system's reaction to the failures.”
隔离
当系统部分功能发生错误的时间,尽量减少他对系统其他部分造成的影响,让系统还能够部分功能被使用 Micro Kernel 微内核模式 Micro Service 分布式微服务
重用 vs 隔离
逻辑结构的重用 vs 部署结构的隔离
+------------------------+ +------------------+
|Crirical Data Collector| |Log Data Collector|
+------------------------+ +------------------+
\ /
\ /
\ /
+------------------------+
|Crirical Data Collector|
+------------------------+
+------------------------+ +------------------+
|Crirical Data Collector| |Log Data Collector|
+------------------------+ +------------------+
| |
| |
| |
+------------------------+ +------------------------+
|Crirical Data Collector| |Crirical Data Collector |
+------------------------+ +------------------------+
冗余
现在一般我们常见的就是在负载均衡器后边多加服务数量;这样也可以起到单服务减少压力;
单点失效
当我们的QPS是1500是,负载均衡后边有两台服务,但是单台服务的最大QPS是1000,那么加入有一台服务挂掉了,其实另外一台也会被QPS给打挂掉,因为已经超出了单台服务的QPS
限流
token bucket的方式
慢响应
A quick rejection is better than a sloe response.
Pooled resources are exhausted!
如果在系统中没有一个超时操作,就会造成整个系统就像宕掉了一样,为了避免这样我们需要做超时操作
不要无休止的等待
我们需要给阻塞加上一个期限,才能保证我们的服务不会成为僵尸服务
错误传递
正确的错误传递
断路器
服务调用中,如果是成功的那就闭合状态;如果调用没有响应,那就会打开,一定时间后会尝试再次访问这个服务,如果成功就关闭;通常是和服务降级联合使用;
示例代码请访问:github.com/wenjianzhan…