降级&熔断 相关的面试题为我的知识星球(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了《Java 面试指北》中。
- Java69
- 数据库37
- 计算机基础31
- 技术文章精选集25
- 分布式19
- 系统设计14
- 高性能11
- 框架11
- 走近作者10
- 知识星球10
- 开源项目8
- 计算机书籍7
- 高可用7
- 面试准备7
- 开发工具7
- 走近项目5
- 代码质量4
- Java面试指北1
什么是高可用?可用性的判断标准是啥?
高可用(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 分钟 | 电信级系统 |
接口幂等 相关的面试题为我的知识星球(点击链接即可查看详细介绍以及加入方法)专属内容,已经整理到了《Java 面试指北》中。
针对软件系统来说,限流就是对请求的速率进行限制,避免瞬时的大量请求击垮软件系统。毕竟,软件系统的处理能力是有限的。如果说超过了其处理能力的范围,软件系统可能直接就挂掉了。
限流可能会导致用户的请求无法被正确处理或者无法立即被处理,不过,这往往也是权衡了软件系统的稳定性之后得到的最优解。
现实生活中,处处都有限流的实际应用,就比如排队买票是为了避免大量用户涌入购票而导致售票员无法处理。
常见限流算法有哪些?
简单介绍 4 种非常好理解并且容易实现的限流算法!
图片来源于 InfoQ 的一篇文章《分布式服务限流实战,已经为你排好坑了》。
性能测试一般情况下都是由测试这个职位去做的,那还需要我们开发学这个干嘛呢?了解性能测试的指标、分类以及工具等知识有助于我们更好地去写出性能更好的程序,另外作为开发这个角色,如果你会性能测试的话,相信也会为你的履历加分不少。
这篇文章是我会结合自己的实际经历以及在测试这里取的经所得,除此之外,我还借鉴了一些优秀书籍,希望对你有帮助。
不同角色看网站性能
用户
当用户打开一个网站的时候,最关注的是什么?当然是 网站响应速度的快慢。比如我们点击了淘宝的主页,淘宝需要多久将首页的内容呈现在我的面前,我点击了提交订单按钮需要多久返回结果等等。
什么是冗余?
冗余(Redundancy) 是保证系统和数据高可用的最常用手段,其核心思想是 通过部署多份相同的资源,当某一份资源出现故障时,其他资源可以接管其工作,从而保证系统的持续可用。
冗余设计可以从以下几个维度来理解:
| 冗余类型 | 说明 | 典型实现 |
|---|---|---|
| 硬件冗余 | 关键硬件设备部署多份 | 双电源、双网卡、RAID 磁盘阵列 |
| 软件冗余 | 应用服务部署多个实例 | 集群部署、容器化多副本 |
| 数据冗余 | 数据存储多份副本 | 数据库主从复制、分布式存储多副本 |
| 网络冗余 | 网络链路和设备冗余 | 多运营商接入、双活负载均衡 |
| 地域冗余 | 在不同地理位置部署系统 | 同城灾备、异地多活 |
由于网络问题、系统或者服务内部的 Bug、服务器宕机、操作系统崩溃等问题的不确定性,我们的系统或者服务永远不可能保证时刻都是可用的状态。
为了最大限度的减小系统或者服务出现故障之后带来的影响,我们需要用到的 超时(Timeout) 和 重试(Retry) 机制。
想要把超时和重试机制讲清楚其实很简单,因为它俩本身就不是什么高深的概念。
虽然超时和重试机制的思想很简单,但是它俩是真的非常实用。你平时接触到的绝大部分涉及到远程调用的系统或者服务都会应用超时和重试机制。尤其是对于微服务系统来说,正确设置超时和重试非常重要。单体服务通常只涉及数据库、缓存、第三方 API、中间件等的网络调用,而微服务系统内部各个服务之间还存在着网络调用。
