文档章节

运维力挺PHP完爆Java

netkiller-
 netkiller-
发布于 2015/10/12 18:43
字数 1784
阅读 6830
收藏 68

运维力挺PHP完爆Java

运维力挺PHP完爆Java,同时PHP是世界上最好的语言没有之一!!!

  1. 半夜爬起来重启Tomcat有什么?

  2. 凌晨升级有没有?占用周末私人时间升级有没有?

  3. 空指针抛出异常崩溃有没有?

  4. 出现异常,一直解决不了有没有?

  5. 只能通过重启让系统苟延残喘的运行有没有?

  6. 抛出异常系统崩溃,业务暂停,被老板吊一顿有没有?运维背黑锅有没有?

  7. 程序问题老板会让开发处理,但会扣你一个运维反应不及时。

  8. 运维要派专人每天开发下载日志文件有没有?

  9. Tomcat不敢用vhost(虚拟机)有没有,使用虚拟机一个系统崩溃全死有没有?

  10. 不能使用虚机机只能多个实例运行有没有?多个实例要开一堆端口有没有?

  11. jsp页面被植入恶意代码有没有?

  12. 数据库链接池出问题有没有?

  13. 服务器监控一个晚上都在报警有没有?

  14. 配置文件搞死人有没有?

从运维角度,运维PHP项目远比Java来的轻松。 而Java网站就要非常费神,你要做好7*24小时待命,手机常开,准备随时重启,随时为开发提供日志,很多开发解决不了的问题,推给运维。 本汪目前为你还没有见过一个稳定健壮的Java程序。什么是稳定健壮的程序,能做到零错误,异常异常抛出,能够长时间稳定运行,不要半夜出事。

Web 运维

PHP Web解决方案主流有两种,一种是 Apache + mod_php 搭档,另一准是fastcgi系的php-fpm 通常跟 Nginx 搭档。

mod_php 与 php-fpm 无论哪种方案,健壮性,稳定性都远远超过Tomcat + Servlet。

理论上 Servlet 应该速度上好于 mod_php 跟 php-fpm。但实际情况并没有很突出,因为系统瓶颈不在应用服务器,而是数据库。

两个WEB解决方案都能通过负载均衡,横向扩展解决应用服务器压力问题。

mod_php 与 php-fpm 原理是一次请求,运行完毕便释放OS资源。无论程序有多烂都能正常运行完,某个功能模块出现问题,其他仍能正常使用。

Servlet 启动后全部载入内存,程序写的不够好,就容易崩溃。一崩溃就是出大事,连首页都进不去,这个矛头都会指向运维。

本地应用运维

什么是本地应用程序,说白了就是在命令行运行的应用。这些应用通常是定时运行,守护进程运行。

大部分Java开发者在Windows上使用Eclipse或者NetBeans一类的集成IDE开发,然后在IDE中编译好后交给运维,通常给过来的程序都运行有问题。

都说Java是跨平台,实际上不同平台之间还是有很大差异的。Java 实质上是夸VM,而无法做到跨平台。如果某个平台上面没有JVM,Java是无法跨过去的。

由于大部分Java开发者使用IDE开发,不涉及命令行处理,只需在IDE集成开发环境中点两个按钮Run跟Build即可,一旦离开IDE无从下手,不清楚在Linux上怎么搞。 我认为Ant,Ivy,Maven 应该是必须掌握的,时至今日很多Java开发者还没有听过Ant。

PHP开发者对linux命令的熟悉程度好于Java开发者,无用操心。Java吗至少陪着搞。

Java 不能访问底层,Jre 是运行在OS之上,守护进程实现起来需要写一个shell,实现启动,提取pid,pid写入文件,记录日志,进入后台运行,停止退出等等功能,这个脚本Java开发者通常搞不定。

PHP 能够调用 pcntl 写出完美守护进程。

本地应用程序一定会涉及多线程,PHP初级程序员培训后就可以写出质量不错的多线程程序,而Java中级软件工程师都未必写出同样质量的程序。 PHP的pcntl + pthreads + libevent 比 Java Thread + NIO 门槛低,学习成本低,上手快,更容易开发出高效稳定的应用程序。

配置复杂度

Java 不敢采用vhost模式运行,而是采用多个实例的方案,是为了降低崩溃后影响的面积,以及升级过程中停机的影响。 多实例问题来了,本可能高内聚的程序,多实例后项目之间产生了通信成本,每个项目部署后都携带大量的配置文件,配置起来十分繁琐,出现问题需要逐一排查。

这也是为什么Java项目一旦出现问题,排查耗时的原因。

安全性

很多人认为Java是编译运行,就安全了,这是大错特错的,实际情况Java网站攻击的机会与漏洞数量一点也不比PHP网站少。

被注入有没有?,被脱库有没有?

现在黑客已经很少搞破坏性攻击了,而更多的手法通常是控制肉鸡,获取有价值的数据。从外围寻找业务漏洞的方式来的更直接有效。

另外无论是Java还是PHP,很多开发人员都拒绝升级,因为每次升级都会扯出很多陈年BUG,谁都不想决解,承担责任。

很多版本厂家已经不在提供技术支持跟后续升级更新,一旦该版本出现漏洞,后果很严重,大家都心知肚明。

神马 PHP 5.2.17, JDK 1.5, Tomcat 5 都是坑,出了问题害的运维背黑锅。

总结

Java 运维应盯紧日志,Java 项目崩溃不是偶然的,是各种抛出异常积累结果。 对于Java项目,重启是万能的,通过脚本监控发现异常就重启,不要试图找出问题的根源,因为日志你永远看不懂,保证业务最重要,随后丢一份日志给开发人员,同时告知老板。

从运维角度看,使用什么语言并不重要,安全,稳定,健壮这才是王道。语言的各种不足可以从架构上,部署上,设计上弥补。

没有一种语言是全能的,每种语言在设计的时候都是针对某个领域或者倾向于解决某领域而设计的。

上面所提的很多问题并不全是语言的问题,可能是容器问题,可能是虚拟机问题。对于运维并不关心这些细节,很多人无法分清楚什么事语言,什么是编译器,什么事虚拟机,我们只看结果。


关注下面二维码是我的公众号。

© 著作权归作者所有

共有 人打赏支持
netkiller-

netkiller-

粉丝 679
博文 245
码字总数 330259
作品 10
深圳
部门经理
加载中

评论(63)

nonkr
nonkr
一看到题目,我就来看评论了
绝望生鱼片
绝望生鱼片
呵呵
lgscofield
lgscofield
呵呵呵呵呵,不是java不好,是你没回用,现在大数据这么火,你用PHP搞一个呗
xtgss007
xtgss007

引用来自“xdev”的评论

引用来自“开源中国首席骨科主任”的评论

本地应用程序一定会涉及多线程,PHP初级程序员培训后就可以写出质量不错的多线程程序
楼主你确定吗? 培训出来的人,能够真正写PHP多线程的有多少个?他们知道线程和进程的区别吗?

什么时候php可以多线程?求科普
好像有一个叫swoole的
牛奋-南京

引用来自“xiaolei123”的评论

然而为什么安卓不使用PHP而采用Java+C++作为开发语言呢?你说这么多 其实就只说了一点“PHP比Java简单”。

H
巴拉迪维
巴拉迪维
真是找骂
钱钱磊
钱钱磊
写软文 赚粉丝
纠结名字
怎么这么多不要脸的PHP推广者,为了一点点击率,什么话都敢说。我怎么不见Java布道者推广Java的时候踩PHP?
纠结名字
PHP选手惯用手段:踩着别人往高站。总是拿几个PHP大牛的代码跟Java菜鸟的代码比,典型的田忌赛马策略。不提Java,你们还能把PHP说出花吗?但是PHP跟Java是一个档次吗?
ramnight
ramnight
这是来找骂的....
OceanBase的正确使用方法

OceanBase不是设计出来的,而是在使用过程中不断进化出来的。因此,系统使用以及运维的方便性至关重要。 OceanBase的使用者是业务系统开发人员,并交由专门的OceanBase DBA来运维。为了方便业...

凌洛
05/19
0
0
Java 框架 Dropwizard 1.3.2 和 1.2.6 发布

Dropwizard 1.3.2 和 1.2.6 已发布,Dropwizard 是一个 Java 框架,用于开发易于运维,高性能的 RESTful 网络服务。它由 Yammer 开发,用于增强基于 JVM 的后端服务,集合了来自 Java 生态系...

淡漠悠然
05/07
0
1
常用的服务器上Tomcat配置

JVM 1.1. 使用 Server JRE 替代JDK。 服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。 理由:一旦服务器被控制,可以防止...

别寒
2014/08/26
0
0
Java 框架 Dropwizard 1.3.4 和 1.2.7 发布

Dropwizard 1.3.4 和 1.2.7 已发布,主要是将 Jackson 更新至 2.9.6 ,以修复 CVE-2018-12022 和 CVE-2018-12023 (#2392, #2393)。此外,Dropwizard 1.3.4 还更新了 Liquibase 3.6.1 。 Drop......

王练
06/20
0
0
云计算高级培训,Tomcat运维JVM 虚拟机常识

云计算高级培训,Tomcat运维JVM 虚拟机常识,作为了解JVM 虚拟机的开始。我们很有必要弄明白以下问题。 所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大...

长沙千锋
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法set:function(key, val, time){// 获取当前时间var date = new Date();// 将date设置为n天以后的时间var expiresDays = time;//...

小丶二
10分钟前
0
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
11分钟前
0
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
13分钟前
1
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
22分钟前
0
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部