【网站架构】集群性能并非无限扩展,几千万几亿的网站系统贵在哪

发布于:2022-12-18 ⋅ 阅读:(176) ⋅ 点赞:(0)

大家好,欢迎来到停止重构的频道 。本期,我们讨论一个问题, 这也是很多人的误区。

一台服务器性能不足 ,集群扩展就可以了吗?

当然不是,至少,扩展服务器并不是说得这么轻巧的。

如果真的这么简单的话,那么就不会有这么多系统扛不住压力崩溃, 也就不会存在造价几千万几亿的网站系统了。​

我们按这样的顺序讨论几个问题:

  1. 微服务真的无限扩展性能吗 ?

  2. 所有服务都使用集群的话是否可以无限扩展性能 ?

  3. 无限扩展性能的难点在哪?

微服务真的无限扩展性能吗

​微服务可以无限扩展可能很多人都听说过。

以SpringCloud为例: 新启动的服务自动连接到注册中心就可以分流压力了, 理论上一台后端服务器性能不足,扩展一台就可以了。

但是在实际项目中, 这却是起不到性能扩展作用的

在前面《性能调优的基本思路》里说过 ,网站系统就像是一个水管网络 ,只有各个部分吞吐量都均衡了才是合理的。

所以只是后端服务扩展的话,网站系统的整体性能是不会有所提高的。

而且由于在线用户上来了,session量也会增加 ,如果存储共享session的redis服务没有配置好淘汰机制的话,那么扩展再多的后端服务 ,网站系统都会崩溃 。

 

所有服务都是用集群的话是否可以无限扩展性能?

那么,所有服务都使用集群的话是否可以无限扩展性能呢?

Redis、RabbitMQ都有集群模式 ,MySQL的话可以分片存储集群化, 也可以使用MongoDB等分布式数据库,这样网站系统的每个部分都可以扩展了。

理论上是这样的,但是实际上却并不是,集群化后,网站系统的关系会变得更加复杂 ,而且集群服务器也并不一定会分摊压力。

 

例如,每个集群服务器只负责一部分的数据

理论上会分摊所有数据的操作压力,但是如果压力集中在其中一部分数据呢 ?例如限时抢购等场景, 则其实压力仍然会集中在一台服务器上

即使是多台服务器同时负责一部分数据的集群方案,也会由于数据同步等机制,以至于集群的性能可能没有想象中高

​当然,数据服务的集群化性能如何,需要根据具体数据服务的实现方式而定。

所以,集群的性能并不是1+1等于2的关系。一些极端情况下, 加上带宽等问题 、性能,甚至是1+1<1的, 测试过你就知道了 。

无限扩展性能的难点在哪

无限扩展性能的难点在于,数据服务集群的扩展,虽然能加大数据存储的量, 但是性能并不一定是增长的。

这也是大型网站的真正难点,所以需要设计很多机制规避性能问题。如缓存、异步写入、服务分区等机制。

​这些经验是区别团队技术能力的关键,也是几万块钱与造价几千万的网站系统的本质区别。

这也就是往期《性能调优基本思路》中强调的编程方案 ,比较通用的一些方案会在后续内容分享 。

总结

感谢看到这里的朋友,在本期内容的结束,我们还想说明一下。

为什么停止重构的内容都偏向于一些更加专业的问题,而不是去讨论工具使用或编程技巧上呢?

这里想引用一位前辈的话:​

工程师做的是给用户带来便利或需要的东西

所以应该对用户负责

这种负责

不应该体现在某个沾沾自喜的技巧上

而是应该体现在用户看不见的专业问题上

 

 


网站公告

今日签到

点亮在社区的每一天
去签到