在构建线性可收缩应用时,需要新的模式和中间件架构吗?GigaSpaces的CTO,Nati
Shalom认为,现有中间件是为以分层为基础的方法而设计的,它们不适合真正的线性可伸缩架构。他提出了新的基于自给自足处理单元的中间件栈(middleware
stack)作为替代,它支持分区/向外扩展(scale-out)模型。虽然Shalom提出了一个新的中间件栈,但是几年前,微软的Pat
Helland就提出了某种事务性模式及形式描述,它们可被用在被他称为准无限可伸缩的系统中。
Nati
Shalom声称
分层方法(消息传递、数据和业务处理)是一个死胡同,因为在每一层中和层与层之间,它引入了很多状态和“往返的消息”,这样做的目的仅仅是为了保持共享数据的同步。他指出分层方法注定提供非线性可伸缩性,为了使吞吐量线性增加,就必须按指数增加新CPU数目。
Nati提出了一种不同的替代架构方法,该方法中,这些分层被一起放入一个处理单元,确保消息传递、数据和处理发生在相同地址空间内。结合处理单元间的无共享架构(share-nothing
architecture)
,当处理需要增加时,只需增加机器即可,这样它就给出了一个线性可伸缩解决方案。这个模型显然非常适合无状态应用,但是对于有状态应用,事情变得有些复杂。之前,Nati曾提及如何伸缩一个有状态应用
。他通过2个基本规则:
- 你需要减少相同数据源上的连接。
- 你需要移除你的应用中不同单元间的依赖。只有每个工作单元是自给自足,同时不和其它单元共享任何东西,你才能获得线性可伸缩性。
这些是可伸缩性的基本原则。在有状态环境中,要实现这两个原则的一般模式是使用分区,即,将你的应用拆成不同的工作单元,每个单元处理你应用数据特定的子集。接下来,你就可以简单地通过增加更多的处理单元获得伸缩性。
如果数据可被划分成分离的应用数据子集,那么一个应用可以被向外扩展成许多独立的处理单元,其中每个单元拥有子集所需的全部数据。可用这种方法划分的典型数据的例子是Web应用的会话信息。然而,当很多应用进程需要访问/更新相同的共享数据时,这种分区模型不起作用。
Shalom说:“在这种情况下,数据可以通过远程分区被引用,即业务逻辑和消息传递将位于一个处理单元中,而数据在一个远程分区中——以这种方式,你仍然可以获得可伸缩性,虽然它有些滞后。”
但是,要是共享数据的容量巨大该怎么办?一种解决方案是,将同类数据分区进入不同的数据存储分区,但是这种解决方案需要解决两个主要问题:
- 聚合。在非集中的数据存储上如何执行查询?(即跨越一个很多数据存储分区的查询)
- 使用原子事务 VS 不使用原子事务。分布式事务可伸缩性不太好,因此需要其它的解决方案。
对于聚合问题,Shalom给出了解决方案:
你可以将查询并行化,这样每个查询针对不同的分区运行。这样做,你利用了每个分区内的CPU和内存能力,使你的请求被真正并行处理。注意,发起查询的客户端获得了被聚合的结果,而不知道分区是物理分离的,仿佛它基于单个的巨大数据存储运行,同时还有一个主要区别——它更快!
为了找出原子事务问题的解决方案,我们求助于Pat Helland,他已在一篇论文(“超越分布式事务的生命:一个变节者的意见
”)中着手解决这个问题,该文作于他在Amazon.com工作期间。在文中,他总结:在大的伸缩性系统中,人们基本上不应该使用跨系统事务。
对于在构建可收缩系统中被使用的概念和抽象,缺乏广为人知的术语。作为对此的回应,Helland定义:
- 实体(Entities)
是指定(键控)数据的集合,这些数据在实体内会被自动更新,但是更新从不跨实体发生。
- 活动(Activities)
由实体内的状态集合组成,被用来管理与单独搭档实体的消息传递关系。
得出决定的工作流,正如已被讨论了多年一样,功能在活动中,活动在实体中。当人们在查看准无限伸缩性时,令人惊讶的发现,它具有工作流细粒度的天性。
通过这个定义,Helland指出在相同的事务中不能更新两个实体。作为替代,他采用了“事务可串行性的多重分离范围”,后来,在论文中他将这个范围定义为实体。在此定义下,一次多个实体的更新不能在单个原子事务中被执行,而必须通过跨实体的消息传递,以实体间P2P(Peer-to-Peer)的风格完成。这种消息传递引入了自身管理会话状态的需要,并且Helland将这种用于每个实体搭档的状态管理定义为活动。他给出了一个例子:
考虑处理一个订单,它包含许多要采购的项目。为每个单独项目的出货预留库存将是一个单独的活动。订单有一个实体,每个被仓库管理的项目有单独的实体。事务不能跨越这些实体被采用。
在订单内,每个库存项被单独管理。消息传递协议必须被单独管理。包含在订单实体中的每个库存项目数据是一个活动。尽管它不是这样被命名的,但是这个模式频繁出现在大规模应用中。
由于这种方法引入的实体和消息传递之间缺乏事务的原子性,它引起了新的问题,对业务逻辑完全隐藏了其踪迹;消息重试和处理必须能处理幂等性。对等实体间也需要异步消息传递——细粒度工作流的对等强制实现——包括取消/确认操作随后的试探性操作。
Nati Shalom所期望的架构已在GigaSpaces平台
中被实现,它最近将发布版本6。Pat
Helland的论文是永恒的,绝对值得细细品味。
查看英文原文:
New patterns and
middleware architecture needed for true linear scalability?
原文:http://www.infoq.com/cn/news/2007/08/scalability-patterns
分享到:
相关推荐
- **CAP理论**:强调在分布式系统设计中需要权衡可用性、扩展性和一致性之间的关系。 - **可用性**:系统在任何情况下都能返回一个结果。 - **扩展性**:系统能适应不断增长的数据量和用户量。 - **一致性**:...
Apache RocketMQ是一个由阿里巴巴开源的分布式消息中间件,它以高吞吐量、可伸缩性、高可靠性和分布式特性著称。本项目包含RocketMQ的核心源代码文件,这些文件经过详细注释,旨在帮助开发者更好地理解代码逻辑与...
作为一款久经考验的解决方案,Tuxedo以其高可用性、可伸缩性和安全性在IT领域占据重要地位,尤其适用于关键任务应用程序。 Tuxedo的主要特性包括: 1. **分布式事务处理**:支持跨多个系统的事务处理,确保数据的...
它以其高吞吐量、可持久化、高伸缩性及可靠性而被广泛应用于大数据处理领域。接下来将详细介绍Kafka的核心知识点。 首先,Kafka能够同时为发布和订阅提供高吞吐量,消息处理速度极快。根据文档描述,Kafka每秒能够...
内容概要:本文介绍了西门子S7-200模拟器bet2.5e版本的功能特点及其应用价值。该模拟器支持多种通讯协议如PPI和Modbus RTU,允许用户在没有真实PLC设备的情况下进行程序测试。它不仅能够模拟主站和从站的通讯,还可以便捷地导入用户程序并提供无限期使用的优势。尽管缺少网络通讯功能,但对于基础学习和简单项目的测试依然非常实用。 适合人群:工控领域的初学者、工程师和技术爱好者,尤其是那些希望在没有真实PLC设备的情况下进行编程和通讯测试的人。 使用场景及目标:适用于需要测试PLC程序和通讯协议的场景,帮助用户熟悉PLC编程和通讯机制,提高开发效率,减少硬件依赖。主要目标是在无硬件条件下完成程序调试和通讯测试。 其他说明:文中详细展示了如何使用VB.NET、Python和梯形图语言进行具体的编程实例,强调了注意事项如地址映射、波特率设置等。此外,还提到了一些替代方法来弥补网络通讯功能的不足,如使用虚拟串口工具。
内容概要:本文介绍了一款用于抽水蓄能容量优化配置的CPLEX程序,旨在帮助用户通过数学规划方法实现抽水蓄能电站的最佳容量配置。程序不仅提供详细的代码示例,还包括视频讲解,使编程小白也能轻松理解。文中详细解释了容量优化的目标、配置参数的选择以及储能出力的重要性,并展示了如何通过CPLEX库构建线性规划模型,设定目标函数、添加约束条件并求解模型。此外,文章还讨论了实际应用场景中的注意事项,如充放电效率、水库容量变化、负荷跟踪约束等,并提供了修改参数进行场景分析的方法。 适合人群:对抽水蓄能容量优化感兴趣的电力系统工程师、研究人员及编程爱好者。 使用场景及目标:适用于需要进行抽水蓄能容量优化的工程项目,目标是通过合理的容量配置降低运营成本,提高系统稳定性。用户可以通过修改配置文件中的参数,如抽水效率、电价等,来进行不同的场景分析。 其他说明:程序包内含实战讲解视频,有助于更好地理解和应用代码。代码中包含了多种实用技巧,如处理浮点数精度、时间序列数据等,这些都是实际项目中积累的经验。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了三泵恒压供水控制系统的硬件配置、PLC程序设计、触摸屏组态以及调试技巧。首先讨论了硬件配置的选择,包括变频器、压力传感器的安装位置及其重要性。接着深入探讨了PLC程序的核心逻辑,特别是PID压力调节和泵组轮换策略,确保系统能够高效节能地运行并延长设备寿命。此外,文章还强调了触摸屏组态的关键要素,如压力趋势图和手动干预界面的设计。最后,作者分享了一些调试经验和常见故障排除方法,如模拟量处理、滤波算法的应用以及紧急情况下的手动模式保障。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和恒压供水系统感兴趣的读者。 使用场景及目标:适用于需要设计和实施恒压供水控制系统的工程项目,帮助工程师掌握从硬件选型到软件编程再到系统调试的完整流程,最终实现稳定的供水控制。 其他说明:文中提供了详细的IO分配表、梯形图逻辑示例和触摸屏界面设计建议,有助于读者更好地理解和应用相关技术。同时,作者还分享了许多实践经验,为实际操作提供了宝贵的指导。
内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王搭建三泵恒压供水系统的全过程。首先阐述了硬件配置,包括IO分配、接线方式以及变频器的使用方法。接着深入探讨了PLC程序的核心逻辑,特别是压力闭环控制和泵轮换策略的设计。文中还分享了组态王界面设计的经验,强调了动态压力曲线和手自动切换功能的重要性。最后,作者结合实际案例,指出了调试过程中常见的问题及其解决方案。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和HMI设计有一定基础的人群。 使用场景及目标:适用于需要构建高效稳定的恒压供水系统的工程项目。主要目标是确保系统能够根据管网压力自动切换水泵,保持压力稳定,同时提高设备使用寿命和维护效率。 其他说明:文章不仅提供了详细的理论讲解,还包括了许多实用的操作技巧和经验分享,有助于读者更好地理解和掌握相关技术和应用场景。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
将ppt转换成图片时,所有图片的文件名中会出现“幻灯片”三个字,这时,可以将本批处理文件复制到对应文件夹内,双击运行后,可以批量删除图片文件名中的“幻灯片”三个字。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了如何利用Matlab和CPLEX构建共享电动汽车的两阶段优化模型。首先,通过整数规划确定最佳充电站位置,考虑用户需求覆盖率和建设成本之间的权衡。其次,采用动态调度模型处理实时车辆分配,确保各区域需求得到满足的同时优化运营成本。文中还讨论了数据预处理技巧如K-means聚类、移动平均滤波以及CPLEX求解器的高效配置方法。 适合人群:从事交通规划、物流配送等领域研究的专业人士,尤其是对数学建模和优化算法有一定了解的研究人员和技术开发者。 使用场景及目标:适用于城市交通管理部门、共享汽车运营商等机构进行电动车基础设施布局规划和日常运营管理。主要目的是降低建设和运营成本,提高用户体验和服务质量。 其他说明:作者分享了许多实践经验,包括如何避免常见错误(如矩阵转置问题)、提高求解速度的小技巧(如稀疏矩阵的应用)以及如何通过可视化工具辅助结果分析。此外,还提到了一些潜在改进方向,如加入充电桩排队时间和路网结构的影响因素。
内容概要:本文旨在构建一种基于记忆序列回放机理的机器人全局路径优化算法模型。通过模拟大脑海马体和前额叶中的记忆回放过程,改进了传统的机器人导航算法。模型采用自适应的Top-k竞争规则和回报折扣思想,使得智能体能够在复杂障碍物环境中快速找到最短路径。实验结果显示,智能体经过1-3次探索即可收敛到稳定状态,并找到最短路径,验证了模型的有效性和快速收敛性。 适合人群:对机器人导航、智能算法、神经科学感兴趣的科研人员,尤其是从事机器人路径规划和认知计算模型研究的学者和工程师。 使用场景及目标:①适用于复杂环境下的机器人路径规划与导航任务;②用于研究大脑记忆回放机制及其对决策过程的影响;③提高机器人在未知环境中的自主学习和适应能力。 其他说明:该模型不仅在仿真环境中表现优异,还在真实机器人实验中得到了验证。通过ROS平台和MATLAB接口,实现了对智能小车的有效控制和路径优化。此外,模型的收敛性和鲁棒性优于现有的DN2和基于小脑及基底神经节的混合模型,显示出更强的适应性和更高的性能。
基于迁移学习的端到端发音检错研究.pdf
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了基于51单片机的酒精检测报警器的设计与实现,涵盖了硬件选型、软件编程、功能实现等方面的内容。文中提供了两种不同版本的ADC芯片(AD0809和AD0832),分别阐述了它们的工作原理、代码实现及其优缺点。此外,文章还讨论了系统的各个组成部分,如MQ-3酒精传感器、LCD1602显示屏、按键设置、声光报警等,并给出了详细的代码示例和调试技巧。 适合人群:对单片机开发有一定基础的学习者、电子爱好者、从事交通安全管理的技术人员。 使用场景及目标:适用于防止酒驾的安全监控场景,旨在提高驾驶安全性和减少交通事故的发生。通过本项目的实践,读者可以掌握单片机的基本应用技能,了解传感器数据采集、处理和反馈机制。 其他说明:文中不仅提供了完整的代码实现,还分享了许多实际开发过程中可能遇到的问题及解决方案,如传感器预热、按键防抖、ADC读取时序等。同时,作者强调了该项目作为DIY作品,在正式应用中应注意合法合规性。
内容概要:本文详细介绍了基于虚拟同步发电机(VSG)技术的光储并网系统控制策略,涵盖光伏MPPT控制、储能直流稳压、VSG控制、虚拟阻抗增加及低压穿越控制等方面。针对每个控制策略提供了具体的实现代码和应用场景分析,强调了这些策略在保障电力系统稳定性方面的重要作用。文中不仅讨论了理论背景,还给出了大量实用的代码片段和技术细节,有助于理解和实施这些先进的控制策略。 适合人群:从事新能源发电系统设计、开发和维护的专业技术人员,特别是对光储并网技术和VSG控制感兴趣的工程师。 使用场景及目标:适用于希望深入了解光储并网系统内部工作机制的研究人员和技术爱好者;旨在为解决实际工程项目中的技术难题提供指导和支持,确保光储并网系统能够在各种复杂的电网环境下稳定运行。 其他说明:文章中提到的技术和方法已在多个实际案例中得到验证,能够有效提升系统的性能和可靠性。此外,作者还分享了一些调试经验和常见错误规避技巧,对于初学者非常有价值。
内容概要:本文详细解析了中兴ZXD2400电源电路图4.1版本,涵盖输入、转换和输出三大部分。输入部分介绍了LC滤波电路的作用及其参数计算方法;转换部分围绕UC3842芯片的工作原理展开,展示了其通过比较反馈电压和参考电压来实现电压稳定转换的功能;输出部分讨论了线性稳压芯片的应用。此外,还深入探讨了PWM控制、MOSFET驱动、补偿网络、电压采样、保护电路等关键设计细节,并提供了多个Python代码片段用于参数计算和电路特性模拟。文章不仅帮助读者理解电源电路的工作机制,还分享了许多实际操作经验和注意事项。 适合人群:从事电源设计的技术人员、电子工程师、DIY爱好者。 使用场景及目标:适用于希望深入了解电源电路设计原理和技术细节的人群,旨在提高读者对电源系统的理解和实际应用能力。 其他说明:文中提供的Python代码片段有助于快速定位关键芯片位置、计算重要参数,便于理论联系实际。同时提醒读者关注版本变更说明,避免因使用旧版图纸而导致的问题。
派克气动专业的系统组件