架構設計:”4+1″視圖

概念

“4+1”視圖,是指從5個不同視角來描述軟件體繫結構。
“4+1”分別指:

  1. 邏輯視圖
  2. 過程視圖
  3. 物理視圖
  4. 開發視圖
  5. 場景/用例 視圖

邏輯架構的描述可以圍繞前四個視圖進行組織,然後結合用例或場景進行說明,形成第五個視圖。

每個視圖只關心繫統的一個側面,5個視圖結合起來,才能反映系統的全部內容。

關於視圖

軟件設計可以從不同的概念角度進行描述和記錄,這些角度通常被稱為視圖。

“視圖表示軟件體繫結構的一部分,它显示軟件系統的特定屬性”

不同的視圖涉及與軟件相關的不同問題。

總之,軟件設計是由設計過程產生的多方面的產物,通常由相對獨立的正交視圖組成,可以結合建築視圖理解。

邏輯視圖

當使用面向對象的設計方法時,邏輯視圖對應設計的對象模型,常用描述方法有UML類圖、E-R圖。

邏輯架構主要支持功能需求,即系統應該為用戶提供什麼樣的服務。
系統被分解成一組關鍵抽象,以對象或對象類的形式從問題中表述。

類的設計遵循抽象、封裝和繼承的原則,這種分解不僅是為了進行功能分析,也是為了理清系統各個部分的通用機制和設計元素。

過程視圖

過程架構關注設計的併發和同步方面,考慮了一些非功能性需求,比如性能和可用性。
過程視圖可以在幾個抽象層次上進行描述,每個抽象層次處理不同的關注點:

  • 在最高層次上關注進程,進程分佈在由LAN或WAN連接的一組硬件資源上,作為一組獨立執行的通信程序邏輯網絡。
  • 多個邏輯網絡可以同時存在,共享相同的物理資源。

主要任務是通過一組定義良好的任務間通信機制進行通信:基於同步和異步消息的通信服務、遠程過程調用、事件廣播等。

次要任務是可以通過集合或共享內存進行通信,避免重大任務在同一過程或處理節點上進行配置假設。

物理視圖

物理視圖描述軟件到硬件的映射,主要反映在分佈式方面。

物理架構主要考慮系統的非功能性需求,如可用性、可靠性(容錯性)、性能(吞吐量)和可擴展性。

常見物理配置:

  • 測試
  • 為不同站點或不同客戶部署系統

開發視圖

開發視圖描述軟件在其開發環境中的靜態組織。

開發架構的重點:

  • 對軟件開發環境中實際軟件模塊進行組織
  • 將軟件打包成小的程序庫,或者打包成可以由一個或少量開發人員開發的子系統

系統的開發架構由模塊和子系統圖表示,表示成“導出”和“導入”關係。只有當軟件的所有元素都被識別之後,才能描述完整的開發架構。

在很大程度上,開發架構考慮發展的便利性、軟件管理、重用或通用性,以及工具集或編程語言施加的約束。

開發視圖是需求分配的基礎,便於開發團隊分配工作,有助於成本評估和提前計劃、監控項目進度、軟件重用、可移植性和安全性的推理。通過開發視圖,容易得出項目開發人員的分工配置。

實際應用中,開發視圖會在邏輯視圖的基礎上增加大量內容,比如大量接口、輔助類等。

場景/用例 視圖

架構的描述決策可以圍繞前四個視圖進行組織,然後由一些選定的用例或場景(成為第五個視圖)進行說明。

其他四個視圖中的元素,可以通過一些重要的場景或用例進行更好的展示,比如:

  • 構造更符合用例的實例
  • 描述一些關聯腳本,如對象之間或進程之間的交互

總結

並非所有的軟件架構都需要完整的“4+1”視圖。

無用的視圖可以從架構描述中省略,例如:

  • 如果只有一個處理器,則不需要物理視圖
  • 如果只有一個進程或程序,則不需要進程視圖
  • 對於非常小的系統,有可能邏輯視圖和開發視圖非常相似,不需要單獨描述

場景視圖在任何情況下都有用。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

台廠商農作廢棄物製吸管 紐約參展進軍美東

摘錄自2020年03月14日世界新聞網全國報導

全球環保意識興起,紐約市也於本月開始禁用免費塑膠袋,來自台灣的鉅田潔淨技術公司以農作廢棄物,包括甘蔗渣、咖啡渣、竹子粉等材料,製成不含聚乳酸(PLA)的甘蔗吸管,以廢棄物循環再利用的環保概念,於過去幾年成功推廣至美西,如今希望藉由到紐約參加專業展覽,讓產品進軍美東地區。

據統計,全世界每年使用3700億支一次性塑膠吸管,今年首次至紐約參展的鉅田潔淨技術公司,推出的甘蔗吸管則是以循環再生經濟理念邁,以可再生材料作為原料製造,並訴求吸管能夠自然分解,確保地球有限的資源能以循環再生、永續方式被使用,形成一個友善的經濟及產業系統。

該公司業務經理楊量祺說,以目前美國市場,加州對於可分解吸管的接受度較高,紐約目前則是有部分店家開始使用環保吸管,普及度仍較低;甘蔗吸管雖然成本是一般塑膠吸管的六倍,但基於大眾環保意識抬頭,展覽期間仍有不低的詢問度。

公害污染
廢棄物
國際新聞
紐約
塑膠袋
吸管

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

三菱電機將自己的導彈技術用在無人駕駛汽車上

日本三菱電機準備將自己的武器技術用在無人駕駛汽車上,可以利用的元件包括雷達、聲納發射機、感測器和攝像頭,這些組件是導彈所必需的。需要注意的是三菱電機並不是汽車製造商三菱。

三菱電機工程師Katsumi Adachi在接受採訪時透露說,公司希望將技術用在汽車中,這些汽車2020年就會上路。

2017年4月,三菱電機就會開始生產車道保持、自動刹車系統元件。在隨後的一個財年裡,公司將會開始生產自動刹車系統。三菱電機為日本空軍提供空對空導彈,它希望用軍事技術幫助無人駕駛汽車偵測障礙物、避免碰撞。據Katsumi Adachi透露,已經有企業向三菱電機定購自動刹車系統和車道保持元件。他還說,三菱電機掌握了高精度感測器、電動助力轉向系統相關技術,明年公司就可以提供更先進的系統了。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

CSS複合選擇器是什麼?複合選擇器是如何工作

複合選擇器介紹

  • 複合選擇器其實很好理解,說白了就跟我們生活中的有血緣關係家庭成員一樣,通過標籤或者class屬性或id屬性,去找對應的有血緣關係的某個選擇器,具體的大家往下看哦。
  • 如果是初學者對基本的選擇器不是很了解的可以看筆者之前寫過的基本選擇器文章,,在這就不過多的介紹基本選擇器的使用了。

複合選擇器說明表

選擇器 描述 舉例
選擇器1 選擇器2{屬性:值;} 多元素選擇器。同時匹配選擇器1和選擇器2,多個選擇器之間用逗號隔開即可。 h1,h2,h3{color: red;}
E F {屬性:值;} 後代元素選擇器,匹配所有屬於E元素後代的F元素,E和F之間用空格隔開即可。 .box h1{color: red;}
E>F{屬性:值;} 子元素選擇器,匹配所有E元素的子元素為F div >h1{color:red;}
E+F{屬性:值;} 相鄰元素選擇器,匹配所有緊跟隨着E元素之後的同級元素F div+div{color:red;}

多元素選擇器

  • 多元素選擇器在工作當中經常會用到,主要用於設置多個元素使用同一種CSS樣式。
  • 讓我們進入多元素選擇器實踐,實踐內容如:將HTML頁面中的div標籤、h1標籤、p標籤、中的文本顏色設置為紅色。
  • 代碼塊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>多元素選擇器</title>
</head>
    <style>
        div,h1,p{
           color: red;
        }
    </style>
<body>
    <div>成功不是打敗別人,而是改變自己。</div>
    <h1>成功不是打敗別人,而是改變自己。</h1>
    <p>成功不是打敗別人,而是改變自己。</p>
</body>

</html>
  • 結果圖

  • 注意:作用給列表中的所有的選擇器設置樣式,class類選擇器或id選擇器也是一樣,在這裏就拿class類選擇器屬性值為.box為例,其餘的大家可以自己嘗試。

  • 代碼塊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>多元素選擇器</title>
</head>
    <style>
        .box,h1,p{
           color: red;
        }
    </style>
<body>
    <div class="box" >成功不是打敗別人,而是改變自己。</div>
    <h1>成功不是打敗別人,而是改變自己。</h1>
    <p>成功不是打敗別人,而是改變自己。</p>
</body>

</html>
  • 結果圖

後代元素選擇器

  • 讓我們進入後代元素選擇器實踐,實踐內容如:將class屬性值為.box的後代元素文本顏色設置為紅色,給大家介紹下結構:class屬性值為.box中一共有三個子元素,第一個h1標籤、第二個h1標籤、第三個div標籤、但是第三個子元素為div標籤裏面還有一個子元素為h1標籤或者我們可以理解為class屬性值為.box的孫子輩元素。
  • 代碼塊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>後代元素選擇器</title>
</head>
    <style>
        .box h1{
           color: red;
        }
    </style>
<body>
    <div class="box" >
        <h1>成功不是打敗別人,而是改變自己。</h1>
        <h1>微笑是最初的信仰</h1>
        <div>
            <h1>成功不是打敗別人,而是改變自己。</h1>
        </div>
    </div>
    
</body>

</html>
  • 結果圖

  • 注意:後代選擇器只能包含在class屬性值為.box裏面的所有屬性。

子元素選擇器

  • 讓我們進入子元素選擇器實踐,實踐內容如:將class屬性值為.box的子元素文本顏色設置為紅色,給大家介紹下結構:class屬性值為.box中一共有三個子元素,第一個h1標籤、第二個h1標籤、div標籤、但是第三個子元素為div標籤裏面還有一個子元素為h1標籤或者我們可以理解為class屬性值為.box的孫子輩元素。

  • 代碼塊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>子元素選擇器</title>
</head>
    <style>
        .box > h1{
           color: red;
        }
    </style>
<body>
    <div class="box" >
        <h1>成功不是打敗別人,而是改變自己。</h1>
        <h1>微笑是最初的信仰</h1>
        <div>
            <h1>成功不是打敗別人,而是改變自己。</h1>
        </div>
    </div>

</body>

</html>
  • 結果圖

  • 注意:子元素選擇器和後代元素選擇器是不樣的,子元素選擇器是將class屬性值為.box中的子元素設置CSS樣式,後代元素選擇器是將class屬性值為.box中的所有元素設置CSS樣式,現在大家應該明白了,為什麼div標籤中的h1標籤文本顏色沒有被渲染的原因了吧,因為div標籤中的h1標籤是孫子輩。

相鄰元素選擇器

  • 相鄰元素選擇器必須滿足以下條件才會匹配。
  • E元素與F元素必須是兄弟關係,意思就是平輩關係。
  • E元素與F元素必須要緊挨着,就是之間不能有任何元素阻擋。
  • 要求F元素一定是在E元素的下面。
  • 讓我們進入相鄰元素選擇器實踐,實踐內容如:將HTML頁面中的class屬性值為.box的相鄰元素文本顏色設置為紅色。
  • 代碼塊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>相鄰元素選擇器</title>
</head>
    <style>
        .box + h1{
           color: red;
        }
    </style>
<body>
    <h1>我在上面學習</h1>
    <div class="box" >
        <h1>成功不是打敗別人,而是改變自己。</h1>
    </div>
    <h1>我在下面學習</h1>
</body>
</html>
  • 結果圖

  • 注意:大家一定要注意以上的2個必須和1個一定的規則,否則CSS樣式不會被渲染。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

避之唯恐不及 仍有泰人採集蝙蝠糞便維生

摘錄自2020年3月24日公視報導

蝙蝠被認為極可能是新型冠狀病毒的宿主。不過在泰國卻有一群人,甘願冒著染病的風險進到蝙蝠的洞穴,採取大量蝙蝠糞便;原來蝙蝠的糞便不但可以當肥料販賣,而且利潤也高,泰國村莊有好幾個世代都以此維生。

由於洞穴裡的蝙蝠數量極多,靠著帽子上的燈光,村民只要進入蝙蝠洞約三小時,就能蒐集到大約500桶蝙蝠糞便,能賣得約7萬多台幣。蝙蝠糞便含有豐富的氮、磷酸鹽和鉀,被當成高營養價值的肥料販賣。有公司專門收購,透過網路在亞馬遜跟阿里巴巴都買得到。

蝙蝠在叻丕府備受重視,除了肥料的經濟效益外,透過蝙蝠捕食破壞水稻和其他作物的昆蟲,在授粉和控制蟲害方面也發揮作用,蝙蝠洞也列為動物保護區。不過這些村民在進入蝙蝠洞時並沒有專業保護,只穿了長袖長褲,避免和蝙蝠接觸。雖然撿拾的是乾燥的蝙蝠糞便,傳播病毒的機率較低,但有學者提出警告,理論上任何跟蝙蝠有關的東西都可能使人暴露在潛在病毒中。萬一在收集蝙蝠糞便的過程中,接觸到新鮮的蝙蝠唾液或尿液,都很有可能染上病毒。

生態保育
國際新聞
泰國
蝙蝠
糞便
武漢肺炎

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

德國政府為推廣電動汽車 計畫為消費者免稅10年

德國政府計畫至2020年德國電動車保有量由當前的3萬輛左右增加至上百萬輛,此外,政府近日出臺了總共8頁的“未來移動方案”檔,檔中提議,為2020年以前購買電動車的個人消費者提供為期10年的免稅優惠。

檔中還提出了進一步措施,包括大規模擴張充電站、從2017年1月1日起將政府用車中電動車的比例提高至20%、以及推出電動車電池研發項目。這些措施將在德國南部Rust舉行的政黨官員會議中進行討論。

據報導,經過數個月的討論,由德國總理安格拉•默克爾(Angela Merkel)保守黨及社會民主黨(SPD)成員組成的議會團體已經就檔相關要點達成一致,或在本週四對全部的決議作出決定。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

一文帶你深入了解 Redis 的持久化方式及其原理

Redis 提供了兩種持久化方式,一種是基於快照形式的 RDB,另一種是基於日誌形式的 AOF,每種方式都有自己的優缺點,本文將介紹 Redis 這兩種持久化方式,希望閱讀本文後你對 Redis 的這兩種方式有更加全面、清晰的認識。

RDB 快照方式持久化

先從 RDB 快照方式聊起,RDB 是 Redis 默認開啟的持久化方式,並不需要我們單獨開啟,先來看看跟 RDB 相關的配置信息:

################################ SNAPSHOTTING  ################################
#
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   In the example below the behaviour will be to save:
#   after 900 sec (15 min) if at least 1 key changed
#   after 300 sec (5 min) if at least 10 keys changed
#   after 60 sec if at least 10000 keys changed
#   save ""
# 自動生成快照的觸發機制 中間的是時間,單位秒,後面的是變更數據 60 秒變更 10000 條數據則自動生成快照
save 900 1
save 300 10
save 60 10000

# 生成快照失敗時,主線程是否停止寫入
stop-writes-on-bgsave-error yes

# 是否採用壓縮算法存儲
rdbcompression yes

# 數據恢復時是否檢測 RDB文件有效性
rdbchecksum yes

# The filename where to dump the DB
# RDB 快照生成的文件名稱
dbfilename dump.rdb

# 快照生成的路徑 AOF 也是存放在這個路徑下面
dir .

關於 RDB 相關配置信息不多,需要我們調整的就更少了,我們只需要根據自己的業務量修改生成快照的機制和文件存放路徑即可。

RDB 有兩種持久化方式:手動觸發自動觸發手動觸發使用以下兩個命令:

  • save:會阻塞當前 Redis 服務器響應其他命令,直到 RDB 快照生成完成為止,對於內存 比較大的實例會造成長時間阻塞,所以線上環境不建議使用

  • bgsave:Redis 主進程會 fork 一個子進程,RDB 快照生成有子進程來負責,完成之後,子進程自動結束,bgsave 只會在 fork 子進程的時候短暫的阻塞,這個過程是非常短的,所以推薦使用該命令來手動觸發

除了執行命令手動觸發之外,Redis 內部還存在自動觸發 RDB 的持久化機制,在以下幾種情況下 Redis 會自動觸發 RDB 持久化

  • 在配置中配置了 save 相關配置信息,如我們上面配置文件中的 save 60 10000 ,也可以把它歸類為“save m n”格式的配置,表示 m 秒內數據集存在 n 次修改時,會自動觸發 bgsave。

  • 在主從情況下,如果從節點執行全量複製操作,主節點自動執行 bgsave 生成 RDB 文件併發送給從節點

  • 執行 debug reload 命令重新加載 Redis 時,也會自動觸發 save 操作

  • 默認情況下執行 shutdown 命令時,如果沒有開啟 AOF 持久化功能則自動執行 bgsave

上面就是 RDB 持久化的方式,可以看出 save 命令使用的比較少,大多數情況下使用的都是 bgsave 命令,所以這個 bgsave 命令還是有一些東西,那接下來我們就一起看看 bgsave 背後的原理,先從流程圖開始入手:

bgsave 命令大概有以下幾個步驟:

  • 1、執行 bgsave 命令,Redis 主進程判斷當前是否存在正在執行的 RDB/AOF 子進程,如果存在, bgsave 命令直接返回不在往下執行。
  • 2、父進程執行 fork 操作創建子進程,fork 操作過程中父進程會阻塞,fork 完成後父進程將不在阻塞可以接受其他命令。
  • 3、子進程創建新的 RDB 文件,基於父進程當前內存數據生成臨時快照文件,完成後用新的 RDB 文件替換原有的 RDB 文件,並且給父進程發送 RDB 快照生成完畢通知

上面就是 bgsave 命令背後的一些內容,RDB 的內容就差不多了,我們一起來總結 RDB 持久化的優缺點,RDB 方式的優點

  • RDB 快照是某一時刻 Redis 節點內存數據,非常適合做備份,上傳到遠程服務器或者文件系統中,用於容災備份
  • 數據恢復時 RDB 要遠遠快於 AOF

有優點同樣存在缺點,RDB 的缺點有

  • RDB 持久化方式數據沒辦法做到實時持久化/秒級持久化。我們已經知道了 bgsave 命令每次運行都要執行 fork 操作創建子進程,屬於重量級操作,頻繁執行成本過高。
  • RDB 文件使用特定二進制格式保存,Redis 版本演進過程中有多個格式 的 RDB 版本,存在老版本 Redis 服務無法兼容新版 RDB 格式的問題

如果我們對數據要求比較高,每一秒的數據都不能丟,RDB 持久化方式肯定是不能夠滿足要求的,那 Redis 有沒有辦法滿足呢,答案是有的,那就是接下來的 AOF 持久化方式

AOF 持久化方式

Redis 默認並沒有開啟 AOF 持久化方式,需要我們自行開啟,在 redis.conf 配置文件中將 appendonly no 調整為 appendonly yes,這樣就開啟了 AOF 持久化,與 RDB 不同的是 AOF 是以記錄操作命令的形式來持久化數據的,我們可以查看以下 AOF 的持久化文件 appendonly.aof

*2
$6
SELECT
$1
0
*3
$3
set
$6
mykey1
$6
你好
*3
$3
set
$4
key2
$5
hello
*1
$8

大概就是長這樣的,具體的你可以查看你 Redis 服務器上的 appendonly.aof 配置文件,這也意味着我們可以在 appendonly.aof 文件中國修改值,等 Redis 重啟時將會加載修改之後的值。看似一些簡單的操作命令,其實從命令到 appendonly.aof 這個過程中非常有學問的,下面時 AOF 持久化流程圖:

在 AOF 持久化過程中有兩個非常重要的操作:一個是將操作命令追加到 AOF_BUF 緩存區,另一個是 AOF_buf 緩存區數據同步到 AOF 文件,接下來我們詳細聊一聊這兩個操作:

1、為什麼要將命令寫入到 aof_buf 緩存區而不是直接寫入到 aof 文件?

我們知道 Redis 是單線程響應,如果每次寫入 AOF 命令都直接追加到磁盤上的 AOF 文件中,這樣頻繁的 IO 開銷,Redis 的性能就完成取決於你的機器硬件了,為了提升 Redis 的響應效率就添加了一層 aof_buf 緩存層, 利用的是操作系統的 cache 技術,這樣就提升了 Redis 的性能,雖然這樣性能是解決了,但是同時也引入了一個問題,aof_buf 緩存區數據如何同步到 AOF 文件呢?由誰同步呢?這就是我們接下來要聊的一個操作:fsync 操作

2、aof_buf 緩存區數據如何同步到 aof 文件中?

aof_buf 緩存區數據寫入到 aof 文件是有 linux 系統去完成的,由於 Linux 系統調度機制周期比較長,如果系統故障宕機了,意味着一個周期內的數據將全部丟失,這不是我們想要的,所以 Linux 提供了一個 fsync 命令,fsync 是針對單個文件操作(比如這裏的 AOF 文件),做強制硬盤同步,fsync 將阻塞直到寫入硬盤完成后返回,保證了數據持久化,正是由於有這個命令,所以 redis 提供了配置項讓我們自行決定何時進行磁盤同步,redis 在 redis.conf 中提供了appendfsync 配置項,有如下三個選項:

# appendfsync always
appendfsync everysec
# appendfsync no
  • always:每次有寫入命令都進行緩存區與磁盤數據同步,這樣保證不會有數據丟失,但是這樣會導致 redis 的吞吐量大大下降,下降到每秒只能支持幾百的 TPS ,這違背了 redis 的設計,所以不推薦使用這種方式
  • everysec:這是 redis 默認的同步機制,雖然每秒同步一次數據,看上去時間也很快的,但是它對 redis 的吞吐量沒有任何影響,每秒同步一次的話意味着最壞的情況下我們只會丟失 1 秒的數據, 推薦使用這種同步機制,兼顧性能和數據安全
  • no:不做任何處理,緩存區與 aof 文件同步交給系統去調度,操作系統同步調度的周期不固定,最長會有 30 秒的間隔,這樣出故障了就會丟失比較多的數據。

這就是三種磁盤同步策略,但是你有沒有注意到一個問題,AOF 文件都是追加的,隨着服務器的運行 AOF 文件會越來越大,體積過大的 AOF 文件對 redis 服務器甚至是主機都會有影響,而且在 Redis 重啟時加載過大的 AOF 文件需要過多的時間,這些都是不友好的,那 Redis 是如何解決這個問題的呢?Redis 引入了重寫機制來解決 AOF 文件過大的問題。

3、Redis 是如何進行 AOF 文件重寫的?

Redis AOF 文件重寫是把 Redis 進程內的數據轉化為寫命令同步到新 AOF 文件的過程,重寫之後的 AOF 文件會比舊的 AOF 文件占更小的體積,這是由以下幾個原因導致的:

  • 進程內已經超時的數據不再寫入文件
  • 舊的 AOF 文件含有無效命令,如 del key1、hdel key2、srem keys、set a111、set a222等。重寫使用進程內數據直接生成,這樣新的AOF文件只保 留最終數據的寫入命令
  • 多條寫命令可以合併為一個,如:lpush list a、lpush list b、lpush list c可以轉化為:lpush list a b c。為了防止單條命令過大造成客戶端緩衝區溢 出,對於 list、set、hash、zset 等類型操作,以 64 個元素為界拆分為多條。

重寫之後的 AOF 文件體積更小了,不但能夠節約磁盤空間,更重要的是在 Redis 數據恢復時,更小體積的 AOF 文件加載時間更短。AOF 文件重寫跟 RDB 持久化一樣分為手動觸發自動觸發,手動觸發直接調用 bgrewriteaof 命令就好了,我們後面會詳細聊一聊這個命令,自動觸發就需要我們在 redis.conf 中修改以下幾個配置

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • auto-aof-rewrite-percentage:代表當前 AOF文件空間 (aof_current_size)和上一次重寫后 AOF 文件空間(aof_base_size)的比值,默認是 100%,也就是一樣大的時候
  • auto-aof-rewrite-min-size:表示運行 AOF 重寫時 AOF 文件最小體積,默認為 64MB,也就是說 AOF 文件最小為 64MB 才有可能觸發重寫

滿足了這兩個條件,Redis 就會自動觸發 AOF 文件重寫,AOF 文件重寫的細節跟 RDB 持久化生成快照有點類似,下面是 AOF 文件重寫流程圖:

AOF 文件重寫也是交給子進程來完成,跟 RDB 生成快照很像,AOF 文件重寫在重寫期間建立了一個 aof_rewrite_buf 緩存區來保存重寫期間主進程響應的命令,等新的 AOF 文件重寫完成后,將這部分文件同步到新的 AOF 文件中,最後用新的 AOF 文件替換掉舊的 AOF 文件。需要注意的是在重寫期間,舊的 AOF 文件依然會進行磁盤同步,這樣做的目的是防止重寫失敗導致數據丟失,

Redis 持久化數據恢復

我們知道 Redis 是基於內存的,所有的數據都存放在內存中,由於機器宕機或者其他因素重啟了就會導致我們的數據全部丟失,這也就是要做持久化的原因,當服務器重啟時,Redis 會從持久化文件中加載數據,這樣我們的數據就恢復到了重啟前的數據,在數據恢復這一塊Redis 是如何實現的?我們先來看看數據恢復的流程圖:

Redis 的數據恢複流程比較簡單,優先恢復的是 AOF 文件,如果 AOF 文件不存在時則嘗試加載 RDB 文件,為什麼 RDB 的恢復速度比 AOF 文件快,但是還是會優先加載 AOF 文件呢?我個人認為是 AOF 文件數據更全面並且 AOF 兼容性比 RDB 強,需要注意的是當存在 RDB/AOF 時,如果數據加載不成功,Redis 服務啟動會失敗。

最後

目前互聯網上很多大佬都有 Redis 系列教程,如有雷同,請多多包涵了。原創不易,碼字不易,還希望大家多多支持。若文中有所錯誤之處,還望提出,謝謝。

歡迎掃碼關注微信公眾號:「平頭哥的技術博文」,和平頭哥一起學習,一起進步。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

Model 3 還不夠平價?Elon Musk:將推出更便宜的 Model 4

Tesla 新款電動車 Model 3 將在 2017 年下半年出貨,這款定價僅為 3.5 萬美元的電動車在預售期獲得了巨大的成功,這將是一款改變汽車市場規則的產品,Tesla CEO Elon Musk 在接受採訪時表示,Tesla 的下一款產品將比 Model 3 更便宜。

Model 3 是 Tesla 迄今為止推出的最便宜的電動車,這款車在性能和規格上與豪華車相比也不遜色,單次充電續航里程達到 200 英里,定價僅為 3.5 萬美元,早期訂購的消費者還可以享受到電動車的稅率補貼。   Model 3 定價吸引了大量消費者關注,Tesla CEO Elon Musk 最近接受採訪時透露,Tesla 早期推出的 Roadster、Model S 和 Model X 這款價格相對較高的電動車,是為積累資金,為推出一款平價的電動車打下基礎,但 Model 3 不會是 Tesla 唯一的一款平價電動車。   Tesla 的目標是讓更多的人買得起電動車,Model 3 的推出已經讓一半的人能夠買得起電動車,Tesla 的下一個目標就是把定價做得更低,第四代電動車車型更小,價格更低,使用更方便,最終達成讓每個人都偶買得起電動車的目標。   除了創造優質實惠的電動車給消費者外,Elon Musk 另一個計畫就是研發無人駕駛的公車,減少城市的壅堵。在更便宜的 Model 4 面世之前,Tesla 面對的最大挑戰是短期內提高產能,完成 Model 3 的訂單,據業內人士透露目前 Model 3 的訂單量已經超過了 Tesla 的產能,甚至最終都無法完全交付。

(首圖來源: CC BY 2.0)    (本文授權轉載自《》─〈〉)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

打造最可靠的自動駕駛基礎架構

文章作者:莫璐怡 Pony.ai

編輯整理:Hoh Xil

內容來源:Pony.ai & DataFun AI Talk

出品社區:DataFun

注:歡迎轉載,轉載請在留言區留言。

導讀:本次分享的主題為打造最可靠的自動駕駛基礎架構。主要內容包括如何做 Pony.ai 自動駕駛系統的基礎架構,涉及到的技術困難,以及我們是如何克服的。

首先先了解下傳統互聯網公司的基礎架構:

數據基礎設施,會包括大規模的數據庫、分佈式的文件系統;

計算平台,可能會需要大量的服務器、大數據平台、容器的管理機制;

Web 服務管理,同時還會有各種各樣的 Web Service,不停的迭代來滿足新的業務發展。

這是傳統互聯網公司要做的事情,但是對於自動駕駛公司和 Pony.ai,在這樣的架構基礎上我們還會做哪些事情?

這是 Pony.ai 的基礎架構,包含了所有傳統互聯網公司要做的事情,除此之外,還需要做如下事情:

自動駕駛車載系統,如何支持各種各樣的AI技術、算法,如何控制車輛,這都依賴於自動駕駛車載系統來完成。

大規模仿真平台,Pony.ai 每天至少會跑 30W 公里的仿真測試(很多自動駕駛公司一年跑的里程可能只有百萬級別),這點對於自動駕駛測試來說非常重要。

車隊運營基礎平台,Pony.ai 要打造自己的移動出行服務,需要基礎平台來支持 Robotaxi 的運營。

可視化平台與人機接口,可視化平台是幫助我們了解系統到底是如何思考、運作的,或者當測試工程師做各種測試的時候都依賴於可視化平台;人機接口,自動駕駛車輛最終是要提供出行服務,是有乘客在裏面,這時會有一個可視化的界面,來告訴乘客車所感知的周圍環境,以及接下來的駕駛操作等等信息,同時還會提供人機交互的功能,讓乘客也能控制車輛,比如輸入目的地,或者需要停車等等。

Pony.ai 的目標是打造自動駕駛移動出行平台,我們希望可以在不同的城市,可以提供大規模自動駕駛車輛的運營,那麼我們的基礎架構會面臨以下挑戰:

車輛數量的增加,目前廣州已經有幾十輛車在進行測試,同時還在不停的增長着;

運營區域的擴大,剛開始只是在很小的區域進行測試,目前已經在幾百平方公里的區域進行測試;

數據量的增長,我們有很多的傳感器,以及車輛和運營區域的增加,都使得數據量的增長非常非常非常大;

工程師數量的增長,目前 Pony.ai 有廣深、北京、美國四個 office,工程師的數量每周都在增長,所以導致模塊數量和內部代碼的數量也在增長。

所有的這些增長都要求我們的技術棧是具有可擴展性的,來滿足快速增長所帶來的挑戰。

剛剛講了整個基礎架構,其中重要的一點就是車載系統,在講車載系統之前,先簡單介紹下自動駕駛系統:

傳感器及其他硬件:激光雷達、高分辨率攝像頭、毫米波雷達、GNSS/IMU、運算平台,我們可看到圖中標了不同的顏色,目前這些傳感器是通過 Supplier Partner 來得到的,我們自己不做傳感器,我們需要去購買他們的產品,但是購買之後需要做數據進一步的分析和整合,然後做後面的處理,然後對於運算平台除了 supplier 的一些應用外,我們自己也會做一些優化。傳感器主要要做的事情就是接收真實世界的數據,然後傳遞給 Pony.ai 自動駕駛系統中。

自動駕駛系統:首先,要做傳感器融合,進行時間同步,將多傳感器的數據融合在一起;然後是感知模塊,用來感知周圍的環境有什麼樣的障礙物和物體;接下來會進行行為預測,預測這樣的障礙物或物體之後的行為會是什麼樣的;然後才到我們的決策規劃模塊,按照之前的預測來決定之後車輛的動作,如急剎車、讓路、超車等動作;最後,就是我們的控制模塊,他會按照決策規劃模塊,告知我們的系統要怎麼做,然後決定怎麼踩剎車、油門,怎麼打方向盤。

車輛,我們本身是不造車的,所以車輛是由 OEM 提供的,但是整個控制的算法,是我們自研去做的。

除此之外,還有高精地圖與定位模塊,以及數據與系統架構(數據的處理,以及控制數據在不同模塊的流動)。

這裏介紹的是各個模塊,但最後把他們串聯起來,靠的是我們的自動駕駛軟件系統,這就是自動駕駛的車載系統。很多自動駕駛企業使用的是 ROS 的一套工業系統,而 Pony.ai 是從第一行代碼開始,寫了一套 PonyBrain,自研的多層次自動駕駛車載系統,最主要的做的事情有:

多模塊的調度運行,所有模塊的調度運行都是 Pony.ai 自己去做的。

模塊間的消息通信,如何把數據從激光雷達傳遞到傳感器融合的模塊,再把融合的結果放到感知模塊中,然後感知的數據怎麼告訴行為預測、決策規劃等等模塊,以及如何拿到高精地圖與定位的信息。

車載計算資源的分配與管理,對於自動駕駛來說反應速度是非常重要的,這就需要我們對內存、CPU、GPU 等有足夠的優化,做到定製化的車載計算資源分配與管理。

日誌記錄,同時我們需要完善的日誌記錄,我們所有的測試數據回來都需要一整套的 Pipeline 去做自動化的分析,然後幫我們評判出有意義的數據,給到測試工程師或者研發工程師,進行進一步的分析去使用,然後進一步提升我們的模型。

監控與報警,保證了我們自動駕駛的安全性。

車載系統的挑戰:

① 可靠性:車載系統必須足夠的可靠,不能有任何的內存泄露、代碼邏輯的錯位,這種都是零容忍的,一旦發生了這樣的事情,對整個自動駕駛系統來說是非常嚴重的事故,是有可能影響到安全性的,對於 Pony.ai 自動駕駛系統技術的發展來說,安全永遠是我們的第一位,所以所有影響安全性的事情,我們都是零容忍的,同時他也會影響車隊運營的效率;所以我們還需要系統監控與異常報警,一旦系統出現任何問題,我們需要及時提醒安全員,做出車輛接管的操作。

② 高性能:滿足模塊間通信的海量數據壓力,同時實現低延遲。

③ 靈活性:支持多種不同類型的計算資源的接入,以及不同類型模塊的接入,需要有靈活的系統來支持計算資源的高速迭代。

車載系統的實踐:

可靠性:

① 代碼質量要求高:對於可靠性來說我們有非常嚴格的 code review 和 unit test,相信這是在國內互聯網公司不太容易見到的一件事情,雖然會非常耗時,但是對可靠性的提升是有非常大的幫助的。

② 合理使用工具幫助發現問題:同時我們也會使用非常多的工具,如靜態分析、ASAN 等等,來做離線的分析,來保證系統的可靠性。

③ 多重系統可靠性檢查:包括系統啟動前校驗,系統運行時實時監控,系統運行后數據分析等。

④ 這是我們的持續集成與發布的平台:對於每一次代碼的修改,我們都會進行仿真測試;然後對於研發的迭代,我們每周會有 Release 版本的更新,保障版本的穩定性,同時,剛剛我們整個測試包括封閉,半封閉,高峰期的測試,整個測試流程怎麼持續集成與發布,也是保證系統可靠性的一種方法。

高性能:

① 合理的架構避免大數據拷貝等嚴重影響性能的邏輯。

② 依據模塊邏輯分配合適的計算資源,如內存、CPU、GPU 等。

③ 定期對整個系統 Profile 分析系統的性能瓶頸。

靈活性:

① 定義足夠通用的模塊公共接口。

② 定義足夠通用的消息通信接口。

為什麼需要仿真系統?因為仿真系統可以使得我們車還沒有上路的時候,就已經做了大規模的自動駕駛測試,無需路測和人力接入就可以評價系統的性能變化;由於沒有進行路測,不會引起路面事故;同時,仿真系統還提供了基於數據驅動快速迭代算法的可行性,新的算法可以先在仿真平台上做驗證,一些具體的指標和測試的信息都會在仿真平台上有所體現。

仿真系統數據的倆個不同來源:

① 支持真實路測收集的場景,我們的路測數據非常的多,數據回來之後,通過 Data Pipeline 自動更新這些有意義和有意思的場景,我們會根據當時的場景改動相應的模塊,然後會在仿真系統重跑當時的場景,來判斷新的方法是否 work;

② 支持人工和隨機生成的場景,這樣的一些仿真的場景,也是非常的重要的,因為雖然我們在做大規模的路測,但是不代表可以遇到所有的場景,很多場景無法在路測中收集到,這就需要我們通過人工去創造這樣的場景出來,給我們的系統一些樣本,來學習如何處理這樣的場景,保證我們新的 feature 在這樣的場景不會出現問題。

仿真平台的挑戰與實踐:

① 仿真結果的可靠性:首先仿真的結果必須是可靠的,如果不可靠,用它檢測出來的結果是沒有任何的意義的。整個仿真是在服務端模擬車載環境跑的,同時在服務端構建車輛動力學模型,保證測試的數據足夠可靠。

② 仿真數據的選擇與管理:當然我們會選擇合適的路測數據來幫助算法的迭代(這裏的選擇不是人工的選擇,是全自動化的選擇,幫我們在茫茫數據中挑選出有意義的數據);另外,我們還會規範的依據類別管理大規模的仿真數據,比如感知模塊的一些改動,到底需要測試哪些數據,才會更加的體現這個改動帶來多少影響,這裏我們會有內部的一個分類,我們不會對所有的數據進行無差別的仿真(這樣做意義不大)。

③ 仿真系統的性能:我們將整個仿真系統并行部署在分佈式計算平台中,這才可能滿足我們單天 30W 公里以上的仿真測試,並且這個數據還在不斷增長。

數據基礎架構:

數據是自動駕駛技術進步的核心驅動力,沒有數據,我們就看不到現在如此多的測試車輛在進行路測,數據本身有幾個重要的點:

① 如何存儲海量的數據,如何支持快速的訪問。

② 如何進行數據處理。

③ 如何進行數據同步,如何把不同區域、路測數據、車載數據同步到數據集中,如何讓不同辦公區的工程師都可以使用這些數據,對數據同步來說是一個很大的挑戰。

核心挑戰:

① 數據量大:我們有 PB 級別的數據,這裏只是以攝像頭為例,還包括其他傳感器數據,以及系統運作的中間數據等等。

② 數據屬性不同於互聯網數據:我們的數據由客戶端產生,有大量的傳感器數據、大量的模塊運行日誌,這與互聯網數據有本質的區別,所以對整個數據架構的要求也是不一樣的。

數據存儲的挑戰:

① 依據特定的使用場景設計合理的存儲格式的設計:以便於車載系統記錄、大規模數據分析(數據回來之後,需要有方法進行分析,找出有意義的數據)、部分數據訪問、文件系統存儲(如何高效的利用文件系統)等。

② 選擇合適的存儲系統:

針對冷/熱數據選擇不同方案

選擇高可用的存儲系統

選擇易於水平擴展,因為車輛規模是不停的在變大的,運營時間越來越長,數據的增長速度是遠超想象的,所以需要易於水平擴展的存儲系統。

控製成本,不能用過於昂貴的設備。

數據處理可以幫助收集性能指標,有 MPI(平均每次接管所需里程)、模塊運行效率、乘客舒適度體驗等,還有就是路測有趣場景的挖掘,如接管、急剎、感知算法識別、不合理的變道策略等用於模型訓練和仿真。

數據處理的挑戰:

① 減小數據採集到處理的全流程時間:如何以最快的速度把數據從車傳到中間處理系統,Data Pipeline 運行完之後,上傳到數據中心,這裏面我們做了非常多的工作。

② 依據不同類型數據處理任務選擇合適的處理系統:計算量要求比較高的我們選擇 CPU 密集型系統來處理;更多的會是車載的數據,我們會選擇 IO 密集型系統進行處理。

③ 通用的任務定義以支持靈活的添加新任務:幫我們檢測出來更多有意義的數據。

車隊運營基礎平台:

我們有一個 Pony Pilot 項目,在我們廣州所有的內部員工都可以使用,同時在北京和美國加州,也有同樣的服務已經上線,那麼支持這樣的服務,我們需要做哪些事情:

Fleet Control Center,車隊控制中心

Pony Pilot APP

Onboard system

各種各樣的 webapp,幫助我們觀察整個車隊的運營情況,幫助管理測試的車輛和人員。

車隊運營基礎平台的挑戰:

需要支持複雜需求變化的 web 框架,同時我們有大量的 web service 的部署與管理,這都需要我們去完善 web 服務通用組件,例如部署工具、日誌記錄平台隨時排查問題、監控平台保證所有 service 平台的高可容性。

容器與服務調度平台:

通過 Kubernetes 來幫我們做各種各樣的服務調度和集群支持。

可視化平台:

① 目標:方便人類理解無人車系統看到的世界

② 挑戰:首先,需要足夠的靈活,易於適配不同需求的工具;其次,需要有高性能的現實,如 3D 實時渲染的高效實現;最後,支持跨平台的可視化框架,如桌面系統、移動系統、Web 等多平台。

人機接口:

方便乘客使用的用戶界面,同時可以看到自動駕駛是如何了解世界,如何做決策,如何規劃之後的行為等等,給乘客更多的信息和信任。

總結:

① Pony.ai 的基礎架構工作包括:

傳統互聯網公司所需要解決的基礎架構挑戰。

自動駕駛技術特定的基礎架構挑戰。

② 在這裏工作你可以:

接觸自動駕駛系統的各個方面。

設計並實現滿足通用需求的單機和分佈式系統。

系統的保障自動駕駛技術的持續進步。

這是一個非常有意思的 team,裏面有很多有意思的工作,非常歡迎大家與我們一起來工作,推動整個自動駕駛的發展,謝謝大家!

歡迎關注DataFunTalk同名公眾號,收看第一手原創技術文章。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?

貫穿野生棲地 加州高鐵路段惹質疑

摘錄自2018年9月28日蘋果日報美國加州報導

美國加州高鐵動工興建以來,一直被工程延誤、造價飆升、以及市民告上法院反對計劃等事件所困擾。負責鐵路管理的加州高速鐵路局,周一就最新的南加州棕櫚谷(Palmdale)至柏本克(Burkbank)路線舉行公聽會,近百人到現場示威,對該項目潛在影響表達疑慮。

公聽會在洛杉磯郡Sun Valley進行,300多名對計劃存疑的聖費爾南多谷(San Fernando Valley)居民出席。在場的示威者向鐵路管理層,就新路線對地震斷層、野生動物過境點、地面震動、廢氣排放、貨車交通等各項影響提出質疑。一名與會者表示,簡報並未能消除她的疑慮。

當局上週透露,棕櫚谷至柏本克之間的首選路線,是原定計劃的修訂版。局方屬意這條全長38.6英里路徑,它的地下路段雖較其他版本多上25.2英里,卻是最簡單,興建最快和風險最低的選擇。

新路線將貫穿聖蓋博山(St. Gabriel Mountains)和鄰近的住宅區,並途經聖塔克拉利塔(Santa Clarita),但繞過Shadow Hills和Lake View Terrace,即原來最爭議最大的部分。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

小三通海運與一般國際貿易有何不同?

小三通快遞通關作業有哪些?