偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

七個(gè)開源圖表代碼工具,值得一試

開發(fā) 開發(fā)工具
圖表即代碼工具正在改變開發(fā)人員、DevOps 工程師、架構(gòu)師甚至技術(shù)文檔撰寫者溝通復(fù)雜基礎(chǔ)設(shè)施和系統(tǒng)設(shè)計(jì)的方式。在當(dāng)今快節(jié)奏的工程環(huán)境中,系統(tǒng)不斷發(fā)展,以可復(fù)制、版本控制的格式記錄架構(gòu)已不再是奢侈,而是必需品。

無論你是在設(shè)計(jì)基礎(chǔ)架構(gòu)、解釋應(yīng)用程序流程,還是記錄云架構(gòu),圖表都是技術(shù)交流的重要組成部分。然而,傳統(tǒng)的圖表工具可能會(huì)成為瓶頸,手動(dòng)編輯、版本控制問題以及缺乏可重復(fù)性往往會(huì)拖慢團(tuán)隊(duì)的進(jìn)度。這時(shí),“圖表即代碼”就應(yīng)運(yùn)而生了。

“圖表即代碼” 工具使你能夠直接從代碼生成架構(gòu)圖。它們具有版本控制、可自動(dòng)化且跨團(tuán)隊(duì)保持一致。在本文中,云朵君將和大家一起探索七款支持“圖表即代碼”的開源工具,用于云和軟件架構(gòu),并特別關(guān)注基于 AWS 的基礎(chǔ)設(shè)施。

我們首先了解一下我們將嘗試在每個(gè)工具中復(fù)制的圖表示例數(shù)據(jù)。

示例 AWS 架構(gòu)

本文中,我們所有的制圖均是將使用一個(gè)示例架構(gòu),該架構(gòu)反映了托管在 AWS 上的典型 Web 應(yīng)用程序。以下是其組件:

  • Route53:你的域的 DNS 路由。
  • Elastic Load Balancer (ELB) :彈性負(fù)載均衡器(ELB)分配傳入流量。
  • Two EC2 instances:托管應(yīng)用程序后端。
  • Lambda function:用于身份驗(yàn)證邏輯。
  • IAM Role:與 Lambda 鏈接以獲得安全權(quán)限。
  • Primary RDS DB:主應(yīng)用程序數(shù)據(jù)庫。
  • Replica RDS DB:讀取副本以獲得更好的性能。

每個(gè)工具都會(huì)生成相同的邏輯結(jié)構(gòu)來橫向比較性能。

1. Diagrams

Diagrams[1]是一個(gè)基于 Python 的開源庫,可以將簡(jiǎn)單的 Python 代碼轉(zhuǎn)換為美觀的系統(tǒng)架構(gòu)圖。它支持 AWS、Azure 和 GCP 等主流云提供商,以及 Kubernetes 和 Docker 等本地工具。它是直接從代碼自動(dòng)化架構(gòu)文檔編寫的最簡(jiǎn)單方法之一。

主要優(yōu)點(diǎn)

  • 開箱即用,支持大量云和 DevOps 圖標(biāo)。
  • 對(duì)于熟悉 Python 的開發(fā)人員來說很容易使用。
  • 與 CI/CD 工具良好集成,實(shí)現(xiàn)自動(dòng)文檔生成。

缺點(diǎn)

  • 布局和樣式的定制有限。
  • 不支持實(shí)時(shí)協(xié)作或 GUI。

安裝

圖表依賴于Graphviz來渲染架構(gòu)圖。使用diagramsPython 包之前,需要先安裝 Graphviz。

如果你使用的是macOS 系統(tǒng),可以使用 Homebrew。其他平臺(tái)請(qǐng)參考 Graphviz 官方安裝指南:https://graphviz.org/download/

# 首先安裝 Graphviz
 brew install graphviz 

# 然后安裝 Diagrams
 pip install diagrams

示例圖表代碼

將此代碼片段保存在文件 aws.py 中

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB, Route53
from diagrams.aws.security import IAM
from diagrams.aws.compute import Lambda

with Diagram("AWS Architecture", show=False):
    dns = Route53("Route53")
    lb = ELB("Load Balancer")
    web1 = EC2("Web Server 1")
    web2 = EC2("Web Server 2")
    auth_lambda = Lambda("Auth")
    iam = IAM("IAM Role")
    db_primary = RDS("Primary DB")
    db_replica = RDS("Replica DB")
    dns >> lb >> [web1, web2]
    web1 >> auth_lambda >> iam
    [web1, web2] >> db_primary >> db_replica

運(yùn)行以下命令

python3 aws.py

輸出

圖片圖片

簡(jiǎn)直方便至極,以后寫PPT,寫論文,寫報(bào)告都可以隨心所欲了,是不是很酷!

2. PlantUML

PlantUML[2]是一種成熟而靈活的工具,你使可以用簡(jiǎn)單而強(qiáng)大的文本語言定義圖表。它支持序列圖、用例圖、類圖、組件圖等,使其適用于軟件開發(fā)和基礎(chǔ)設(shè)施建模。

主要優(yōu)點(diǎn)

  • 基于文本且版本控制友好。
  • 與 markdown、文檔工具和 IDE 配合良好。
  • 靈活并支持多種圖表類型。

缺點(diǎn)

  • 需要學(xué)習(xí)其語法。
  • 對(duì)于大規(guī)模圖表來說可能會(huì)變得冗長(zhǎng)。

安裝

你可以使用 Docker 在本地運(yùn)行 PlantUML,也可以直接在瀏覽器中使用官方的基于 Web 的編輯器:https://editor.plantuml.com/

通過 Docker 進(jìn)行本地設(shè)置:

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty

示例圖表代碼

@startuml
component "Route53"as DNS
component "ELB"as LB
component "EC2 Web 1"as WS1
component "EC2 Web 2"as WS2
component "Lambda Auth"as Lambda
component "IAM Role"as IAM
component "RDS Primary"as DB1
component "RDS Replica"as DB2

DNS --> LB
LB --> WS1
LB --> WS2
WS1 --> Lambda
Lambda --> IAM
WS1 --> DB1
WS2 --> DB1
DB1 --> DB2
@enduml

輸出

圖片圖片

3. Mermaid

Mermaid[3]是一款基于 JavaScript 的圖表繪制工具,采用 Markdown 風(fēng)格的語法。它非常適合將簡(jiǎn)潔明了的圖表直接嵌入到 Markdown 文檔或 Notion、GitHub 或 GitLab 等工具中。

云朵君除非必要,只用Markdown撰寫報(bào)告或文章,因?yàn)榉浅g姁圻@款工具,建議你也嘗試一下??。

主要優(yōu)點(diǎn)

  • 與 markdown 文件無縫協(xié)作。
  • 對(duì)于初學(xué)者來說語法簡(jiǎn)單。
  • 許多平臺(tái)都原生支持。

缺點(diǎn)

  • 不適合大型、復(fù)雜的圖表。
  • 有限的視覺定制選項(xiàng)。

使用方法(Markdown平臺(tái)無需安裝)

你可以在許多基于 markdown 的平臺(tái)(如 GitHub、GitLab、Notion 和 Obsidian)中直接使用 Mermaid,而無需安裝任何東西。

如需快速測(cè)試或在線共享圖表,請(qǐng)使用其官方游樂場(chǎng): https://www.mermaidchart.com/play

示例圖表代碼

graph TD
    DNS[Route53] --> LB[ELB]
    LB --> WS1[Web Server 1]
    LB --> WS2[Web Server 2]
    WS1 --> Lambda[Lambda Function]
    Lambda --> IAM[IAM Role]
    WS1 --> DB1[Primary DB]
    WS2 --> DB1
    DB1 --> DB2[Replica DB]

輸出

圖片圖片

4. Structurizr DSL

Structurizr[4] DSL 是一種功能強(qiáng)大的文本領(lǐng)域特定語言 (DSL),可基于 C4 模型創(chuàng)建軟件架構(gòu)圖。它更注重概念的清晰度而非視覺上的完美,非常適合企業(yè)級(jí)系統(tǒng)的建模。

如果你對(duì) C4 模型比較了解,那么這款工具將是你的首選!

主要優(yōu)點(diǎn)

  • 完全支持C4建模標(biāo)準(zhǔn)。
  • 模型和視圖的明確分離。
  • 鼓勵(lì)建筑領(lǐng)域的最佳實(shí)踐。

缺點(diǎn)

  • 學(xué)習(xí)曲線更陡峭。
  • 需要了解 C4 模型。

安裝

你可以直接在瀏覽器中使用 Structurizr DSL,也可以在本地安裝。

Web 編輯器:https://structurizr.com/dsl 本地安裝指南:https://structurizr.com/help/dsl

示例圖表代碼

workspace {

    model {
        user = person "User"

        system = softwareSystem "Web Application" {
            lb    = container "Load Balancer"
            web1  = container "Web Server 1"
            web2  = container "Web Server 2"
            auth  = container "Auth Lambda"
            role  = container "IAM Role"
            db1   = container "Primary DB"
            db2   = container "Replica DB"

            user -> lb
            lb -> web1
            lb -> web2
            web1 -> auth
            auth -> role
            web1 -> db1
            web2 -> db1
            db1 -> db2
        }
    }

    views {
        container system {
            include *
            autolayout lr
        }
    }
}

輸出

圖片圖片

5.AWS Diagram-as-Code

AWS Diagram-as-Code[5]是由 AWS 實(shí)驗(yàn)室構(gòu)建的一款基于 YAML 的開源工具。它專注于使用原生服務(wù)標(biāo)識(shí)符和關(guān)系來表示 AWS 基礎(chǔ)設(shè)施。該工具非常適合 AWS 負(fù)載繁重的環(huán)境,能夠以結(jié)構(gòu)化的 YAML 格式輸出靜態(tài)架構(gòu)鏡像。

主要優(yōu)點(diǎn)

  • 簡(jiǎn)單且聲明性的 YAML 語法。
  • 專為 AWS 服務(wù)量身定制。
  • 輕量級(jí)且由 CLI 驅(qū)動(dòng)。

缺點(diǎn)

  • 僅限于 AWS。
  • 定制和布局控制很少。

安裝

你可以使用 Homebrew 輕松地在 macOS 上安裝 AWS Diagram-as-Code:

$ brew install awsdac

對(duì)于其他系統(tǒng)或更高級(jí)的使用,請(qǐng)參考官方文檔:https://github.com/awslabs/diagram-as-code[6]

示例圖表代碼

Diagram:
  DefinitionFiles:
    - Type: URL
      Url: "https://raw.githubusercontent.com/awslabs/diagram-as-code/main/definitions/definition-for-aws-icons-light.yaml"

  Resources:
    Canvas:
      Type: AWS::Diagram::Canvas
      Direction: vertical
      Children:
        - AWSCloud
        - User

    AWSCloud:
      Type: AWS::Diagram::Cloud
      Direction: vertical
      Preset: AWSCloudNoLogo
      Align: center
      Children:
        - Route53
        - LoadBalancer
        - EC2Stack
        - Lambda
        - IAM
        - DBStack

    User:
      Type: AWS::Diagram::Resource
      Preset: User
      Label: User

    Route53:
      Type: AWS::Route53::HostedZone
      Label: Route 53

    LoadBalancer:
      Type: AWS::ElasticLoadBalancingV2::LoadBalancer
      Label: Load Balancer
      
    EC2Stack:
      Type: AWS::Diagram::HorizontalStack
      Children:
        - EC2_1
        - EC2_2

    EC2_1:
      Type: AWS::EC2::Instance
      Label: Web Server 1

    EC2_2:
      Type: AWS::EC2::Instance
      Label: Web Server 2

    Lambda:
      Type: AWS::Lambda::Function
      Label: Auth Lambda

    IAM:
      Type: AWS::IAM::Role
      Label: IAM Role

    DBStack:
      Type: AWS::Diagram::HorizontalStack
      Children:
        - DB1
        - DB2

    DB1:
      Type: AWS::RDS::DBInstance
      Label: Primary DB

    DB2:
      Type: AWS::RDS::DBInstance
      Label: Replica DB

  Links:
  - Source: User
    SourcePosition: N
    Target: Route53
    TargetPosition: S
    TargetArrowHead:
      Type: Open

  - Source: Route53
    SourcePosition: N
    Target: LoadBalancer
    TargetPosition: S
    TargetArrowHead:
      Type: Open

  - Source: LoadBalancer
    SourcePosition: SSW
    Target: EC2_1
    TargetPosition: NNW
    TargetArrowHead:
      Type: Open

  - Source: LoadBalancer
    SourcePosition: SSE
    Target: EC2_2
    TargetPosition: NNE
    TargetArrowHead:
      Type: Open

  - Source: EC2_1
    SourcePosition: S
    Target: Lambda
    TargetPosition: N
    TargetArrowHead:
      Type: Open

  - Source: Lambda
    SourcePosition: S
    Target: IAM
    TargetPosition: N
    TargetArrowHead:
      Type: Open

  - Source: EC2_1
    SourcePosition: SE
    Target: DB1
    TargetPosition: NW
    TargetArrowHead:
      Type: Open

  - Source: EC2_2
    SourcePosition: SW
    Target: DB1
    TargetPosition: NE
    TargetArrowHead:
      Type: Open

  - Source: DB1
    SourcePosition: E
    Target: DB2
    TargetPosition: W
    TargetArrowHead:
      Type: Open

將其保存為 aws.yaml 并運(yùn)行以下命令

awsdac aws.yml

輸出

圖片圖片

6. D2

D2[7]是由 Terrastruct 開發(fā)的一種現(xiàn)代圖表腳本語言。它強(qiáng)調(diào)簡(jiǎn)潔性和清晰度,非常適合那些希望以最少的精力創(chuàng)建優(yōu)雅圖表的開發(fā)人員。它支持在 VS Code 擴(kuò)展程序或?yàn)g覽器中實(shí)時(shí)渲染。

主要優(yōu)點(diǎn)

  • 具有自動(dòng)布局的簡(jiǎn)單語法。
  • 支持主題和注釋。
  • 渲染速度快,開發(fā)人員體驗(yàn)極佳。

缺點(diǎn)

  • 社區(qū)和生態(tài)系統(tǒng)仍在不斷發(fā)展。
  • 缺少開箱即用的 AWS 特定圖標(biāo)。

安裝

你可以在本地安裝 D2 或使用基于 Web 的游樂場(chǎng)進(jìn)行快速可視化:https://play.d2lang.com/

brew install terrastruct/d2/d2 
# 或
curl -fsSL https://d2lang.com/install.sh | sh

示例圖表代碼

direction: right
DNS: "Route53: DNS"
LB: "ELB: Load Balancer"
WS1: "EC2: Web Server 1"
WS2: "EC2: Web Server 2"
Lambda: "Lambda: Auth Function"
IAM: "IAM Role"
DB1: "RDS: Primary DB"
DB2: "RDS: Replica DB"
DNS -> LB
LB -> WS1
LB -> WS2
WS1 -> Lambda
Lambda -> IAM
WS1 -> DB1
WS2 -> DB1
DB1 -> DB2

輸出

圖片圖片

7.Kroki

Kroki 是一個(gè)圖表渲染引擎,它為 20 多種流行的圖表格式(例如 Mermaid、PlantUML、Graphviz 等)提供后端服務(wù)。如果你想在 CI/CD 或文檔平臺(tái)中實(shí)現(xiàn)跨不同格式的圖表渲染標(biāo)準(zhǔn)化,它是理想的選擇。

主要優(yōu)點(diǎn)

  • 多種格式的集中渲染。
  • 在管道、文檔或應(yīng)用程序上運(yùn)行良好。
  • 使用 Docker 輕松實(shí)現(xiàn)自托管。

缺點(diǎn)

  • 仍然需要外部語法(Mermaid、PlantUML 等)。
  • 需要配置自托管部署。

安裝

你可以使用 Docker 在本地運(yùn)行 Kroki,或者直接調(diào)用其遠(yuǎn)程 API 進(jìn)行快速渲染。

# 在本地運(yùn)行 Kroki
docker run -d -p 8000:8000 yuzutech/kroki 

# 或者調(diào)用公共 API
curl -X POST https://kroki.io/mermaid/svg -d 'graph TD; A-->B; B-->C; C-->A;' > diagram.svg

示例使用(通過 curl 訪問 Mermaid)

curl -X POST https://kroki.io/mermaid/svg -d 'graph TD
>     DNS[Route53] --> LB[ELB]
>     LB --> WS1[Web Server 1]
>     LB --> WS2[Web Server 2]
>     WS1 --> Lambda[Lambda Function]
>     Lambda --> IAM[IAM Role]
>     WS1 --> DB1[Primary DB]
>     WS2 --> DB1
>     DB1 --> DB2[Replica DB]' >  diagram.svg

輸出

圖片圖片

總結(jié)

圖表即代碼工具正在改變開發(fā)人員、DevOps 工程師、架構(gòu)師甚至技術(shù)文檔撰寫者溝通復(fù)雜基礎(chǔ)設(shè)施和系統(tǒng)設(shè)計(jì)的方式。在當(dāng)今快節(jié)奏的工程環(huán)境中,系統(tǒng)不斷發(fā)展,以可復(fù)制、版本控制的格式記錄架構(gòu)已不再是奢侈,而是必需品。

通過為你的工作流程選擇正確的工具,你不僅可以提高文檔質(zhì)量,還可以釋放自動(dòng)化可能性,例如直接從 CI/CD 管道渲染圖表或在內(nèi)部門戶中嵌入最新的視覺效果。

你可以選擇適合你個(gè)人工作流程或團(tuán)隊(duì)設(shè)置的工具。對(duì)我來說,Diagrams非常適合,因?yàn)槲沂煜?Python,我能夠輕松地將圖表生成功能集成到我現(xiàn)有的基于 Python 的工作流程中。

無論你選擇哪種工具,采用 “圖表即代碼” 都會(huì)使你的設(shè)計(jì)更易于維護(hù)、更易于擴(kuò)展,并且更易于在團(tuán)隊(duì)之間共享。非常建議你嘗試一下,如果覺得好用,一鍵三連支持一下呀??

參考資料

[1] Diagrams: https://diagrams.mingrammer.com/

[2] PlantUML: https://plantuml.com/

[3] Mermaid: https://mermaid.js.org/

[4] Structurizr: https://structurizr.com/

[5] AWS Diagram-as-Code: https://github.com/awslabs/diagram-as-code

[6] https://github.com/awslabs/diagram-as-code: https://github.com/awslabs/aws-diagram-as-code

[7] D2: https://d2lang.com/

責(zé)任編輯:武曉燕 來源: 數(shù)據(jù)STUDIO
相關(guān)推薦

2022-12-25 16:30:53

人工智能工具

2015-11-17 09:35:26

開源學(xué)習(xí)框架

2022-03-10 09:28:24

Kubernete云原生

2012-11-15 10:35:30

淘寶開源系統(tǒng)

2012-04-17 11:23:42

imo即時(shí)通訊

2015-12-08 12:10:50

2017-11-02 07:28:47

微軟

2023-10-15 12:59:26

開源項(xiàng)目

2023-10-10 18:20:22

開源API

2016-05-25 17:19:43

用戶體驗(yàn)工具

2017-09-11 08:35:15

PythonGUIIT

2016-08-22 23:01:12

LinuxTorrent客戶軟件

2024-02-27 08:00:00

人工智能AI編程助手開發(fā)

2017-03-02 08:34:00

云服務(wù)擴(kuò)展芯片IT

2024-03-26 07:55:49

CSS工具HTML代碼

2022-12-25 16:44:40

開源工具Github

2024-08-30 09:13:56

2020-10-21 10:32:12

CIO創(chuàng)新技術(shù)

2023-11-13 22:33:47

低代碼無代碼

2022-01-19 11:48:21

安全開源工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)