面试:架构设计

三高系统设计

系统的三高是指高并发、高可用和高性能。

  • 高并发:指系统在短时间内同时处理大量的请求。当系统面临高并发时,需要考虑如何优化系统的架构、数据库设计、缓存、负载均衡等方面,以保证系统的稳定性和响应速度。
  • 高可用:指系统能够在故障或异常情况下继续提供服务。当系统面临高可用要求时,需要采取冗余设计、容灾备份、自动化运维等措施,以确保系统的稳定性和可靠性。
  • 高性能:指系统能够快速响应用户请求,提供良好的用户体验。当系统面临高性能要求时,需要考虑如何优化系统的硬件配置、数据库设计、缓存、代码实现等方面,以提高系统的性能和响应速度。

系统的三高是相互关联的,需要综合考虑,平衡各方面的需求,以达到系统的最优化设计。

架构设计指标:SLA、TPS、QPS、RT介绍

SLA:系统可用性指标,例如四个9,也就是99.99%,代表全年不可用时长低于52.6分钟。

从0到1设计一个架构

  • 高并发、高性能、高可用,需要考虑的点:
  • 硬件物理架构图:多少机器、分库分表、限流服务、日志服务、监控服务
  • 系统架构图:多级缓存、负载均衡
  • 交互架构图:调用方式、同步异步、访问协议、网关门户
  • 业务架构图、功能模块图、
  • 逻辑链路图、、、领域划分、服务划分、削峰填谷

如何实现系统的高可用性

实现系统的高可用性是确保系统持续提供服务的关键要素。下面是一些常见的高可用方案:

  1. 冗余部署:将系统的关键组件部署在多台服务器上,通过搭建主备或者集群的架构来实现冗余。当主服务器出现故障时,备用服务器能够自动接管,保证系统的可用性。常见的冗余部署方式包括主备部署、热备部署、冷备部署、双机热备和多机热备等。
  2. 负载均衡:通过将流量分发到多台服务器上,均衡系统的请求负载,提高系统的可用性和扩展性。负载均衡可以通过硬件(如负载均衡器)或者软件(如Nginx、HAProxy)实现。常用的负载均衡算法有轮询、权重轮询、最少连接等。
  3. 服务容器化:使用容器技术(如Docker、Kubernetes)将应用程序与其依赖项打包为容器,实现快速部署、弹性扩展和自动化管理。容器化可以提高系统的可移植性、弹性和可伸缩性,从而增加系统的高可用性。
  4. 故障转移与故障恢复:通过监测系统的健康状况,当检测到故障时,自动进行故障转移和故障恢复。常见的故障转移和恢复方式包括自动切换、自动恢复、自动重启、自动补偿、自动扩容等。
  5. 数据备份与恢复:定期对关键数据进行备份,并确保备份的数据可用性。当出现数据损坏或丢失时,可以通过备份数据进行快速恢复。备份方式包括全量备份、增量备份、异地多备份等。
  6. 监控与告警:建立全面的监控系统,实时监测系统的性能指标、健康状态和异常情况。通过设置合理的告警规则,在系统出现故障或异常时及时通知运维人员,以便快速响应并采取措施修复。
  7. 高可用数据库:使用高可用数据库解决方案,如数据库的主从复制、读写分离、分布式数据库等。这些方案可以提供数据冗余和容错机制,在数据库故障时实现快速的切换和恢复。
  8. 网络冗余和负载均衡:设置多个网络入口和出口,通过网络冗余和负载均衡确保网络的可用性和稳定性。

以上是一些常见的高可用方案,具体的方案和实施方式要根据系统的需求和实际情况来确定。一般来说,综合使用多种方案能够提高系统的高可用性,并根据业务需求进行系统层面、网络层面以及数据层面等多方面的高可用设计。

如何设计高性能系统

在设计高性能系统时,可以使用以下关键的技术手段:

  1. 缓存:使用缓存技术将经常访问的数据缓存在内存中,减少对后端存储系统的访问频率。常见的缓存技术包括内存缓存(如Redis、Memcached)和边缘缓存(如CDN)。
  2. 异步处理:将一些不需要实时响应的操作转化为异步任务处理,通过消息队列等机制异步执行。这可以减少对系统的同步等待,提高系统的吞吐量和响应能力。
  3. 并发和并行:通过并发和并行处理提高系统的处理能力。并发指多个任务能够同时进行,而并行指一个任务可以分解为多个子任务并行执行。通过合理地设计和管理并发和并行操作,可以极大地提高系统的性能。
  4. 非阻塞IO:使用非阻塞IO(Non-blocking IO)模型和异步IO(Asynchronous IO)机制,提高IO操作的效率。非阻塞IO利用多路复用技术,使得一个线程可以同时处理多个IO操作,避免了阻塞等待。异步IO则通过回调机制,在IO操作完成后再进行处理,不需要等待IO操作的完成。
  5. 数据库优化:对数据库进行性能调优,包括索引优化、查询优化、表结构设计优化等。合理地使用索引、避免不必要的查询和连接操作,可以提升数据库的性能。
  6. 分布式计算:将系统拆分为多个小服务节点,通过分布式计算将计算任务分配给不同的节点并行执行。这样可以提高系统的整体计算效率和处理能力。
  7. 水平扩展和负载均衡:通过增加机器和使用负载均衡技术,将系统的负载均衡地分布到多个节点上,使得系统能够横向扩展。这样可以提高系统的容量和性能,同时提供更好的扩展性。
  8. 高效的算法和数据结构:选择恰当的算法和数据结构对于系统的性能至关重要。高效的算法和数据结构可以降低系统的时间复杂度和空间复杂度,提高系统的执行效率。
  9. 容错和故障恢复:设计系统时考虑容错机制和故障恢复策略。通过数据备份、故障转移、自动重试等手段确保系统在出现故障时能够快速恢复和继续提供服务。
  10. 基准测试和性能监控:在系统设计和开发过程中,进行基准测试和性能监控,对系统性能进行评估和优化。这样可以发现系统中的性能瓶颈和瓶颈所在,并及时进行优化和调整。

以上是一些常见的关键技术手段,设计高性能系统时可以根据具体的需求和场景来选择和应用。在实际应用中,常常需要综合使用多种手段,灵活地结合系统的需求和技术的特点来进行设计和优化。

什么是领域建模

领域建模:是对领域内的概念类或现实世界中对象及其关系的可视化抽象表示。它专注于分析位替领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

Sentinel的限流与Gateway的限流有什么差别?

限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。

  • 漏桶算法:漏桶算法思路很简单,请求先进入到漏桶里,漏桶以固定的速度出水,也就是处理请求,当水加的过快,则会直接溢出,也就是拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。
    令牌桶算法:令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。

Gateway则采用了基于Redis实现的令牌桶算法。
而Sentinel内部却比较复杂:

  • 默认限流模式是基于滑动时间窗口算法
  • 排队等待的限流模式则基于漏桶算法
  • 而热点参数限流则是基于令牌桶算法

限流算法参考:5种限流算法,7种限流方式,挡住突发流量?

高并发下如何保证数据的一致性和可靠性

在高并发环境中,确保数据的一致性和可靠性是非常重要的。以下是一些常见的方法和策略:

  1. 事务管理:使用数据库事务来确保关键操作的原子性、一致性、隔离性和持久性。通过合理的事务设计和管理,对于涉及到多个数据操作的场景,可以保证数据的一致性。
  2. 数据库锁机制:使用数据库提供的锁机制来保证对共享资源的独占访问。通过合理使用行锁、表锁、悲观锁或乐观锁等方式,控制并发访问数据库的行为,保证数据的一致性和正确性。
  3. 幂等性设计:设计接口或操作具有幂等性,即对同一请求的多次执行只会产生一次结果影响。通过设计幂等性操作,可以避免因为同一请求的重复执行而导致的数据重复或不一致问题。
  4. 高可用架构:构建高可用的系统架构,采用主备、集群、分布式等方式实现故障容错和数据备份。通过合理的架构设计和备份策略,当某个节点或服务发生故障时,可以快速切换到备用节点或服务,保证服务的可用性和数据的可靠性。
  5. 队列和消息中间件:使用消息队列和消息中间件来解耦和异步处理高并发请求。将请求发送到队列中进行异步处理,保证数据操作的顺序和一致性。消息中间件还可以提供事务消息、可靠消息传递等特性,以确保数据的可靠传输和处理。
  6. 分布式一致性算法:采用一致性哈希、分布式锁、Paxos、Raft等分布式一致性算法来处理分布式环境下的数据一致性问题。这些算法可以实现在分布式系统中的协调和一致性保证。
  7. 异常处理和监控:及时捕获和处理异常,对于异常操作进行回滚或补偿操作,保证数据的一致性。同时,建立合适的监控系统,对系统和数据进行实时监测和报警,及时发现和处理潜在的问题。
  8. 数据备份和恢复:定期进行数据备份,并建立完备的数据恢复机制。可以采用灾备方案、冷备、热备、增量备份等方式进行数据备份,确保在数据丢失或损坏情况下可以进行快速的恢复。

综上所述,维护数据的一致性和可靠性需要结合合适的技术手段和策略,在系统架构、数据管理和异常处理等方面进行综合考虑和实施。

分布式系统中常用的缓存方案有哪些

在这里插入图片描述

你如何考虑组件化
你如何考虑服务化
你如何进行领域建模
深入了解业务,分析业务
你如何划分领域边界
说说你项目中的领域建模
说说概要设计
说说你在项目中使用过的 UML 图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值