引用说明:原文来自于http://www.jdon.com/jivejdon/thread/37793#23126151 ,为了方便本人阅读,文本格式略有调整。
1. 异步
同步调用使得组件和组件之间紧密耦合起来,这样就使得要想伸缩应用就需要伸缩所有的组件,这不仅带来使得伸缩的成本增加,而且这种高度耦合性使得伸缩变得更加困难。因此我们需要从应用角度划分出,哪些业务操作是紧密关联的,哪些是可以异步 执行的,划分出那些可以异步 执行的操作,然后将其进行异步 化处理(比如通过JMS,事件队列,多播消息等或者线程池等),这样划分的好处就是系统可以应对更大的访问量,消弱访问峰值,比如在同步的时候A调用了B,那么用户能接受响应时间就是A处理时间+B处理的时间,而采用异步 以后,当访问量增大的时候,因为A和B异步,那么A很快返回,用户体会不到延迟,而B的处理时间由原来的2秒处理完毕,变为3秒处理完毕,而B得处理都是在后台进行的,不会影响到客户响应事件,同时异步 也起到了消弱峰值的作用。
其实在社会生活中也存在很多异步 的场景,比如老板和秘书,假如老板没有秘书,那么势必老板在处理完事情A之前没有办法处理新的事务 ,而有了秘书以后,有什么次要的事情让秘书去办,同时老板可以做其它的重要的事情O(∩_∩)。
因此异步 不仅利用底层框架平台的异步 性,更重要的是如何做到应用本身的异步 性,只有做到了这一点才算是真正的异步 。
2. 泳道设计
通过泳道(非常形象的比喻)将错误进行隔离,使得不同的错误域的错误不会相互干扰,这样也就不会因为系统某一部分的错误影响到系统的其它的部分。
3. 缓存
在系统多个层使用缓存 ,比如在数据库前面的Model缓存,页面,页面片段缓存 等。至于对象缓存 ,jdon已经讨论太对了呵呵。
3. 监控
我们应该站在真正用户的角度去理解系统的性能,包括从外部网络测试用户体验以及内部系统的各个组件调用的次数以及每次调用的时间等等。
4. 复制
数据库读写库分离,这样不仅可以做到一定的容灾,而且可以通过读写分离来减低写数据库的压力。
5. 切分
没有切分就没有伸缩性 ,因此一个具有良好伸缩性 的系统必须进行切分,而切分可以从两个地方入手,首先应用角度来说,可以将系统在垂直方向上面分层(这是一种系统架构级的粗粒度的切分),同时将系统的每个层按照功能或者资源进行水平的切分(这是一种相对细粒度的应用级的切分)。
其次对于数据的切分,比如将用户信息,交易信息,商品信息等独立存储,数据库的切分主要有读写库分离以及Sharding技术。
6. 尽量少用关系数据库特性
系统使用关系数据库的特性越多,那么伸缩性 就会变得越差,这就要求将应用逻辑从数据库真正的移动到应用中来,数据库仅仅是一种存储的技术手段,而不是应用逻辑运算的地方。
我想这一点大家应该比较清楚,如果将业务逻辑用存储过程实现,那么就会造成非常差的伸缩性 ,但是我想说的是及时不用关系数据库的特性,如果我们不能从应用的角度去设计系统,照样会造成很差的伸缩性 。比如目前普遍采用的SSH,其实说白了这还是一种面向过程的开发,每次业务操作都是从Dao获取数据,然后Service改变一些数据,最终调用Dao保存数据,这种方式还是一种没有伸缩性 的方案。
那么什么样的方式比较具有伸缩性 ,我个人认为通过领域建模和分布式缓存 ,通过对象建模形成业务对新,业务对象以聚合的方式存在缓存 中(当然随着KEY-VALUE的不断流行,我们可以直接将聚合跟存放在KEY-VALUE存储系统中),每次业务操作都是存缓存 中取出业务对象,调用业务对象进行业务操作,操作的过程中,业务对象会触发领域事件,然后最终领域事件监听器调用技术组件完成一些附加操作,采用这种方式,我们还可以采用异步 的领域事件,这就使得系统的并发通过JAVA本身的内存锁机制实现,而不是靠原来的数据库的事务 隔离性来保证并发安全性。
7. 压力和性能测试
在系统发布前进行压力和性能测试,尽管不会发现所有隐藏的问题,但是它也是非常值得的。
8. 容量规划以及伸缩性 探讨会
我们要清楚的认识到当前系统能支持的负载,以及系统中可能存在的性能和伸缩性 的瓶颈在哪里,在解决了某一个伸缩性 的瓶颈以后,我们就需要关注下一个随着系统不断增加可能带来伸缩性 瓶颈的问题。
9. 回滚
任何操作都有可能失败,因此我们的系统一定要做好回滚操作,这个回滚操作室广义的回滚,具体可参考“可伸缩性和可用性反模式”。
10. 根源分析
确保能在发生问题的时候找到问题的根源,做到治标治本。
11. 关注系统质量
应该在系统开始的时候就关注系统质量,而不是在测试阶段出现问题的时候才考虑如何伸缩,那个时候就晚了。
分享到:
相关推荐
总的来说,设计一个优秀的分布式文件系统需要综合考虑诸多因素,包括但不限于兼容性、透明性、持久性、可伸缩性、安全性以及一致性。同时,选择合适的架构模型和持久化策略是确保系统高效、可靠运行的关键。通过理解...
1. 面向云服务的应用开发:在云时代,应用开发的重点转向了可伸缩性、灵活性和高可用性。开发者需要考虑如何利用云计算的特性,如按需扩展、快速迭代和自动化的运维。 2. 架构设计要点: - **Azure中的基本常数**...
7. **可伸缩性**:设计具有弹性扩展能力的数据库,以适应流量波动,例如使用分布式数据库、读写分离或集群解决方案。 8. **预存程序**:利用预存程序(存储过程)优化性能,减少网络通信,提高数据库操作的安全性和...
总结来说,微服务架构上云的最佳实践要求我们依据业务领域进行服务拆分,应用DDD原则强化业务与技术的协同,合理设计服务间的交互,并充分利用云计算资源和技术来优化系统的性能和稳定性。在整个过程中,持续改进和...
阿里云归档存储是一种针对长期数据存储的服务,它提供了经济高效且持久的数据...以上是阿里云归档存储的最佳实践和使用要点,通过这些知识,开发者可以更有效地利用阿里云归档存储服务,确保数据的安全性和可访问性。
整体而言,Oracle的这份白皮书为使用MySQL作为数据存储的网站提供了详尽的架构建议,从不同的服务类型和网站规模出发,详细阐述了各种参考架构的设计目标、设计要点以及运维管理的最佳实践。这份文档不仅适用于那些...
- **应用场景**:企业可以通过AWS快速搭建可伸缩的应用程序,无需关心底层的硬件资源管理。 2. **Netflix**: - **实践要点**:Netflix采用了一套基于微服务的架构,通过持续集成/持续部署(CI/CD)流程实现了快速...
本文基于某银行的最佳实践分享,探讨了建设容器云平台之前不能忽视的三个评估要点。 #### 明确建设目标 在启动任何IT项目之前,首要任务是明确项目的目标。对于容器云平台而言,其目标应当与企业的整体战略紧密...
高可用与可伸缩性也是大型分布式网站架构设计中不得不考虑的问题。本书可能会介绍怎样通过服务拆分、微服务架构设计来提高系统的伸缩性,以及如何设计冗余机制和灾难恢复策略来保证系统的高可用性。 最后,大型...
高端实现强调在满足功能需求的同时,注重系统的性能、可伸缩性、安全性和可测试性。这可能包括了负载均衡策略、数据缓存机制、分布式计算的设计以及错误处理和日志记录的规范。 6. 持续集成与持续交付(CI/CD): ...
SRE(站点可靠性工程)是现代IT领域中一种先进的运维理念,它结合了软件工程的原理和传统的系统管理,以确保大规模分布式系统的高可用性、可伸缩性、效率和可维护性。SRE的核心思想是承认错误是不可避免的,但通过...
- **可伸缩性**:系统处理负载增加的能力,即随着需求的增长而扩展其性能的能力。 **知识点四:停机及其影响** - **分类**:计划内停机(如定期维护)和计划外停机(如系统故障)。 - **影响**:计划外停机可能会...
- **可伸缩性**:随着企业的发展,解决方案需能够灵活扩展以满足新的安全需求。 - **可靠性**:确保系统的稳定性和安全性,减少因安全问题导致的服务中断。 - **互操作性**:不同安全组件之间应能协同工作,避免...
- **可伸缩性**:设计可扩展的应用架构,确保系统能够应对不断增长的数据量和用户数量。 - **故障排查**:利用日志分析、性能监控等工具和技术快速定位问题原因。 #### 8. 实战案例分析 - **企业内部网建设**:详细...
常见的二次支护方案包括“锚杆+锚索”联合支护、可伸缩性支护等。 通过二次支护后,巷道的顶板下沉量、两帮移近量、底鼓量等应控制在允许范围内,围岩稳定性应满足设计和使用要求。这样不仅能够延长巷道使用寿命,...
IBM DB2 10 for Linux, UNIX, and Windows提供了多种技术特性,比如DB2 Connect技术用于连接远程数据库系统,DRDA协议用于数据库间的通信,GPFS文件系统用于提升文件系统的可伸缩性和可用性,以及InfoSphere用于数据...
- **考虑非功能性需求**:除了满足功能需求外,还需要考虑到性能、安全性、可伸缩性等非功能性需求。这些因素将直接影响到架构的选择和技术栈的决策。 #### 2. **设计模式的应用** - **掌握常用的设计模式**:如...
每个组件的介绍都包含了其工作原理、配置方法及最佳实践,帮助读者掌握这些技术的关键要点。 3. **设计模式与最佳实践**:这一部分是本书的重点之一,通过具体的案例研究,探讨了多种设计模式及其在J2EE环境下的...
**负载均衡技术** 是一种网络技术,用于在多台服务器之间分发网络负载,以避免单点故障、提高响应速度和系统可伸缩性。F5 BIG-IP LTM(Local Traffic Manager)是F5 Networks公司提供的负载均衡解决方案,它能够对...