博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
把网站架构层次化
阅读量:6309 次
发布时间:2019-06-22

本文共 1987 字,大约阅读时间需要 6 分钟。

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

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

    从底层开始,分别是共享存储层,服务器层,缓存加速层,负载均衡层等4层。

共享存储层:提供存储空间,由于上面一层多台服务器都连接到共享存储设备这里来,这样就保证了数据的一致性。当然共享存储设备的价格还是相当昂贵的,并不是所有公司,所有业务都承受得起。在没有这种条件的情况下,就只能使用一台有较大硬盘空间的服务器,作为存储设备,并在上层服务器上,通过NFS 挂载该设备。  

    这一层所涉及的技术或工具有:分布式文件系统,NFS,DRBD,RAID阵列等。

相关链接:

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,这三者各有优缺点,这里就不展开了,有需要的可以自行去了解。

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

转载地址:http://vfxxa.baihongyu.com/

你可能感兴趣的文章
python数据分析画图体验
查看>>
军规15 确保集成和调用第三方APP
查看>>
Etcd和ZooKeeper,究竟谁在watch的功能表现更好?
查看>>
Perl数据类型安全研究
查看>>
JS设计模式初识(十)-职责链模式
查看>>
DOM removeChild
查看>>
那些年,我们追过的“定时调度”
查看>>
C# 32位系统与64位系统调用不同的DLL文件
查看>>
MS Sql Server 数据库或表修复(Log日志文件损坏的修复方法)
查看>>
MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
查看>>
解决iPhone4拆机后SIM卡显示无服务的故障
查看>>
关不掉.vbs
查看>>
Ubuntu18.04安装OpenCV4.1.0
查看>>
2017-2018-2 20165226 实验五《网络编程与安全》实验报告
查看>>
abstract关键字
查看>>
Apply for an Microsoft Academic Search AppID
查看>>
纯Java——简易高并发框架
查看>>
Notepad++的Json格式化插件
查看>>
ASP.NET MVC, Url长度过长问题解决,404.15问题
查看>>
[CQOI2014]危桥
查看>>