输入标题、正文或标签,查找知识。

最近文档

软件工程 / 构建发布与运行构建环境与持续集成:为什么你电脑上能跑还不够你把收藏功能交给同事,他安装以后却打不开。原来你电脑用的是一个 Node 版本,他用另一个;你本地还有没提交的文件。要交付软件,不只需要源代码,还要让别人按照明确步骤得到能运行的结果。软件工程 / 构建发布与运行部署、发布、回滚与观察:把功能交到用户手里代码已经合并,收藏按钮却没出现在网站上。或者网站更新了,点击时提示找不到数据表。交付涉及代码、配置、数据和流量,不能只用“构建成功”判断完成。本章按一次小发布看这些环节怎样配合。语言基础 / TypeScript跨语言对照TypeScript 独有能力与缺失能力清单这一章适合在学完基础后回查:某个能力是 TypeScript 自己提供的,还是来自 JavaScript、浏览器、Node 或第三方库?先把来源认清,再讨论它擅长什么、缺少什么,就不会把“语言没有内置”误解成“整个生态都做不到”。语言基础语言基础学习路线:以 TypeScript 建立可迁移的编程模型学 TypeScript 时,你会同时遇到 JavaScript 的运行规则和 TypeScript 的类型规则。先把这两件事分清,很多报错就好理解了。按顺序做完前面的练习,再读跨语言对照;对照章节用于解释差异,不要求你同时学会五门语言。后端知识 / 身份权限与安全认证、授权与多租户:登录成功只是第一步用户把地址里的订单号从 42 改成 43,居然看到了别人订单。这不是登录失效,而是资源授权缺失。后端要分别确认调用者是谁,以及这个调用者是否能对这份数据执行当前操作。
1 / 5 · 构建环境与持续集成:为什么你电脑上能跑还不够
↑↓ 浏览 Enter 打开Esc 关闭
Damnatiox
知识文件夹

常见后端架构

从请求、数据与业务边界学到后端架构、可靠性和部署实践

0 子目录6 文档
常见后端架构:分层与职责、模块化单体、领域与依赖、微服务治理、事件与读写、部署与组合

CHAPTER OVERVIEW · 章节概览

先建立职责边界,再比较不同架构解决的问题和额外成本;这些方案不是必须逐级升级的一条产品路线。

本章学习路线

箭头表示建议的学习顺序;先理解问题,再逐步进入实现与实践。

flowchart LR N0["01 分层与职责"] N1["02 模块化单体"] N2["03 领域与依赖"] N3["04 微服务治理"] N4["05 事件与读写"] N5["06 部署与组合"] N0 --> N1 --> N2 --> N3 --> N4 --> N5

按顺序学习

6
分层架构与 MVC:把请求处理和业务规则分开刚写后端时,最容易把解析参数、查数据库、算价格、发邮件全塞进一个接口函数。功能少时很快,后来换一个入口、加一个优惠规则,就开始担心改坏其他地方。分层的目的,是让变化有明确的位置。模块化单体:先把边界分清,再决定是否拆服务一个应用可以有很多模块,却只部署一个产物。用户、订单、库存各有自己的职责,通过明确接口合作,这就是模块化单体的一种常见组织方式。它不要求代码杂乱,也不意味着只能运行一个实例。六边形架构、Clean Architecture 与 DDD:相近但不同的三个问题想给下单逻辑写测试,却必须先启动数据库、消息队列和 HTTP 服务。这通常说明业务与外部技术粘得太紧。端口和适配器提供一种拆法:业务需要什么能力,就声明什么约定;具体技术在外面实现。微服务、SOA 与服务治理:拆开以后要多承担什么把库存从订单应用里抽出来,调用从函数变成 HTTP,代码看起来只是换了几行。但原来同进程的确定性已经变了:请求可能延迟、超时、重复,服务可能只坏一部分,发布版本也可能不同步。事件驱动、CQRS 与 Event Sourcing:别把三个概念混成一套订单创建后,通知、搜索和统计都想知道这件事。订单接口如果逐个等待它们,任何一个变慢都会拖住用户。可以把已发生的事实发布出去,让各方按自己的节奏处理;这就是事件驱动的一种用途。Serverless、BFF 与 Web-Queue-Worker:按不同轴线组合架构移动端需要精简首页,管理后台需要复杂报表,报表导出又可能花几分钟。这里同时涉及面向谁提供接口、耗时工作放哪里、程序怎样部署。BFF、Worker 和 Serverless 分别回答不同问题,可以组合使用。