为什么一个网站会使用多台服务器?
为什么一个网站会使用多台服务器从单机网站到分布式架构刚建立的小型网站通常只需要一台服务器。这台服务器可能同时运行网页程序、数据库、图片文件和后台任务。访问人数不多时这种结构成本低、部署简单也比较容易维护。但随着用户增加一台服务器可能逐渐无法承担所有工作。这时网站便可能从“一台机器包办全部工作”发展为多台服务器分工合作。一、一台服务器为什么可能不够用网站的每一次访问都可能需要服务器完成多项工作接收网络连接执行网站程序查询数据库读取图片和文件验证用户身份处理订单或上传记录日志执行后台任务当访问量持续增加服务器可能出现CPU 长时间满载内存不足数据库查询堆积硬盘读写繁忙网络带宽耗尽页面响应变慢请求超时或失败为单台服务器升级处理器、内存和硬盘称为“纵向扩展”。但单台机器的配置终究存在上限升级成本也可能越来越高。因此网站还可以增加更多服务器让它们共同承担工作这称为“横向扩展”。扩展方式做法特点纵向扩展提高单台服务器配置简单但存在硬件上限横向扩展增加服务器数量容易继续扩展但架构更复杂二、多台服务器怎样进行分工大型网站通常不会让每台服务器都处理完全相同的工作。一种常见分工方式是服务器或组件主要工作负载均衡器把用户请求分配给不同服务器Web 服务器接收网页与接口请求应用服务器执行业务逻辑数据库服务器保存账号、订单和其他结构化资料缓存服务器保存热门资料与查询结果文件或对象储存保存图片、影片和用户文件后台任务服务器处理邮件、报表和异步任务日志与监控服务器收集运行状态与错误记录备用服务器在其他设备故障时接手整体结构可能类似┌→ Web 服务器 A ─┐ 用户 → 负载均衡器 ├→ Web 服务器 B ─┼→ 缓存与数据库 └→ Web 服务器 C ─┘负载均衡器就像餐厅门口的接待员。当多名顾客同时到达时它会根据不同服务器的状态把请求安排给目前较空闲或响应较快的服务器。三、使用多台服务器有哪些好处1. 处理更多访问量多台服务器可以共同承担用户请求避免所有压力集中在一台机器上。2. 降低单点故障风险如果网站只有一台服务器这台机器发生故障时整个网站可能直接离线。使用多台服务器后系统可以在检测到故障时把请求转移到仍然正常的设备。3. 方便独立扩展如果图片流量很大可以扩充储存或 CDN如果数据库压力较高可以单独优化数据库而不必更换整个系统。4. 便于维护和更新部分服务器可以逐台更新。只要其他设备继续提供服务网站就不一定需要完全停机。5. 隔离不同工作网页访问、数据库、文件处理和后台任务互相分开可以减少某项任务异常时对整个系统造成的影响。6. 支持不同地区的用户网站可以在不同国家或地区部署节点让用户连接较近的位置同时提高灾难恢复能力。四、负载均衡器怎样分配请求负载均衡器可以使用不同方法选择服务器。调度方式基本原理轮询按顺序把请求交给不同服务器最少连接选择当前连接数较少的服务器加权分配配置较高的服务器承担更多请求IP 哈希根据用户 IP 分配到相对固定的服务器响应时间优先选择响应较快的服务器负载均衡器还会定期执行健康检查。如果某台服务器无法响应负载均衡器可以暂时停止向它发送新请求等待修复后再恢复使用。不过如果网站只有一台负载均衡器它本身也可能成为单点故障。因此重要系统通常也会为负载均衡层设计冗余。五、用户登录状态应该保存在哪里多服务器架构有一个常见问题用户第一次请求被分配到服务器 A下一次却可能被分配到服务器 B。如果登录状态只保存在服务器 A 的本地内存中服务器 B 就可能不认识这名用户导致用户突然退出登录。常见解决方法包括将会话状态保存到共享缓存将登录资料保存到数据库使用可验证的登录令牌让同一用户暂时固定连接同一台服务器将应用设计成尽量无状态其中让多台 Web 服务器不依赖本机保存的状态通常更有利于扩展和故障切换。六、多台服务器如何共享图片和文件如果用户上传的图片只保存在其中一台 Web 服务器上之后访问另一台服务器时文件可能无法找到。因此多服务器网站通常会使用共享文件系统独立文件服务器对象储存服务CDN文件同步机制这样无论请求被分配到哪一台 Web 服务器都能取得相同的文件。网站程序也不应该依赖某台服务器本地保存的重要用户资料。七、数据库也能使用多台服务器吗可以但数据库扩展通常比网页服务器更加复杂。常见方式包括主从复制主数据库处理写入副本数据库负责部分读取并保存资料副本。网站写入 → 主数据库 ↓ 复制到只读副本 ↑ 网站查询 ──────┘数据库集群多台数据库共同提供服务并配合故障切换机制。分库分表按照用户、地区或业务类型把大量数据分散到不同数据库。不过数据库复制可能存在短暂延迟。如果用户刚修改资料随后从尚未同步完成的副本读取就可能暂时看到旧数据。因此数据库扩展必须同时考虑一致性、性能和故障恢复。八、多台服务器是否代表网站绝对不会宕机不是。服务器数量增加并不会自动带来高可用性。如果架构没有正确设计仍然可能因为以下问题全部离线所有服务器依赖同一台数据库负载均衡器没有备用设备多台服务器位于同一机房共用的网络线路发生故障软件更新同时破坏所有节点错误配置被同步到全部服务器数据库或共享储存发生故障故障切换流程从未实际测试真正的高可用需要避免关键组件只有一份并定期测试备用系统能否接手。九、多服务器架构有哪些代价多台服务器并不是越多越好。它会增加服务器与网络成本配置管理难度资料同步问题日志收集难度故障排查时间安全管理范围监控和告警需求备份与恢复复杂度单台服务器出现问题时原因可能很容易找到多服务器系统发生异常时则需要检查负载均衡、网络、缓存、数据库和不同节点之间的连接。因此小型网站没有必要为了看起来专业一开始就部署过度复杂的架构。十、网站什么时候应该考虑增加服务器可以关注以下迹象高峰期 CPU 或内存长期不足请求经常排队或超时单机升级成本越来越高网站无法接受单台设备故障数据库、图片或后台任务互相抢占资源更新网站时必须长时间停机用户分布在多个地区业务需要独立扩展不同组件扩展之前仍应先检查程序、数据库和缓存是否存在明显的性能问题。如果网站代码本身效率很低盲目增加服务器只是在用更多机器分担原本可以避免的浪费。十一、一套基础的多服务器架构需要注意什么部署时可以参考以下检查清单流量入口负载均衡器是否具备备用方案是否会自动检查服务器健康状态故障节点能否及时停止接收请求网站程序多台服务器的程序版本是否一致登录状态是否使用共享储存程序是否依赖本机文件更新失败时能否快速回滚数据与文件数据库是否定期备份数据库副本是否正常同步用户文件是否集中保存重要资料是否存在异地副本监控与安全是否集中收集日志是否监控每个节点的资源使用量是否限制服务器之间的访问权限是否定期测试故障切换总结一个网站使用多台服务器通常不是单纯追求“机器越多越强”而是为了分担访问压力拆分不同工作提高扩展能力降低单点故障风险方便维护和更新服务不同地区的用户典型结构可以概括为用户 ↓ 负载均衡器 ↓ 多台 Web 或应用服务器 ↓ 缓存、数据库与文件储存不过多台服务器也会带来同步、监控、成本和故障排查方面的挑战。适合网站的架构不一定是服务器最多的架构而是在当前业务规模下能够兼顾性能、稳定性、维护难度和成本的架构。#服务器 #网站架构 #负载均衡 #数据库 #高可用 #网站运维 #服务器科普