web 服务启动模式(PHP, Node, Python, Go, Java)
十年前上大学的时候,图书馆里、网络上到处都是 LAMP 的黄金组合,Linux+Apache+MySQL+PHP;而如今十年过去了,Linux 和 MySQL 的市场依旧不错,而 Apache 和 PHP 已经渐近明 日黄花。
了解这几种项目的运行方式
当时PHP启动时需要 Apache 或者 Nginx 搭配 php-fpm 来运行;不是很了解 fpm 和 FastCGI 是什么东西,没有深究;
后来用 Node.js 启动服务,就没有类似fpm的模块,而是使用 pm2 进行服务部署,不用也可以,反正前面是Nginx,后面是Node.js ,通过HTTP反向代理来链接;
而如今用 Django 写 Python 服务,有遇到了类似 FastCGI 的东西,WSGI 协议,本地开发时使用 python manage.py runserver 来启动项目,生产环境则使用 gunicorn main.wsgi 来运行,奇怪这又是什么,明明可以直接启动,用 gunicorn 有啥用。
同时我还在写 Go 项目,go就没那 么多事儿,build生成二进制文件,直接运行即可。
还有就是国内市场份额最高的 Java 项目,并不是特别了解,早年SSH项目,用tomcat容器运行;现在主流是 Spring Boot 更推荐把容器跟项目打包在一起打成jar包,直接运行。
上面说了五种常见的语言或运行环境:PHP, Node.js, Python, Go, Java。或多或少接触过,感觉大致可以分成两类,Node.js 和 Go,内置 http 模块,独立启动运行;另一类 PHP, Python, Java 需要单独的 http 模块或容器来协助运行,或者它们本身也有简单轻量级的http服务,可以本地开发使用,不宜用在生产环境。
| Web程序 | PHP | Python | Java | Node.js | Go |
|---|---|---|---|---|---|
| web框架 | -- | Django | Spring Boot | Express/Koa | Gin/Echo |
| 本地开发 | PHP 5.4及以上版本提供了一个内置的开发服务器 | python manage.py runserver | -- | 直接启动或使用forever/pm2 来启动 | 直接启动 |
| 生产环境 | 依赖 Web 服务器Nginx + PHP-FPM | 依赖 Web 服务器 gunicorn | 基于容器 内置or外置 | 可独立运行 pm2管理进程 | 独立运行 |
| 协议 | FastCGI | WSGI,ASGI |