知识卡片
技术选型方法论:先勾勒理想化技术模型,再挑选符合模型的具体实现
内容
面对”服务端QPS至少要过万、未来要支撑到十万”这样的高性能需求,一种常见但容易踩坑的做法是直接从团队最熟悉的语言(PHP、Python)出发去实现,遇到性能瓶颈再见招拆招地优化。OpenResty的技术选型过程展示了一条更扎实的路径:不急于选定具体语言或框架,而是先脱离具体实现,勾勒出一个”理想化的技术模型”应该具备哪些特征——non-blocking I/O(能力上支持异步而不是傻等I/O返回)、完备的缓存机制(既要支持外部缓存也要有进程内缓存)、大部分请求能在单个进程内完成而不依赖跨进程交互(一旦涉及网络I/O和进程间交互,性能会显著下降)、同步的写代码逻辑(不让开发者感知回调和异步,更符合人类思维习惯)、站在成熟技术的肩膀上而不是选择还在频繁调整期的全新语言(降低选错技术路线的风险)、以及这个案例特有的跨平台需求(同时支持Linux和Windows,因为目标用户群体很多不具备Linux运维能力)。只有先把这些理想特征列清楚,才去比对当时市面上的候选方案,最终选中了同时满足绝大多数特征的OpenResty。这条方法论的价值在于:把”选什么技术”这个决策拆成了两步——先独立于任何具体技术,回答”我们真正需要的能力边界是什么”,再拿这份能力清单去筛选候选方案,而不是反过来先被某个熟悉或流行的技术锚定,再削足适履地论证它够用。这样即使最终没有现成方案完美匹配,这份理想模型清单本身也能成为评估任何候选方案优劣的客观标尺。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.11 OpenResty的现在和未来"节,"2.11.2 某安全公司服务端技术选型的标准"(源文件:_epub-src/OEBPS/Text/Chapter2_11_3.xhtml)
- 结论依据:原文说明"我们并没有急于去使用PHP、Python或者其他的语言来实现功能,而是先勾勒出一个理想化的技术模型",并逐条列出该模型的六项特征,最后"基于以上几点的考虑并考察了当时的一些方案,我选择了OpenResty",直接支撑本卡片结论。
- 原始内容:我们并没有急于去使用PHP、Python或者其他的语言来实现功能,而是先勾勒出一个理想化的技术模型。这个模型应该具备:nonblockingI/O……有完备的缓存机制……同步的写代码逻辑,不要让开发者感知到回调和异步……基于以上几点的考虑并考察了当时的一些方案,我选择了OpenResty。