六边形架构

这篇具有很好参考价值的文章主要介绍了六边形架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务系统架构

需求描述做什么的问题,架构描述怎么做的问题(描述组成系统的各部件及其之间的关系)

微服务定义

下面的定义来自周志明老师的 凤凰架构

微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言,不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制实现通信与运维。

微服务系统设计

在讨论如何设计一个微服务之前,我们可以先想一想如何描述一个系统。

当我们在讨论微服务系统架构时,很多人都会把架构粗犷的理解为根据系统需求划分为几个模块的服务,这是不对的。站在工程的角度,我们描述一个系统的角度应该是立体的。主要使用 “4+1” 视图来进行描述.

那么,什么是 “4+1” 视图呢?

4+1架构模型:(逻辑、实现、进程、部署) + 场景

整理如下,
六边形架构,软件工程四种视图并不互斥,可互相组合。

架构可以描述一个软件的质量属性,我们评价一个系统主要可以从以下几个方向进行评估,

可维护性,可测试性,可部署性
安全性,可靠性,可扩展性

当我们学习如何描述一个系统的架构之后才可以慢慢观察如何对系统架构进行设计,
如果是微服务的系统架构设计,从较高的视角来看,我们可以从两个点思考,

  1. 根据需求描述,把他转换成一堆服务的组合,(如何把一个系统分解成不通过的服务)
  2. 把服务确定之后,如何建立服务之间的通信?

在思考这两个问题之前,我们需要矫正自己的认知,

系统设计描绘的是系统的实现而不是需求, 而软件工程就是把一个系统的需求转换成一个系统的架构

如果解决了上面的两个问题,我们就需要针对单个微服务进行设计。因此又引申出三个问题。

  1. 我们如何对服务进行详细的设计?
  2. 如何衡量一个微服务的系统设计优劣?
  3. 怎样描述一个微服务系统程序?

这就需要我们回到微服务的代码结构去思考!

传统分层架构

微服务时代,具体到微服务组件的设计。国内常用的还是使用传统的分层架构。

分层架构(逻辑视图):表示层(用户接口或外部API),业务逻辑层,持久层

| - Web
	| - Controller
| - Domain
	| - Service
| - Persistence
	| - Repository

开发问题:有些人会把Web层写的很臃肿,导致domain层没啥逻辑,失去了Web层可替换的优点

传统分层架构的优点和缺点

  • 缺点:不支持客户端,不支持多数据库((同一个功能不支持两个数据库)MySQL -> Oracle 行吗?),领域层依赖持久层
  • 优点:开发简单
  1. 什么业务场景适合使用传统分层架构?
需要快速构建的新应用程序
传统IT部门和流程的企业或业务应用程序
具有尚不了解其他架构的经验不足的开发人员的团队
需要严格的可维护性和可测试性标准的应用

六边形架构

what is 六边形架构,我们应该怎么去使用它?

Hexagonal Architecture, a layered architecture, is also called the Ports and Adapters architecture.

又称为端口与适配器架构,业务逻辑作为核心,实现了Domain和持久层的解耦,

六边形架构,软件工程代码结构如下,
六边形架构,软件工程

我们为什么要使用六边形架构?

要聊到六边形架构的优点,我们必须先回顾传统分层结构的特点,

传统分层结构的缺点主要:

  • 分层不能支持多表现层,多持久层
  • 业务逻辑层依赖数据库持久层

而当我们回过头来仔细观察六边形架构,可以发现如下特点,

  1. 属于逻辑视图
  2. 引入多个入站适配器(inbound adapter)
取代单一的表现层
完成对多种外部请求的处理
调用业务逻辑
  1. 引入多个出栈适配器
取代单一的持久层
被业务逻辑调用
同时调用外部应用程序,如数据库

分布式微服务时代,对比传统的分层架构,六边形架构更为优雅。
六边形架构的核心在于业务逻辑,业务逻辑具有一个或多个端口,一个端口定义了一组操作供外界调用或者实现,但是,业务逻辑并不依赖这些适配器,而是适配器依赖业务逻辑。

关于入站端口和出站端口,详细解释如下,

  • 入站端口
定义业务逻辑提供的API,供外部应用调用
入站适配器调用入站端口
REST 适配器是最常见的入站适配器
  • 出战端口
定义业务逻辑如何调用外部应用
出战适配器实现了出战端口
DAO是最常见的出栈适配器

六边形架构的优点如下:
因为在代码结构上把业务逻辑与表示层,持久层完全解耦。从而可以保持业务逻辑的独立性,业务逻辑与环境,技术,框架无关。因为解耦,所以可与多种外部应用进行适配。

六边形架构的可扩展性如何?服务变大之后可以拆分吗?

可以拆分,但是复杂度比传统的分层架构高,小颗粒度单元用六边形架构比较好。

什么情况下应该选择六边形架构?

  • 单体架构
    实现视图:打包成一个可执行文件或WAR包
    进程视图:运行在一个进程中
    部署视图:部署到一台服务器
    与逻辑视图不冲突:可采用分层架构,也可采用六边形架构

  • 微服务架构:应用被分解成多个服务
    实现视图:每个服务被打包成一个可执行文件,JAR包或者WAR包
    进程视图:每个服务运行在一个进程中
    部署视图:每个服务被部署到一台机器上
    每个服务是一个小的单体应用,每个服务一般采用六边形架构

参考资料

微服务架构
微服务设计文章来源地址https://www.toymoban.com/news/detail-612631.html

到了这里,关于六边形架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • puzzle(0414)六边形拼图

    目录 六边形拼图 简单 中等 困难 taptap小游戏 (3)    (4)   (3)   (4)    (2)   (3) (4) (5) 这一关没玩出来。 找到了2个我认为比较关键的块,但是怎么放还没确定:

    2024年02月12日
    浏览(39)
  • Unity UI.Image 六边形+流光 Shader

    效果图 参考代码  

    2024年02月11日
    浏览(47)
  • ❤️创意网页:如何创建一个漂亮的3D正六边形

    ✨ 博主: 命运之光   🌸 专栏: Python星辰秘典 🐳 专栏: web开发(简单好用又好看) ❤️ 专栏: Java经典程序设计 ☀️ 博主的其他文章: 点击进入博主的主页 前言: 欢迎踏入我的Web项目专栏,一段神奇而令人陶醉的数字世界! 🌌 在这里,我将带您穿越时空,揭开属于

    2024年02月16日
    浏览(48)
  • 数据分析系统中的六边形战士——奥威BI系统

    数据分析软件可以对收集的数据进行分析和报告,帮助企业获得更深入的数据洞察力,从而推动企业数字化运营决策,提高决策效率与质量。进入大数据时代,企业对数据分析软件的要求也在水涨船高,传统的数据分析软件显然已不能满足企业大数据智能可视化分析的精细化

    2024年02月16日
    浏览(35)
  • QT使用QImage制作图片的四种(圆形,六边形,复古与负片)效果(测试过效果的代码)

    负片效果: 复古效果:   裁剪成圆形   裁剪成六边形:  

    2024年02月13日
    浏览(38)
  • 系统架构:软件工程

    信息系统开发方法 自顶向下设计是指根据给定的问题,递归地将给定问题分析成若干小的基本问题,自下而上是一种相反的设计方法,是指根据已有的组件(基本问题),通过一定的排列组合,最终解决需要解决的问题。从两种方法的定义可以看出自顶向下的设计方法强调的

    2024年02月10日
    浏览(39)
  • 系统架构14 - 软件工程(2)

    是指用户对系统在功能、行为、性能、设计约束等方面的期望 。 是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。 需求开发 -需求获取、需求分析

    2024年01月23日
    浏览(43)
  • 系统架构13 - 软件工程(1)

    包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标。具体可分成问题定义、可行性研究、需求分析等。 就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。 就是把软件产品移交给用户使用。 软件系统的文档可以分为 用户文档

    2024年01月21日
    浏览(39)
  • 软件工程模型-架构师之路(四)

    软件工程模型 敏捷开发 : 个体和交互 胜过 过程和工具、可以工作的软件 胜过 面面俱到的文件、客户合作胜过合同谈判、响应变化 胜过 循序计划。(适应需求变化,积极响应) 敏捷开发与其他结构化方法区别特点:面向人的、适应性。 敏捷开发也是 迭代增量开发。  

    2024年02月12日
    浏览(45)
  • 系统架构设计师-软件工程(4)

    目录 一、软件测试         1、软件测试类型(动态测试 / 静态测试)                 1.1 动态测试【计算机运行】                  1.2 静态测试【人工监测和计算机辅助分析】         2、软件测试阶段         3、软件系统测试 二、遗留系统演化策略

    2024年02月13日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包