此处不考虑硬件,我们做PaaS。

首先云服务,负载均衡 + 2到3台服务器,其中文件上传下载采用对象存储,这样可以大量节省服务器带宽,外面再套一层CDN,可以保证秒开;数据库采用独立的数据库服务器,云服务提供商大多在底层实现了热备,出问题的概率很小;另外,在上面的基础上再加上前后端分离,前端代码也全部跑在对象存储里,Web服务器可以达到只“计算”的目的,也就是说只提供接口服务。
另外为了防止攻击,可以套三层防御,一层在DNS解析,挂掉了立马解析到第二台,第二层在云服务提供商,购买单独的防御服务,第三层在WEB,监测到攻击的时候自动对某一个IP返回502。

然后再来说数据库、语言和框架。

数据库采取优势互补,MongoDB适合日志,但是不适合关键数据的存储,Redis适合做某些数据的缓存,例如消息队列、热度Top10等,而MySQL/MariaDB则是作为最终的数据存储,为啥我前面直接把MyISAM砍掉了,就是因为MySQL在这个架构里本身就是做为“最终boss”存一些关键数据的,要尽最大可能保证不出问题,而要追求效率、数据一致性相对来说无关紧要的日志这些就交给MongoDB去做吧。
前面说的数据库采用单独的服务器,也是为了这个原因,不同的需求采用不同的数据库,跑在不同服务器。

语言,还是那就话语言没有好坏,只有适不适合。PHP做Web服务,Node.JS写一些“逻辑少、调用次数频繁”的API再适合不过,而核心、计算量重的东西,就交给一些编译型语言去做吧。

框架,这里只说PHP,Laravel做Web,PhalApi做接口不错,自动出接口文档,支持单元测试,同时又比较轻量,避免了Laravel性能调优的问题。但通常情况下Laravel真的用在工况,有些东西还是要进行“优化”的,这里打引号的原因,是想说此处不是真正的优化,而是一种把Laravel调整到生产环境模式的过程,本身Laravel的效率其实不差,只是被不会用的人一直跑在调试模式罢了。这方面网络上文章不少,不多说了。

这大概就是一个基本完善的整套系统所必备的几项,其实还有很多很狂拽酷炫吊炸天的新技术/方案没有提到,最终想说的就一句话:如果上面这一整套下来还扛不住业务量,那就砸钱买更多服务器吧。

毕竟上新技术是有更大的代价的。