文章摘要
文章探讨了使用90年代的CGI技术在当今硬件条件下处理高并发请求的可行性。作者通过一个基于Go和SQLite的CGI程序,在16线程的AMD 3700X处理器上测试,发现每天可以处理超过2亿次请求。尽管CGI技术因每次请求都需启动和终止进程而被认为效率低下,但随着计算机性能的显著提升,这种技术在高性能硬件上仍能表现出色。作者回顾了自己从90年代开始使用CGI的经历,并反思了长期以来对CGI的偏见。
文章总结
文章《Serving 200 million requests per day with a cgi-bin》探讨了在现代硬件条件下,使用90年代的CGI(通用网关接口)技术处理高并发请求的可行性。作者Jake Gold通过一个基于Go和SQLite的CGI程序,在16线程的AMD 3700X处理器上进行测试,发现CGI技术能够处理每秒2400多个请求,每天超过2亿次请求。
文章回顾了CGI技术的历史,指出在90年代,CGI通过为每个请求启动、执行和终止一个进程来工作,这种方式效率低下,因此后来出现了PHP和FastCGI等技术,以减少开销并保持代码在内存中常驻。作者本人也曾在90年代末使用CGI进行Web开发,并长期认为在网页服务中不应执行完整进程。
然而,随着计算机性能的显著提升,作者在2020年通过构建datasette-ripgrep插件,重新审视了这一观点。该插件使用Rust编写的ripgrep命令行工具进行搜索,效果良好。文章指出,CGI技术的问题部分源于当时使用的编程语言(如Perl、Python和Java)启动速度较慢,而现代语言如Go和Rust则大大提高了CGI式请求的效率。
Jake还强调,CGI式请求处理是充分利用多核CPU的好方法,因为现代服务器可能拥有多达384个CPU线程,即使是小型虚拟机也有16个CPU。由于CGI程序作为独立进程运行,它们能够很好地利用多核CPU的优势。
文章最后提出,或许我们可以像1998年那样编写Web应用程序,但使用Go和Rust等现代语言。不过,作者也明确表示,这并不意味着大多数人应该这样做,只是认为这种技术在现代条件下并非像25年前那样糟糕。
评论总结
评论内容主要围绕CGI(通用网关接口)的性能、安全性和适用性展开,观点分为支持和反对两派。
反对CGI的观点:
1. 性能差:CGI被认为非常慢,尤其是在处理高并发请求时。评论1指出,CGI在处理每个请求时都需要生成一个新进程,这导致性能低下。
- 引用1: "CGI is insanely slow and insanely insecure."
- 引用2: "That same go program can easily go over 10k reqs/sec without having to spawn a process for each incoming request."
- 安全性问题:评论7提到,CGI存在许多安全问题,这也是人们放弃使用它的原因之一。
- 引用1: "I do remember a lot of security problems."
支持CGI的观点:
1. 适用性广:评论4认为CGI在快速原型设计和客户自定义代码扩展方面仍然有用,尤其是在使用现代JIT语言时。
- 引用1: "I’ve also thought about this moreso as part of a workflow for quickly prototyping stuff."
- 引用2: "Another place this can be useful is for allowing customers to extend a local software with their own custom code."
- 性能足够:评论6指出,现代硬件条件下,CGI的性能已经足够应对高流量网站的需求。
- 引用1: "Even with things like Python, CGI is pretty fast these days."
- 引用2: "If your CGI script takes a generous 400 milliseconds of CPU to start up and your server has 64 cores, you can serve 160 requests per second."
其他相关讨论:
1. 历史背景:评论3和评论8讨论了CGI的历史及其被替代的原因,特别是modphp的出现对PHP的推动作用。
- 引用1: "the design choice of modphp as compared to mod_perl was why PHP scripts could just be dumped on the server and run fast."
- 引用2: "I wrote a brief history of CGI and the evolution away from it here."
- 技术演变:评论5提到,fork()操作在现代Linux系统中变得更高效,CGI在某些场景下仍然有效,但标准化和语言支持不足。
- 引用1: "I believe but cannot cite that fork() got a lot cheaper over the last 30 years."
- 引用2: "I have long thought that (fast)cgi is better model than proprietary 'lambda' /'faas'."
总结: CGI在性能和安全性方面存在争议,反对者认为其效率低下且不安全,而支持者则认为它在特定场景下仍然有用,且现代硬件条件下性能已足够。此外,CGI的历史背景和技术演变也是讨论的焦点。