文章摘要
文章探讨了“单体架构 vs. 微服务”的争论,指出核心问题在于分布式系统架构是否值得开发者投入时间和成本。通过考虑系统的实际运行需求,作者认为大多数情况下并不需要分布式系统。现代虚拟化技术使得服务器变得更强大且成本更低,许多软件实际上运行在大型服务器上,而非分布式架构。
文章总结
使用一台大型服务器的优势
在“单体架构 vs. 微服务”的讨论中,分布式系统架构是否值得投入开发时间和成本是一个核心问题。通过考虑系统的实际运行需求,我们可以更好地判断是否真的需要分布式系统。
如今,虚拟化和“无服务器”计算已成为主流,但所有软件最终都运行在服务器上。现代服务器通常比我们想象的更强大且更便宜。以微软Azure使用的一台AMD CPU服务器为例,它拥有128个核心、256个线程、1TB内存,并支持高达4 TFLOPs的双精度计算性能。这样的服务器在2000年代初曾是顶级超级计算机,直到2007年才退出Top500榜单。
一台服务器的能力
现代服务器能够处理多种高负载任务,例如: - 以400 Gbps的速度传输视频文件(现已提升至800 Gbps) - 在NoSQL数据库上实现100万IOPS - 在PostgreSQL上实现7万IOPS - 在nginx上处理每秒50万请求 - 在20秒内编译Linux内核 - 以75 FPS的速度渲染4K视频
成本对比
在大型托管服务商如OVHCloud,租用一台128核心、512GB内存、50 Gbps带宽的服务器每月费用为1,318美元。而在AWS,租用一台192 vCPU、768GB内存的m6a.metal服务器每小时费用为8.2944美元,相当于每月6,055美元。相比之下,购买一台类似配置的服务器约需4万美元,但需要额外支付托管和网络费用。
云计算的思考
自2010年云计算兴起以来,服务器性能大幅提升,SSD的IOPS增加了至少100倍,但主流虚拟机和容器的规模并未显著增长。对于大多数Web服务,一台服务器通常足以应对10k QPS以下的流量。即使需要集群,使用少量大型服务器也比大量小型服务器更高效,因为集群协调的开销通常与服务器数量成正比。
可用性与备份
使用单台大型服务器的主要缺点是可用性。建议运行主备服务器,并将其放置在不同的数据中心。对于极端情况,可以采用2x2配置,即主数据中心和备份数据中心各放置两台服务器,以提供更高的冗余。
云计算的利弊
云计算提供了高可用性和易用性,但价格较高。云服务商通常会推动“云原生”架构,如微服务和自动扩展的虚拟机组,但这些架构可能带来不必要的复杂性和成本。对于非突发性工作负载,使用少量大型服务器通常更经济高效。
总结
当现有服务器接近极限时,垂直扩展(使用一台大型服务器)通常比水平扩展(分片或云架构)更简单且高效。一台大型服务器不仅成本较低,还能最小化系统开销,并在防止硬件故障方面表现良好。虽然这种方式不够时髦,但它能有效满足大多数需求。
评论总结
主要观点总结:
单一大服务器的风险与成本
- 单一大服务器存在单点故障风险,且管理成本较高。
- 引用:"Don't forget the cost of managing your one big server and the risk of having such single point of failure."
- 引用:"And then boom, all your services are gone due to a pesky capacitor on the motherboard."
云服务与自建服务器的成本对比
- 云服务虽然昂贵,但提供了硬件管理、自动扩展等便利,减少了运维负担。
- 自建服务器在硬件成本上可能更便宜,但需要考虑运维、备份、冗余等额外成本。
- 引用:"The benefits of 'just don't think about hardware' are real."
- 引用:"At Hetzner, you can rent a machine with 48 cores and 128GB of RAM for the same money."
云服务的复杂性与工程师的依赖
- 云服务的复杂性可能导致工程师过度依赖云平台,忽视了自建解决方案的可能性。
- 引用:"I’ve found that it’s hard to even hire engineers who aren’t all in on cloud and who even know how to build without it."
- 引用:"Cloud doesn’t make admin easy, just different. It promised simplicity and did not deliver."
小型项目与个人设置的适用性
- 对于小型项目或个人设置,自建服务器或使用低成本VPS可能更具性价比。
- 引用:"For hobby projects, I can understand why someone would choose Hetzner over AWS."
- 引用:"I run a number of services on my home network... I bought 3 mini pcs instead."
硬件可靠性与备份策略
- 自建服务器需要更严格的备份和冗余策略,以应对硬件故障。
- 引用:"My biggest takeaway was to have my core database tables backed up every 10 minutes."
- 引用:"HN uses two—one live and one backup, so we can fail over if there’s a hardware issue."
云服务的峰值负载与成本分摊
- 云服务通过多客户共享资源,分摊峰值负载成本,但用户是否真正受益取决于云服务商的定价策略。
- 引用:"If I need 100 units of peak compute during 8 hours of work hours, I get that from Big Cloud, and they have two other clients needing same in offset timezones."
- 引用:"The difference is that the cloud can go find other workloads to fill the trough from off peak load."
总结:
评论中既有对云服务便利性的认可,也有对自建服务器成本效益的讨论。云服务适合需要高可用性和自动扩展的企业,而自建服务器则更适合小型项目或个人设置,尤其是在成本控制和硬件管理能力较强的情况下。