把网站架构层次化

一个较为合理的网站架构,通常会对整个架构进行分层设计。这样的好处是分散服务器的压力,不至于由于单台服务器压力过大宕机而停止提供服务。在架构设计中,我觉得有2个黄金准则。一个是“所有的问题,都往前面推”,另一个是“避免单点故障”。这两点实际上也就保证了系统架构的高可用、可扩展性和可靠性。

下面简单的画一个图,来说明一下,就我的理解,一个网站的架构大概可以分为以下四层:

相关链接:

DRBD+HeartBeat+NFS 架构

镜像技术DRBD

磁盘镜像技术 DRBD 原理简介

服务器层:顾名思义,这一层服务器主要提供相关的业务支持,例如这是一个网站架构,则这里提供的主要是web服务和mysql数据库的服务。多台服务器组成的一个集合叫做“服务器池”,当用户请求分配过来后,系统将从服务器池中挑选出其中一台服务,并由分配到的这台服务器真正的提供服务。当业务扩展,服务器压力过大,可以往该服务器池中添加新的服务器,共同分摊压力,虚拟主机,从而减小单台机器的压力,提高效率。

这一层涉及的软件:apache、nginx、lighthttpd等。其中以nginx的性能为优,它支持高并发,而且资源消耗少,配置简单。

相关链接:

nginx+tomcat 跑jsp

apache+nginx 实现动静分离

搭建lemp环境

缓存层:这一层实际上并不是必须的,但业务较小的时候,可以先不考虑这一层的设计。缓存层顾名思义,就是通过缓存静态文件,从而达到加速的功能。设置了缓存层之后,香港服务器租用,当用户第一次请求访问的时候,缓存服务器会到底层走一遍,将用户请求数据拿过来,发送给用户并在本地保存一份数据。但第二次,用户请求相同的内容的时候,缓存服务器还是会到底层跑一遍,但是它只做一个校验,已确保缓存中的数据是否与底层服务器上的数据一致。如果一致,则缓存服务器会将缓存中的数据直接返回给用户,从而提高用户体验。

这一层涉及的软件:squid,nginx

相关链接:

nginx 实现反向代理

负载均衡层:这一层的服务器作为先锋(置于最前端,用户请求最先到达),需要相当的处理和负载能力,因为它本身充当的就是一个调度器的作用,需要扛住大量的用户访问所造成的压力。因此这一层的服务器往往要求高CPU,高内存和高带宽等。另外这一层作为整个架构的最前端,相当于整个架构的统帅,一旦这一层停止提供服务,底层服务器将全部停止提供服务(确切的讲,是没办法被分配到任务)所以,应该足够重视这一层服务器的设置,可通过一些机制、技术来确保其可靠性。不至于单台服务器宕机,则造成整个系统的瘫痪。

这一层涉及的软件和技术:haproxy、keepalived、nginx、lvs等

相关链接:

nginx+keepalived 负载均衡架构

Haproxy+keepalived实现高可用负载均衡

lvs+keepalive 实现高可用集群

LVS_TUN

LVS_DR

LVS_NAT

补充一下:

实际上,在架构的设计中,还有两点需要考虑进去,一个就是数据库的设计。对于一个大型网站来说,数据库的设计尤为重要,它可能对网站的整体响应速度上,起着至关重要的作用。例如,当数据量大的时候,应该如何对数据进行“切割”,如何提高查询速度,这些都是我们需要考虑的。(这里只考虑mysql)

相关技术和要点:

mysql分表(垂直分表,水平分表)、mysql分区、mysql慢查询、sql语句优化、参数优化、索引、数据库备份等。

主要的架构有:主从复制、mysql集群

另一方面就是监控系统。在事故发生的第一时间赶赴现场并及时处理问题,是我们运维人员义不容辞的。我们不可能7*24 小时对着监控屏幕看服务器是否出现问题,这时我们便需要一个工具来帮我们“看着”我们的服务器,那就是监控系统。

这里说的监控系统,其实可大可小,具体应该根据业务需求来确定,可以简单的通过shell,python等脚本来实现监控并报警。也可以通过其他开源软件来完成,这里主要推荐以下三款:

nagios、cacti和zabbix,这三者各有优缺点,这里就不展开了,有需要的可以自行去了解。

以上观点,均为个人所见,鉴于本人学识浅薄,可能很多方面都没考虑到,还请大家多多指教。有什么补充的,也欢迎大家提出来,网站空间,完善一下!谢谢

在你生活出现失意和疲惫时能给你一点儿力量和希冀,只愿你幸福快乐。

把网站架构层次化

相关文章:

你感兴趣的文章:

标签云: