软件架构设计:属性、原则和实践

上传人:wt****50 文档编号:54907363 上传时间:2018-09-21 格式:PPTX 页数:45 大小:1.42MB
返回 下载 相关 举报
软件架构设计:属性、原则和实践_第1页
第1页 / 共45页
软件架构设计:属性、原则和实践_第2页
第2页 / 共45页
软件架构设计:属性、原则和实践_第3页
第3页 / 共45页
软件架构设计:属性、原则和实践_第4页
第4页 / 共45页
软件架构设计:属性、原则和实践_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《软件架构设计:属性、原则和实践》由会员分享,可在线阅读,更多相关《软件架构设计:属性、原则和实践(45页珍藏版)》请在金锄头文库上搜索。

1、软件架构设计: 属性、原则和实践,伍活欣 ,一个人一篇论文,Roy Thomas Fielding博士 架构风格与基于网络的软件架构设计。 Fielding博士是HTTP和URI等Web架构标准的主要设计者。也是Apache服务器的主要开发者。 定义和提出Restful架构风格。,什么是架构,对系统运行时元素的抽象.,关于抽象,抽象原则是架构设计的核心原则,Client,Cache,Proxy,Source,什么是架构风格,一组应用在设计上的约束,架构属性,性能 -Performance 可伸缩性 -Scalability 简单性 -Simplicity 可修改性 -Modifiability

2、 可见性 -Visibility 可移植性 -Portability 可靠性 -Reliability,运维友好性 Operations-friendly 安全性 -Security,架构属性,性能 Performance,性能,网络性能 Network Performance 吞吐量 throughput (TPS) 用户可察觉的性能 User-perceived Performance 延迟 latency 完成时间 completion 网络效率 Network Efficiency 网络交互频率和效率,案例1,点击加载更多,性能首先取决于应用的需求,然后是所选择的交互风格, 然后是实现

3、的架构,最后是每个组件的实现。,案例2,小明要给客人沏茶,需要多长时间?,用并行代替串行,案例3,论坛图片加载:点击数更新、个人积分更新、个人列表更新等等 推荐列表的获取(同时需考虑SEO的需要),用异步代替同步,AMI,AMD,案例4,分流轻事务和重事务,排队请取号:,现金业务,非现金业务,公积金业务,案例5,减少稀缺资源的占用和占用时间,启用Nginx传输压缩,降低下行带宽占用; 启用独立的静态资源域名,降低上行带宽占用; 一段相册的老代码: Connection cnn = DbService.getConnection(); 存储原图; 制作大中小图; statement.exec(s

4、ql); cnn.close();,案例6,尽量重用高成本资源,数据库连接池; 采用长连接; SPDY协议对TCP连接的复用; JVM对域名解析结果的缓存;,案例7,尽量用内存操作代替磁盘和网络操作,各种层级的缓存策略; 合并多个点击数更新请求再更新到DB ; MQ驱动合并多个消息异步发送;,案例8,尽量减少网络交互次数,就近访问:CDN、浏览器缓存、本地缓存; 中央配置本地缓存; 批量提交; 压缩传输;,原则回顾,性能优化应首先考虑需求的优化和交互的优化 用并行代替串行 用异步代替同步 分流轻事务和重事务 减少稀缺资源的占用和占用时间 尽量重用高成本资源 尽量用内存操作代替磁盘和网络操作 尽

5、量减少网络交互次数,架构属性,可伸缩性 Scalability,可伸缩性,架构支持大量组件或大量组件之间交互的能力,弹性,案例9,取模和一致性哈希的震荡率对比测试 Node Increment:1,Sample Size:10W,Key:UUID,Hash:Ketama,可伸缩性,简化组件 分布式集群 用规则代替映射 选用弹性好的路由算法 善用负载均衡和代理 配置弱中心化 实现运维自动化:DNS自助、LB自助、VM自助、运行环境构建、代码部署、监控,架构属性,简单性 Simplicity,简单性,分离关注点原则 -分层设计 -面向接口而不是实现 -分离对象的使用和创建 IOC -分离应用的业务

6、逻辑与系统级服务 AOP 通用性原则 可理解性,架构属性,可修改性 Modifiability,可修改性,可进化性 Evolvability 纵向升级 可扩展性 Extensibility 横向扩展,添加新能力 可定制性 Customizability 临时性提供非常规服务的能力 可配置性 Configurability 部署后对组件修改的能力 可重用性 Reusability 架构元素被其他应用重用的能力,静态,动态,可修改性,版本化一切:接口版本、协议版本、序列化版本、消息版本等等 微内核+插件化 表达式支持、按需脚本和自定义实现 预留Hook和扩展点 配置文件、配置接口、控制台响应 细粒

7、度切割然后组合成粗粒度 解耦合和遵循公共规范,如OSGI、JSON-RPC等,架构属性,可见性 Visibility,可见性,可调式、可仲裁、可监控、可测试的能力,案例10,Memcached中存储 序列化的Java对象 VS BSON VS JSON; RPC序列化对象采用 Hessian2二进制 VS JSON; RPC协议采用HTTP VS ICE; 遵循Restful风格的Http请求 VS 普通Http请求; 启发式控制器 VS 简单规则控制器;,为了创造非常复杂的事物,放弃一定的控制和可见性是必要的,可见性,使用可读性强的消息体和协议; 使用行业支持性广的规范和协议; 在设计之初就

8、预留监控口、健康检查口和调试口; 在关键业务逻辑预留Info或Debug级别日志信息; 日志级别可动态调整,范围可控; 支持运行时的人机交互; 支持运行时按需监控和调试;,架构属性,可移植性 Portability,可移植性,遵循规范; 避免使用一些运行环境专有的特性; 尽量避免本地依赖; 使用虚拟机机制,如JVM; 还是抽象;,架构属性,可靠性 Reliability,可靠性,可用性 Availability,健壮性 Robustness,案例11,案例12,1,2,3,4,5,1,2,3,4,5,5,1,1,1,2,2,2,3,3,3,4,4,4,5,5,两种不同的一致性哈希实现,可靠性,

9、为每个服务制定SLA,实时度量并及时报警; 功能可降级可开关; 区分主体功能和装饰功能,装饰功能可异步可降级可关闭; 为每一级入口添加分流、限流和配额控制器; 避免单点,增加冗余; 多活; 做好充分的故障预期;,可靠性,充分验证的故障响应机制,如Failover、Failfast、Failback、Failsafe; 去中心化或弱中心化; 考虑部署隔离,甚至物理隔离; 同城多机房,异地备份; 制定备份策略,冷备、热备、增量、全量、异地、多介质; 充分考虑人机交换的办公障碍;,架构属性,运维友好性 Operations-friendly,运维友好性,Fault recovery; Quick s

10、ervice health check; Allow emergency human intervention; Redundancy,avoid single points of failure; Keep deploy simple; Support single server deployment;,以下内容摘录自: James Hamilton:On Designing and Deploying Internet-Scale Services,运维友好性,Use performance counters for all operations Audit all operations;

11、 Track all fault tolerance mechanisms; Support a “big red switch”; Control admission; Ramp up support;,运维友好性,Record all significant actions; Make all reported errors actionable; Give enough information to diagnose; Chain of evidence;,架构属性,安全性 Security,引用说明,Roy Thomas Fielding:架构风格与基于网络的软件架构设计 James Hamilton:On Designing and Deploying Internet-Scale Services,谢谢!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号