Answers
淘宝大部分业务模块是前端html引擎+java,有部分是html+nodejs+java,也有用php的。
本质上前端后端的区分是以“到用户的距离”划分的
比较通行的划分是在浏览器/客户端到服务器之间,以用户的http请求为准划线,js css dom flash ios android这些算前,后端负责业务和数据存储。因为通行的开源方案,rdbms配合缓存,队列,开源搜索引擎等等足以支持,于是这个直接的划分比较有效。客户端有十种,服务器也就不到百台,大家的责任任务比较平衡。
当厂子的量级大到一定程度,简单的开源方案很难盖的住大量的用户,水平扩容,立体的灾备等等问题。这时客户端还是10种,可服务器却一下子百台千台,一个机房一个机房来算了。此时,上述的普通划分就没有意义了。此时划分线便自然向后移动到业务和存储/支持之间,有了题主描述的“java后,php+js前”或是“cpp后,php+js前”之类的划分。
并不是php的角色变化了,而是原来insert into就写完的下单变得需要大量开发负责各种server运维告警负载均衡读写分离等等等等事情。
换种说法,10个开发的业务可能5个写jscss,5个写php,但100个开发的业务,可能就是10个jscss,10个安卓ios,35个写php,30个写c/java给php调用,还要有10个运维,5个组长
现在淘宝逐渐用nodejs作前端控制器
参考淘宝UED《前后端分离的思考与实践》
基于NodeJS的前后端分离
基于前后端分离的模版探索
Midway-ModelProxy — 轻量级的接口配置建模框架
前后端分离模式下的安全解决方案
基于前后端分离的多终端适配
Nginx + Node.js + Java 的软件栈部署实践