我一直在使用draw.io来处理与UML流程图、图表或图表相关的事情。它在丰富的功能和手动用户控制之间取得了合理的平衡。但是,接下来我将向您展示如何自动执行一些无聊的鼠标点击;)从一开始就避免错误非常有趣。事实上,如果能更清楚地了解组件之间的关系和职责,那就太好了。否则最终结果会像上面看到的那样;)诀窍是在做的时候不断检查看看哪里出了问题,这样就不太可能做得这么糟糕。在制作图表时——你同时也在给自己一种整体感,它们将如何相互作用,问题领域、上下文、边界等是什么。“纸上谈兵是无用的,长期的战略规划是无价的。“——温斯顿·丘吉尔行动起来!假设我们有一个简单的社交应用程序。当然,这是一个非常简单的设置,但是你可以注意到其中有很多关系。客户端:前端应用程序和浏览器扩展。API网管:鉴权API和主服务API。微服务:照片、图表和好友微服务。我花了很长时间来排列方块,拖放箭头并进行调整。那只是因为我想以更具可读性的方式对齐它们。你能想象排列50个这样的方格有多无聊吗?100呢?那如果我再删一个呢?我打赌你会放弃这个东西,选择回来继续码字。我与Graphviz的联系受到了Terraform的启发——一种用于创建和维护生产基础设施的工具。它支持任何与基础设施相关的服务的配置,其中包括从AWSEC2到集群的实例以及由50家云供应商提供的负载平衡。它还提供了一个有趣的terraformgraph命令,可以根据现有配置生成可视化图形表示。“terraformgraph”命令的示例输出所以我决定使用相同的技巧,但用于更高级别的微服务架构。下面是一个用DOT编写的Graphviz配置。有向图架构{rankdir=LR;subgraphclient_side_apps{front_end->{auth_api,my_app_api};扩展->{auth_api,my_app_api};{等级=相同;front_end,extension,auth_api};}subgraphapi_gateways{my_app_api->{photos_ms,chats_ms,friends_ms};}subgraphmicroservices{photos_ms->{database};chats_ms->{数据库,缓存};friends_ms->{database,facebook_api};}}你只需要将它渲染成一个.png文件。您可以使用在线编辑器或直接在您的机器上渲染。为了不弄脏系统,我为此创建了一个Docker镜像:catfile.dot|dockercontainerrun--rm-ivladgolubev/dot2png>file.png通过执行上面这行简单的代码,您可以获得如此惊人的输出!提示:您可以将代码复制粘贴到在线编辑器中:http://dreampuf.github.io/GraphvizOnline/在微服务之间添加新依赖项的想法从未如此容易实现。我需要做的就是添加一行新代码,Graphviz会很好地组织它。作为画龙点睛之笔,我喜欢添加一些颜色。所以你马上可以看到如下效果:绿色——node.js红色——api网关黄色——前端蓝色——存储、数据库灰色——3rd-partyAPI这不是最优的颜色布局,但你已经知道它可以做到了;)相信我,使用大量图表也很容易做到这一点。所有的代码都在这里:https://gist.github.com/vladgo...70882总结我在频繁添加和修改微服务架构图时遇到了一个问题。每个更改都必须用箭头手动修补。现在我可以安全地试验并了解新的微服务如何适合我的系统。当然你可以做得更好,放在版本控制系统中,这样就可以得到架构图的修改历史!但这取决于你。选择最适合您的工具。谷歌搜索【微服务可视化】(https://www.google.com/search?q=microservicevisualization)解决方案,你会被大量商业解决方案轰炸。可视化设计使检查和调试更容易。―Unix的基本哲学
