系统设计基本功:理解语义

欢迎来到啾啾的博客。
记录学习点滴。分享工作思考和实用技巧,偶尔也分享一些杂谈。
有很多很多不足的地方,欢迎评论交流,感谢您的阅读和评论。

目录

  • 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) 我将扮演一个真实的用户,把整个系统从头到尾走一遍,确保最终交付的产品没问题。 用户场景模拟,验证完整的业务流程,提供最高级别的信心。 验证核心用户流程,如注册、登录、下单、支付等。

你可能感兴趣的:(#,系统设计,语义,后端)