Y说

良久没写技能文章了,最近也不知道自己一天在忙啥,感觉很忙,但也没什么产出。这篇文章从周一开端预备写,中间大概时断时续写了三次,总算在周六写完了。

其实自己有许多东西想写的,可是平常下了班之后就只想躺着,底子不想动脑。早上有时分又起得比较晚,所以没有太多的时刻写东西。感觉或许仍是作息不规律的原因,假如能一向坚持早睡早起或许会好一点,早上的思想比较清醒一点。

但长时刻坚持对我来说是一件很难的工作,中心原因或许是没有满足的动力,我应该深刻反思。

为什么要写这篇文章,是由于自己曾经觉得会画图是一件很简单的工作,乃至有点轻视那种只会画图,不写代码的“资深程序员”。但后来渐渐才发现,想要画好一张图其实也不是一件简单的工作,而且画图有时分真的比写代码重要,它是值得深化学习和把握的一个技能。

为什么要画图

作为一个技能人员,在许多场合或许会与他人交流或许交流自己的架构规划、规划等思路,比方在共享、辩论、交流需求等场景。

我们往往会写一个文档来描绘自己的想法,但科学研讨表明,许多时分,文字其实并没有那么直观,尤其是在一场会议中,运用大段的文字或许会让观众很简单疲惫,简单分心,GET不到要点等。

所以在文档中刺进一些图示,能够协助观众更好地了解自己的想法,也能更明晰地表达全体的规划思路,是开发者十分值得把握的一个技能。

图的分类

下面列几个比较常用的图的分类。

架构图

《ThoughtWorks现代企业架构结构白皮书》中,把架构分为了四个层次,分别是事务、运用、数据、技能。

架构的四个层次

其间最重要的是事务架构,只要整理清楚了事务,才干辅导运用、数据和技能架构,终究支撑事务的快速迭代和发展。事务架构的剖析进程是复杂的,终究的产出或许也不仅仅仅仅一张架构图。还有更细节的流程、建模等产出物。

在实践工作中,笔者其实很少看到以事务视角产出的一张“架构图”,更多的是事务流程图、用例图。看到更多的是“产品架构”和“技能架构”。

一张好的产品架构图大概是这样,分层次、分模块讲清楚了各个产品模块之间的联络。下图是一张大型电商产品的全景图(图片来自人人都是产品司理)。实践上真实运转的体系远不止这些,但中心模块都有所描写和体现。

产品架构

作为技能开发人员,在实践工作中往往会有许多时分需求阐明自己的全体技能规划思路。这个时分或许需求一张“技能架构”图,从技能的视角剖析各个模块之间的联络。

我找了良久没有找到好的一个小型事务体系的技能架构图,终究找到一个比较宏观的图,后边有机会自己找事务画一个吧。但大体上的结构是相似的,从最底层的存储,到最上层的接口。右边是一些通用的运维体系或许支撑服务。

技能架构

用例图(操作动线)

传统的UML用例图是用于描绘人物和行为之间的联络,用例下面能够再拆分用例(或许叫进一步用例),相似这种:

但用例图仅仅描写事务行为,并没有描写范畴模型、单据和范畴的区分,所以信息量其实很少。

流程图能够描写事务的中心流程,也能够在流程图的节点周围画上对应的产品功用、模型或许产生的单据。比方一个典型的流程图(描写产品功用):

流程图

假如在流程图上再加上“用户人物”,描写xx人物在xx阶段做了xx操作。便是一张“操作动线”图:

操作动线

时序图

时序图便是接口调用的时刻联络,也是开发人员表达接口内部细节的主要东西。比方我们都熟知的OAuth2的时序图:

假如不在意色彩等细节的话,时序图十分引荐运用plant UML来画,效率比较高。这个东西我们在后边介绍。

体系链路图

体系链路图,有时分也叫服务链路图。表达的是各个微服务之间的调用联络,一个好的微服务体系调用链路应该是干净的、单向依赖的,呈一个“树状”,但实践中假如规划欠好,经常会有循环依赖,形成“图”状。

实践上好一点的基建渠道能够依据现有的服务监控体系,主动生成调用链路图,不过在规划阶段肯定是要自己手动画了。

体系链路

画图东西调研

draw.io 万能

draw.io是一个十分优异的画图软件,且是开源,免费的。web版别就够用,通过域名就能直接翻开,不需求安装任何软件。能够存储到多种介质:
draw.io的优势是图表类型十分丰富,能够画各种各样的图,界面也比较自在。还能够从一个url中copy模板。能够说是“万能”,一点也不为过。

缺陷是draw.io是国外的网站,要想流畅运用或许需求科学上网东西。不过由于draw.io是开源的,所以能够下载离线版别的软件,或许布置在自己的服务器上。

process on 合适国内运用

process on是一个国内的相似于draw.io的软件,免费版创立文件有数量限制,能够开通会员解除限制。也是web版别能够直接运用。process on的组件没有draw.io丰富,但基本够用。

它也有几个优势。第一个优势便是它是国内的软件,不需求科学上网,就能很流畅地运用。一起它有十分丰富的模板商场,你也能够把自己画得比较好的图发布到模板商场,从中赚取收益。也能够免费或许付费从模板商场克隆一个图,自己在此根底上修正。

我之前体系整理过MySQL和Redis的知识点思想导图,也赚取了几十个大洋。感兴趣的朋友能够翻翻我的大众号历史文章,上面有链接。

process on的第二个优势是它能够团队协作,不过我个人现在还没遇到过需求团队协作画图的场景。

它的第三个优势是能够画思想导图,有点像xmind那种风格。虽然draw.io也能画,可是没有这个用起来便利。

飞书 文档内嵌

平常我自己由于工作原因,用得比较多的是飞书文档。飞书文档有一个自带的画图东西,有点像draw.io的阉割版,能运用的组件比较少,只要常用的一些通用组件。

但飞书文档内嵌的画图东西最大的好处便是它与文档的无缝集成,能够随时随地直接编辑,不用在文档和画图东西之间切换,现在我大多数的图都是直接在飞书文档上画的。

plant uml 时序图利器

plant uml是一个能够用代码生成图片的东西,免费的。其实它能够画许多图。包括时序图、类图、用例图等。但全体风格比较朴素,假如要画得很美观的话仍是不合适用它。

可是plant uml有一个最大的优势便是效率高。尤其是在画时序图、UML类图等场景,假如用draw.io等东西或许要画很久,但用plant uml能够用几行代码很快画出来。比方:

vscode用plant uml的插件。飞书文档也能够直接刺进plant uml,实践运用起来仍是蛮便利的。

excalidraw 手绘风格

前面说到的更多的在日常技能文档中会用到的架构图、类图、时序图等。但我做一个架构的朋友画的图十分有特征,全体十分明晰漂亮,而且有比较显着的手绘风格。比方这张golang微服务教程,能够用赏心悦目来描述:

他说是用一个叫做excalidraw的东西话的。这也是一个开源的东西,跟draw.io有点相似,能够选择自己的存储介质,但官网的由于布置在国外有点慢,能够自己私有化布置。还能够运用github的issue来当cdn,这样能够用git来做版别管理。比方这样:github.com/Anddd7/arch…

需求留意的是,这个软件默许是不支撑中文的字体。这个fork的库房额定安装了支撑中文的字体,我们能够直接拿来布置:github.com/Anddd7/exca…

或许一步到位,直接用布置好的线上版别:excalidraw-anddd7.vercel.app/

它也有对应的劣势。比方组件比较少,像图标这些或许要自己通过图片的方法粘贴进去。没有网格和主动吸附,要对齐的话感觉效率会略微低一点。可是也有分组、对齐和主动分布等常用的东西,所以用熟练了其实也还行。

画好图的中心

上面介绍的一些东西,我觉得更多的是“术”层面的东西。真实要画好一张图的中心,仍是在“道”的层面要明晰。我总结为两点:明晰的考虑和精确的表达。

明晰的考虑

有些人画图很快,有些人画图很慢。有些人图一次性就画好,后边修正得很少,而有些人会重复修正,怎样都不满意。

这背面其实是你对这个图有没有一个明晰的考虑。比方画架构图,需求自己本身对事务和技能有深化的了解,清楚各个模块、层次之间的联络,才干做到胸有成竹,快速利用软件把自己心中的图画出来。

这里有一个小技巧,便是刚开端的时分先画大的模块和结构,不要扣细节。然后在大的模块和结构通过重复推敲确认后,再去完善内部小的细节。这样整个图就不简单在以后被大改了。

精确的表达

第二点便是精确的表达。由于图是给他人看的,要考虑到面向的目标是谁,有没有了解相关的根底布景,他重视的是全体结构仍是细节。这块都是需求留意的,或许面向低年级或同层级的共享,与面向老板的报告,在图的表达方法上会有不同。

同样的架构图,里面或许有些模块比较重要,是自己要点想表达的部分,那这块能够用面积更大、色彩更夺目等方法来表达出来。

同理,一期、二期、三期,内部的、外部的,已有的、将要建造的等等,也能够用不同的色彩来区分,整个图应该是一目了然的把自己想表达的东西表达出来。

学习优异案例

技能文章&博客

想要做好一件事,离不开继续的学习。多看看他人是怎样做的,尤其是优异的人是怎样做的,是快速把握一门技能的捷径。

有一些质量还不错的技能网站、论坛、大众号等,都能够重视起来,没事的时分看看他们的文章。比方InfoQ、等网站上有大量的个人博客,比方阿里技能、字节技能、美团技能等大公司的技能部门官方文章,都是通过公司精挑细选的优异博客,十分值得研讨和学习。

当然,也能够顺便重视一下一个我这个籍籍无名的大众号“编了个程”(blgcheng),一起交流学习,哈哈~

开源结构

另一个很不错的学习渠道是看看开源结构的官方文档或许源码解读文档。比方spring的架构图、tomcat的架构图、k8s的架构图等。由于文档在开源社区是一个很重要的东西,文档写得好,运用者就能降低了解门槛,快速运用乃至是加入到开源社区中来。许多老练的开源东西都配有十分优异的架构图。

公司内部文档

略微大一点的公司应该都有自己内部的知识库。里面有许多别的个人、团队的总结和实践,也是值得参阅和学习的目标,看看他们是怎样了解自己的事务,并用技能文档、技能图来表达出来的。

但这里或许涉及到公司安全合规的问题,我们学习的时分要留意躲避风险。

参阅文档

  • zhuanlan.zhihu.com/p/342136194
  • www.cnblogs.com/runningsmal…
  • www.woshipm.com/pd/5319981.…
  • 《ThoughtWorks现代企业架构结构白皮书》

特别阐明:本文为了协助我们了解,有大量的截图。文中的大多数图是在网络上找的,尤其是前面的几张架构图。假如涉及版权问题请联络作者,会第一时刻删掉。

求个支撑

我是Yasin,一个坚持技能原创的博主,我的微信大众号是:编了个程(blgcheng)

都看到这儿了,假如觉得我的文章写得还行,无妨支撑一下。

文章会首发到大众号,阅读体会最佳,欢迎我们重视。

你的每一个转发、重视、点赞、谈论都是对我最大的支撑!

还有学习资源、和一线互联网公司内推哦