美文网首页
扩展性的演进

扩展性的演进

作者: 晴天M雨天 | 来源:发表于2023-06-15 14:39 被阅读0次

    <p>首先我们来说一个概念</p><p><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none;">《软件工程的对象模型》(Object-Oriented Software Engineering: A Use Case Driven Approach)中首次提出了软件架构立方体的概念。软件架构立方体是一种用于描述和组织软件系统的架构风格,它将软件系统的架构分解为三个维度:模块化、分布式和持续演化</span></p><p><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none;">为了方便介绍,我把<span style="letter-spacing: 0.578px;">模块化成为x方向,y成为<span style="letter-spacing: 0.578px;">分布式,持续演进为z方向。</span></span></span></p><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">XYZ三扩展是一种常见的软件架构设计理念,用于应对不断增长的需求和改变的业务环境。它包括X轴扩展、Y轴扩展和Z轴扩展三个方面。</span></section><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">X轴扩展是指在水平方向上进行扩展,通过增加更多的相同副本来处理更多的负载。这种扩展方式适用于在应用程序内部实现负载均衡,通过将负载分散到多个实例上,提高系统的性能和容量。X轴扩展通常涉及添加更多的服务器或虚拟机,以支持更多的并发请求。</span></section><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">Y轴扩展是指按照功能或模块将系统进行切分,并独立地进行扩展。通过将系统的不同功能或模块划分为独立的服务或微服务,每个服务都可以独立地进行扩展和升级。这种扩展方式可以提高系统的灵活性和可维护性,使不同功能之间的变更和扩展更加容易。每个服务可以根据需要进行独立扩展,而不会对整体系统造成过多的影响。</span></section><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">Z轴扩展是根据数据或用户属性进行切分,以实现业务的扩展和个性化。通过将系统划分为不同的分区或区域,每个分区专注于处理特定数据或特定类型的用户请求。这种扩展方式可以提高系统的故障隔离性和性能,并根据用户的特定需求提供定制化的服务。</span></section><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">XYZ三扩展的理念强调了在软件架构设计中综合考虑水平扩展、功能切分和数据切分的重要性。通过结合这三种扩展方式,可以实现系统的高性能、高可用性和可伸缩性。同时,根据具体业务需求和系统瓶颈,可以选择适当的扩展方式或它们的组合来满足系统的要求。</span></section><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);">什么时候需要X轴扩展呢?</span></section><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">高并发负载:当系统面临大量并发请求时,单个服务器可能无法满足需求,导致性能下降或服务不可用。这时可以通过增加更多的服务器来实现X轴扩展,将负载均衡地分散到多个服务器上,提高系统的并发处理能力。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">扩展容量:当系统的数据量或资源需求增长时,单个服务器的容量可能变得不足。通过增加更多的服务器,可以增加系统的整体容量,确保能够处理更多的数据和请求。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">提高可靠性:通过增加冗余的服务器副本,可以提高系统的可靠性和容错能力。当某个服务器出现故障时,其他副本可以继续提供服务,避免系统中断或数据丢失。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">弹性伸缩:X轴扩展使系统能够根据实际需求进行弹性伸缩。当负载增加时,可以快速添加更多的服务器来应对需求,而在负载减少时,可以适当减少服务器的数量,以节省成本。</p></li></ol><section style="line-height: 1.6em;text-align: justify;margin: 0px 0px 24px;text-indent: 0em;"><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none solid rgba(0, 0, 0, 0.9);"></span></section><p><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none;"><span style="letter-spacing: 0.578px;"><span style="letter-spacing: 0.578px;">我们的每个微服务尽量遵循<span style="color: rgb(55, 65, 81);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;background-color: rgb(247, 247, 248);">Share nothing</span></span></span></span></p><p><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none;"><span style="letter-spacing: 0.578px;"><span style="letter-spacing: 0.578px;"><span style="color: rgb(55, 65, 81);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;background-color: rgb(247, 247, 248);">"Share nothing" 是一种软件架构原则,中文可翻译为"不共享任何东西"。它强调在设计和构建分布式系统时,每个组件或服务应该尽可能独立,不依赖于其他组件的状态或数据。</span></span></span></span></p><p><span style="font-size: 17px;letter-spacing: 0.578px;text-decoration: none;"><span style="letter-spacing: 0.578px;"><span style="letter-spacing: 0.578px;"><span style="color: rgb(55, 65, 81);font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";font-size: 16px;letter-spacing: normal;text-align: start;white-space: pre-wrap;background-color: rgb(247, 247, 248);">当我们的系统x轴扩展出现瓶颈时,或者以下情况,就要考虑Y轴扩展</span></span></span></span></p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">功能扩展:当系统需要新增功能或模块时,可以通过Y轴扩展来实现。将系统按照功能进行切分,每个功能或模块独立成为一个服务或微服务,可以使系统更加灵活和可扩展。不同团队可以独立开发和维护各自的功能模块,降低协作和依赖的复杂性。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">系统性能优化:通过Y轴扩展,可以将系统中的热点功能或高负载模块进行单独扩展,以提高性能和响应能力。将负载均衡地分散到不同的功能服务上,可以有效地提升整体系统的处理能力。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">技术栈切换:当系统需要使用不同的技术栈或框架来实现不同的功能时,可以考虑使用Y轴扩展。每个功能服务可以选择最适合的技术栈,提高开发效率和系统的灵活性。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">团队组织架构:通过Y轴扩展,可以根据团队的组织架构来划分和扩展系统的功能模块。不同的团队可以专注于不同的功能领域,提高开发效率和团队协作。</p></li></ol><p style="min-height: 24px;"><span>优点</span></p><p style="min-height: 24px;"><span>当X轴扩展无法满足需求时,使用Y轴扩展微服务化后,系统更内聚</span></p><p style="min-height: 24px;"><span>缺点:改造难度高,成本高</span></p><p style="min-height: 24px;"><span>那么什么时候才会使用z轴扩展呢?</span></p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">用户个性化需求:当系统需要根据用户的属性或特征提供个性化的服务时,可以考虑使用Z轴扩展。通过将系统按照用户属性(如地理位置、用户类别等)进行切分,每个分区专注于处理特定类型的用户请求,可以实现更精准的服务和定制化体验。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">负载均衡和性能优化:Z轴扩展可以帮助分散系统的负载并提高性能。通过将用户请求根据不同的属性划分到不同的分区或服务器上处理,可以有效减轻单个服务器的负载压力,并提供更快的响应时间和更好的用户体验。</p></li></ol><p style="min-height: 24px;"><span>感觉除了大型互联网公司会用到z轴扩展,其他小公司基本用不到</span></p><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">优点:</p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">个性化服务:Z轴扩展可以根据用户的属性或特征提供个性化的服务。通过将系统按照用户属性划分,可以为不同类型的用户提供定制化的功能和体验,增强用户满意度和忠诚度。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">故障隔离:Z轴扩展可以提高系统的故障隔离能力。当某个分区或服务器发生故障时,其他分区仍然可以正常工作,减少故障对整个系统的影响,提高系统的可靠性和稳定性。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">安全性和隐私保护:通过将特定类型的用户数据存储在独立的分区或服务器上,Z轴扩展可以实现数据的隔离和安全性。这有助于保护用户的隐私,并满足合规性和法规要求。</p></li></ol><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">缺点:</p><ol style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; " class="list-paddingleft-1"><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">系统复杂性:Z轴扩展会增加系统的复杂性。由于需要将系统按照用户属性进行划分和管理,系统架构和设计可能变得更加复杂,需要更多的开发和维护工作。</p></li><li style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; "><p style=" border-width: 0px;border-style: solid;border-color: rgb(217, 217, 227); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ">运维复杂性:由于系统被分成多个分区或服务器,运维和管理也变得更加复杂。需要考虑分区之间的通信和协调,以及处理可能出现的数据一致性和同步问题。</p></li></ol><section class="mp_profile_iframe_wrp"><mp-common-profile class="js_uneditable custom_select_card mp_profile_iframe" data-pluginname="mpprofile" data-weui-theme="light" data-id="Mzg4MzA1MzI4Mw==" data-headimg="http://mmbiz.qpic.cn/sz_mmbiz_png/zJJ31Zu16Uf7vH1N9Gx2MUAsDiaLTBgWZzVHeLAKiaU2ibC9K6JpssVD8YWicHdUYh8XOEicNNxzovu6JUj05WF2h8Q/0?wx_fmt=png" data-nickname="李哥说架构" data-alias="" data-signature="个人提升架,架构知识分享。" data-from="0" data-is_biz_ban="0"></mp-common-profile></section><p style="margin-bottom: 0px;">我创建了一个知识星球,专门讨论架构内容,有任何架构方面的问题都可以直接向我提问。</p><p style="text-align: center;margin-bottom: 0px;"><img class="rich_pages wxw-img js_insertlocalimg" data-ratio="1.1074074074074074" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_jpg/zJJ31Zu16UeBc6vDJpc3y7bNUB91HEglibjLzIlPfBdBHRHYpZyFc0cPRB3DOdJot9tzCFseff5RY19OrvO9Bkw/640?wx_fmt=jpeg" data-type="jpeg" data-w="1080" style="" src="https://img.haomeiwen.com/i11186073/a46faa5baf0088aa.png"></p><p style="display: none;"><mp-style-type data-value="3"></mp-style-type></p><blockquote><p>本文使用 <a href="https://www.jianshu.com/p/5709df6fb58d" class="internal">文章同步助手</a> 同步</p></blockquote>

    相关文章

      网友评论

          本文标题:扩展性的演进

          本文链接:https://www.haomeiwen.com/subject/gfdlydtx.html