[筆記] TGONext 架構組- 架構師的自我修煉 - m@rcus 學習筆記

文章推薦指數: 80 %
投票人數:10人

軟體架構師的12項修煉 : 作者認為軟技能是架構師的必修課,整理出3 大方面 ... 技能樹 由於組員來自四面八方每個人所擅長的技能都有所不同,組內有 ... m@rcus學習筆記 只有累積,沒有奇蹟 Home ASP.NET ASP.NETApplication概述 ASP.NET網頁生命週期PageLife-Cycle ASP.NETStateManagement C# AnonymousType匿名型別 計算字串的長度方式 Array陣列中加入元素 刪除Array陣列中指定的元素 Office Http HTTPGET、POSTMethod SubChildCategory1 SubChildCategory3 Tool WebServiceStudio Other 微軟開發者大會HTML5搶先知 Home Business Internet Market Stock Downloads Dvd Games Software Office ParentCategory ChildCategory1 SubChildCategory1 SubChildCategory2 SubChildCategory3 ChildCategory2 ChildCategory3 ChildCategory4 Featured Health Childcare Doctors Uncategorized 2020年4月9日星期四 前言 上一篇 TGONext架構組-高併發高流量分享參加架構一組的書僮筆記,這一篇則是記錄由Taien擔任導師的架構三組討論心得,在TGONext導師計畫開學儀式當天小組內的組員有各自做簡單的自我介紹,並針對工作上的痛點做簡單討論,導師與同學分享未來五個月聚會的主題與規劃,以及推薦可以幫助到大家的書籍清單,架構3組三月份討論主題是架構師的自我修煉,預計討論內容如下 心態與思想 深耕專業技能 團隊合作典範 如何影響團隊 這篇是根據微薄的記憶整理小組討論的筆記,部分內容為了讓初老症狀越來越嚴重的自己更好理解加上自己說明與圖片,若有問題或是錯誤的地方歡迎各位大大一同討論或給予指導 推薦書籍 在每次的聚會之前導師都有推薦的閱讀清單,清單如下 QBQ問題背後的問題 :這本書之前主管gipi就很推薦部門同事一定要閱讀,在T社也是將這本書列為要求新人必讀書籍之一,最近在博客來發現出了30萬冊紀念版,可見其受歡迎的程度。

我編程,我快樂 :談到程式猿的成長與職涯規劃之道,作者分享自己過去的經驗提醒程式猿不能只注重技術的提升,還要關注自己職涯上的發展,但礙於自己閱讀簡體字有障礙,目前只看一半還沒看完。

軟體架構師的12項修煉:作者認為軟技能是架構師的必修課,整理出3大方面分別是關係、個人與商務技能,教導程序猿修煉如何將三大項底下的12項軟技能點滿,才可以算是一位合格的架構師。

除了上述提到的三本書之外,我個人也推薦高效能程序員的修煉一書,其中一個章節提到程序猿應該培養寫作的習慣,當你學習到一技能/對某項事物有興趣/解決某個難搞的問題等事情都可以寫部落格文章,將所學到的內容消化最後在用自己理解的方式呈現出來,91哥也有寫過一篇文我為什麼鼓勵工程師寫blog,有興趣的朋友可以看看。

技能樹 由於組員來自四面八方每個人所擅長的技能都有所不同,組內有前端工程師、後端工程師、AI資料工程師等,因此導師有先請同學在家整理以下資訊與同學分享 專業技能:SkillTree 管理:SkillTree 職涯目標 其中專業技能與管理希望同學用MindMap呈現,並用顏色標示出對於技術的熟悉度,主要用意是希望大家都可以知道哪些技能是應該具備(守備範圍),自己目前已經會了那些,而那些內容是自己還不會或是還沒有機會學到的,這些資訊可以透過整理成MindMap的過程中讓自己更加清楚;由於管理的層面涵蓋很廣,像是溝通管理、時間管理..因此可以盡量延展,沒有標準的對錯與答案,以下分享小弟整理的內容,若有疑問歡迎一起討論 專業技能MindMap 身為一位前端低能兒因此這是以Backend後端工程師角度出發,如果有經驗的工程師都會知道,開發不僅僅是把Code寫好交付就可以,程式上線後還需要進行應用程式的監控等重要的事情,因此在整理時從幾個環節出發分別是分析、設計、Coding、測試、上線、維護與監控,從這幾點分別去整理對應到的技能或是工具,其中CI/CD與分散式系統設計是這一兩年希望自己加強的重點。

在開發應用程式時隨著請求量的倍增,可能會從單一應用程式Scaleup/out擴充為多台應用程式,這時就需要依據當下的情境設計出合適的架構,如何在設計新架構時兼具效能與彈性讓系統可以承受高流量與高併發的考驗,亦有可能需要與舊架構為伍也就是常提到的讓飛行中的飛機換引擎,這之中有非常多的眉眉角角需要探討與研究的,也是自己覺得想挑戰的部分(自虐)。

管理MindMap 管理則是由架構師的角度出發,架構師除了基本要具備一定程度的技術能力,對於整個軟體開發流程從需求分析到系統上線後的監控與數據報表分析也都需要了解,從一開始的需求釐清與分析能力需要蒐集高階主管(長官)想要解決的商業問題是甚麼,才有可能在架構設計時選擇適合的方案;技術選型上需要了解選用的解決方案的本質與帶來的sideeffect為何,還有選用技術/產品的成熟度與穩定性,團隊的能力等多方面的考量出發,而非一昧地追求新技術而忽略帶來的成本與風險;除了技術能力之外軟技能也是不可或缺的項目之一,需要具備DomainKnowledge與商業思維而非一昧地以技術的角度出發來解決問題,須具備簡報技巧讓高層願意替你設計的新架構買單;高層Buyin後做出來的POC方案是否能讓團隊對於新架構是認同;最後是持續學習部分,需要持續學習與了解新技術增加自己的廣度,遇到問題時才有機會有更多解決方案而非單一解。

(OS:為了不成為一位嘴砲架構師整理完發現列這麼多條件,覺得好像離架構師還有好長的路XDDD) 導師有針對大家分享的技能與管理MindMap內容給建議,另外也補充大家在還沒那麼多經驗時可以多看Github上比較熱門的opensource吸取經驗,熱心的同學也在會後在群組補充覺得不錯的github專案system-design-primer以及blog讓大家一起學習。

HTTPRequestSmuggling 在討論中導師也提醒同學資安是不可忽視的重點之一,除了可以參考OWASPTOP10之外另外提醒大家最近一種新的攻擊方式HTTPRequestSmuggling,這種攻擊方式在2005年就被發現但一直被大家所忽略,Portswigger主管JamesKettle於2019年再次提醒大家其影響程度,以下就根據 HTTPDesyncAttacks:RequestSmugglingReborn 原文做簡單的介紹與說明 原理 當客戶在網站上操作行為時會透過Front-end服務器(nginx、CDN、負載均衡或反向代理)將HTTP請求發送至Web後端(Back-end)伺服器,為了提高其傳輸速度與效率,通常會經由同一個後端網路來傳送多個請求(HTTP/1.1提供Keep-Alive允許單個連接上傳送多個請求),HTTP會按照順序進行發送的動作,收到請求的伺服器會根據HTTP中Request表頭定義請求結束的位置(Transfer-Encoding或是Content-Length),如下圖所示 由上圖可以發現,Front-end與Back-end是兩台不同的服務或伺服器,HTTP請求偷渡是因為 Front-end(反向代理)與 Back-end 後端處理請求的伺服器對於HTTP請求解析處理不一致,駭客可以透過不一致的差異在一個HTTP請求中放置(偷渡)另一個HTTP請求,後端接收到請求後會處理夾帶的攻擊內容(橘色部分),直接在內部網路服務進行攻擊 HTTPRequestSmuggling將 Content-Length標頭和Transfer-Encoding放在HTTP請求中,在透過 CL.TE、TE.CL、TE.TE漏洞進行請求解析不一致的動作,詳細原理與細節可以參考下列文章有更詳細的說明與內容 HTTPrequestsmuggling (推薦) 流量夾帶(HTTP請求走私)檢測方案的實現 一篇文章带你读懂HTTPSmuggling攻击 (推薦) ServiceLevel 在定義服務的品質通常會提到SLA、SLO、SLI,三個名詞的全名如下 SLA:ServiceLevelAgreement,服務等級協議 SLO:ServiceLevelObjective,服務等級目標 SLI:ServiceLevelIndicator,服務等級指標 舉例來說,假設今天開發的是電商系統,為了給客戶更好的品質與速度因此定義SLA為Latency<=300ms;為了達到目標,Sevellevel可能會定義如下 SLA:Latency<=300ms SLO:latency<=200ms,會定義比承諾客戶更小數字的目標以達到SLA標準 SLI:每分鐘內httpstatuscode為200的response,比較著重在指標的部分,常見的有throughput、latency、Availability或correctness等測量指標 有管理經驗的朋友可以發現像是在定義部門目標使用Bottom-Up的方式向下延伸,從下往上看就是要做到這些指標內容SLA才有可能達到,以上只是簡單的說明,更詳細的內容可以參考GoogleCloud中的SLOs,SLIs,SLAs,ohmy-CRElifelessons或是Ant大的軟體技術架構如何正確與商業需求快速對齊:談MAU換算至RPS,SLA回推至SLI兩篇文章內容的詳細說明;因此在架構設計上,除了要考慮到需求情境之外,還需要考量到SLI、SLO及SLA三者的目標,反思設計出來的架構是否都有包含上述功能性與非功能性需求,不斷反思是否有更好的解決方案。

DesignProcess 接著導師整理在設計架構時需要注意的的流程與議題 Definingtheservice(Rough,Structureddesign,Measurable) 3,and4:Three-tierarchitecture(DataLayer[Storage],BizlogicLayer[Compute],PresentationLayer[Networking]) Resiliency,Availabilty,Scalaility,andDisasterRecovery Security CapacityplaningandCostOptimization Deployment,MonitoringandAlerting,andIncidentResponse 比如說目標是承受同時在線10萬人,要思考的是設計出來的系統架構可以乘載同時10萬人的request量;設計出來的架構是否有彈性與擴充性,遇到災難是要如何進行快速的復原;要如何確保系統的Security,像是密碼一定要做hash之類;使用量一年會產生多少cost是否有plan?;最後是如何進行deployment?如何監控線上的環境與機器服務,如何第一時間知道使用者出問題,出問題時要如何處理? 為了讓同學們有更好的理解,導師也分享過去工作上架構設計的專案與跟同學說明為什麼這樣設計(原由),也提醒同學簡報技巧也是重要的技能之一,當我們想要說服老闆使用或引入新架構時,從老闆的角度來出發像是思考老闆可能最關注的點像是會增加多少預算、會帶來多少效益以及瓶頸會在那裡跟如何解決,節省老闆的時間也讓決策者方便快速做決策。

Business/ProductMethodology 最後導師補充一些與PM比較相關的觀念,希望同學在鑽研技術之餘,多去了解或學習一些常用商業模型對架構設計也是有幫助的,由於這領域自己不太熟悉因此在介紹時會加上wiki連結介紹,讓有興趣的朋友請自行點擊深入了解,若對於方法論內容理解有錯歡迎糾正。

AARRR AARRR模型是一個有名的方法論,每個英文單字都代表指標分別是Acquisition、Activation、Retention、Revenue以及Referral,主要是在談怎麼樣獲取用戶,在導師介紹完模型的說明讓我想起(後知後覺)待過的T社部門職責分工相似,部門分別負責特定指標,公司為了協助達標每個部門都有自己的RD團隊來專心支援前線單位完成其指標, LeanStartup LeanStartup精實創業:概念與scrum類似,當你今天有一個idea時候以最小可行產品(MVP)來實現,提早讓使用者來驗證idea想法是否有效,並在使用過程中加上measure,再透過measure產生的data思考要如何調整idea讓它更好,試圖在measure的過程中尋找可能的商機(契機)。

這方法論很常在創業的朋友討論中提到,在公司草創初期都希望在最短的時間找到可行的模式,早日度過黑暗期。

Scrum-MostImportantisValue Scrum敏捷開發是這幾年很紅的方法論,用小步快跑的方式快速提交最有價值的功能,網路上已經有非常多相關知識這不在多廢話。

另外導師還提到了像是SteveBlank-CustomerDevelopment、AlexanderOsterwalder-BusinessModelCanvas與ValueProposition等方法論,但礙於大腦容量有極限且未接觸過,這就筆記下來日後有機會再自行研究。

心得 這是小組的第一次討論,組員分享自己的技能樹時聽到過去很多自己未接觸到的名詞,可以學到不同領域的知識感覺挺好的;在過去自己對於其守備範圍理解都是較為零碎的,可能是發現甚麼重要就盡力的去點滿其技能,在這次盤點skilltree的過程中才真正的去思考自己的目標(Goal)為何?自己希望哪些技能是應該具備的,對各技能的熟悉程度與目前還尚缺那些技能,這些資訊擁有之後或許可以訂為日後的長期目標,定期review自己完成百分比(自虐again);在兩個半小時的討論過程中,導師也很熱心的與同學分享自己所了解知識與架構設計的經驗,也補充技術以外常見的幾個商業方法論,提醒大家偶爾可以跳脫技術學習不同的解決方案提升自己的商業思維;透過更多實作累積更多經驗,成為一位能夠真正解決問題不嘴砲的架構師。

參考 AARRR LeanStartup精實創業 Scrum敏捷開發 TheFourStepstotheEpiphany BusinessModelCanvas Valueproposition 架構師的修練 深度剖析什么是SLI、SLO和SLA? SLOs,SLIs,SLAs,ohmy-CRElifelessons 從零建立商業技術團隊 [ModernWeb2019]Taien-高併發的道與術 HTTP-Request-Smuggling(pdf) HTTPrequestsmuggling HTTPRequestSmuggling(HTTP請求走私) 軟體技術架構如何正確與商業需求快速對齊 ShareThis:    Facebook Twitter Google+ Stumble Digg 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook 較新的文章 較舊的文章 首頁 0 意見: 張貼留言 訂閱: 張貼留言(Atom) 給作者拍拍手鼓勵 BlogArchive ►  2022 (5) ►  二月 (2) ►  一月 (3) ►  2021 (17) ►  十二月 (2) ►  十一月 (2) ►  十月 (1) ►  九月 (3) ►  八月 (1) ►  七月 (1) ►  六月 (2) ►  五月 (2) ►  四月 (1) ►  三月 (1) ►  二月 (1) ▼  2020 (12) ►  十月 (1) ►  九月 (1) ►  八月 (1) ►  七月 (2) ►  六月 (1) ►  五月 (1) ▼  四月 (2) [Tool]Redis管理工具-AnotherRedisDesktopManager [筆記]TGONext架構組-架構師的自我修煉 ►  三月 (1) ►  二月 (1) ►  一月 (1) ►  2019 (158) ►  十二月 (1) ►  十一月 (1) ►  十月 (2) ►  九月 (9) ►  八月 (9) ►  七月 (12) ►  六月 (16) ►  五月 (20) ►  四月 (22) ►  三月 (23) ►  二月 (20) ►  一月 (23) ►  2018 (45) ►  十二月 (10) ►  十一月 (11) ►  十月 (11) ►  九月 (8) ►  八月 (5) ►  2012 (1) ►  十二月 (1) 關於我自己 Marcus 打雜小弟 檢視我的完整簡介 Categories .NET (169) .NETConf (1) .NETCore (64) .NETStandard (1) 上課心得 (3) 技術管理 (2) 商業思維 (3) 商業思維學院 (2) 職涯成長 (3) 讀書心得 (3) Architecture (6) Array (3) ASP.NET (39) ASP.NETApplication (2) ASP.NETCore (1) ASP.NETCore3.0 (1) ASP.NETPageLifeCycle (1) ASP.NETStateManagement (4) Authentication (1) AWS (1) Azure (7) Benchmark (4) blogger (1) C# (25) Casbin (1) CheatSheet (12) Chocolatey (3) Conference (3) COSCUP (1) DependencyInjection (1) Devops (5) DistributedTracing (3) Docker (13) eBook (2) EndtoEnd (1) EntityFrameworkCore (3) Enum (1) ExceptionHandler (1) ExtensionMethod (1) FrontEnd (1) Fuslogvw (2) GenericHost (4) Git (6) GitHub (1) google (2) HTTP (4) HttpClient (1) IIS (16) JavaScript (1) jQuery (1) Json (4) Kestrel (3) LINQ (1) Linux (2) Logging (4) Microservices (1) Monitor (3) MOPCON (1) MSBuild (1) NLog (2) Nuget (5) Nunit (5) Observability (4) OpenSource (6) OpenTelemetry (5) Performance (8) Polly (3) PowerShell (3) Quartz.NET (5) Queue (1) Redis (10) Refactor (1) Reflection (1) Resharper (3) Roslyn (1) Serilog (5) SOAP (1) SQLServer (7) Swagger (4) TGONext (4) Tool (19) TPL (3) TypeScript (2) UML (1) UnitTest (13) Validate (1) VisualStudio (37) VisualStudioCode (3) WebAPI (7) WebAPIThrottle (2) WebForm (1) WebService (2) WindowAzure (1) windows (4) Windows10 (7) WindowsService (5) WindowsTerminal (2) WorkerService (1) XML (1) YAML (1) 推薦Blog TaswarBhatti Artech paulfun 雨夜朦胧 嘿嘿的学习日记 Yowko'sNotes CashWu 张子阳 FishLi Huan-Lin學習筆記 總網頁瀏覽量 Copyright© m@rcus學習筆記|PoweredbyBlogger DesignbyAndersNoren|BloggerThemebyNewBloggerThemes.com



請為這篇文章評分?