1. 从单机到分布式:Web架构的演进背景
十年前我刚入行时,第一次部署的Web应用就是跑在单台服务器上。那时候流量小,一台4核8G的机器装上MySQL和Nginx就能支撑日均几万的PV。但随着业务发展,问题开始显现:某个促销活动导致服务器CPU飙到100%,数据库查询超时,整个网站卡死——这就是典型的单机架构瓶颈。
单机架构的核心问题在于资源耦合。Web服务器、数据库、文件存储全部挤在一台机器,就像把厨房、卧室、卫生间全塞进一个房间。我见过最夸张的案例是某电商初创公司,图片存储和订单数据库共用磁盘,大促时图片加载把磁盘IO占满,直接导致支付订单无法写入。
分离式架构是第一个进化阶段。把数据库独立出来是最常见的做法,就像把卧室和厨房分开。但这里有个坑:很多团队分离数据库时没考虑网络延迟。曾经有个项目,Web服务器和数据库跨机房部署,一个简单查询要50ms,比本地查询慢了10倍。正确的做法是尽量保证Web服务器与数据库同机房,或者至少同地域部署。
当单台应用服务器撑不住时,就该考虑横向扩展了。但这里会遇到第一个分布式难题:Session一致性。早期我们用过Nginx的ip_hash做会话保持,直到某天机房网络抖动导致用户被路由到新服务器,购物车全空了。后来改用Redis集中存储Session才彻底解决,这也是从有状态服务转向无状态服务的关键转折。
2. 负载均衡:流量分发艺术
负载均衡器就像是交通指挥中心。我经手过从硬件F5到软件Nginx的各种方案,总结下来有三大流派:
DNS轮询是最简单的方案,配置不同的A记录解析到不同服务器IP。但问题很明显:某次某台服务器宕机后,DNS缓存导致15%的用户持续访问死链。更致命的是它无法感知服务器实际负载,有时候看起来所有节点流量均衡,其实有的在跑复杂计算,有的只是在处理静态文件。
传输层方案是性价比之选。LVS的DR模式(直接路由)是我们用过性能最好的,单机就能处理百万级并发。配置关键点在于:

727

被折叠的 条评论
为什么被折叠?



