软件架构模式

软件架构模式
www.zeeklog.com  - 软件架构模式

自从做了一些平台化系统之后,发现最原始的抽象、建模、分层、内聚、低耦合、面向对象变得越来越重要了。有的时候技术就是这样,那些最本质、最朴实的东西,有种返璞归真的感觉。

软件架构模式

软件架构模式指的是那些被验证了、经历过复杂性洗礼、具有良好设计结构的系统。也就是在实践过程中归纳总结出的一套设计决策,具有明确的定义和属性,可以重复使用,提高效率,降低复杂度和心智负担。

值得实践的软件模式

  • 微内核模式
  • 微服务模式
  • 分层架构模式
  • 事件驱动模式
  • 空间架构模式

微内核模式

微内核也称为插件模式,允许业务方将其他应用程序逻辑以插件方式添加到核心应用逻辑中,从而实现了可扩展性,做到了核心逻辑和业务逻辑的功能分离。

微内核模式包含两部分:核心系统和插件模块。

  • 核心系统:提供程序功能和自定义处理逻辑的扩展能力,具有灵活性、扩展性和隔离性。
  • 一般微内核模式的核心系统只包含系统运行所需的最小功能。

微服务模式

随着微服务的发展,我们会将原有的一体架构拆分成微服务架构。一组微服务实现某一个逻辑上的业务能力。微服务自身具有独立的功能职责,团队可以就具体的微服务进行开发测试,微服务之间通过通信完成信息交互。

我们在平台化架构中,还是将具体的功能方向的服务进行进一步抽象,变成独立的微服务,多个微服务在逻辑上组成了平台的某个业务能力。

微服务的优点如下:

  • 可以独立编写、维护和部署。
  • 易于扩展,业务迭代只需修改对应的微服务。
  • 因为微服务相对隔离,不会影响其他业务,实现解耦。
  • 团队响应迅速。
  • 可独立测试、部署,迭代效率高。

分层架构模式

分层架构模式要求每一层处理该层相关的逻辑。我们在平台化系统中的分层更加抽象,不再是以具体的业务进行划分,而是按照抽象的能力划分成多个层了。

分层架构的优点:

  • 可测试性,每层可独立测试。
  • 易于开发,由于功能相对隔离,开发比较简单,但是需要防止同一层之间的能力过于分散,可以引入领域的方式进行二次隔离。
  • 每次功能点可以修改独立的一层即可完成。

事件驱动模式

事件驱动模式是一种高扩展的解决方案,架构中通过监听并异步处理事件方式组成一系列组件。事件驱动模式构建了一个接收所有数据的中央处理单元,之后将事件委托给特定事件类型的模块单独处理。

事件驱动多用于平台架构中非业务相关的功能,通过事件监听与处理实现了进一步解耦,多用于数据流驱动或是用户界面交互。

事件驱动的优点是:

  • 可以通过事件解耦,适应混乱环境。
  • 具有弹性能力。
  • 当出现新的事件时,容易扩展。

空间架构模式

空间架构模式多用于解决软件系统的伸缩性和并发性问题。对于用户量经常发生变化、偶尔出现并发的系统,可以采用这种架构。通过消除对数据库的依赖,使用复制基于内存的数据实现伸缩性。

空间架构模式主要是希望通过多个服务器之间拆分处理和存储数据,避免高负载下软件系统的崩溃。

优点:

  • 可以快速适应变化。
  • 通过内存中数据访问内置的缓存,实现了高性能。
  • 高伸缩性来源于降低了对集中数据库的依赖,或是没有依赖,提高了伸缩性。

空间架构可以看作是一种围绕于数据源的异构、无状态的处理方式。

以上几种架构可以按需使用到系统之中,以解决不同的问题。

Read more

超快速,使用ChatGPT编写回归和分类算法

超快速,使用ChatGPT编写回归和分类算法

本文将使用一些 ChatGPT 提示,这些提示对于数据科学家在工作时非常重要。 微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩 以下是一些示例ChatGPT 提示的列表以及数据科学家的响应。 ChatGPT 提示 为决策树回归算法生成 python 代码。 下面是使用scikit-learn在 Python 中进行决策树回归的示例代码: import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor # Generate random data rng = np.random.default_rng() x = 5 * rng.random(100) y = np.sin(x) + 0.

By Ne0inhk
力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

力扣每日一题:993.二叉树的堂兄弟节点 深度优先算法

993.二叉树的堂兄弟节点 难度:简单 题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。 只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。 示例: 示例 1: 输入:root = [1,2,3,4], x = 4, y = 3 输出:false

By Ne0inhk
1239.串联字符串的最大长度 关于字符串的回溯算法!

1239.串联字符串的最大长度 关于字符串的回溯算法!

题目: 给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串, 如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。 请返回所有可行解 s 中最长长度。 提示: 1 <= arr.length <= 16 1 <= arr[i].length <= 26 arr[i] 中只含有小写英文字母 示例: 示例 1: 输入:arr = ["un","iq","ue"] 输出:4 解释:所有可能的串联组合是

By Ne0inhk