10

我对web系统架构的一些思考 - Limboy's HQ

 3 years ago
source link: https://limboy.me/2010/12/15/web-system-architecture/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我对web系统架构的一些思考

2010-12-15

p(date). 2010-12-15

能力/经验有限,不足之处还请指点 :)

这里把多台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错误,慢查询等等。

备份服务器

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK