面试官:你项目是如何保证高可用的?

项目的高可用、高并发和高扩展是当前开发中必须追求的三大目标,因此也是面试中经常被问到的内容,所以我们今天就来看看,如何才能保证项目的高可用性呢?

1.高可用的度量指标

项目的可用性的度量指标是以可用性百分比(N个9)来衡量的,也就是通过系统正常运行时间占比衡量的,例如:

  • 99.9%(3个9):年故障时间≤8.8小时,日故障时间≤7.44分钟。
  • 99.99%(4个9):年故障时间≤53分钟,日故障时间≤8.6秒。
  • 99.999%(5个9):年故障时间≤5分钟,日故障时间≤0.86秒。

通常情况下,核心服务(如支付系统)通常要求 4 个 9,其他普通服务要求为 3 个 9 即可。

保证项目高可用的手段有以下几个:

具体来说。

2.运维层面保证高可用

  • 多机部署:如 MySQL 主从部署、Redis 集群部署、项目多机部署等,通过多台服务器同时运行相同的业务,分散压力,提高容错性,当其中一台或多台服务器出现故障时,业务仍能正常运行。
  • 多区域部署:将系统部署在不同的地理区域,避免因某个区域的灾难(如地震、火灾等)导致整个系统不可用,提高系统的容灾能力。

3.服务设计层面保证高可用

  • 微服务架构:将系统拆分成多个独立的小服务,每个服务独立开发、部署和运行,降低服务之间的耦合度,提高系统的可维护性和可扩展性,即使某个服务出现故障,也不会影响整个系统。
  • 负载均衡+健康检测:通过负载均衡器将用户请求合理分配到多台服务器上,避免某台服务器过载,同时对服务器进行健康检测,及时发现并隔离故障服务器,确保用户请求能被正常处理。
  • 服务限流:在系统出现高并发请求时,限制单位时间内通过的请求数量,防止系统因过载而崩溃,保证系统在高负载情况下的稳定性和可用性。
  • 服务熔断与降级:当某个服务出现故障或响应时间过长时,暂时切断对该服务的请求,直接返回失败结果或降级结果,避免故障扩散,保证核心业务的正常运行。

4.监控与告警

  • 系统监控:实时监测系统的运行状态,包括服务器的 CPU、内存、磁盘使用率,网络流量等,及时发现潜在问题。
  • 性能监控:关注系统的性能指标,如响应时间、吞吐量、并发数等,发现性能瓶颈,以及及时发现潜在问题。
  • 日志监控:收集和分析系统日志,及时发现错误、异常和安全问题,便于快速定位和解决问题。

小结

项目的高可用性需要通过运维层面,以及服务设计层面的多项措施共同保证其可用性。之后再加上监控和告警机制,提前预防和发现问题,从而一定程度的避免不可用问题的发生。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列等模块。

相关推荐
想不明白的过度思考者2 小时前
Spring Boot 配置文件深度解析
java·spring boot·后端
第二只羽毛2 小时前
Java图书管理系统的设计与实现
java·大数据·安全·系统安全
敲敲了个代码7 小时前
从硬编码到 Schema 推断:前端表单开发的工程化转型
前端·javascript·vue.js·学习·面试·职场和发展·前端框架
cike_y7 小时前
Mybatis之解析配置优化
java·开发语言·tomcat·mybatis·安全开发
WanderInk7 小时前
刷新后点赞全变 0?别急着怪 Redis,这八成是 Long 被 JavaScript 偷偷“改号”了(一次线上复盘)
后端
是一个Bug8 小时前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟8 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
吴佳浩8 小时前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
我是Superman丶8 小时前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
廋到被风吹走9 小时前
【Spring】常用注解分类整理
java·后端·spring