系统架构小课堂第5课真题一
第一题,第一问什么是微服务,优缺点。
第二问,填质量效用树,
第三问质量场景属性分析可用性
第二题,好像是嵌入式,一问some/ip协议概念特点二问填一个some和dds的调用流程图,三问让你补全一个流程图,有地图,预测,控制,定位,用户界面等把流程中的依赖关系填进去
第三题nosql,主要考mongodb 一问怎么存非结构数据,优点,二问补全一些数据库图,
第四题redis分布式锁,分布式锁优点缺点 第五题考时序图
解:
第一题:
微服务是什么? 微服务是一种软件架构风格,它将一个大型应用程序分解为一组小的、独立部署的服务。每个服务运行在自己的进程中,负责处理特定的业务功能,并通过轻量级的通信机制(通常是HTTP/REST或消息队列)进行通信。
优点:
- 独立部署:每个微服务可以独立开发、测试、部署和扩展,不影响其他服务。
- 技术多样性:不同的微服务可以使用不同的技术栈开发,选择最适合该服务的技术。
- 故障隔离:单个服务的故障不会导致整个系统的崩溃。
- 团队独立性:允许不同的开发团队各自负责不同的服务,提升开发效率。
缺点:
- 复杂性增加:服务之间的通信、部署和管理变得复杂。
- 数据一致性挑战:不同服务可能需要处理不同的数据库,分布式系统下的一致性维护更为困难。
- 网络开销:服务之间的网络通信可能会增加延迟和带宽消耗。
质量效用树: 质量效用树通常用于表示软件系统的质量需求,它通过一棵树形结构来展示不同的质量属性及其子属性。常见的质量属性包括性能、可用性、可扩展性、可维护性、安全性等。需要根据具体系统的需求将这些属性及其子属性进行填充和分析。
质量场景属性分析可用性: 在分析系统的可用性时,需要从以下方面考虑:
- 可恢复性:系统在出现故障后的恢复能力,如故障恢复时间(RTO)。
- 容错性:系统处理错误的能力,确保在部分组件出现故障时,系统仍能继续运行。
- 冗余设计:通过冗余的硬件或软件设计,提升系统的高可用性。
- 监控与警报:通过监控系统关键指标,及时发现和响应问题,避免系统宕机。
第二题:
SOME/IP协议的概念和特点: SOME/IP(Scalable service-Oriented MiddlewarE over IP)是一种用于汽车网络中的通信协议,专门为车载应用设计,支持基于服务的通信模式。它允许不同的车载电子控制单元(ECU)之间通过IP网络进行通信。
特点:
- 服务发现:支持服务动态发现和配置。
- 可扩展性:可以根据需要进行扩展,适应不同的车辆系统需求。
- 高效的消息传递:通过压缩和分段技术,确保在低带宽网络中也能高效传输。
SOME和DDS调用流程图: SOME/IP和DDS(Data Distribution Service)都是用于不同场景的通信协议。SOME/IP偏向于基于服务的汽车网络通信,而DDS则是用于实时系统的数据分发协议。调用流程图需要展示服务发现、发布/订阅模式、请求/响应等典型交互过程。
嵌入式系统流程图补全:
- 地图:提供位置信息。
- 预测:根据地图和传感器数据预测车辆的路径和行为。
- 控制:根据预测结果生成控制命令。
- 定位:通过传感器数据确定车辆的当前位置。
- 用户界面:提供给用户实时信息展示,交互命令。
流程中的依赖关系可能是:用户界面依赖于定位、预测;控制依赖于预测和定位;地图作为基础数据输入。
第三题:
如何在MongoDB中存储非结构化数据,优点是什么? MongoDB是一个NoSQL数据库,它允许存储非结构化数据。MongoDB使用BSON格式(类似于JSON)来存储数据,每个文档可以有不同的字段和数据结构。
优点:
- 灵活的数据模型:无需固定的表结构,数据模型可以根据需要动态扩展。
- 高可扩展性:通过分片技术支持大规模的数据扩展。
- 快速的查询性能:适合处理大量文档并支持丰富的查询功能。
补全数据库图: 补全图形可能涉及到不同集合之间的关系,例如存储用户信息、商品信息、订单信息等集合的关系图。
第四题:
Redis分布式锁的优缺点: Redis分布式锁是一种利用Redis的原子操作实现的分布式锁机制。可以通过SETNX命令或RedLock算法来实现分布式锁。
优点:
- 高性能:由于Redis的高效性能,分布式锁的获取和释放操作非常快速。
- 简单实现:Redis的命令简单易用,实现分布式锁较为容易。
缺点:
- 可靠性问题:在网络分区或Redis节点故障时,锁的可靠性可能受到影响。
- 锁的过期时间问题:如果锁的过期时间设置不合理,可能会导致锁提前释放或长时间不释放。
第五题:
时序图考察: 时序图通常用于表示系统中不同组件之间的交互顺序。在回答时,可能需要补全时序图中不同对象的消息发送和接收的顺序,明确各个对象之间的依赖关系以及时间顺序。
补充:
NoSQL 是 “Not Only SQL” 的缩写,它指的是一类不使用传统关系型数据库(如MySQL、Oracle等)的数据库系统。这类数据库通常不采用固定的表格结构来存储数据,而是提供了更灵活的数据模型来处理非结构化或半结构化的数据。常见的NoSQL数据库类型包括:
- 键值存储:如Redis、DynamoDB。
- 文档存储:如MongoDB、CouchDB。
- 列存储:如HBase、Cassandra。
- 图数据库:如Neo4j、JanusGraph。
NoSQL数据库的特点包括:
- 高扩展性:支持水平扩展,能处理大规模的数据和高并发。
- 灵活的数据模型:支持不同的数据结构,如键值对、文档、列族和图等。
- 高性能:适合处理大量的读写请求,特别是大数据场景。
结构化数据 是指遵循固定格式和模型的数据,通常存储在关系型数据库中,使用表格、列和行的形式组织。每个数据都有明确的字段定义,比如姓名、年龄、地址等。
结构化数据的特点:
- 预定义的模式:数据存储之前需要定义好表结构,字段类型等。
- 可被SQL查询语言轻松访问:通过SQL查询进行复杂的筛选、排序和关联操作。
- 易于分析和组织:由于结构化数据格式统一,数据处理、存储和分析较为方便。
例子:在关系型数据库中,员工的记录可以存储为一张表,列如”姓名”、”工号”、”部门”、”工资”等,每一行代表一个员工的信息。
相对于结构化数据,非结构化数据是指没有固定格式的数据,例如图片、视频、日志文件、邮件内容等,通常需要NoSQL数据库等灵活的存储方式进行处理。