经常有一些项目的不同模块之间是依赖很少的
或者说不同模块都仅单向依赖通用的数据库模块
想要应用在简单的修改之后不必重启就可以热重载
像是 Python 的 Flask 蓝图机制
可能不同蓝图之间并不是互相依赖的
但是开发调试过程中就需要每次修改都重载一遍应用
我知道有 debug 模式的监听 但不至于在生产环境开 debug 模式
而这样的需求在 PHP 中甚至可以直接改线上环境
期待的想法:
1
kran 2022-05-15 07:39:23 +08:00 via Android
我也有几乎一样的需求,现在用 java+nashorn 解决的:
1 ,很容易,有一个项目甚至是一个接口对应一个 js 文件 2 ,非 java 代码修改,不用重启 3 ,模块间通讯使用 guava asynceventbus 4 ,数据访问在 java ,连接池常驻 5 ,emmm 。。。fpm 机制并非如此,前后端分离也和并发机制和反代没啥关系,可能我没理解。 |
2
eason1874 2022-05-15 07:48:05 +08:00
各模块互相独立,这不就是微服务吗?做成微服务,不仅可以分开启停,分别用不同语言开发都行
热加载热部署,大部分语言都行,当然实现难度不一样,PHP 和 Nodejs 算是最简单的,Java 那些也行,前不久才看到美团一篇文章介绍他们的 Java 热部署方案 |
3
cyndihuifei 2022-05-15 08:38:46 +08:00
那还是 php 吧
|
4
sutra 2022-05-15 08:48:06 +08:00
这好像不是语言的问题,而是工程问题。
|
5
agdhole 2022-05-15 09:50:56 +08:00
PHP 这个模式就是导致它框架性能低下的原因之一吧
|
6
GeruzoniAnsasu 2022-05-15 10:35:18 +08:00
前端选手们: ?
|
7
westoy 2022-05-15 11:01:18 +08:00
"我知道有 debug 模式的监听 但不至于在生产环境开 debug 模式"
php 的热修改保证不了整个项目原子性的, 正经严肃一点的项目也是需要通过切换后端的方式修改的 |
8
wonderfulcxm 2022-05-15 11:19:28 +08:00 via iPhone
因为 PHP 每次请求都要重新加载一遍…
|
9
westoy 2022-05-15 11:30:14 +08:00 1
重新加载不至于, 有 opcache 的, 中古时代 apc 、eaccelerator 、xcache 这些都是正经项目的标配
但是认为 php 是热修改的绝对是邪道, 那是虚拟主机时代妥协的办法, 更新期间出错就出错吧, 也是针对不严肃的项目的, 就算 php4 时代, 大公司自己部署 php 的哪个不是用 svn 版本挂软链接重启后端的方式去做的, 搞在线改文件那种弄法出到问题要被点天灯的 甚至 Zend 搞的 phpcloud, 修改代码 push 上去, 直接上去刷新, 会提示你正在重启项目的, 应该没人比 Zend 更了解 PHP 吧........ |
10
Licsber OP @kran #1 看了看这个框架 确实你说的第一点非常符合我的需求
我描述的大概也就是这个意思 有时候一个接口就是一个项目 或者说项目里的一个接口完全可以独立出来部署 我觉得这样简单的程序甚至不配有入口点 交给 nginx 啥的来管理都符合我心意 现在就是觉得麻烦 比如 python 开发 我是每个小项目都开一个 screen 然后 gunicorn run 手动找服务器上一个还没占用的端口 然后配置 traefik 反向代理 给这个接口套 tls 支持 https 访问 然后面临修改的时候就 screen -r 过去 同步代码 ctrl-c 再重新 run 我觉得更不值得为了这样的需求去每个小项目都 build 一个 docker 镜像 也尝试了自动构建方案 采用 gitea + drone 加 k3s 自动部署 这一套还是太麻烦 太笨重 我好想要 php 那样的体验 + python 带的库 看到 py-script 好像不是很符合我的需求 所以面对甚至单文件就可以独立成一个接口的需求 python 有方便的实现么 我没有提及 go 的原因是 go 不是动态语言 所以更倾向于 python 能够有这样的框架 |
11
Licsber OP @eason1874 #2 确实很像微服务 可能我在这方面没啥研究 总觉得现有方案还是太复杂了
lnmp 那一套实在是太方便了 单接口像文件一样部署 也不用手动指定一个宿主机上没用的端口 只有 nginx 需要一个 443 端口 放在下面的所有 php 文件就可以用路径来方便访问 |
12
Licsber OP @cyndihuifei #3 PHP 第三方库还是太少了 个人项目我现在基本都是 python 用顺手了
@sutra #4 这确实不是语言问题 应该算是我的问题 但我不太相信大家没有碰到相似的问题 @agdhole #5 确实 php 效率低下 但是我还是眼馋它的方便啊 @GeruzoniAnsasu #6 前端确实也非常方便 我也在考虑朝这方面习惯习惯 @westoy #7 php 热修改确实不是最佳实践 但是确实想要类似的平滑热更新功能 k8s 那套确实可以 几乎实现了全自动了 就是开始的那一套配置麻烦 |
13
shuimugan 2022-05-15 16:07:06 +08:00 via Android
看起来你的需求和 https://unit.nginx.org/ 解决的有些符合
|
14
Licsber OP @shuimugan #13 看了看 nginx unit 确实挺像 可以考虑试试 不知道 traefik 有没有对标的产品
|
15
onion83 2022-05-15 17:01:37 +08:00 via iPhone
天天吹 php 慢的人,请说一下究竟慢在什么地方?等你们花里胡哨一阵操作下来,phper 早已经登上服务器 vim 整完下班了…
|
16
Aloento 2022-05-15 18:45:50 +08:00
你是否在找:.NET
DotNet 热重载在 Prod 模式也能开 但是最好的方案是做成插件然后直接动态替换整个程序集 |
17
Aloento 2022-05-15 18:48:43 +08:00
DotNet 对于小修小改可以直接替换对应的内存堆栈
大型修改就直接重载程序集即可 连 VM 都不用重开就能完成 最好的例子就是 Orchard Core |
18
msg7086 2022-05-16 10:41:49 +08:00
@onion83 然后 vim 到一半一笔金融交易出错,莫名其妙搞出个几万块钱的生产事故?手动狗头
不是所有人都在搞小作坊式生产的。 正规的企业,正规的项目,至少要走完 CI/CD 让自动化系统来部署。 这不管是 Java 项目还是 PHP 项目还是基于 docker 的项目都是如此。 当然,因为有了自动化系统的部署,所以根本不需要花里胡哨的操作,按下合并分支按钮以后,看着系统把整套东西自动测试完部署上去就行了。 另外,很多其他语言都可以降级运行在热加载模式下,运行速度会变成和 PHP 一样慢(每次刷新页面都要检查文件是否更新),但是同样也能享受到 vim 改改就自动生效的效果。 |