php、java - 开发大型项目所遇到的问题,及解决方案。

34 篇文章 0 订阅
14 篇文章 0 订阅

最近在研究为什么大家喜欢用java开发大型项目,而不用php开发大型项目,归根原因如下。
java 的优点
1、java的类有更好的支持(如类的向上转型,向下转型)
2、java对数据库连接池有更好的实现
3、java数据类型的强制定义。
4、java是预先编译好后运行,jvm实际运行的是字节码,在运行的时候不需要再编译一次,运行速度极快。
5、网上有大量的类库支持
java的缺点
1、开发速度相对php来说比较慢。(个人理解)
2、每次更新后都要重新启动一次web服务(tomcat)才能完成更新。(这个问题后面我说下解决方案)

php的优点
1、语法简单,简学易懂。(上手快)
2、有大量的扩展,以及系统源码在网上可以下载(几乎涵盖各个行业)。
3、更新程序无需重启web服务,直接将源代码替换就可以了(php的运行是先编译再运行)
php的缺点
1、开发的系统与java开发的系统运行速度稍低于java。(不过还是要看系统的设计结构,如果不复杂的话都是差不多的)
2、对数据库连接池的实现不太好。(后面我会说怎么解决这个问题)
3、无向上转型和向下转型。(这是个问题,不过参考了Yii的组件机制我觉得也是很好解决的)

先说java(它排在前面就先解决它)
1、每次更新后都要重新启动一次web服务(tomcat)才能完成更新。
假设我们的系统应用都是放在服务器A上,现在需要实现服务的不停机更新。

1、创建服务器A的镜像,通过此镜像创建一台服务器B(此时服务器B具有与服务器A相同的代码,相同的系统,相同的环境,你就理解成B是A的一个复制)

2、将域名解析的IP地址切换到服务器B上,由B来临时接管当前的业务(这个步骤一般是在深夜进行,因为深夜网站的访问量很低)

3、域名解析切换到B后,我们就可以将要更新的内容上传到A了并重新启动A的tomcat

4、A更新成功后,将域名解析的IP由B切回A。然后就可以释放掉没用的B了。

图1

php
1、php 数据库连接池的实现
很多公司后期项目从php转向java,都是因为这个原因。php对数据库连接池的实现不好。
其实本质来说在开发上,我也没有很好的建议来做php的数据库的连接池,不过我们做不到,不代表服务商做不到。偶然间看到的阿里云RDS(mysql)数据库提供了短链接优化,只要开启了此选项,那么这个中间件就会为我们缓存数据库连接(也就是连接池的实现),不需要我们去再次开发数据库连接池。(这个服务是免费的)
图片2
详情查看图上标注的位置。
原理:我们连接RDS数据库不是通过RDS的IP地址去连接,而是通过rds提供的内网或外网地址去连接
举个例子:
内网连接地址:xxxxxxxxxxxxx.mysql.rds.aliyuncs.com
外网连接地址:aaaaaaaaaaaa.mysql.rds.aliyuncs.com
然后我们在php中通过这些地址连接mysql。

<?php
 $host = "xxxxxxxxxxxxx.mysql.rds.aliyuncs.com";//以内网连接地址为例
 $dbName = "xx";
 $dbUser = "用户名";
 $dbPasswd = "密码";
 $link = 'mysql:host='.$host.';dbname='.$dbName;
 $db = new PDO($this->dsn, $dbUser, $dbPasswd);
?>

这个地址所解析的地址其实是一个中间件,不会直接连上数据库,我们是通过中间件来获取的数据库连接,当我们开通短链接优化后,中间件帮我们做了数据库连接的缓存,如果不开,每次连接都直接给你一个新的数据库连接。
这就是php数据库连接池的解决方案。

自己不会做就要想办法解决这个问题,公司需要的是能解决问题、动手能力强的人。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值