看看軟體架構師的職責
> Photo by Daniel McCullough on Unsplash.
這篇文章絕對比我以前的那些不同。現在有一段時間,我真的想寫一些理論文章並分享我在啟動時成為軟體架構師的想法。讓我們從日常工作中真正做的事情開始。
介紹
如果您閱讀了我的一些寫作,您知道它與雲,容器,安全性和更多的流行語有關。但它實際上是什麼意思?我在日常工作中做了什麼?
對我來說,它實際上更容易向行業之外解釋架構師師的位置更容易。
- 「像一個建築師,但是對於軟體而言。」
- 「有藍圖,草圖和這些東西?」
- 「確切地!」
看?簡單。
但是,一旦你更深入地解釋它就會變得更加困難。一旦有人真正了解一些流行語。
軟體架構師作業有很多定義。這是一種包含多種職責的位置,可以由各種具有完全不同的方向的人完成。為了給出一些例子,有些是研發團隊的一個組成部分,而其他人則更接近顧問(甚至有時承包商)。有些人專註於特定的項目或產品,而其他人則採取更廣泛的角度。有些人採取完全內部的視角,而其他人則更為以客戶為導向。
它還與架構師工作的組織類型和他們乘坐的舞台有關。例如,大公司可能會有一些架構師部門,每個架構師都專註於組織中的特定產品或方面。
架構師在初創公司中的角色通常具有更大的靈活性,並且通過在早期加入新的啟動,我很幸運能夠塑造我所看到的架構角色。
有許多文章將為您提供架構位置的優秀概述,將其除以類別和子類別。今天,我想談談我的個人觀點。或者更確切地說,我現在正在做什麼。
> Image courtesy of the author.
架構師位置的支柱
當我向新同事解釋我的立場時,我將其描述為我們解決方案的高級方面的一般接觸點。我使我的企業對核心產品有了很好的理解,而是對解決方案如何工作的理解 – 我們擁有的組件以及它們如何相互作用,數據流動的方式,我們使用的技術堆棧等。
顯然,您無法期望任何單身人員了解一切或在各方面的專家。然而,我相信,我的立場的人應該有必要的背景,以便有很好的理解,充滿信心,以發出意見(即使需要一些額外的研究),並始終渴望學習和發展。那是必要的!
我的同事可能通過我們每天所述的互動類型了解我的立場。那些有時認為我們產品的核心,但通常處於更高的級別並關注基礎設施,組件之間的集成,客戶事項,安全事宜等。
當我開始更深入地考慮它時,試圖了解我的立場的確切構建塊,我意識到我很容易將我的工作劃分為四個不同的方面:設計,基礎設施,API和集成。
在我的角度來看,這四個方面不僅彼此相關,而且它們或多或少彼此依賴。我開始看著它們作為分層結構,這對我來說完全有意義:
> Image courtesy of the author.
讓我試著解釋一下。
拿起一個(虛擬)鉛筆
主要的是,至少我個人花費大部分時間的那個是設計。這是我工作的所有其他方面取決於的基石。這也是所有藍圖和草圖都活著的部分。實際的架構圖紙。
重要的是要記住,在展示設計時,大多數人都不會對複雜的系統設計感興趣(儘管您可能仍然想要擁有一個 – 至少為您自己)。他們很可能會更加感激看到更簡單和更優雅的圖表,並且肯定會幫助他們更好地了解自己的思維方式。
然而,引領我們解決方案的端到端設計不僅僅是關於如何提供信息或漂亮的圖紙。最重要的是,這意味著我負責構建塊,通信,集成點等的高級設計。確保我們清楚地了解組件如何合作,涉及哪種技術,以及數據流動。
談到數據,我有幾年的大數據經驗 – 我作為數據工程師和數據工程團隊領導者在我以前的位置,這可能是我在工作時總是專註於數據的主要原因在設計上。此外,我有時會發現它有效地思考解決方案架構 – 甚至是一個小的一個 – 作為數據管道。它並不總是一個很好的契合,通常沒有涉及的數據湖,但我相信它更容易連接點並清楚地了解我想要實現的東西,可能的數據流動以及如何我的設計覆蓋了所有這些。
最後,在考慮外部技術時,迄今為止最近的發展是最重要的。始終確保您計劃在產品中使用的每種技術,基礎架構或圖書館都不只適用於您的用例,而是最好的選擇 – 堅實,維護良好,安全。
所有的錢都在哪裡?
一旦我們清楚了解我們的解決方案圖 – 建築塊和接線 – 是時候了解這一圖栩栩如生的時候了。我們解決方案的端到端設置是什麼樣的?每個構建塊居住在哪裡?他們如何溝通?
基礎設施的主要目的是支持設計,並且為了做到這一點,我們必須用純粹的救主心態做出相當多的決定:
- 我們將使用的機器類型運行我們的系統。
- 我們將使用的緩存解決方案類型。
- 是否將成為雲集成的解決方案或我們提供自己的解決方案。
- 如何自動擴展基礎架構以確保我們可以支持必要的負載,但具有最低資源。
但是,我第一次考慮基礎設施,在創建我們解決方案的設計時將是。我覺得即使你在手頭上沒有任何東西,你只開始考慮大局,你應該已經給出了一些想法,例如數據存儲的位置以及如何訪問它,需要哪些資料庫,以及可以利用其他雲組件。
如今,雲架構通常是完整解決方案架構的組成部分。雲組件可用於替換架構的部分(例如,有效地執行流程的某些部分或從客戶接收數據),並且在許多情況下,它們將比您的自定義解決方案更便宜,更高效。返回數據工程世界,使用預定義的雲解決方案可以使用幾個月的研究,並且仍然在訓練ML模型時提供驚人的結果。
當然,您可以根據預定義的雲組件進行限制,但肯定應該考慮使用它們。
界面理論
API是您產品中混亂的最終治療方法。它們是確保每個組件的最佳方式 – 無論是您的企業級產品還是微小的內部軟體包 – 只是以其所設計的方式解決的方式。
我將它視為我的角色的一部分,以確保我們儘可能使用Clear API,並且我發現這一極為重要的不僅要明確定義我們的產品與外界的互動,還可以如何互相互動。
我堅信每個組件或包裝,甚至是完全內部的組件,都應該有一個清晰的界面。擁有它應該清楚地了解其使用案件的人,誰應該以什麼方式訪問它,以什麼方式(從我的建築師角度來看,知道誰正在訪問它以及以何種方式,這是安全的我的角色的重要組成部分,它從確保介面 – 外部自然,而且是內部的),以及為什麼他們期望得到什麼。他們不能讓任何人在任何他們想要的方式中導入包或與組件進行互動。這可能是災難性的。
通過清楚地了解用例,它應該相對容易定義一個清晰的介面 – 一組函數,這是該組件與外界的唯一交互,每個都具有明確的輸入和輸出定義。
一旦定義該介面,如果有人以不同的方式使用該組件,則可能意味著兩件事之一:它們使用錯誤或者應更新界面以支持新的用例。無論哪種方式,這種方法都可以更清楚地了解組件的交互,並將導致更好的產品。此外,具有具有定義介面的明確端點也使得測試組件更容易,並限制在系統中被破壞的可能性 – 或者至少它可以更清晰地突破發生。哪一方突然不遵循商定的API?
放在友好的臉上
在規劃我們解決方案的高級設計時,與客戶的整合及其系統也落在我的架構師翅膀下。這些是圖表的邊緣,我需要確保我可以回答這些問題,比如客戶如何向我們發送數據以及我們如何將結果返回給他們。
由於集成可能強烈影響設計的部分,基礎設施和API,因此有些人會說它屬於這方面的底層金字塔(或可能在與其他方面碰撞的相鄰金字塔中)。我部分同意,但我認為堅實的設計,基礎設施和API將使固體產品 – 穩定,高效,有效。此外,如果兩個客戶有相互衝突的要求,會發生什麼?
顯然,客戶的最佳解決方案是為了整合,正如他們所希望的那樣,儘可能少的努力。它讓他們開心。但作為一個建築師,我必須問自己,如果我們實際上可以支持客戶所要求的一切。很多次,答案是肯定的 – 特別是對於一個為客戶渴望的小型創業公司。多次,說不出問題,但建築師必須至少舉起紅旗。
儘管如此,一旦您擁有固體產品,可以進行調整以滿足客戶要求。有時請求感覺如此根本,我們使其成為我們產品的一部分。其他時候,它可以是如此redgy,如果你很幸運,處理它會在你的代碼中有十幾個「ifs」的結果(如果你不是那麼幸運,它需要一個特定客戶的專用基礎架構),但你可以容納它無論如何。底線是您不希望丟失顧客通過集成差距。
概括
在本文中,我討論了軟體架構位置對我來說意味著什麼以及我在工作中實際做的事情。
雖然我經歷了我工作的四個方面,但我並沒有真正提到另外兩個重要方面:安全和合規性。兩者都是我工作的每個其他方面的思想和決策過程中的一個組成部分,我致力於他們的大量時間 – 這麼多的時候擴大了這些主題,同時簡要討論了上述工作的其他方面使本文專註於他們,這不是我的意圖(我肯定打算在不久的將來寫一整塊,在不久的將來)。
最後,重要的是再次強調這篇文章的觀點。這個職位有一個廣泛的定義,人們可以在人們之間變化。我仍然希望你發現它有點有趣,也許你甚至有一個新的想法或者只是有助於思考的東西。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/234809.html