先上图:
大家可能都听说过:反向代理,主从数据库,读写分离,服务器集群这些名词,可是不知道着东西到底是干嘛的。
由于我是php开发,对架构上的东西也有兴趣,加上之前的项目是类似的方案,就拿出来和大家分享一下。
一个网站初期使用一个vps或者虚拟主机就能搞定了,随着流量的增大,不能支撑更多的访问了,这个时候开始使用更多的服务器,但是如何让他们能够配合在一起使用呢,这个时候就开始使用小型集群了,随着时间的推移开始使用大型集群(高大上),不过小型集群的网站,能支撑的访问量就已经很大了。
① Nginx反向代理:当用户访问一个网站的时候,一台服务器支撑不住了,这个时候需要两台服务器,可是两台服务器如何来分摊流量呢,这个时候Nginx的反向代理来了,他的目的是将用户的访问转发到后面真正执行程序的服务器上,用户访问的都是Nginx反向代理服务器,当它接收到请求后,会将请求的内容转发到后端的服务器上(Apache或者Nginx),就像上图显示的,两台Apache服务器,可以并行添加多台这样的服务器,实现一个横向扩展。这样多台服务器支撑的访问量就会随着机器的增加而增加。
② 主备:为什么要使用两台Nginx做反向代理呢,实际上是一台,另一台睡觉就可以了,这样做的目的是一台宕机后,另一台起来继续工作,保证网站不会因为一台宕机而彻底不能使用了,两台Nginx反向代理使用软件做心跳监测,一台坏了切换过来,这样就能够不会出现什么大的问题了。
③ session共享问题: 这个时候还有一个问题就是session的问题,如何保证session不会重复生成或者丢失呢?其实按照我上图所画,共享session存储即可,其实不是必须使用memcache或者redis 其实可以使用mysql 、nfs,当然了如果这些都不用仍然是可以的,那就是nginx反向代理的 配置做手脚了,nginx可以进行简单配置就是实现iphash了,这样能够保证每台服务器访问的后端服务器都是同一台服务器。大家可能不太理解这个过程,其实这个过程很简单,就是对请求内容的判断和转发,根据请求来的ip地址进行哈希运算,这样每次请求的都是同一台后端的服务器。到这里访问基本就没有问题了,
④ MySQL主备(主从):剩下的就是数据库的解释了,使用MySQL主备或者叫做MySQL主从,实现数据库的备份,同时使用MySQL的备份机来做Sql的读操作,这样就减轻了,主数据库的读写压力了。既做了数据库的备份又能不至于浪费机器。
⑤ 有很多刚入门的程序员,看了会不理解这怎么连接到一起啊?就像我刚毕业那阵,就以为各种服务器软件都必须连在同一台服务器上才能工作一样。其实就是使用ip地址,指定ip地址就可以了,host设置为127.0.0.1或者192.168.1.100其实都一样,无非是连接到当前服务器和连接到其他服务器上,他们的过程基本上一致,当然了连接到其他服务器上的效果肯定没有直连本机要好,因为要延迟和数据传输的过程。
优化过程无非就是分摊流量,加快数据的访问,单台服务器就是CPU数量多一些,内存容量大一些,硬盘从机械硬盘换成ssd(固态硬盘读写性能可是机械硬盘的十几倍甚至更高),代码写好一点,sql语句尽量简单就简单,少涉及多表关联查询,尽量通过主键id查找,多分一些数据库,多分一些数据库表(其实就是尽可能的将大数据块,切分成小的数据块)。就好比你从一万个人里找一个人,和从十个人里找一个的意思是一样的。
啥?你要问我具体安装的命令啊,我还是那句话都这份上了,随便找个运维就能按照你的要求搞定,干嘛非得让一个懂linux 但又不够深的人来做这些事呢。