系统架构师学习小课堂第3课之每日刷题
今日五题
1. 面向服务架构(SOA)与微服务的区别
问题: 面向服务架构(SOA)和微服务架构都是构建分布式系统的架构模式。请回答以下问题:
- 简述面向服务架构(SOA)的核心思想。
- 微服务与SOA有何区别?
- 微服务架构有哪些优点和缺点?
2. 数据库分库分表策略
问题: 在高并发、大数据量的互联网系统中,数据库往往成为系统的瓶颈。为了解决这个问题,常用分库分表策略。请回答以下问题:
- 什么是数据库的分库分表?简述其原理。
- 请列举两种常见的分库分表策略,并分别说明其优缺点。
- 分库分表后,如何实现数据的全局唯一性?
3. 分布式事务及其实现
问题: 在分布式系统中,不同的服务通常需要操作各自的数据库,如何保证这些操作的事务性是一个挑战。请回答以下问题:
- 什么是分布式事务?
- 列举三种常见的分布式事务解决方案,并简单描述每种方案的原理。
- 在实际应用中,如何在性能和数据一致性之间进行权衡?
4. 缓存雪崩、缓存穿透与缓存击穿
问题: 缓存是系统架构中常用的优化手段,但在使用缓存时,可能会出现缓存雪崩、缓存穿透和缓存击穿的问题。请回答以下问题:
- 什么是缓存雪崩、缓存穿透和缓存击穿?分别描述它们产生的原因。
- 针对每种问题,分别提供一种解决方案。
- 在设计缓存系统时,如何避免这些问题?
5. 高可用系统的设计
问题: 为了保证系统的高可用性,系统架构师通常需要设计冗余、容灾等机制。请回答以下问题:
- 什么是高可用系统?描述它的主要特征。
- 列举三种常见的高可用设计模式,并描述它们的实现方式和应用场景。
- 在高可用系统的设计中,如何平衡可用性和系统复杂度?
详细讲解
1. 面向服务架构(SOA)与微服务的区别
讲解:
- SOA的核心思想是将应用程序中的业务逻辑模块化,形成可重用的、松耦合的服务。这些服务通过企业服务总线(ESB)进行通信,通常会依赖于 XML、SOAP 等标准化协议。
- 微服务是一种更细粒度的服务化架构,强调将应用分解为一组小而独立的服务,每个服务都可以独立部署和扩展。微服务之间通过轻量级的通信机制(如 RESTful API、消息队列)进行交互。
- 区别:
- 微服务强调更细粒度的服务划分,每个服务独立自治,而 SOA 则更关注业务逻辑的复用,服务粒度较大。
- 微服务更强调独立部署,服务间没有单一的通信中枢;而 SOA 中,企业服务总线(ESB)是重要的通信纽带。
- 微服务架构通常与 DevOps 和持续交付等实践相结合,而 SOA 主要关注业务逻辑和系统集成。
优点和缺点:
- 微服务优点:支持独立部署、技术多样性、弹性伸缩。
- 微服务缺点:带来服务间通信的复杂性,分布式系统的故障处理和数据一致性问题更加突出。
2. 数据库分库分表策略
讲解:
- 分库分表是为了解决数据库在高并发、大数据量场景下的性能瓶颈。分库是指将数据拆分到不同的数据库实例中;分表是指将数据拆分到同一数据库的不同表中。
- 常见策略:
- 垂直分库分表:按照业务模块将不同的业务数据存储在不同的库或表中。例如,用户数据存储在用户库,订单数据存储在订单库。优点是数据隔离清晰,减少单表数据量。缺点是不能解决单表数据量过大的问题。
- 水平分库分表:将同一业务的数据按一定规则(如用户ID、订单ID)拆分到多个库或表中。例如,用户表按用户ID的奇偶性拆分为两个表。优点是分散数据量和请求压力。缺点是需要路由规则和全局ID生成机制。
- 全局唯一性: 可以通过分布式 ID 生成器(如 Snowflake 算法)实现全局唯一主键,避免分库分表后主键重复的问题。
3. 分布式事务及其实现
讲解:
- 分布式事务是指多个不同的系统或服务之间需要协调执行的事务操作,以确保所有参与者要么全部成功,要么全部失败。分布式事务的复杂性在于各参与方可能位于不同的网络节点上。
- 解决方案:
- 两阶段提交(2PC):第一阶段,所有参与方准备提交,第二阶段,所有参与方执行提交或回滚。优点是保证严格的事务一致性;缺点是性能开销大,存在单点故障。
- TCC(Try-Confirm-Cancel)模式:将事务分为三个阶段:Try(尝试),Confirm(确认),Cancel(取消)。优点是灵活、对业务侵入较小;缺点是需要业务逻辑支持幂等性和补偿机制。
- 最终一致性(消息队列、事件驱动):通过异步消息、事件驱动的方式实现系统间的最终一致性。优点是性能高,系统解耦;缺点是只保证最终一致性,数据可能暂时不一致。
- 权衡: 在实际应用中,选择分布式事务的解决方案时,需要权衡一致性需求和系统性能,通常采用最终一致性来替代严格的分布式事务。
4. 缓存雪崩、缓存穿透与缓存击穿
讲解:
- 缓存雪崩:指缓存集中过期或失效,导致大量请求直接打到数据库,造成数据库负载骤增,甚至宕机。解决方案:缓存过期时间随机化、热点数据永不过期、设置多级缓存。
- 缓存穿透:指请求的数据在缓存和数据库中都不存在,导致大量请求穿透到数据库。解决方案:针对无效请求存储空值、使用布隆过滤器快速判定数据的存在性。
- 缓存击穿:指缓存中某个热点数据失效,导致大量请求在同一时间访问数据库。解决方案:使用互斥锁(Mutex)或“预先缓存”的策略来防止高并发情况下的缓存击穿。
- 设计原则: 在设计缓存系统时,应根据业务需求合理设定缓存策略,考虑热点数据、缓存预热、分布式锁等机制,避免上述问题的发生。
5. 高可用系统的设计
讲解:
- 高可用系统的特征包括:低故障率、快速故障恢复能力、数据冗余、容错能力等。高可用系统可以保证服务在绝大多数情况下正常运行,最大限度减少停机时间。
- 常见高可用设计模式:
- 主从备份(主备切换):通过主从架构实现数据的同步备份,故障时从机自动切换为主机。适用于数据库、消息队列等场景。优点是数据可靠性高,缺点是切换时间可能较长。
- 负载均衡:通过反向代理(如 Nginx)或硬件负载均衡设备,将请求分发到多台服务器,避免单点故障。适用于 Web 服务的高可用性。优点是实现简单,缺点是无法避免全局故障。
- 微服务架构:将系统拆分为多个独立的服务,每个服务都可以单独部署、扩展。服务之间通过消息队列、API 网关进行通信。适用于复杂业务系统。优点是故障隔离、弹性伸缩;缺点是增加了系统的复杂度。
- 平衡策略: 在高可用系统设计中,需要平衡系统的可用性和复杂度。过度设计可能导致系统难以维护和开发,适度的冗余和容灾是高可用系统设计的关键。
系统架构师学习小课堂第3课之每日刷题
http://wizhiai.github.io/p/982e6a2442ab4c908a26fe313066c1bf/