daicy
发布于 2019-04-17 / 887 阅读
0
0

Web系统架构的一些思考

负载均衡

这里把多台nginx反向代理服务器顶在最前面,可以通过DNS简单轮循或绑定虚拟IP的方法来实现分流。之所以用nginx是因为它的稳定、强大、高性能、低开销、以及对高并发的支持。也可以换成LVS,从效率上来说肯定会比nginx高,因为工作在OSI的第四层(传输层),可以修改目标IP。甚至可以在第二层(数据链路层)修改MAC地址(DR模式,相当于路由器),让数据包直接到达目标服务器。不过工作在下层虽然效率提高了,但相应的控制能力也少了,比如无法根据http url来进行负载均衡,缓存页面执行结果等等。

应用层

这一层是web服务器,主要任务是从服务层获取需要的数据,然后渲染到模板,返回给前端服务器。可以理解为Controller-View,没有Model,因为Model被移到了一下层,用来单独提供服务。这么做的原因是方便分布式部署,单元测试,避免单点故障。所以这层是相对较轻松的。

服务层

这一层的任务是提供模块的接口,供上层调用。如相册模块,需要有创建相册/显示相册图片/删除图片等等功能。至于服务的形式就很灵活了,如REST/RPC/SOAP等等。

这一层的任务就比较艰巨了,要保证接口的稳定性,要处理复杂的逻辑,实现算法,与存储层交互等等。

存储层

存储层是整个系统的核心,一旦数据丢失,网站就成了空架子了,所以一定要及时备份。

缓存层

在网站流量不大时,缓存是可选层。随着流量的增大,缓存的重要性也越来越突出,甚至可以把内存当硬盘来用,以保证快速响应。如何提高缓存命中率,设置缓存失效时间等等缓存的处理就变得尤为重要。

数据库层

这个可以讲的就太多了,多数系统的瓶颈也在这。总体说来会经历主从服务器,垂直分区和水平分区这三个过程。

分布式存储

这里会遇到的问题是文件的同步,如何分配给用户最合适的服务器,磁盘I/O等等。

其他

队列服务器

这也是大型网站的标配,处理日志/分析用户行为/发送邮件等等都会用到。

监控服务器

这么多的服务器,我们需要知道各个服务器当前的运行状况,如磁盘I/O,CPU使用率,内存使用率,负载等等,一旦发现异常可以及时处理。

日志服务器

排查故障就靠它了,比如有骇客入侵,某个页面访问很慢,出现500错误,慢查询等等。

备份服务器

这个重要性不言而喻,比如数据库宕机,某张表损坏,数据库磁盘错误等等。没有了它,辛辛苦苦积攒下来的数据就这么一去不复返了。


评论