阅读笔记--架构设计思维

        之前在上课的时候,老师讲到过架构设计总体为分而治之,将系统分为若干模块,逐一击破,类似于秦始皇统一六国,采用的郡县制再逐一统治,形成中央集权。很好理解,大概也明白这个意思,在将概念应用到实际问题时,很多时候还是遇到问题,不是很熟练。我们报考过系统架构师资格考试。发现不知道的问题还有很多,自己的知识量太少,知识知道个大概不知道具体的细节以及对应的解决方案。

       架构设计是指软件架构的概念分组成派和决策派两类,组成派以软件本身为描述对象,分析软件组成,决策派以人的决策为描述对象,归纳架构决策的类型。

组成派定义示例:

软件架构将系统描述为计算组件及组件之间的交互。计算组件是泛指,可进一步划分为处理组件、数据组件、连接组件等,可以指子系统、框架、模块以及类等不同粒度的软件单元。

决策派定义示例:

软件架构包括以下一系列问题的重要决策:(1)软件系统的组织;(2)选择组成软件系统的结构元素和它们之间的接口;(3)如何组合这些元素,使它们合成为更大的子系统;(4)架构风格;(5)软件系统的其他特性,例如使用、功能性、性能、弹性、重用、可理解性、经济和技术的限制及权衡以及美学等。一个更通俗易懂的决策列举:模块如何划分;各模块的职责为何;每个模块的接口如何定义;模块之间采用何种交互机制;开发技术如何选型;如何满足约束和质量属性需求;如何适应可能发生的变化。

架构分类为:用例驱动的法;模式驱动的方法;领域驱动的方法。

一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析、描述、选择、构造和组合5个阶段组成,如图:

分而治之是一种处理复杂问题的通用方法,在系统架构中也是一种很重要的手段,例如多层架构、OSI 七层模型都体现了分而治之思想。在架构设计过程中,通过将关注点分离对架构进行多层次分解,将系统层层分解为多个架构元素,进而识别架构元素。同时保证分解后的各个部分还能够高内聚,松耦合,最终又集成为一个完整的整体。分解核心是定义问题,因此架构首先仍然需要理解清楚需求。

分解的作用:

架构分解是架构师接到需求到完成架构设计中最关键的一步,分解可以帮助架构师了解需求中未呈现出来的隐性需求要素,分解也是架构师解决非功能层面需求的重要手段,架构要解决高性能、高可用、伸缩性、可扩展性等问题,针对这些问题,我们一般从几个方面进行入手:

  1. 应用层:按照功能或者微服务进行分解,将系统划分未若干子系统,低耦合存在,在业务角度可以将单个应用独立为应用单元(应用单元是无状态的),这样可以灵活地进行伸缩。

  2. 数据层:对数据库进行垂直拆分按照子系统纬度进行分库和水平拆分按照业务纬度进行分表;但是进行分库分表中要避免分布式事务,实在无法避免可利用消息系统来进行规避。

  3. 代码结构层:代码层一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。这也是Java Web中重要的三层架构中的三个层次。区分层次的目的即为了“高内聚低耦合”的思想。

分解的原则:

一.业务原则

  1. 单一责任原则:对于一个微服务而言,具有有限的业务范围,可以帮助我们满足服务开发和交付的敏捷性;

  2. 适当的边界:关注微服务的功能范围,一个服务的大小应该等于满足某个特定业务能力所需要的大小;

  3. 业务分层: 从整体规划上把业务分层,形成单向依赖,避免微服务之间的网状依赖关系;

  4. 颗粒度递增:设计初期先把业务划分到尽可能细,然后依据其它原则合并到适当颗粒度;

  5. 非唯一依赖:至少被2个以上其它微服务依赖的功能模块,才有必要独立成一个微服务。

二.技术原则

  1. 部署独立性:能独立于其它微服务部署,一个微服务故障不影响其它微服务;

  2. 动态扩展:每个微服务都可以动态的进行x轴和z轴的扩展,并适应云环境下的自动化部署;( 参考这里 )

  3. 领域和应用解耦:提供数据操作能力的领域服务和执行业务逻辑的应用服务解耦;

  4. 避免产生频繁的跨库查询;

  5. 避免产生频繁的分布式事务。

三.治理原则

  1. 在业务分层的基础上,根据业务细分规则,对微服务分组;

  2. 各个分组之间通过API网关集成;

  3. 通过API网关实现级轻量级消息路由,鉴权;

  4. 运行时管理,如服务降级,限流,监控等可在API网关实现,让微服务功能纯粹;

  5. 避免通过数据库集成;

  6. 避免部署多个版本来兼容。

电商架构设计模型:

分解维度:架构分解就是从多个维度多层次对系统进行分解,识别出架构元素,逐步精化、丰富系统架构的过程。从上面可以总结出,纬度大致有,业务纬度、业务功能纬度、技术纬度,涉众纬度。

 

 

分解战术:

 

 总结:

阅读过本篇文章后我知道了分解作为架构设计中关键的步骤,架构分解没有成熟的方法体系来指导架构师,但是以上的过程可以作为一定的参考来进行架构分解,架构分解的关键点在于分解纬度和分解战术,希望在以后的学习生活和实战演练中运用这些知识。

posted on 2019-06-18 19:22  学java及框架的菜鸡  阅读(317)  评论(0编辑  收藏  举报

导航