31. Hystrix Dashboard 和 Sentinel Dashboard 有什么区别?
📝 通俗解释
- Hystrix Dashboard:像个**“老式仪表盘”**,只能看,不能动。你想改规则?得去改代码或者配置文件,然后重启。
- Sentinel Dashboard:像个**“智能触控屏”**,既能看监控,又能直接操作。点几下鼠标,限流规则就变了,立马生效,不用重启。
📝 通俗解释
- Hystrix Dashboard:像个**“老式仪表盘”**,只能看,不能动。你想改规则?得去改代码或者配置文件,然后重启。
- Sentinel Dashboard:像个**“智能触控屏”**,既能看监控,又能直接操作。点几下鼠标,限流规则就变了,立马生效,不用重启。
高可用(High Availability,简称 HA) 描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的。
一般情况下,我们使用 多少个 9 来评判一个系统的可用性,比如 99.9999% 就是代表该系统在所有的运行时间中只有 0.0001% 的时间是不可用的,这样的系统就是非常非常高可用的了!当然,也会有系统如果可用性不太好的话,可能连 9 都上不了。
| 可用性等级 | 可用性百分比 | 年度停机时间 | 典型场景 |
|---|---|---|---|
| 1 个 9 | 90% | 36.5 天 | 个人博客 |
| 2 个 9 | 99% | 3.65 天 | 普通企业系统 |
| 3 个 9 | 99.9% | 8.76 小时 | 在线服务 |
| 4 个 9 | 99.99% | 52.6 分钟 | 金融交易系统 |
| 5 个 9 | 99.999% | 5.26 分钟 | 电信级系统 |
📝 通俗解释
“按一次和按一百次效果一样。”
电梯按钮,你按一下是去 10 楼,狂按 100 下还是去 10 楼。不会因为你多按了几下就带你去 1000 楼。
f(f(x)) = f(x)。GET:幂等(读取数据)。PUT:幂等(更新资源,多次更新结果一致)。DELETE:幂等(删除资源,多次删除结果一致)。POST:不幂等(创建资源,多次提交可能创建多个)。针对软件系统来说,限流就是对请求的速率进行限制,避免瞬时的大量请求击垮软件系统。毕竟,软件系统的处理能力是有限的。如果说超过了其处理能力的范围,软件系统可能直接就挂掉了。
限流可能会导致用户的请求无法被正确处理或者无法立即被处理,不过,这往往也是权衡了软件系统的稳定性之后得到的最优解。
现实生活中,处处都有限流的实际应用,就比如排队买票是为了避免大量用户涌入购票而导致售票员无法处理。
简单介绍 4 种非常好理解并且容易实现的限流算法!
图片来源于 InfoQ 的一篇文章《分布式服务限流实战,已经为你排好坑了》。
性能测试一般情况下都是由测试这个职位去做的,那还需要我们开发学这个干嘛呢?了解性能测试的指标、分类以及工具等知识有助于我们更好地去写出性能更好的程序,另外作为开发这个角色,如果你会性能测试的话,相信也会为你的履历加分不少。
这篇文章是我会结合自己的实际经历以及在测试这里取的经所得,除此之外,我还借鉴了一些优秀书籍,希望对你有帮助。
📝 通俗解释
就像去餐厅吃饭,顾客最关心的是菜上得快不快。
至于厨房是怎么炒的、用了什么锅,顾客通常不关心,只要结果快就行。
冗余(Redundancy) 是保证系统和数据高可用的最常用手段,其核心思想是 通过部署多份相同的资源,当某一份资源出现故障时,其他资源可以接管其工作,从而保证系统的持续可用。
冗余设计可以从以下几个维度来理解:
| 冗余类型 | 说明 | 典型实现 |
|---|---|---|
| 硬件冗余 | 关键硬件设备部署多份 | 双电源、双网卡、RAID 磁盘阵列 |
| 软件冗余 | 应用服务部署多个实例 | 集群部署、容器化多副本 |
| 数据冗余 | 数据存储多份副本 | 数据库主从复制、分布式存储多副本 |
| 网络冗余 | 网络链路和设备冗余 | 多运营商接入、双活负载均衡 |
| 地域冗余 | 在不同地理位置部署系统 | 同城灾备、异地多活 |
由于网络问题、系统或者服务内部的 Bug、服务器宕机、操作系统崩溃等问题的不确定性,我们的系统或者服务永远不可能保证时刻都是可用的状态。
为了最大限度的减小系统或者服务出现故障之后带来的影响,我们需要用到的 超时(Timeout) 和 重试(Retry) 机制。
想要把超时和重试机制讲清楚其实很简单,因为它俩本身就不是什么高深的概念。
虽然超时和重试机制的思想很简单,但是它俩是真的非常实用。你平时接触到的绝大部分涉及到远程调用的系统或者服务都会应用超时和重试机制。尤其是对于微服务系统来说,正确设置超时和重试非常重要。单体服务通常只涉及数据库、缓存、第三方 API、中间件等的网络调用,而微服务系统内部各个服务之间还存在着网络调用。