此处不考虑硬件,我们做 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 的效率其实不差,只是被不会用的人一直跑在调试模式罢了。这方面网络上文章不少,不多说了。

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

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