<noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

<pre id="llnpn"></pre>

    <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

    <noframes id="llnpn">

      <noframes id="llnpn"><pre id="llnpn"></pre>
      • 自動秒收錄
      • 軟件:1973
      • 資訊:56157|
      • 收錄網站:175404|

      IT精英團

      阿帕奇建筑師遵循的30條設計原則

      阿帕奇建筑師遵循的30條設計原則

      瀏覽次數:
      評論次數:
      編輯: 樂詠
      信息來源: ITPUB
      更新日期: 2022-04-24 21:20:17
      摘要

      作者介紹Srinath,科學家,軟件架構師。ApacheAxis2項目的聯合創始人,ApacheSoftware基金會的成員,WSO2流處理器(wso2.com/analytics)的聯席架構師。

      • 正文開始
      • 相關閱讀
      • 推薦作品

      作者介紹

      Srinath,是一名科學家和軟件架構師。Apache Axis2項目聯合創始人,Apache軟件基金會成員,WSO2流處理器(wso2.com/analytics)聯合架構師。

      斯里納斯通過不懈努力,最終總結出30條建筑原則。他主張架構師的角色應該由開發團隊自己來扮演,而不是有一個專門的架構師團隊或部門。斯里納特認為,建筑師的角色應該是花草的引導者、討論的發起者和建設者,而不是定義者和建設者。為了解決團隊內部的架構爭議和選擇,Srinath制定了以下30條原則。這些原則被會員廣泛認可,成為新手建筑師的學習途徑。

      一、基本原則

      原則1

      KISS(保持簡單,sutpid)一切盡可能簡單。用最簡單的方案解決問題。

      原則2

      YAGNI(你不會需要它),不要做你不需要的事情,在你需要的時候做。

      原則3

      爬,走,跑。換句話說,先保證它運行好,再優化它變得更好,再繼續優化它變得偉大。嘗試迭代做事,敏捷開發的思想。對于每個功能點,創建一個里程碑(最多兩周),然后迭代。

      原則4

      創建穩定和高質量產品的唯一方法是自動化測試。所有這些都可以自動化。你在設計的時候,不妨考慮一下這個。

      原則5

      時刻想著投入產出比(ROI),也就是值不值得。

      原則6

      了解你的用戶,然后在此基礎上平衡你需要做的事情。不要花幾個月做一個devops用戶界面,最后你發現那些人只喜歡命令行。這一原則是原則5的具體體現。

      原則7

      并且盡可能獨立地設計和測試一個功能。你設計的時候就要考慮這一條。從長遠來看,這可以為你解決很多問題,否則你的功能只能在系統其他功能都準備好的情況下才能測試,這顯然是非常不好的。有了這個原則,你的版本會更流暢。

      原則8

      不要做任何花哨的事情。我們都喜歡高端酷炫的設計。最后我們把很多功能和解決方案放到我們的架構里,然后這些東西就根本用不上了。

      二、功能選擇

      原則9

      無法預測用戶會如何使用我們的產品。所以擁抱MVP(最小可行產品),最小可運行版本。這個想法的主要思想是,你可以挑選幾個比較少見的使用場景,然后拿出來,發布到網上讓用戶使用,然后根據體驗和用戶反饋決定下一步怎么做。

      原則10

      盡可能少做功能。有疑問的時候,不要做,甚至不要殺。許多功能從未使用過。最多留下一個擴展點就足夠了。

      原則11

      等到有人提出來(除非影響核心流程,否則等到需要的時候)。

      原則12

      有時候你要有勇氣和客戶說不。這時候你需要找到一個更好的解決方案來去解決。記住亨利福特曾經說過的 :”如果我問人們他們需要什么,他們會說我需要一匹速度更快的馬”。記?。耗闶悄莻€專家,你要去引導和領導。要去做正確的事情,而不是流行的事情。最終用戶會感謝你為他們提供了汽車。


      三、服務端設計和并發


      原則13


      要知道一個server是如何運行的,從硬件到操作系統,直到編程語言。優化IO調用的數量是你通往最好架構的首選之路。


      原則14


      要了解Amdhal同步定律。在線程之間共享可變數據會讓你的程序變慢。只在必要的時候才去使用并發的數據結構,只在必須使用同步(synchronization)的時候才去使用同步。如果要用鎖,也要確保盡可能少的時間去hold住鎖。如果要在加鎖后做一些事情,要確保自己在鎖內會做哪些事情。


      原則15


      如果你的設計是一個無阻塞且事件驅動的架構,那么千萬不要阻塞線程或者在這些線程中做一些IO操作,如果你做了,你的系統會慢的像騾子一樣。


      四、分布式系統


      原則16


      無狀態的系統的是可擴展的和直接的。任何時候都要考慮這一點,不要搞個不可擴展的,有狀態的東東出來,這是起碼的。


      原則17


      保證消息只被傳遞一次,不管失敗,這很難,除非你要在客戶端和服務端都做控制。試著讓你的系統更輕便(使用原則18)。你要知道大部分的承諾exactly-once-delivery的系統都是做了精簡的。


      原則18


      實現一個操作盡可能的冪等。這樣的話就比較好恢復,而且你還處于至少一次傳遞(at least once delivery)的狀態。


      原則19


      知道CAP理論??蓴U展的事務(分布式事務)是很難的。如果可能的的話,盡可能的使用補償機制。RDBMS事務是無法擴展的。


      原則20


      分布式一致性無法擴展,也無法進行組通信,也無法進行集群范圍內的可靠通信。理想情況下最大的節點限制為8個節點。


      原則21


      在分布式系統中,你永遠無法避免延遲和失敗。


      五、用戶體驗


      原則22


      要了解你的用戶和清楚他們的目標。他們是新手、專家還是偶然的用戶?他們了解計算機科學的程度。極客喜歡擴展點,開發者喜歡示例和腳本,而普通人則喜歡UI。


      原則23


      最好的產品是不需要產品手冊的。


      原則24


      當你無法在兩個選擇中做決定的時候,請不要直接把這個問題通過提供配置選項的方式傳遞給用戶。這樣只能讓用戶更加的發懵。如果連你這個專家都無法選擇的情況下,交給一個比你了解的還少的人這樣合適嗎?最好的做法的是每次都找到一個可行的選項;次好的做法是自動的給出選項,第三好的做法是增加一個配置參數,然后設置一個合理的默認值。


      原則25


      總是要為配置設置一個合理的默認值。


      原則26


      設計不良的配置會造成一些困擾。應該總是為配置提供一些示例值。


      原則27


      配置值必須是用戶能夠理解和直接填寫的。比如:不能讓用戶填寫最大緩存條目的數量,而是應該讓用戶填寫可被用于緩存的最大內存。


      原則28


      如果輸入了未知的配置要拋出錯誤。永遠不要悄悄的忽略。悄悄的忽略配置錯誤往往是找bug花了數小時的罪魁禍首。


      六、艱難的問題


      原則29


      夢想著新的編程語言就會變得簡單和明了,但往往要想真正掌握會很難。不要輕易的去換編程語言。


      原則30


      復雜的拖拉拽的界面是艱難的,不要去嘗試這樣的效果,除非你準備好了10人年的團隊。


      最后,說一個我的感受。在一個理想的世界里,一個平臺應該是有多個正交組件組成-每個組件都負責一個方面(比如,security,messaging,registry,mdidation,analytics)。好像一個系統構建成這樣才是完美的。但不幸的是,現實中我們很難達到這樣的狀態。因為在項目初始狀態時,很多事情是不確定的,你無法做到這樣的獨立性,現在我更傾向于在開始的時候適當的重復是必要的,當你嘗試鏟除他們的時候,你會發現引入了新的復雜性,分布本身就意味著復雜。有時候治愈的過程要比疾病本身更加的糟糕。


      七、總結


      作為一個架構師,應該像園丁一般,更多的是修剪花草,除草而不是去定義和構建,你應該策劃而不是指揮,你應該去修剪而不是去定義,應該是討論而不是貼標簽。雖然在短期內可能會覺得也沒什么,但從長遠看,指導團隊找到自己的方式會帶來好處。如果你稍不留神,就很容易讓架構成為一個空洞的詞匯。比如設計者會說他的架構是錯誤的,但不知道為什么是錯誤的。一個避免這種情況的好辦法就是有一個原則列表,這個原則列表是被廣泛接受的,這個列表是人們討論問題的錨點,也是新手架構師學習的路徑。


      作者丨Srinath

      來源丨網址:https://dzone.com/articles/30-shared-principles-for-discussing-software-archi-1


      標簽:原則 你的 用戶
      Redis過期的數據會被立即刪除嗎?
      ? 上一篇 2022-04-24
      透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
      下一篇 ? 2022-04-24
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 緊急情況下數據庫表被鎖 抓瞎?
        4閱讀 0條評論 個贊
        以下文章來源于公眾號-程序新視界,作者二師兄在程序員的職業生涯中,總會遇到數據庫表被鎖的情況,前些天就又撞見一次。由于業務突發需求,各個部門都在批量操作、導出數據,而數據庫又未做讀寫分離,結果就是:數……
      • 優化Docker鏡像安全性的12個技巧 建議收藏起來!
        0閱讀 0條評論 個贊
        本文介紹了12個優化Docker鏡像安全性的技巧。每個技巧都解釋了底層的攻擊載體,以及一個或多個緩解方法。這些技巧包括了避免泄露構建密鑰、以非root用戶身份運行,或如何確保使用最新的依賴……
      • 做SQL性能優化真的是干瞪眼
        1閱讀 0條評論 個贊
        很多大數據計算都是用SQL實現的,跑得慢時就要去優化SQL,但常常碰到讓人干瞪眼的情況。比如,存儲過程中有三條大概形如這樣的語句執行得很慢:selecta,b,sum(x)fromTgr……
      • 如何用10行bash shell腳本監控Linux?
        1閱讀 0條評論 個贊
        http://985.so/xbtd子沐愛掃地(譯)監控我們的環境對于服務器運維來說至關重要,尤其是在部署新的應用程序時。如今,公司每天都使用開源解決方案來監控系統資源。但是,當出于測試的目的來監控……
      • 如何執行超過100M的SQL腳本?
        2閱讀 0條評論 個贊
        技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
      • Java 9為什么把String的底層實現從char[]改成byte[]?
        8閱讀 0條評論 個贊
        如果你不是Java8的釘子戶,你應該早就發現了:String類的源碼已經由char[]優化為了byte[]來存儲字符串內容,為什么要這樣做呢?開門見山地說,從char[]到byte……
      • Linux基礎總結 這個就夠了!
        1閱讀 0條評論 個贊
        1.Linux安裝因為圖太多了,轉載一篇從虛擬機vmware配置到centos7詳細安裝教程https://www.cnblogs.com/wcwen1990/p/7630545.html2.lin……
      • 我用Java在幾分鐘內處理了30億條數據.
        1閱讀 0條評論 個贊
        來源:https://c1n.cn/GM8hb目錄場景說明模擬數據場景分析讀取數據處理數據遇到的問題場景說明現有一個10G文件的數據,里面包含了18-70之間的整數,分別表示18-70歲的……
      • 微服務架構下基于Prometheus構建綜合監控平臺的最佳實踐
        2閱讀 0條評論 個贊
        隨著Prometheus逐漸成為云原生時代的可觀測事實標準,那么今天為大家帶來在微服務架構下基于Prometheus構建一體化監控平臺的最佳實踐和一些相關的思考,內容主要包括以下幾個部分:微服……
      • 運維常用的34個Linux Shell腳本 對你一定有幫助!
        1閱讀 0條評論 個贊
        作為一名Linux工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網上沖浪的時候,也注意收集一些大佬寫過的腳本,匯總整理一下,歡迎收藏,與君共勉?。?)用戶猜數字#!/b……
      • MySQL的行格式是什么?
        0閱讀 0條評論 個贊
        行格式(rowformat)決定了我們插入的一行數據,是如何存儲在數據庫中的,MySQL有4種行格式,分別是REDUNDANT,COMPACT,DYNAMIC,COMPRESSED。不同行格式區別:……
      • 《網絡端口大全》運維必備 就看這個吧
        1閱讀 0條評論 個贊
        老楊工作8年有余,經??吹胶芏嗑W絡工程師的簡歷里寫著熟悉“tcp/ip,http等協議”,我也每次都遵從本心的問了他們:那你可以說說你理解中的端口嗎?很多人都能答得上來一部分,但很多人都難答的比較……
      • 談談復雜項目代碼的應用分層
        1閱讀 0條評論 個贊
        —1—背景說起應用分層,大部分人都會認為這個不是很簡單嘛就controller,service,mapper三層??雌饋砗唵?,很多人其實并沒有把他們職責劃分開,在很多代碼中,controller做……
      • MySQL 8.0如何創建規范表
        1閱讀 0條評論 個贊
        這一節內容,基于MySQL8.0版本,聊一下如何創建一張規范的表。首先貼出一張相對規范的表結構:CREATETABLEstudent_info(`id`INTNOTNULLAUTO_IN……
      • 如何讓Kubernetes集群優雅地使用GPU節點
        2閱讀 0條評論 個贊
        如何讓你的Kubernetes集群使用GPU節點CUDA驅動程序如果您還沒有這樣做,請確保您已在GPU節點上安裝了NVIDIACUDA驅動程序。CUDA是來自nvidia的并行計算平臺。ht……
      • 詳細解釋Linux中的diff命令和例子
        1閱讀 0條評論 個贊
        文件比較在Linux中起著重要的作用,特別是對于程序員和Linux系統管理員。例如,如果您想找到兩個源代碼文件之間的差異來開發補丁,那么您需要一個文件比較工具來簡化這個過程。Linux中有幾……
      • Java“年度加密漏洞”修復 網友:更多堅持Java 8的理由
        9閱讀 0條評論 個贊
        文|Travis出品|OSC開源社區(ID:oschina2013)甲骨文于昨日推送了安全更新修復了一個漏洞,該漏洞允許攻擊者偽造某些種類的SSL證書和握手、雙因素認證信息,以及由一系列廣……
      • 數據倉庫實踐:總線矩陣體系結構的設計
        1閱讀 0條評論 個贊
        以下文章來源于公眾號-云祁的數據江湖,作者云祁如何設計一套切實可行的數據倉庫呢?我們要明白,對于數據倉庫的設計是不能完全依賴于業務的需求,但往往又必須要服務于業務的價值。因此,在構建數據倉庫前,我們……
      • 用Ansible實現MySQL的備份、操作和維護
        0閱讀 0條評論 個贊
        作者簡介曹杰,中國結算上海分公司高級經理,從事系統運維管理工作。本文以容器形式部署了開源自動化運維工具Ansible,基于自帶的MySQL管理模塊編排了playbook配置文件,最終實現M……
      • 基礎鞏固——至少需要多少行代碼才能實現深度復制?
        1閱讀 0條評論 個贊
        前言深度克?。ㄉ羁截悾┮恢倍际浅?、中級前端面試中經常被問到的題目,網上介紹的實現方式也都各有千秋,大體可以概括為三種方式:JSON.stringify+JSON.parse,這個很好理解;全量判斷類……
      最近發布資訊
      更多
      本地特级毛片,老师脱裙子让我看内裤,人妻av乱片aV出轨avApp
      <noframes id="llnpn"><pre id="llnpn"><strike id="llnpn"></strike></pre><address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

      <pre id="llnpn"></pre>

        <address id="llnpn"><strike id="llnpn"><span id="llnpn"></span></strike></address>

        <noframes id="llnpn">

          <noframes id="llnpn"><pre id="llnpn"></pre>