架构之美-软件实现分析之道

在一个系统中,模型和接口是相对稳定的部分。
但同样的模型和接口,若采用不同实现,稳定性、可扩展性和性能等诸多方面相差极大。只有熟悉实现,才有改代码写新需求的基础。

“看实现”的确是个大难题,因有无数细节怪在等你。所以,团队的新人都需要几个月试用期去熟悉代码细节。

你不可能记住项目所有细节,但这不妨碍你工作。但若你心中没有一份关于项目实现的地图,你就一定会迷失。

新人一般用几个月熟悉代码,就是在通过代码一点点展开地图,但是,这不仅极其浪费时间,也很难形成整体认知。

推荐你应该直接把地图展开。怎么展开/p>

要找到两个关键点:软件的结构和关键的技术。

以Kafka为例,了解一个软件设计三步走:“模型、接口、实现”。
先看Kafka的模型和接口。

MQ的模型与接口

Kafka自我介绍是个分布式流平台,这是它现在的发展方向,但更多人觉得它是个MQ。
MQ是Kafka这个软件的核心模型,而流平台显然是这个核心模型存在之后的扩展。所以,要先把焦点放在Kafka的核心模型——MQ。

MQ(Messaging Queue)是一种进程间通信方式,发消息的一方(即生产者)将消息发给MQ,收消息的一方(即消费者)将队列中的消息取出并处理。

看模型,MQ是很简单的,不就是生产者发消息,消费者消费消息,还有个topic,区分发给不同目标的消息。

基本接口也很简单:
生产者发消息:

但MQ实现有很多,Kafka只是其中一种,为什么会有这么多不同MQ实现呢为每个MQ实现有所侧重,有其适用场景。

MQ还提供一定的消息存储能力。当

MQ可起到缓冲作用。所以MQ还能“削峰填谷”:在消息量特别大时,先把消息收下来,慢慢处理,以减小系统压力。

Kafka之所以突出于一大堆MQ实现,关键在于它针对消息写入做优化,它的生产者写入特快,即吞吐力特强。

显然,接口和模型不足以将Kafka与其他MQ实现区分。所以,必须开始了解它的实现。
看软件实现时的关键:

  • 软件的结构
  • 关键的技术

模型是个抽象概念,被抽象的对象可以是某个聚合实体(订单中心中的订单),也可以是某个流程或功能(Java内存模型中的主存与缓存同步的规则)。
分层对模型来说是实现层面的东西,是一种水平方向的拆分,是一个实现上的规范;
模型的细粒度拆分(父模型、子模型),应该是一种垂直维度的拆分,子模型的功能要高内聚,其复杂性不该发散到外部。

软件结构

软件结构也是软件模型,只不过,它不是整体上的模型,而是展开实现细节之后的模型。模型是分层的。

对每个软件,当你从整体去了解它时,它是完整的一块。但当你打开它的时候,就成了多模块组合,这也是“分层”意义。上一层只要使用下一层提供给它的接口。

所以,当打开一个层次,了解其实现时,先从大处着手。最好找到一张结构图,准确了解它的结构。

如果你能够找到这样一张图,你还是很幸运的。因为在真实的项目中,你可能会碰到各种可能性:

  • 结构图混乱:你找到一张图,上面包含了各种内容。比如,有的是模块设计,有的是具体实现,更有甚者,还包括了一些流程
  • 结构图复杂:一个比较成熟的项目,图上画了太多的内容。确实,随着项目的发展,软件解决的问题越来越多,它必然包含了更多的模块。但对于初次接触这个项目的我们而言,它就过于复杂了
  • 无结构图
    想办法画一张

先了解模型和接口,因为它们永远是你的主线。

假设:现在你有了一张结构图,你打算做什么br> 了解它的结构,但不够。不仅要知道一个设计的结果,最好还要推断出设计原因。

所以,一种更好的做法:带问题上路。
假设自己就是这个软件设计者,问问自己要怎么做。再去对比别人的设计,你就会发现,自己的想法和别人想法的相同或不同。

让你来设计MQ,你会怎么做br> Kafka 上能搜到各种架构图,看个 最简单的架构图,因为最贴近MQ基础模型:

总结

理解一个实现,是以对模型和接口的理解为前提。
如果想了解一个系统的实现,应从软件结构和关键技术两个方面着手。无论是软件结构,还是关键技术,我们都需要带着自己的问题入手,而问题的出发点就是我们对模型和接口的理解。

了解软件的结构,其实,就是把分层的模型展开,看下一层模型:

  • 要知道这个层次给你提供了怎样的模型
  • 要带着自己的问题去了解这些模型为什么要这么设计

Kafka的实现主要是针对机械硬盘做的优化,现在的SSD硬盘越来越多,成本越来越低,这个立意的出发点已经不像以前那样稳固了。

软件的结构和核心技术应该分开,kafka之所以是:

  • MQ,看的是对MQ这个模型结构的实现
    就没必看存储的实现,应该看路由信息管理、消息生产、消息消费等核心实现及其旁支功能的选择(限制消息大小、故障节点延后、延迟消费)
  • kafka,看的是其消息存储核心技术实现

如果想知道kafka为什么在 MQ如此突出,那就得了解其核心技术实现,即这里的软硬结合的存储设计。

理解实现,带着自己的问题,了解软件的结构和关键的技术。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月3日
下一篇 2021年9月3日

相关推荐