百万级运维经验四:服务器的选择和部署
对服务器的选择,我曾经盲目过。流量大了服务器顶不住怎么办,我那时候的想法就是加配置,4核变8核,8核变16核,内存也加,4GB变8GB变16GB,为什么不加服务器呢,麻烦嘛,觉得提高服务器配置的效果也是一样的。后来我才明白,这种想法是错误的,还是停留在个人电脑的思维。
我发现,增加了服务器配置并不能给我带来相应的性能提升,我对服务器和操作系统没有特别深的了解,我个人觉得原因如下:
首先,大部分软件没有针对多核CPU进行优化,即便有优化,也无法百分百的利用CPU的资源,软件或系统对多核CPU资源的调度应该没有特别完善。
第二,我猜测,CPU跟内存,CPU跟硬盘之间的总线带宽应该是固定的,就好比房间很大,但房门很小,还是需要一个个排队进来。
第三,一般网站程序对CPU要求不高,网站的主要性能瓶颈在于硬盘的IO,由于硬盘IO速度是固定的,增加CPU并不能提高硬盘的IO性能。
我的看法是,把一台8核8GB内存的服务器换成两台4核4GB的服务器会好很多,也就是1+1>2,根据木桶原理,硬盘IO就是那块短板。
为什么呢,因为两台服务器就相当于得到了两倍的CPU总线,两倍的硬盘IO,就好比一个房间开了两个门,客人进入房间的速度就会快很多,CPU和内存的资源也能得到充分的利用。
两台服务器,可以做负载均衡,也可以把网站分成两个应用分别放在不同的服务器上。通常我会这样分,一般的网站都会分为PC版和手机版,那么我就把PC版放在一台服务器,手机版放在另一台服务器,两边代码互不影响,然后通过nginx两台服务器互相反向代理,再加上负载均衡,不管哪台服务器出问题,都能快速定位到。
我对网站架构的设计思想是,把大网站打散,分成各个独立的应用,比如:用户中心、注册登录、PC端、手机端等等,实际情况实际分析,然后把不同的应用放在不同的服务器上,其它应用就通过反向代理链接到对应的服务器上,形成一个网,不管访问哪一台服务器,都能通过这台服务器访问到其它的服务器。