不是架構的架構之二 系統基礎(1)

2022-02-10 02:21:30 字數 1451 閱讀 9210

開始著手寫這個系列文章,主要原因是想記錄下自己思考的過程,另外如果能為有這個愛好的同仁提供一點點的思路,就十分的值得了。

架構這個東西在多年前被捧上神壇,似乎架構師是多麼一件光宗耀祖的事情,大概也和比爾蓋茨自封為首席架構師有關。我的這個系列開始於這個奇怪的名稱,就是不想大家被架構二字糊弄,甚至可以隨著我的思路,用你喜歡的語言和工具一起來實現。

接下來開始今天的正題。一開始我們需要實現的是系統的基礎部分,其中包含公用函式庫,日誌部分和一些基本的約束。

首先來看日誌部分。日誌部分之所以成為系統的基礎,是因為日誌可以在開發過程和生產環境中為我們的除錯起到很關鍵的作用。在開發過程中,很多任務作是在編寫業務層或資料層的**,這些**的行為是否和預期的一致,除了用ide中的debug功能,更簡便快速的方法就是輸出日誌;而在生產環境中,遇到一些異常情況後,往往無法進行debug,這時檢視日誌中的異常資訊更是跟蹤錯誤的幾乎唯一辦法。

對於日誌部分,有大名鼎鼎的apache支援的log4net,也有微軟自己實現的企業庫。不過,日誌部分雖然重要,卻不複雜,無論自己實現或直接使用這些開源元件,都是很好的選擇。

如果選擇自己實現,不妨看看我的思路,跟我一塊來實現它。

首先,我們看看需要得到什麼樣的資訊。這裡是我的日誌輸出的結果截圖:

簡單吧。當然前面省略了將日誌資訊解析到dictionary的過程。

然後我們開始實現日誌的接收過程。我這裡實現了兩種方式接收日誌,乙個是通過udp協議,另一種是通過wcf,都很簡單,不過需要注意的是,不能在應用程式主線程中接收訊息,因為我們的主線程還需要處理日誌的命令,所以我們需要使用backgroundworker或者使用乙個單獨的執行緒來接收訊息。如果是使用udp協議接受,我們還需要在呼叫loggerformatter的時候,對呼叫加上併發鎖,否則幾個訊息同時到達的時候可能導致輸出的混亂。

lock(this.gettype())

接收的過程:

var log = new log();

var ips = new ipendpoint(ipaddress.any, tcp_port);

_udp = new udpclient(ips);

_udpreceived = new backgroundworker();

_udpreceived.dowork += (e,s) =>

}catch(exception ex)

};_udpreceived.runworkerasync();

本來想把構思的幾個部分都寫完,一轉眼就有這麼大篇幅了,明天再見。剛開始的會很基礎,後面會慢慢的複雜起來,先易後難嘛,希望各位能和我有同樣漸入佳境的感受。

容器基礎之(二)容器架構 2

1 容器的定義 容器是一種輕量級 可移植 自包含的軟體打包技術,使應用程式可以在幾乎任何地方以相同的方式執行。開發人員在自己筆記本上建立並測試好的容器,無需任何修改就能夠在生產系統的虛擬機器 物理伺服器或公有雲主機上執行。容器與虛擬機器 談到容器,就不得不將它與虛擬機器進行對比,因為兩者都是為應用提...

推薦系統架構 推薦系統(1) 業界推薦系統架構

1.1業界主流推薦系統架構 業界推薦系統通用架構 1.2使用者本身資料 1.3物品本身資料 1.4使用者行為資料 2.1基於離線訓練的推薦系統架構設計 常用演算法 邏輯回歸 logistics regression 梯度提公升決策樹 gbdt 和因式分解 fm 架構設計 2.2面向深度學習的推薦系統...

Linux gpio子系統分析之二 軟體架構

上一章大致對gpio子系統進行了說明,本章我們對gpio子系統的軟體進行說明,本章的主 要內容如下 一 gpio子系統相關資料結構及其關聯說明 二 gpio子系統相關介面說明 此處我們以linux3.10核心版本為例,該版本下gpio子系統涉及的資料結構相對比較簡單,在新的版本下,加入了irqchi...