architecture - 水平扩展和分布式系统有什么区别?
问题描述
我现在正在学习系统设计。我试图对此进行研究,但我唯一能找到的是 Quora 上一个解释不清的答案。
1)水平扩展和分布式系统有什么区别?
2) 水平扩展是否意味着分布式系统?为什么?
3)垂直扩展也可以被认为是分布式系统,为什么?
解决方案
我来这里是为了寻找类似的答案。经过几次阅读并获得了理解,我将我的想法写在下面:
我将尝试用一个例子来解释这一点:假设我们有一个应用程序,它在后台由不同的微服务(比如有 3 个微服务 m1、m2、m3)组成。特别是针对特定的微服务进行水平扩展。所以如果微服务m2需要扩展(可能bcoz对它所满足的需求增加了很多),我们可以添加更多的服务器来支持m2。这样我们就完成了 m2 的水平缩放。
现在,每当部署在不同服务器上的 2 个微服务需要在网络上进行交互时,分布式系统就会发挥作用。从上面的示例中,m2 与 m1 交互或 m3 与 m2 交互将通过网络完成,因此将被视为分布式系统。
负载均衡器用于支持水平扩展,API 调用用于支持分布式系统。
所以不可否认,水平扩展和分布式系统大多是结合在一起的。
虽然严格来说是不正确的。假设我们只有一项服务部署在 5 台不同的服务器上,这些服务器使用负载均衡器进行控制。也没有涉及数据库,即,我们不需要存储数据,但只进行少量计算并返回结果。
在这种情况下,尽管存在水平扩展,但不同服务器上的不同微服务之间不涉及交互。(5 台机器支持这项服务)。
所以在这种情况下,水平缩放是存在的,但它不能称为分布式系统。
在垂直缩放中,所有组件仅在单台机器上运行。不涉及内部通信。所以垂直扩展不应该被认为是分布式系统。
我想提的资源很少: https ://medium.com/system-design-blog/key-characteristics-of-distributed-systems-781c4d92cce3
https://medium.com/@abhinavkorpal/scaling-horizontally-and-vertically-for-databases-a2aef778610c
推荐阅读
- sql - 如何用另一个临时表中的另一个值替换一个临时表中的值?
- sed - sed 从匹配模式中添加文本,如果模式不存在则添加
- azure - 我为我的特定 Azure 应用启用了 MFA。第一次使用 Azure 登录的用户,为这些用户启用 MFA。如何为所有现有用户启用 MFA?
- jenkins - 如何使用管道脚本在 jenkins 中检查特定节点的在线或离线状态?
- python - 通过 Python 安装 ImageMagick 和 Ghostscript
- mysql - XAMPP 不会自动将 MySQL 添加到服务中?
- ios - 使用条件和限制安排未来的 UNUserNotificationCenter (iOS)
- c# - 尝试使用视图模型中的命令通过数据绑定更新图像按钮中的图像源 - 不起作用
- c# - 我收到异常导航失败,因为浏览器已断开连接
- java - org.json.JSONObject.getNumber() 使用 unittest 调用时抛出“NoSuchMethodError”