系统设计基本功:理解语义
欢迎来到啾啾的博客🐱。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈💬。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论😄。
目录
- 1 引言
- 2 语义简单概览
- 2.1 语义表
1 引言
刷小红书看到有人被问到Redis Key过期要怎么记录日志,于是想到Redis事件通知,又想到Kafka复杂的事件通知。
从设计哲学又想到语义。
我们经常接触的组件、框架都有哪些语义呢?
2 语义简单概览
在软件工程领域,“语义(Semantics)”不仅指代码的字面意思,更关乎一个组件或框架在设计上所蕴含的核心思想、行为承诺和使用范式。它回答了这样一个问题:“这个工具被设计用来解决什么问题?它承诺了什么,又不承诺什么?”
2.1 语义表
使用AI汇总了一下语义表。
领域 | 技术/模式 | 语义 (Semantics) | 语义解读 (潜台词) | 行为承诺 (Promise) | 适用场景 |
---|---|---|---|---|---|
事件通知 | Redis 事件通知 | 尽力而为的通知 (Best-Effort Notification) | 我会尽力、快速地告诉你发生了什么,但如果你错过了,我也无能为力。 | 轻量级、低延迟、“发送即忘”,不保证可靠性。 | 对可靠性要求不高,但对实时性敏感的场景,如缓存失效通知、实时数据面板。 |
Kafka | 可靠的事件流日志 (Reliable Event Stream Log) | 你发给我的每条消息,我都会安全存好,并确保它能被消费。 | 高吞吐量、持久化、高可靠性(至少一次/精确一次)、支持消费者回溯。 | 需要可靠异步通信、事件驱动架构、日志聚合、流处理的系统。 | |
架构模式 | 单体架构 | 内聚与简单 (Cohesion & Simplicity) | 先将所有功能内聚在一起,追求初期开发的简单与高效。 | 初期开发效率高,易于部署和测试。 | 项目早期、小型应用、业务边界不清晰的场景。 |
微服务架构 | 解耦与自治 (Decoupling & Autonomy) | 将系统拆分为独立自治的服务,让每个部分都能独立进化。 | 服务独立开发、部署和扩展,高灵活性和弹性。 | 复杂系统、大型团队、需要高可扩展性和技术异构的场景。 | |
数据库 | SQL 数据库 | 结构化与强一致性 (Structure & Strong Consistency) | 数据的结构和一致性是第一位的,必须严格保证。 | 强数据一致性 (ACID),预定义表结构,支持复杂查询。 | 金融系统、订单管理、ERP等对数据一致性要求极高的场景。 |
NoSQL 数据库 | 灵活性与高可扩展性 (Flexibility & High Scalability) | 为了应对海量访问,我们优先考虑灵活性和水平扩展能力。 | 高可用性、高并发读写、灵活或无模式的数据结构 (BASE)。 | 大数据分析、社交网络、物联网、内容管理等需要高扩展性的场景。 | |
API 设计 | REST | 无状态的资源导向 (Stateless & Resource-Oriented) | 把世间万物都看作资源,用统一的、无状态的方式来操作它们。 | 无状态、资源导向、统一接口,利用HTTP协议。 | 绝大多数Web服务、开放API、面向资源的CRUD操作。 |
GraphQL | 客户端驱动的精确获取 (Client-Driven & Precise Fetching) | 你(客户端)来定义你需要的数据形态,我(服务端)负责精确地满足你。 | 客户端定义数据需求、无过度/不足获取、单一入口。 | 移动端API、多变的前端需求、需要聚合多个数据源的微服务网关。 | |
gRPC | 基于契约的高性能RPC (Contract-Based High-Performance RPC) | 我们先用一份严格的合同(IDL)定义好一切,然后基于此进行高效、可靠的远程调用。 | 基于强类型契约、高性能二进制传输 (HTTP/2)、支持流式通信。 | 内部微服务间的高性能通信、对性能和类型安全要求高的场景。 | |
并发模型 | 多线程 | 抢占式并发 (Preemptive Concurrency) | 你们(线程)都去抢占CPU,由操作系统来当裁判,但你们自己要处理好资源冲突。 | 抢占式并发,能利用多核CPU,但需要开发者手动处理同步和锁。 | CPU密集型计算、需要真正并行处理的任务。 |
异步/协程 | 协作式并发 (Cooperative Concurrency) | 我们(任务)都很自觉,谁有事要等,就主动让出位置,让能干活的人先上,高效协作。 | 协作式并发,高效率处理I/O,避免了内核切换和锁的开销。 | I/O密集型应用,如Web服务器、网络爬虫、高并发API服务。 | |
CI/CD 工具 | Jenkins | 插件化的极致灵活 (Plugin-Driven & Ultimate Flexibility) | 我给你一个强大的平台和无数的积木(插件),你可以随心所欲地搭建任何自动化流水线。 | 极致的灵活性和可扩展性,拥有庞大的插件生态。 | 复杂的、异构的、有特殊定制化需求的CI/CD流水线。 |
GitLab CI/CD | 一体化的约定优于配置 (Integrated & Convention over Configuration) | 既然你的代码已经在我这里,我就为你提供一套开箱即用、紧密集成的解决方案。 | 与代码仓库、制品库等深度集成,遵循“约定优于配置”,易于上手。 | 使用GitLab作为代码托管平台的团队,追求快速、一体化的DevOps体验。 | |
测试方法 | 单元测试 | 隔离验证 (Isolated Verification) | 我只关心这个零件本身的功能是不是好的,不关心它和别的零件装在一起会怎么样。 | 隔离验证,快速反馈,保证代码单元的质量。 | 对代码中所有独立的函数、类、模块进行基础的功能验证。 |
集成测试 | 协作验证 (Collaborative Verification) | 我关心的是把这几个零件组装起来后,它们之间能不能正确地配合工作。 | 协作验证,确保模块间的接口和数据交互正确。 | 测试服务与数据库、服务与服务之间的交互。 | |
端到端测试 | 用户场景模拟 (User Scenario Simulation) | 我将扮演一个真实的用户,把整个系统从头到尾走一遍,确保最终交付的产品没问题。 | 用户场景模拟,验证完整的业务流程,提供最高级别的信心。 | 验证核心用户流程,如注册、登录、下单、支付等。 |