为什么总有人喜欢用php构建业务支撑?

darkdada 发布于 2016/03/23 20:36
阅读 2K+
收藏 0
PHP

等了很久,看到了这样的错误,体验了一把whmcs这个用php构建的著名的商业的业务系统。

没有数据库连接池的一门脚本,没有完整的锁/CAS和原子量/信号灯等的一门脚本,搞搞页面输出也就罢了,为什么总有人喜欢用这玩意构建业务复杂或者业务严谨的系统?

什么是web pages什么是application system? web都是它们的表现形式,但真的一样吗?

全把压力打到了后端的数据库上,不停的随着流量增加而创建db session也不断的销毁session,机器的性能就是被这样缺乏设计的逻辑来肆意浪费的么?

加载中
2
老陌
老陌

语言之争有什么意义?真正的重点是人,好吧!

和合作公司做Java开发的对接业务,我问他们,能使用URL解析类吗?答:不能,怕有风险。又问能用正则表达式匹配吗?答:不能,怕有风险。有个毛风险啊,我简直不明白!最后,处理个URL用字符串截取,出了问题来说我URL参数顺序不对,能被郁闷死。

我们这边峰值10万QPS的业务,纯PHP照样安安稳稳运行着。语言本身确实有不少缺陷,Java也不是完美的吧,所以,关键在而不是计算机语言

梅开源
梅开源
基本同意。and, sql 问题往往是sql导致。 来几次全表查询,什么数据库connection也半天舍不得关闭了。
1
乌龟壳
乌龟壳

绝对唯一的序号生成器和try lock啥的,不给用系统多进程常用的API,只能用多线程API,PHP确实不合适。

但这和网页开发没关系,唯一序号靠数据库,因为就算java要分布式唯一序号也需要数据库等一个独立的序号分配服务。至于try lock只有多线程才需要,web开发必须多线程是很片面的说法。

php就是专门做网站的脚本语言,做其它事情有点别扭是真的,但是做网站本身没什么问题。

乌龟壳
乌龟壳
回复 @darkdada : 那么晚还不睡啊,886
darkdada
darkdada
回复 @乌龟壳 : You're right. 看来你是客观冷静的。
乌龟壳
乌龟壳
回复 @darkdada : 我只针对你说的php不适合做可靠的网站系统,至于你和eechen的赌气不关我事,哈哈。
darkdada
darkdada
刚才提给eechen的2个问题,都是在druid这样的连接池中大量用到的2个基础方法,因此才问他要实现方法,他避而不谈的态度大家也看到了。
0
IdleMan
IdleMan
坐等 两大高手前来回答
0
朱__朱
朱__朱
貌似你说的问题与php无关啊,最多是你试用的这个什么whmcs系统写的不行吧。
0
乌龟壳
乌龟壳

只能说做这个系统的没做好,这事情和语言无关。

你提到的锁等一系列东西和语言无关,这就不细说了。

php以前可能要每个请求都建立数据库连接,但这几年php-fpm已经成熟,基本成为php部署网站的标准,这就是连接池。

至于数据的严谨性,责任全在数据库,仍然和语言无关。

0
darkdada
darkdada

引用来自“乌龟壳”的评论

只能说做这个系统的没做好,这事情和语言无关。

你提到的锁等一系列东西和语言无关,这就不细说了。

php以前可能要每个请求都建立数据库连接,但这几年php-fpm已经成熟,基本成为php部署网站的标准,这就是连接池。

至于数据的严谨性,责任全在数据库,仍然和语言无关。

构建一套连接池/对象池或者其它池化的技术,没有锁怎么可能?没有CAS原子怎么可能?

你要是能真正全面的认识到连接池的意义,便不会这么说了。

乌龟壳
乌龟壳
回复 @darkdada : php是多进程模型的,java是多线程的,各有优势,在web开发方面都是可行的。
乌龟壳
乌龟壳
回复 @darkdada : php-fpm和druid的机制是不一样的,但是都能实现池的效果。php-fpm把每一个php进程都和一个数据库连接作了绑定,不会有切换操作。druid是针对java的多线程环境,建造了一个数据库的连接对象池。网页处理线程和druid没有一对一的绑定关系。
darkdada
darkdada
回复 @乌龟壳 : 看https://github.com/alibaba/druid 请评估一下用php实现druid所有功能的可行性?
乌龟壳
乌龟壳
回复 @darkdada : 抛开PHP是脚本还是语言,你问题里提到的那几点明白了没?php有连接池php-fpm,不会不停连接关闭,这样确实很2。至于锁和业务严谨性,主要还是数据库问题,就算你说抛开数据库的严谨性,php仍然能调用系统底层API实现锁。
darkdada
darkdada
回复 @乌龟壳 : 故而言之“脚本”,不可称之为“语言”。
下一页
0
darkdada
darkdada

引用来自“朱__朱”的评论

貌似你说的问题与php无关啊,最多是你试用的这个什么whmcs系统写的不行吧。

这是个商业“系统”,要卖钱的,人家的介绍是这么写的,WHMCS is the leading web hosting automation platform.  要论php水平的登峰造极程度,人家商业公司不会差到那里吧?


0
阿宅plus

whmcs只是IDC业务客户服务支撑系统而已

算不上什么核心,用PHP开发有什么奇怪的,本来就是网页啊

darkdada
darkdada
回复 @Admstor : 看来你是idc行家,不过这个问题上只是讨论在有连接池约束保护后,就不会有过多压力打到数据库,而不是说挂了之后会有什么影响后果。如果php能做到这点,便不会有这些讨论,本质上这是语言无关的,但是php又难以支撑这些需求点。
阿宅plus
回复 @darkdada : 当然了,如果在此基础上深入开发,然后实现了很多敏感操作的自助/自动操作,也依旧只是不变一些操作,但对于稳定的客户而言不会有影响.如果你说你的自助/自动操作导致了VM/物理机的实际损坏,那是你开发太过耦合,还是和语言没什么关系.
阿宅plus
回复 @darkdada : 因为我就是做IDC的,所以这个系统我也有所了解.IDC的核心资源跟这系统都完全不相干,我内部网络的配置,底层IAAS架构,存储都不是靠这个来实现,这东西就是一个客服+账单罢了,就算坏掉了也只是客户当前不能进行一些配置变更,但是实际上跑的都是正常的.
darkdada
darkdada
分配和管理机器资源,管理账单计算,这不算核心那算什么? 无论核不核心,总要保持点健壮性吧,动不动压力深入打垮数据库,且问题还可追溯到这门语言的设计模型上,倘如可以构建一个严谨的连接池像druid一样,起码超过maxActive的请求是不可能打到数据库上的,这就是语言完备带来的基础环境上的优势。
0
geminiblue
geminiblue

看见个表像就在哪喊,我怎么看是前面是php表现层,后面一堆java api的模式,然后后端挂了把错误扔到前端了。。。。

darkdada
darkdada
洞察力好丰富啊,我服了。。。
返回顶部
顶部