对于许多创业公司,要做网站和手机App, 到底选择Java还是PHP,是个很纠结的事情.
作为一个有10多年经验的工程师,谈谈个人看法.
开门见山,先说结论.

一 结论

  1. PHP,Java各有优劣,不要把问题想的太重大了,不妨举重若轻,任选一个都好.
  2. 主要看团队成员熟悉哪个语言,哪个语言能快速出产品,并快速迭代更新.

二 详细比较

PHP的优点

  1. 简单, 开发效率高,是Java两倍以上,能快速出产品,并快速迭代更新.
  2. 优化简单,多数企业很容易获取较好的性能

PHP的缺点

  1. 由于PHP-FPM IO 阻塞的特点,一个进程同时只能处理一个请求,像京东,小米这样的抢购情况下,大并发处理能力较差.
  2. 现在大学生学php的人少,不好招人.

Java的优点

  1. 由于Tomcat非阻塞的特点,一个线程可同时处理多个请求,大并发性能较好
  2. 大学生学Java的人多,好招人.

Java的缺点

  1. 配置复杂,开发效率较PHP低
  2. 很占内存,性能优化复杂,如果优化不好,性能反而不及PHP

三 高并发网站的架构设计

其实许多初创公司的访问量,远远没有达到PHP或是JAVA撑不住的地步.

这里假设公司面临像小米或是12306这样的大并发访问.

大并发情况下,IO阻塞与非阻塞,性能差距是很大的.
查看一下Nginx, tomcat, php-fpm 的源码,我们发现,Nginx, tomcat使用的是非阻塞多路复用机制(对于linux, 底层就是epoll),一个线程可同时处理多个请求,而php-fpm是阻塞机制,一个进程同时只能处理一个请求.
(php-fpm 有个配置可以使用epoll,只适用于master管理进程,对应worker进程还是阻塞的)
处理大并发的能力排名nginx第一,tomcat第二,php-fpm第三.

对于像12306这样的大并发情况,无论tomcat还是php-fpm都是瓶颈.
只有在nginx上做文章.
顺便说下对于底层的IO多路复用,FreeBSD 的kqueue 性能要优于Linux 的epoll.

以Nginx为中心的大并发架构

首先,Nginx负载均衡是必需的.这里主要讲单台服务器的架构优化设计.

我们想,如果java和php 成为瓶颈,能绕过这个瓶颈就好.
回答是肯定的.
我们可以通过nginx插件直接访问redis缓存,或是rabbitmq消息队列里,这就是OpenResty项目提供的功能
OpenResty 是一款基于 NGINX 和 LuaJIT 的 Web 平台, 可以使用简单的Lua语言访问后端redis, rabbitmq,mysql 等服务,充分利用Nginx的非阻塞大并发处理能力.
通过OpenResty,可直接在redis读取缓存,而订单这样的操作,可以写到rabbitmq消息队列里.
这样大并发都有nginx来处理,php 或是java 只是作为工具在后端更新下缓存和处理消息队列,这样java和php 成为不再成为瓶颈,这也是开篇时,我说选择php 或是java不重要的原因.

如果我们使用JWT认证用户,这个用户检查的工作也可由nginx来处理.
JWT认证用户设计,参看:
http://www.jianshu.com/p/85d86877a1a6
Nginx JWT 认证模块,参看:
https://github.com/auth0/nginx-jwt

随着公司规模的扩大,对于消息推送,需要同时大量TCP长连接的情况,这时候golang语言开始登场.

总结

对应创业公司,初期消息推送可用第三方服务,而对于以Nginx为中心的大并发架构方案对应很多初创公司也还用不到,真需要时,用户规模已经很大了.
所以说选择Java和PHP 真的不是很关键的问题,关键的问题是团队熟悉哪个语言.

转载于:https://www.cnblogs.com/yixiaogo/p/11135114.html

Java or PHP? 谈谈高并发网站的技术选型和架构设计相关推荐

  1. 浅谈千万级PV/IP规模高性能高并发网站架构

    原创作者:老男孩linux实战运维培训机构 老男孩 QQ:31333741    说明:几个月前老男孩发过一次类似的文章,本次为了参加一个朋友邀请的活动,稍微完善了一下,欢迎各位同仁一起交流网站架构技 ...

  2. 浅谈千万级高性能高并发网站架构

    浅谈千万级PV/IP规模高性能高并发网站架构 高并发访问的核心原则其实就一句话"把所有的用户访问请求都尽量往前推". 如果把来访用户比作来犯的"敌人",我们一定 ...

  3. 高并发网站架构与正态分布的前生今世

    高并发网站架构 什么是服务器? 不就是提供"付费"."免费"服务的高档电脑嘛! 你提到服务? 存储一个图片,读取一篇文字,观看一个动作片,计算一个账户存款,- ...

  4. 浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...

  5. Java开发大型互联网高并发架构实战之原理概念分析

    JAVA大飞哥 2019-06-16 21:07:08 引言 高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发.又如贴吧的爆吧,就是恶意的高并发请求, ...

  6. 千万级PV规模高性能高并发网站架构详解

    1.缓存(expires) 2.deflate压缩 3.Apache/nginx静态服务器提供html页面内容 4.CDN/cache缓存静态内容如:html.jpg.gif.js等 5.MYSQL数 ...

  7. Java多线程学习处理高并发问题

    在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...

  8. 实战经验:MySQL 构建高并发网站性能优化

    2019独角兽企业重金招聘Python工程师标准>>> 最近在优化一个比较大型的高并发网站,收益颇多,经验分享给大家. 1. 表字段分割.经常访问的表.行数量大的表,切记保持最少长度 ...

  9. 谈谈高并发秒拍系统架构设计

    缓冲系统结构 今天谈谈电商秒杀抢购或者高并发集中访问情况下,如何设计稳定高效的缓冲系统.常用的做法是采取逻辑分离,将秒杀功能分化为不同的逻辑进行设计,降低耦合度同时增加缓冲队列降低访问压力. 可以将秒 ...

  10. oom 如何避免 高并发_【面试题】如何设计一个高并发系统?

    面试题 如何设计一个高并发系统? 原文链接:https://github.com/doocs/advanced-java/blob/master/docs/high-concurrency/high- ...

最新文章

  1. image.helper.php,image.php
  2. 小菜鸡进阶之路_Second week之元组、列表、集合、字典对比.
  3. AWS在深圳成立大中华区第二个物联网实验室
  4. macOS Big Sur正式版发布!Big Sur安装失败?更新时卡住了怎么办?
  5. Python文件的操作2
  6. cssrem转换工具_微信小程序开发-rem转换rpx小工具
  7. 管理感悟:学会推论及验证
  8. Maxthon3资源嗅探器给力 MP3下载地址得来全不费功夫!
  9. Windows原版系统下载地址列表
  10. 解决双击盘符后默认用ACDsee打开
  11. GDB X命令详解
  12. EXCEL数据有效性的多级联动
  13. 阿里云Oss搭建私人图床
  14. 程序员可迁移技能的培养
  15. 技术团队人员管理:如何快速的组建团队
  16. 云原生--k8s基础管理命令(二)
  17. linux定时删除文件,如何操作Linux 定时删除指定目下N天前的文件
  18. 红孩子拟今年完成 1亿美元融资
  19. matlab仿真实验报告,Matlab SIMULINK仿真实验报告.doc
  20. python+HTMLTable,生成html表格

热门文章

  1. C语言qsort和C++sort的用法小结和区别比较
  2. python基础知识-01-编码输入输出变量
  3. Netty 核心组件 Pipeline 源码分析(二)一个请求的 pipeline 之旅
  4. 玩转html5(三)---智能表单(form),使排版更加方便
  5. ++与*优先级相同,按照从右至左的顺序计算
  6. 关于Mysql修改密码的方法汇总
  7. 艾伟:C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
  8. xinetd出马拯救Ftp服务器
  9. 用计算机装扮校园图片,第4课装扮我们的校园——在场景中运用图形元件教学设计.doc...
  10. 腾讯云dts使用注意事项