对于大多数架构师而言,“可扩展性”在软件架构方面是最虚无缥缈的说法。这毫不奇怪,因为可扩展性正是如今软件设计领域最值得优先考虑的要素。然 而,计算机科学家们还无法了解一套单独的架构如何才能扩展至各类应用环境当中。相反,我们在数量繁多的方案中所设计出的可扩展性架构,往往以业界较为通用 的已知可扩展模式及个人偏好为标准。简单来讲,打造一套具备可扩展性的系统已经变得更像是一门艺术而不单单是技术。
我们常常会通过观摩杰作体会并学习艺术的精髓,而可扩展性也应该遵循同样的路线!
在这篇文章中,我将列出数款为大家所耳熟能详的可扩展性架构。通常情况下,架构师们完全可以借鉴已知的可扩展架构模式,进而创造出新的可扩展架构。
- LB (负载平衡器) + 无共享单位 - 该模型中包含一系列单元,各单元彼此间不共享任何内容,且一致指向一个将输入文讯按一定条件发往单元处的负载平衡器(这构成一个循 环,以负载等情况为基础)。每个单元可以是一个单独的节点或是紧密耦合的节点所构成的集群。用户可以使用DNS循环、硬件负载平衡器或者软件负载平衡器达 成负载平衡效果。创建一套负载均衡的层次结构,并在其中结合前面提到的各种负载平衡器也是可行的。在由Michael Stonebraker撰写的《 无共享体系架构实例 》一文中,专门讨论了此类架构。
- LB + 无状态节点 + 可扩展存储 - 传统的 三层式Web架构 使用的就是这种模型。该模型包括数个与可扩展存储交互的无状态节点以及一个分布于节点间负载中的负载平衡器。在这一模型中,存储通常作为限制因素存在,但NoSQL存储则可以利用这套模型创建出具备相当可扩展性的系统。
- 点对点架构 (分布式Hash列表 (简称DHT)以及内容寻址网络(简称CAN)) -这套模型提供了一些传统的 可扩展算法,这些算法的各个方面几乎全部按对数进行了等比例增加。举例来说,像Chord、Pastry(特指免费版)以及CAN都属于此类。而以 Cassandra为代表的、基于P2P架构的几款NoSQL系统也是其中的成员。《 展望P2P系统中的数据 》一文就深入探讨了这类模型的各种细节。
- 分布式队列 – 这种模型以将队列实施(即先进先出交付机制)作为网络服务处理为基础。该模型通过JMS队列而广泛得到采用。一般会遵循这种做法的有任务队列以及通过保持队列分级体系实现扩展性的任务队列版本,后者在负载无法及时处理时,任务会由低级层面向高级层面传递。
- 发布/订阅模式 - 一般用于通过网络向彼此发布订阅讯息。《 发布与订阅的多面性 》这一经典论文中详细的介绍这一模型,该模型方面最典型的例子即 NaradaBroker与 EventJava 。
- 小道消息与自然灵感式模型 - 这种模型源自日常生活中小道消息的传播途径,也就是每个节点将随机选择后续节点以交 换信息。正如现实生活中的实际反馈,这种八卦型算法在信息传播方面出奇地迅速。该模型的另一大分支则是受到生物学影响的启发式算法。自然世界中存在着大量 协调及扩展方面极为卓越的固有算法。举例来说,蚂蚁、人类以及蜜蜂等等,都能够以最简洁的交流方式协调好扩展性方面的需要。模型中的算法正是借鉴了这些实 际存在的现象。在论文《 从流行病的蔓延到分布式计算 》中对这种模型有着详尽的叙述。
- 地图缩小/数据流 - 这一概念首先由谷歌公司提出,地图缩小为工作的描述及执行提供了一套可扩展的模式。虽然内容 简单,但它仍然成为联机分析处理方面的首要处理模式。数据流则是一种更先进的方式,用来表达执行信息;而像Dryad及Pig这样的项目为数据流的执行提 供了可扩展的框架。论文《 地图缩小:大型集群上的简化数据处理 》中设置了专门的主题,详细讨论这一内容。Apache的Hadoop就是这种模型的代表性产品。
- 责任树形图 - 这种模型打破了递归问题的束缚,将整个流程以树状形式加以处理;每个父节点将工作下放至子节点。这种模型扩展性强,并已经被应用于数款可扩展性架构当中。
- 流处理 - 这种模型被用于处理源源不断的数据流及数据。这种处理方式通过网络中的处理节点获得支持(例如Aurora、Twitter Strom以及Apache S4等)。
- 可扩展存储 – 该模型的应用范围从数据库、NoSQL存储、服务注册到文件系统都有体现。 链接中的这篇文章 以可扩展性为切入点对其进行了深入讨论。
综上所述,可扩展性的实现只有三种方式,即:分布、缓存及异步处理。前文所提到的各种架构事实上都是把这三种方式进行不同组合并加以实施。而另一方 面,不利于可扩展性的因素,除了糟糕的编码本身,全局性协调也起到了重要的影响。简单来说,任何一种全局性协调都会限制系统的可扩展性。本文中所提到的各 种架构也只是在做好了本地性协调,而非全局性协调。
然而,将它们有机地结合起来以创建一套极具可扩展性的架构可不像说起来那么容易,除非我们能找到一种全新的扩展模式。不过经验告诉我们,比起搞一套全新的架构,采用为我们所熟知且更易驾驭的可扩展性解决方案永远是更好的选择。
|
相关推荐
第三期可能关注了架构师的领导力和沟通技巧,这是成功架构师不可或缺的部分。如何与团队成员、管理层和其他利益相关者有效地沟通架构决策,以及如何引导团队达成共识,可能是这一期的重点。同时,可能会讨论到持续...
《架构师成长之路》这本书是为那些志在成为优秀架构师的IT专业人士量身打造的指南。它深入探讨了架构师的角色、职责以及如何在职业生涯中逐步提升自己的技能和视野,以适应快速变化的IT环境。 一、架构师的角色与...
但不论何种角色,技术技能和业务经验都是架构师不可或缺的硬指标。 互联网+时代,系统架构展现出几个特征:首先是产品敏捷化,这体现在弱化长期规划,强化快速迭代,实施敏捷开发,并且业务调整的速度很快。其次是...
《软件架构师教程》是一本全面且深入的指南,旨在帮助读者掌握软件架构设计的核心概念、原则和实践。作为系统架构师考试的重要参考资料,这本书涵盖了高级软件架构师所需的知识点,同时也是系统分析师提升专业能力的...
其次,人际关系能力是架构师不可或缺的特质。有效的沟通能确保团队成员对项目目标有共识,避免因误解导致的效率损失。学会谈判则是处理利益冲突、达成共识的关键,特别是在项目中需要平衡各方需求时。此外,风险意识...
架构师要能够根据系统需求选择合适的架构模式(如微服务架构、事件驱动架构、服务导向架构等),并考虑到系统的可扩展性、可用性、安全性、性能和成本等因素。设计软件架构时,还需要考虑到系统的部署环境(如云环境...
在IT行业中,架构师扮演着至关重要的角色,他们负责设计和规划复杂的系统,确保软件项目的稳定性和可扩展性。"架构师全面体系架构"这一主题涵盖了架构师在开发过程中的各个方面,包括但不限于系统架构、软件架构、...
设计原则如松耦合、高内聚、可扩展性、可维护性等,是评价优秀架构的基础。 2. **性能优化**:如何通过负载均衡、缓存策略、数据库优化等手段提升系统性能,是架构师必须掌握的技术。 3. **分布式系统**:包括...
云原生Kubernetes全栈架构师实战是指通过Kubernetes构建高效、可扩展的云原生应用,并成为全栈架构师。为了达到这个目标,需要了解Kubernetes的核心概念、安装和配置、核心组件等。 一、Kubernetes核心概念 ...
软件架构师作为一个专业领域的高级职位,其核心职能包括确保软件系统的稳定性、可扩展性和安全性等。根据提供的文件内容,软件架构师应该了解的知识和技能是多维度的。以下是对文件内容中提到的关键知识点的详细阐述...
系统架构师是IT领域中的高级职位,负责设计、规划和管理企业的信息技术架构,以确保系统的高效、稳定和可扩展性。这个合集包含了丰富的学习资料,旨在帮助考生全面掌握该领域的知识和技能。 在这个压缩包中,我们...
此外,个人特性中还应包括人际交往能力、领导力、团队合作精神等,这些都是成为一个高效架构师不可或缺的软技能。 #### 技术技能 - **抽象思维与模型化表达**:架构师需要能够将复杂的系统抽象成易于理解和操作的...
系统架构师是一个在IT行业中至关重要的角色,他们负责设计、规划和管理软件系统的整体结构,以确保系统的高效、稳定和可扩展性。本教程集合了多个版本和来源的资料,旨在为准备成为系统架构师或者正在提升自己在这个...
系统架构师需理解如何通过架构设计来满足性能、可扩展性、安全性和维护性的需求。 4. 信息化系统 "信息化系统.pdf"介绍了企业信息系统的设计和实现,包括数据管理、业务流程集成和决策支持等方面。系统架构师需要...
架构师并不仅仅是高级程序员,他们更像是一名技术领航者,负责整体系统的设计和规划,确保系统的可扩展性、稳定性和性能。他们需要具备扎实的技术基础,对计算机科学原理有深入理解,并能将这些理论应用到实际项目中...
最后,作为架构师,关注技术趋势是必不可少的。2016年,人工智能和大数据开始崭露头角,可能有文档分析了这些技术如何影响架构设计,以及如何在实际项目中应用。 总的来说,《架构师》这份文档集提供了丰富的学习...
7. 强调可扩展性,确保系统能够适应未来的变化。 8. 平衡易用性和易维护性,使系统既不过于复杂也不过于简单。 9. 架构设计中的安全性考虑,需要在设计阶段就充分考虑软件的安全性能。 10. 稳健性,即架构需要能够...
云计算架构师培训主要围绕着云计算的基础概念、技术特性、历史发展以及应用趋势展开。在此次培训中,学员将深入理解云计算与虚拟化...这些知识点对于有志于成为云计算架构师的专业人士来说,都是必不可少的基础知识。
《Sina架构师:基于MySQL可扩展架构设计》是一本深入探讨如何利用MySQL构建高可用、高性能、可扩展的数据库架构的专业书籍。该书主要针对的是互联网行业中的大型网站和应用,尤其是那些需要处理海量数据并确保服务...