JAVA是否最适合企业应用开发
当我刚入行做程序员的时候,那是在01-02年,铺天盖地的都是java,j2ee,公司也使用java作为开发语言,我也就随大流加入javaer阵营。
从那时起,各种java的术语,框架,模式铺天盖地。被动接受后也理所当然的认为java就是最适合企业开发的东西。
后来一个项目使用了oracle,weblogic,吞吐量单JVM也就80req/s,还经常终止服务,挺好的服务器,业务也不复杂啊。因为并发不能满足,又扩容了设备。那时就有个想法,试试别的架构。后来把相同的逻辑在LAMP上实现了一遍,第一次写php,没什么经验,第一次配mysql也没什么经验,但结果在同一台服务器上可以做到500req/s。这件事就让我对java产生了一些疑问。
从以下几点讨论
1、开发效率:如果和C++比,java的开发效率是要好一些的,但是和php不在一个水平线上。
2、易维护性:java语言本身没有太多可以出格的用法,C++和php都可能写成一些极难理解的代码(python/ruby也一样),但是C++11和php5以后,代码的规范性还是比较好保证的。
3、运行效率和可靠性:这个要分开说
在web层上,java的thread是pthread,应用服务器一般要起线程来维护请求,nioconnector是不适合threadlocal的框架的。php使用nginx+fcgi,是按照cpu核心数启用进程的方式,不用担心线程安全问题。java共享heap,在java.util.concurrent出现之前,容器类的线程安全很低效(严重感谢DougLea,他还是collections的作者),java的类库都是java写的,很多性能n并不好。php是的哲学是在请求时获得资源,请求结束释放,同时类库都是c/c++完成的,简单高效。在php中短连接性能很好,在java联个什么都需要连接池。
在有复杂运算的场景下,php的性能确实会是一个很大问题,而java性能会好很多,但是java并不能有效管理大内存(基于mmap的directbuffer也还不理想),同时fullgc的问题对于响应及时性要求高的系统根本不能用。这部分是c/c++的天下。
所以我的理想框架顺序是
php
php+thrift+java
php+thrift+c++
总之,个人认为java是大厂联合推销软硬件的阴谋。嘿嘿