xiaohack's Blog - 微服务架构
type: channel
link: https://blog.xiaohack.org/tag/9be36d76/
items: 是微服务架构不香还是云不香？
items: AI 时代如何证明个人项目的真实性？
items: 艾体宝方案 | API 已经快了，系统为什么还是慢？
items: 如何在高并发场景下保持99.99%文档转换精度

是微服务架构不香还是云不香？
type: item
date: 2026-01-24T18:17:57+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…

AI 时代如何证明个人项目的真实性？
type: item
date: 2026-01-23T11:53:52+08:00
description: 背景前天朋友提供一个内推岗，这个公司蛮不错的，规模大待遇好还不是外包也不是有争议的 web3 ，他在里面工作，说招好几个月了还是没人去。我有个个人微服务项目准备拿去应聘，然而推荐后说没办法还是得垂直经验，因为现在有 AI 生成代码很简单，个人项目很容易被认为是 AI 代工。项目介绍项目原先是通过网课教程做的但不符合生产要求被我全部推翻重写，原来是 go micro 2.9.1 现在是 go micro 4 ，所有服务都是领域驱动，改过框架源码，链路追踪、监控、日志系统、架构等全部一人完成，期间技术栈做了很大的调整，一共迭代 6 个版本，目前是 6.1 ，耗时 3 个月，至今仍在迭代，有部分自编组件。包含压测报告、决策记录、变更日志和自述文件（含项目介绍及部署指南），用 Github Project 管理项目，2 周一版，部署在阿里云 K8S 集群上，使用超过 15 个组件，还用到 LUA 脚本。服务是模拟支付回调扣减库存过程，每个服务 2 个副本，单个 Pod 上限为单核 CPU + 512M 内存，压测 1596Qps ，P99 为 84ms 。不存在 AI 代工我开发过程中主要是用 AI 推荐轻量级工具并分析其难度，代码大部分还是自己写，因为 go micro 做 EDA 架构的案例本身就少得可怜直接导致 AI 生成的代码不靠谱，最后还是被我的方案优雅地取代。开发过程中每个版本都是巨大的挑战。请问各位大佬如何证明个人项目不是 AI 代工以实现成功转型 Golang 开发？

艾体宝方案 | API 已经快了，系统为什么还是慢？
type: item
date: 2026-01-21T10:16:24+08:00
description: 在不少后端团队里，都发生过类似的场景：Redis 上线后，监控显示 API 核心查询耗时下降了 80%，但用户依旧抱怨接口“卡”“慢”“不稳定”。于是问题开始在群里反复出现：是 Redis 集群不够大？是云厂商网络抖动？是流量高峰超出预期？直到真正拆开一次请求的完整生命周期，才会意识到一个事实：Redis 可能已经做到极致了，只是你把它用在了最不应当的位置。一个被反复误解的事实必须先说清楚一句话：Redis 并不能让一个设计本身就臃肿的 API 变快，它只会让问题暴露得更明显。在微服务架构下，Redis 几乎成了“性能优化”的默认答案。只要接口慢，第一反应往往是：“加一层缓存”。但在真实生产环境中，API 的执行路径通常远比你想象得复杂。客户端 ↓ API 网关 ↓ 鉴权 / 鉴权扩展 ↓ 参数校验 / 特性开关 ↓ 缓存查询 ↓（未命中） 数据库查询 → 关联查询 → ORM 映射 ↓ DTO 转换 / 序列化 ↓ 日志 / 监控 / Trace ↓ 响应返回在这条链路里，Redis 只是其中极短的一段。如果你把注意力全部放在“Redis 查得够不够快”，那基本已经跑偏了。Redis 并不是瓶颈，但常常被用来背锅我们曾协助排查过一个典型系统：一个对外提供实时报表查询的金融 API，客户团队坚信性能问题出在 Redis。他们的监控面板显示：API 平均响应时间：380–450 ms高峰期 P95 甚至逼近 700 ms但在引入分段 Trace 后，结果令人意外：Redis GET 操作：稳定在 2–4 ms超过 85% 的耗时，发生在：鉴权拦截器参数反序列化ORM 对象构建JSON 序列化与日志写入结论很直接：缓存很快，API 还是慢。这也是许多团队真正“顿悟”的时刻——Redis 没有失效，只是你让它介入得太晚了。为什么“加了 Redis”却几乎没加速？归纳下来，问题通常集中在三个方面。缓存命中发生得太晚很多系统在设计时，把缓存当作“数据库前的一层挡板”，而不是请求生命周期的一部分。结果是：请求已经完成了鉴权、校验、上下文构建日志、Trace 组件已经初始化各种中间对象已经创建此时即便 Redis 命中，绝大部分 CPU 和延迟成本已经付出。缓存键设计服务于“数据模型”，而非“访问模式”另一个常见错误，是缓存整个领域对象，甚至直接缓存 ORM 实体。后果通常是：键粒度过粗访问模式稍有变化就无法复用命中率长期徘徊在 50% 以下在这种情况下，Redis 更像是一个昂贵的、不稳定的旁路系统。冷启动与高峰期未命中被严重低估很多团队只关注“平均命中率”，却忽略了两个危险时刻：应用刚启动流量突然放大在这些时刻，大量并发请求同时穿透缓存，数据库和后端逻辑被瞬间放大执行，抖动也由此产生。让 Redis 真正“拉开差距”的设计方式当你接受 Redis 不是万能解药之后，优化路径反而变得清晰了。第一原则：缓存要尽可能早如果某个请求的数据已经在缓存中，就不应该再经历完整的业务管道。理想状态是：命中缓存直接返回最终响应绕过数据库、对象映射、序列化等步骤第二原则：缓存的是“可直接返回的结果”与其缓存领域对象，不如缓存“已经准备好返回给客户端的内容”。String key = "user:profile:resp:" + userId; String cached = redis.get(key);if (cached != null) {return cached;}// 未命中，走完整流程 User user = userRepository.findById(userId); String responseJson = responseMapper.toJson(user);// 合理 TTL，例如 5 分钟 redis.setex(key, 300, responseJson);return responseJson;这里 Redis 的角色已经发生变化：它不再是“数据缓存”，而是响应加速。第三原则：预热比你想象得重要在优化后，我们为以下场景引入了缓存预热：服务启动核心用户或高频接口已知的高峰前时间段这一步往往可以显著降低首批请求的抖动风险。数据不会说谎在重构缓存策略后，性能变化非常直观：API 平均响应时间从约 410 ms 降至 70–90 ms数据库查询量下降超过 65%缓存命中率稳定在 90% 以上更重要的是：延迟开始变得可预测，而不是偶发性飙升。值得记住的几条经验缓存优化首先是架构问题，而不是参数问题：Redis 再快，也无法拯救臃肿的请求链路。一次缓存未命中的代价，远高于多数人的直觉：它带来的不是一次查询，而是一整条后端路径的放大执行。不要只盯着 Redis 的指标：真正的瓶颈，往往藏在 Redis 之前或之后。结语：Redis …

是微服务架构不香还是云不香？
type: item
date: 2026-01-19T16:17:18+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…

如何在高并发场景下保持99.99%文档转换精度
type: item
date: 2026-01-18T12:13:56+08:00
description: 在当今数字化工作流中，高并发文件转档处理已成为金融、法律、企业服务等众多行业的常态。系统需要在瞬间处理海量文件请求，而保持接近完美的转换精度则是保障业务连续性与数据可靠性的核心挑战。这不仅关乎单一文件的准确度，更涉及在持续高压下，系统整体表现的稳定性与一致性。本文将深入探讨实现这一目标的技术架构与策略，并以ComPDF的转档SDK V3.0为例，解析其如何通过技术创新应对这一挑战。一、高精度与高并发的核心矛盾与解决思路在高并发场景下，维持高精度主要面临三大矛盾：1. 资源竞争与处理质量：大量并发任务争夺计算资源（CPU、内存），可能导致单个任务处理不充分，进而影响布局分析、字体还原等关键环节的精度。2. 处理速度与深度分析的平衡：追求极速转换可能迫使简化分析算法，牺牲对复杂表格、混合版式的深度识别。3. 系统稳定性与异常处理：在高负载下，系统需保持健壮，任何微服务宕机或性能波动都可能导致批量任务失败或精度下降。解决这些矛盾，需要从系统架构、核心算法和工程实践三个层面协同设计。二、架构基石：为高并发高精度而生的系统设计1. 微服务化与弹性伸缩： * 将文档转换流程拆分为独立的微服务，如文件解析、布局分析、元素识别（AI模型）、格式渲染、输出合成等。这允许对每个环节进行独立扩容。 * 当并发请求激增时，通过Kubernetes等编排工具，弹性伸缩负责AI推理和渲染等计算密集型服务的实例数，确保每个任务都能获得足够的计算资源以维持精度，避免因排队过长或资源不足导致处理质量下降。2. 智能队列与优先级调度： * 并非所有文档都同等复杂。系统可集成智能预分析模块，根据文档页数、内容密度、包含元素（如大量表格、图片）初步判断处理难度。 * 据此实施差异化队列调度：将简单文档分配至快速通道，复杂文档分配至拥有更强算力保障的精确处理通道。这种资源精细化调度是保证整体吞吐量与高精度并存的关键。3. 状态持久化与断点续转： * 在高并发环境下，任何节点故障都可能发生。必须将每个转换任务的中间状态和进度持久化到可靠的分布式存储中。 * 一旦某个处理节点失败，任务能被迅速重新调度至其他节点，并从断点处继续，避免整个文档转换重头开始，这对处理到一半的大型文件至关重要，既节省资源，也保障了任务完成的可靠性。三、精度引擎：ComPDF转档SDK V3.0的技术实践ComPDF的转档SDK V3.0的设计体现了上述架构思想，并通过多项核心技术，将高并发下的高精度转化为了可实现的指标。1. AI驱动的混合布局分析技术这是其实现高精度的核心。传统转换SDK往往只能在“流式布局”（利于编辑，但易失真）和“固定布局”（保持原貌，但编辑困难）间二选一。技术突破：V3.0版本集成了PP-YOLOE AI模型，并升级了布局分析算法，创新性地采用了智能混合布局技术。它能动态分析文档不同区域的特征，智能结合流式与固定布局的优势。精度影响：此举能99%准确还原多栏排版、图文混排、目录等复杂结构，同时保持内容的自然阅读顺序。在高并发时，该AI模型以服务化部署，通过弹性伸缩保障每个文档的布局分析深度，这是维持高精度的算法基础。2. 像素级元素识别与恢复精度体现在细节。V3.0的AI模型经过海量文档训练，能识别超过30种文档元素类型。关键改进：通过像素级精准分析，有效防止了将页眉、页脚内容误判为正文，同时将段落间距和行高的还原准确率提升了80%。高并发适配：这种精细化的识别能力，确保系统即使在批量处理时，也不会因为“赶工”而忽略细节。统一的AI模型服务确保了处理标准的一致性，无论第1个还是第1000个并发任务，都能获得相同的识别精度。3. 企业级性能与批量处理优化高精度离不开性能支撑。V3.0通过重构数据结构和转换流水线，实现了效率飞跃。性能数据：支持数千页文档秒级批量转换，平均处理速度达到每页0.5–0.8秒，且整体处理速度比以往提升50%。高并发意义：极高的单任务处理速度，直接降低了系统在单位时间内的平均负载，为应对并发洪峰留下了更多资源余量。快速处理也意味着更短的队列等待时间，减少了任务因排队超时或资源调度延迟而出错的风险。四、超越SDK：构建全链路保障体系仅依靠一个强大的SDK并不足够。在生产环境中，围绕它构建全链路保障体系至关重要：1. 渐进式负载测试与降级策略： * 在上线前，必须进行远高于预估峰值的负载测试，观察在不同压力下转换精度的变化曲线，找到性能拐点。 * 制定清晰的服务降级策略。例如，当系统负载超过阈值80%时，可自动暂时关闭对“高保真图片嵌入”等非核心但耗资源功能的支持，优先保障正文、表格等核心元素的转换精度，实现“精度有损，服务可用”。2. 多维度的监控与告警： * 监控指标不应仅有CPU、内存和QPS（每秒查询率），更需包含业务精度指标。例如，通过抽样对比…

是微服务架构不香还是云不香？
type: item
date: 2026-01-14T09:22:42+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…

是微服务架构不香还是云不香？
type: item
date: 2026-01-09T22:08:47+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…

是微服务架构不香还是云不香？
type: item
date: 2026-01-05T23:41:59+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…

是微服务架构不香还是云不香？
type: item
date: 2026-01-04T14:20:32+08:00
description: 这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务，成本降低90%》，副标题：“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”，有人把这篇文章在五一期间转到了reddit 和 hacker news 上，在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”，还是Amazon干的，这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》，继续抨击微服务架构，于是，瞬间引爆技术圈，登上技术圈热搜。今天上午有好几个朋友在微信里转了三篇文章给我，如下所示： 《微服务是不是个蠢主意？》 《单体回归？亚马逊放弃用于视频监控的微服务 》 《从微服务转为单体架构、成本降低 90%，亚马逊内部案例引发轰动》 看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇，你还真当 Prime Video 就是 Amazon 的全部么？然后，再看看这些文章后面的跟风评论，我觉得有 80%的人只看标题，而且是连原文都不看的。所以，我想我得写篇文章了……原文解读要认清这个问题首先是要认认真真读一读原文，Amazon Prime Video 技术团队的这篇文章并不难读，也没有太多的技术细节，但核心意思如下：1）这个系统是一个监控系统，用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果（比如：视频损坏或是音频不同步等问题），这个监控主要是处理视频帧，所以，他们有一个微服务主要是用来把视频拆分成帧，并临时存在 S3 上，就是下图中的 Media Conversion 服务。2）为了快速搭建系统，Prime Video团队使用了Serverless 架构，也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关，Step Function 用来做监控（探测器），有问题后，就发 SNS 上，Step Function 从 S3 获取 Media Conversion 的数据，然后把运行结果再汇总给一个后置的 Lambda ，并存在 S3 上。整个架构看上去非常简单 ，一点也不复杂，而且使用了 Serverless 的架构，一点服务器的影子都看不见。实话实说，这样的开发不香吗？我觉得很香啊，方便快捷，完全不理那些无聊的基础设施，直接把代码转成服务，然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了，哪里不好了？！但是他们遇到了一个比较大的问题，就是 AWS Step Function 的伸缩问题，从文章中我看到了两个问题（注意前方高能）： 需要很多很多的并发的 AWS Step Function ，于是达到了帐户的 hard limit。 AWS Step Function 按状态转换收费，所以，贵得受不了了。 注意，这里有两个关键点：1）帐户对 Step Function 有限制，2）Step Function 太贵了用不起。然后，Prime Video 的团队开始解决问题，下面是解决的手段：1） 把 Media Conversion 和 Step Function 全部写在一个程序里，Media Conversion 跟 Step Function 里的东西通过内存通信，不再走S3了。结果汇总到一个线程中，然后写到 S3.2）把上面这个单体架构进行分布式部署，还是用之前的 AWS Lambda 来做入门调度。EC2 的水平扩展没有限制，而且你想买多少 CPU/MEM 的机器由你说了算，而这些视频转码，监控分析的功能感觉就不复杂，本来就应该写在一起，这么做不更香吗？当然更香，比前面的 Serverless 的确更香，因为如下的几个原因： 不再受 Step Function 的限制了，技术在自己手里，有更大的自由度。 没有昂贵的 Step Function 云成本的确变得更低了，如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress，你把 S3 换成 MinIO，你把 SNS 换成 Kafka，你的成本 还能再低。 独立思考好了，原文解读完了，你有自己的独立思考了吗？下面是我的独立思考，供你参考：1）AWS 的 Serverless 也好， 微服务也好，单体也好，在合适的场景也都很香。这就跟汽车一样，跑车，货车，越野车各有各的场景，你用跑车拉货，还是用货车泡妞都不是一个很好的决定。2）这篇文章中的这个例子中的业…