对于架构设计人们已经提出了许多方法,分类为:工件驱动的方法;用例驱动的法;模式驱动的方法;领域驱动的方法。一个经典的架构设计过程模型,沿用了RUP中迭代增量的思想,由分析、描述、选择、构造和组合5个阶段组成。

依据需求规格说明书分析出功能需求和架构需求,通过用例和场景的描述,把需求分为关键的,次要的和可选的3类。关键需求决定架构,结合软件架构风格和通用知识选择最关键、影响最大的子系统分析设计并产生构件。组合就是定义构件接口,构件作为一个封闭的功能实体,对外提供交互接口,并通过连接件将构件连接起来形成最终的软件架构描述。5个阶段是不断迭代的过程,在每一次迭代中,都选取并实现一组用例和场景来确认并完善架构。

这个过程模型看似很流畅,但是,架构师在设计时很难把握他的正确性和精准性,而且用它架构的系统是否对后续设计开发形成一种原则上的指导是很难说的。但是对于架构师来说有些思路可以进行参考,大致将架构思维可以分为:分解、集成、分离、复用、分层、模式、抽象、结构化、迭代、勿做过度设计这几部分,按照这个思维方式来设计系统架构。

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

分解的作用:

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

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

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

分解的原则:

业务原则:

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

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

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

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

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

技术原则:

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

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

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

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

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

治理原则:

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

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

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

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

避免通过数据库集成;

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

转载于:https://www.cnblogs.com/DaisyYuanyq/p/11056077.html

云时代架构阅读笔记十五——架构设计思维(一)相关推荐

  1. 软件体系架构阅读笔记(十五)

    对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子.在遍地App的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴. 但是,随着应用的不断发展,最 ...

  2. 双稳态环PUF:一种强物理不可封闭功能的新架构阅读笔记

    双稳态环PUF:一种强物理不可克隆函数的新架构阅读笔记 原文:<The Bistable Ring PUF: A New Architecture for Strong Physical Unc ...

  3. [云炬创业基础笔记]第五章创业机会评估测试2

    [云炬创业基础笔记]第五章创业机会评估测试1

  4. [云炬ThinkPython阅读笔记]2.6 字符串运算

    [云炬ThinkPython阅读笔记]1.8 术语表

  5. [云炬ThinkPython阅读笔记]2.3 表达式和语句

    [云炬ThinkPython阅读笔记]1.8 术语表

  6. python复制指定字符串_python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  7. windows内核开发学习笔记十五:IRP结构

    windows内核开发学习笔记十五:IRP结构   IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包.当上层应用程序需要访问底层输入输 ...

  8. 点云配准论文阅读笔记--(4PCS)4-Points Congruent Sets for Robust Pairwise Surface Registration

    目录 点云配准系列 写在前面 Abstract摘要 1 Introduction引言 2 Background研究背景 RANSAC Randomized Alignment 3 Approximat ...

  9. 点云配准论文阅读笔记--Comparing ICP variants on real-world data sets

    目录 写在前面 点云配准系列 摘要 1引言(Introduction) 2 相关研究(Related work) 3方法( Method) 3.1输入数据的敏感性 3.2评价指标 3.3协议 4 模块 ...

最新文章

  1. soc 设计soc设计 uml实务手册_采用 USB4 技术升级 SoC 设计
  2. CISCO网络故障排错命令总结分享
  3. 我写了10年博客,却被人说“不火”?我是这样怼回去的?
  4. 不用AJAX实现前台JS调用后台C#方法(小技巧)
  5. 3-14pytorch与统计学方法
  6. 今晚开讲 | 打卡公开课、冲击排行榜,还有福利领取
  7. 这个沙盒游戏建立在数字时代,你能通关吗?
  8. python根据经纬度画热力图_【python】使用python按照一定格式批量输出,地图热力图经纬度格式生成器...
  9. adobe cs4系列套装及注册机下载
  10. Python使用rawpy获取相机图像的原始RAW数据
  11. Android7.0(mtk)开放root权限,adb root和app root
  12. 全国省份、地级市数据库
  13. EDIUS 9带你剪辑萌萌的《疯狂动物城》
  14. 为什么复数域中使用共轭转置而不是转置
  15. Linux-网络-netstat命令
  16. 【稀饭】react native 实战系列教程之首页列表UI实现
  17. HTML颜色渐变效果
  18. 通过yum获取rpm离线安装包
  19. 直播间源码,通过Redis实现数据缓存
  20. Vue 实现全景图展示

热门文章

  1. (Java)注解和反射
  2. Jenkins持续集成环境之凭证管理
  3. 微信二维码支付快速入门
  4. 缓冲流、转换流、序列化流代码练习
  5. ccf-csp #201703-2 学生排队
  6. 基于php的应用程序,基于PHP的Web应用程序和群发邮件
  7. linux最常用的目录表示,Linux磁盘分区的命名方式和常用目录?【每日一个知识点第84期-Linux】...
  8. 华为设备不会配置静态路由怎么办?
  9. 互动赠新书|当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  10. 分布式事务框架 seata-golang 通信模型详解