plantuml-繪製狀態圖和活動圖和部署圖

背景

狀態圖:對象的全部狀態,以及基於事件發生的狀態改變的過程;
活動圖:用例的工做流程;
部署圖:系統的軟硬件物理體系結構;node

狀態圖

基本語法

元素 語法 說明
開始和結束狀態 [*] 標識開始和結束狀態
箭頭 --> 添加箭頭
隱藏描述區域 hide empty description 隱藏描述區域
合成狀態 state 合成狀態名字{ 增城的狀態定義語法} 能夠嵌套狀態圖
狀態聲明 state 狀態名字 : 備註 聲明狀態
fork,join state state名字 分開,合併狀態
併發狀態 -- or 或者雙豎線 狀態是併發改變的
箭頭方向 top down left right 能夠控制箭頭的方向
單行註釋 note 方位 of 狀態名 : 單行註釋 單行註釋
多行註釋 note 方位 of 狀態名 換行 單行註釋 換行 end note 多行註釋

登陸狀態圖

@startuml
hide empty description
left to right direction

[*]-->NotLogin:首次打開app

state  NotLogin: 沒有登陸
state  LoginSuccess: 登陸成功
state  LoginFail: 登陸失敗

NotLogin -->LoginSuccess: 登陸
NotLogin -->LoginFail:登陸

state LoginFail {
    state 用戶不存在: ta校驗
    state saas註冊失敗:註冊saas
    state 登記用戶信息失敗: 登記到tiananUser
    state 參數校驗失敗 :校驗參數
}

state join_state  <<join>>
LoginSuccess-->join_state:組裝響應參數
LoginFail-->join_state:組裝響應參數

join_state -->[*]:返回JSON數據到客戶端

@enduml

file

積分狀態圖

@startuml
scale 350 width
left to right direction
hide empty description

state noPointRecord : 沒有積分記錄
state pointZero : 積分爲0
state pointOk : 有積分


[*] -->  noPointRecord: 增長積分
noPointRecord --> pointZero: 初始化
pointZero --> pointOk: 增長/消耗積分

pointOk --> [*]

@enduml

file

活動圖

基本語法

元素 語法 說明
開始 結束 start stop 開始結束活動
活動 :活動名稱; 定義活動
條件語句 if (條件 ?) then (yes) 換行 下一個活動 else(no) endif 條件分支
循環語句 repeat 換行 活動 換行 repeatwhile(條件 ?) 先執行再判斷
循環語句 while ( 成立的條件?) 換行 活動 換行 endwhile(不成立的條件描敘) 先判斷條件在循環
改變活動的形狀 :活動> < ] } / 豎線 分別獲得不一樣的形狀
並行處理 fork fork again end fork 並行處理
組合 partition group名稱 { 活動圖語法} 對活動進行分組
泳道 兩根豎線包圍 泳道
分離 detach 移除箭頭

登陸活動圖

@startuml
header 登陸接口活動圖
footer 登陸接口活動圖
|tomcat|
start
:參數校驗]

if (參數校驗經過 ?) then (yes)
elseif (字符串爲空) then (no)
stop
else (其它校驗錯誤)
    stop
endif

|TA服務端|
:用戶code遠程校驗;
|LX Saas|
:saas註冊登陸;
|mysql|
:登記到saasUser;
|redis|
:保存令牌到Redis;
|tomcat|
:組裝響應參數;
stop

@enduml

file

增長積分活動圖

@startuml

header 改變用戶積分接口活動圖
footer 改變用戶積分接口活動圖

|tomcat|
start 


:登陸態檢查;

if(令牌非法 ?) then (yes)
:返回未登陸;
stop
else (合法)
endif

:接受參數,point , event ;

if(參數檢查 ?) then(合法)
else(非法)
:返回參數錯誤;
stop
endif

|mysql|
:插入積分增長詳細紀錄;
|tomcat|
:獲得記錄Id;
|redis|
:按照userId查詢獲得用戶積分的表記錄Id;
|tomcat|

if(記錄id不存在 ?)then(yes)
|mysql|
:插入用戶的積分記錄獲得id;
:更新用戶的總積分;

else(id存在)
:更新用戶的總積分;

endif

|redis|
:刪除用戶總積分的緩存;
:刪除用戶積分總條數的緩存;
:刪除用戶積分明細分頁記錄的緩存;

|tomcat|
:獲得明細記錄的id,返回;

:返回客戶端;

stop

@enduml

file

查詢積分活動圖

@startuml

|tomcat|
start

#gold:接受參數,pageNum,pageSize|

:參數校驗;
if (參數校驗經過 ?) then(經過)
else (不經過)
#red:報錯 401 X 參數校驗不經過;
stop
endif

|redis|
:從Redis緩存中查詢獲得記錄的總數]
|tomcat|
if(總數不存在)then (不存在)
|mysql|
    :從數據庫中查詢獲得積分詳細紀錄的總數;
    |redis|
    :設置到redis緩存中;
else

endif

|tomcat|
:獲得紀錄的總條數;


if(總數是否大於0 ?)then
    -[#red]->總數大於0;
    fork
        |redis|
        :從Redis緩存分頁查詢獲得列表;
        |tomcat|
        if (redis中獲取不到數據 ?) then( 獲取不到)
            |mysql|
            :從數據庫中獲取獲得列表;
            |redis|
            :設置到redis緩存中;
        else (獲取到了)
        endif
        |tomcat|
        :獲得分頁查詢的列表;
    fork again
        |redis|
        :從Redis緩存中查詢獲得用戶總積分;
        |tomcat|
        if (redis中獲取不到數據 ?) then( 獲取不到)
            |mysql|
           :從數據庫中獲取獲得用戶總積分;
           |redis|
           :設置到redis緩存中;
        else (獲取到了)
        endif
        |tomcat|
        :獲得用戶總積分;
    end fork
else
    |tomcat|
    -[#green]->總數等於0;
    #green:分頁列表爲空;
    #green:總積分爲0;
endif

|tomcat|
:組裝響應參數\n分頁列表數據\n用戶總積分;
stop;



@enduml

file

部署圖

部署圖顯示了系統的硬件和安裝在硬件上的軟件,以及用於鏈接異構計算機之間的中間件。部署圖一般被認爲是一個網絡圖或者物理架構圖。mysql

語法

元素 語法 說明
角色 actor TaUser as taUser 申明一個角色
代理 agent agent 申明一個代理
程序包 artifact artifact 聲明一個程序包
boundary myBoundary
card card
cloud cloud 表示一塊私有或者共有云
component myComponent
control myControl
數據庫 database mydatabase 表示數據庫
entity entity
文件 file file 表示文件服務器
folder folder
frame frame
interface interface
節點 node node 表示一個物理結構
package package
隊列 queue queue 消息隊列
stack stack
rectangle rectangle
存儲 storage storage
usecase usercase
備註文字 [備註文字] 對組件進行文字備註
連線和箭頭 -- .. == --> 鏈接兩個元素
包裝 元素 名稱 {申明元素語法 } 包含關係

系統部署圖

@startuml

header TA項目物理架構圖
footer TA項目物理架構圖

left to right direction




actor TaUser as taUser
node TaApp as taApp {
    agent LxSDK as lxsdk
    agent TaClient as taClient
}

folder tiananuser_folder{
cloud tiananuserCluster
node tomcat1_tiananuser
node tomcat2_tiananuser
node tomcat3_tiananuser

tiananuserCluster -down-> tomcat1_tiananuser
tiananuserCluster -down-> tomcat2_tiananuser
tiananuserCluster -down-> tomcat3_tiananuser



}

folder tianansp_folder{
cloud tiananspCluster
node tomcat1_tianansp
node tomcat2_tianansp
node tomcat3_tianansp

tiananspCluster -down-> tomcat1_tianansp
tiananspCluster -down-> tomcat2_tianansp
tiananspCluster -down-> tomcat3_tianansp

}


node Nginx as nginx

nginx --> tiananuserCluster:負載均衡/路由
nginx --> tiananspCluster:負載均衡/路由


taUser -->  taApp : 訪問
taApp --> nginx:http/https


database tiananuser_database[
    用戶登陸數據庫

]
database tianansp_database[
    運營活動數據庫
]

database redis[
    redis緩存
]


tiananuser_folder -down-> tiananuser_database
tianansp_folder -right-> tianansp_database

tiananuser_folder -down-> redis
tianansp_folder -up-> redis


node zk [
    zookeeper註冊中心
    dubbo的消費者跟生產者通訊中間件
    定時任務elasticjob的配置中間件
]


tiananuser_folder -down-> zk
tianansp_folder -up-> zk


node apollo [
    apollo配置中心
]

queue kafka[
    kafka集羣
]


tiananuser_folder -down-> apollo
tianansp_folder -up-> apollo


tiananuser_folder -down-> kafka
tianansp_folder -up-> kafka


file fileCDN [
    七牛雲或者阿里雲存儲
]


tiananuser_folder -down-> fileCDN
tianansp_folder -up-> fileCDN


cloud ELK {
    node elsticSearch
    node filebeat
    node kibana
}

node kubernetes{
    node healmcharts[
       交付服務
    ]
    node harbor[
        harbor監控管理kubernetes對象
    ]
}


tiananuser_folder -down-> ELK:日誌寫入
tianansp_folder -up-> ELK:日誌寫入


tiananuser_folder -down-> kubernetes:發佈和管控docker節點
tianansp_folder -up-> kubernetes:發佈和管控docker節點

@enduml

file

小結

  1. 活動圖(泳道圖)其實是代碼流程的一個梳理,建議編碼前,先畫活動圖;
  2. 狀態圖 能夠列舉出全部狀態發生改變的事件,防止遺漏掉某些發生改變的狀況;
  3. 部署圖其實是物理架構圖,畫的不太好看,可是卻能夠在上線的時候有效的指導運維;

原創不易,轉載請註明出處。nginx

相關文章
相關標籤/搜索