软件架构

软件架构是对软件系统运行时状态的抽象,一个软件架构是一个软件系统在其操作的某个阶段的运行时(run-time)元素的抽象。一个系统可能由很多层抽象和很多个操作阶段组成,每个抽象和操作阶段都有自己的软件架构

软件架构可以通过动态添加约束来获取不同的架构属性 

基于网络的架构属性

performance:网络性能(吞吐量、负载、带宽)、用户可察觉性能(动作延迟、动作完成时间)、网络效率(网络利用)

scalability:可伸缩性(组件间交互能力)

simplicity:简单性(复杂性、可理解性、可验证性)

modifiability:可进化性(组件间的耦合程度)、可扩展性(动态扩展能力)、可定制性(临时性增加元素的能力)、可配置性、可重用性

visibility:可见性(通用接口)

portability:可移植性

reliability:可靠性(应对故障的能力)

Rest风格

客户-服务器:分离关注点以获得可伸缩性

无状态:一次通信包含了服务端需要的全部信息,从而获得了可见性(不依赖于上下文)。系统在从故障中恢复时,此次通信不需要查找通信上下文即可恢复,增加了系统的可靠性。多个通信组件间不需要保存通信上下文,增加了组件间的交互能力,从而改善了系统的可伸缩性。

缓存:降低可靠性,获得了性能提升

统一接口:增加交互的可见性,简化了系统架构,提升系统的可进化性。代价是降低了在特定场景下的通信效率

分层系统:分层处理,降低用户的可见性,带来了更好的可伸缩性

按需代码:如 applet 。降低了可见性增加系统的可扩展性

Rest应用于uri

资源:资源而非文档。

shadow:对资源的操作而回答问题

语义绑定:

Rest应用于Http

可扩展性、自描述信息、性能。这个部分可以参见http协议

RestfulApi