一文快速搞懂垂直扩展与水平扩展

场景引入

现在,请假设你是一家电商公司的技术负责人,你的公司将要迎来一年一度的双11购物狂欢节,你需要为公司的网站做好充分的准备,以应对即将到来的流量高峰。然而,毫无经验的你选择了让服务器在双11结束之前打烊。然后…然后就没有然后了。
—— 面对类似这样的问题,我们可以考虑对系统进行“扩展”。

何为扩展?

提高系统的处理能力。

为何扩展?

只要产品增长,就会带来系统负载的增长,包括但不限于:数据量、流量、业务复杂性。当一个系统的负载增加时,系统就可能会出现性能瓶颈、响应时间变慢、甚至崩溃等问题。

类比:员工的能力若跟不上公司业务发展速度,就会出现项目延期、交付质量不佳,甚至跑路。

而扩展就是解决此类系统性能和可靠性问题的常用方法,以提高业务效率和可靠性,从而获得商业效益。

垂直扩展

定义

垂直扩展指的是通过升级单台服务器的硬件配置来提高系统的处理能力和可靠性。可以增加服务器的内存、CPU、带宽等硬件资源,从而实现垂直扩展。不需要变动系统逻辑,引入额外依赖。

类比:提高员工的工作能力,以提高效率。

优点

主要是简单,复杂度低,易于维护。

缺点

一个人的能力再怎么厉害,也是有限的;一旦遇上生病、请假,业务就停转了。

  • 单台服务器的性能和资源有天花板,无法无限制地进行扩展

  • 升级硬件需要停机维护,可能会影响系统的可用性

  • 单点故障问题

  • 不够灵活,无法根据业务需求动态调整

思考

如果负载不断增长,即使机器永不宕机,此时通过升级硬件配置带来的效果已经跟不上了,该怎么办?

水平扩展

定义

水平扩展(也叫横向扩展),指通过增加服务器数量(或者资源池中的节点数量)来提高系统的处理能力和可靠性。可以将请求分发到多台服务器上,以分摊机器负载,从而实现水平扩展。

类比:加人。三个臭皮匠,顶过一个诸葛亮。

优点

  • 通过增加服务器/节点数量来提高系统的并发处理能力,突破单点限制

  • 无需停机维护,丝滑升级,系统可用性有保证

  • 提供冗余节点,即使单点故障也可以持续提供服务,保证系统的可用性和稳定性

  • 灵活性高,可以根据业务需求动态调整服务器数量以适应业务

缺点

主要是起步成本高,且难以维护,因为引入了“分布式”。

  • 数据一致性:数据同步、分布式事务等

  • 通信成本:机器间需要进行网络通信,可能会增加网络延迟和带宽成本

  • 其他:容错、负载不均等

trade-off

在选择水平扩展和垂直扩展方案时,需要根据具体业务需求来进行综合考虑。

  1. 流量特点:如果需要处理大量并发请求,可以选择水平扩展方案;如果需要提高单个请求的处理速度和稳定性,可以选择垂直扩展方案。

  2. 计算特点:水平扩展通常用于处理不断增加的流量或工作负载,而垂直扩展通常用于处理需要更多处理能力的资源密集型任务或应用程序。

  3. 长远考虑:到目前为止,单个节点只能垂直扩展,可能无法满足未来的需求。而水平扩展提供了扩展的灵活性,可以通过添加更多机器来提高业务的性能上限。

  4. 成本考虑:水平升级具有更高的前期硬件支出。如果预算有限,并且需要快速且廉价地向基础架构添加更多容量,则垂直扩展可能会更好。

  5. 可靠性:支持水平扩展的系统会更可靠。它确保系统不依赖于单台计算机,并增加冗余。当一台机器发生故障时,另一台机器仍然可以提供服务。

  6. 发布要求:水平扩展无需停机,可以提供更连续丝滑的升级过程。

  7. 地理位置:如果业务扩展到国际客户,必须做水平扩展。

思考

如何保证在水平扩展后,请求可以被分发到尽可能合适的机器上,以提高系统的整体效率?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象中,通过对象之间的交互实现程序的设计和开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. 类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的类来表示汽车,其中包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是类的实例,是具体的实体。通过实例化类,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"类的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"类的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"类的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新类(称为子类),从现有类(称为父类)继承属性和方法。子类可以扩展或修改父类的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象中的机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践中,你可以使用类来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值