閱讀420 返回首頁    go 阿裏雲 go 技術社區[雲棲]


關於Java開發需要注意的十二點流程

1.將一些需要變動的配置寫在屬性文件中

比如,沒有把一些需要並發執行時使用的線程數設置成可在屬性文件中配置。那麼你的程序無論在DEV環境中,還是TEST環境中,都可以順暢無阻地運行,但是一旦部署在PROD上,把它作為多線程程序處理更大的數據集時,就會拋出IOException,原因也許是線上環境並發造成也許是其他。如果線程數目可以在屬性文件中配置,那麼使它成為一個單線程應用程序就變得十分容易了。我們不再需要為了解決問題而反複地部署和測試應用了。這種方法也同樣適用於配置 URL、服務器和端口號等。



2.測試中盡可能模擬線上環境


生產過程中一個典型的場景就是隻使用1到3個帳戶進行測試,而這個數量本應是1000到2000個的。在做性能測試時,使用的數據必須是真實並且未經裁剪的。不貼近真實環境的性能測試,可能會帶來不可預料的性能、拓展和多線程問題。這裏也可以采取預發布環境的方式來解決部分問題。



3.對於所有外部調用以及內部服務都要做容錯處理


不管是RPC調用還是對於第三方服務的調用,都不能想當然的認為可用性是100%的。不允許出現服務調用超時和重試,將會對應用程序的穩定性和性能造成不利的影響。如果你想學習Java可以來這個群,首先是二二零,中間是一四二,最後是九零六,裏麵可以學習和交流,也有學習資料可以下載。



4.安全設計上一個係統要遵循最小權限原則


網絡服務隨處可見,從而使得黑客可以輕易地利用它進行拒絕服務攻擊。所以,設計係統時,需要遵循“最小權限”原則,采用白名單等方式。



5.需要提供以下文檔


  1. 編寫單元測試文檔並使其擁有良好的代碼覆蓋率。 

  2. 高層次的設計圖:描述了所有的組件,交互和結構。 

  3. 詳細的設計圖:具體到代碼層麵的設計,以及一些關鍵邏輯的流程。 

  4. 係統組成文檔:說明係統的所有組成文件、配置文件等。 

  5. 數據庫層麵的dml以及ddl文檔,尤其是sql查詢語句需要經過dba或者核心開發人員的review才能夠上線。 

不僅僅對於傳統的開發流程,即使對於敏捷開發,這些文檔也是必不可少的,否則在後續的維護、交接上會帶來很大的不便。



6.做好係統關鍵功能的監控、錯誤恢複、備份


對於係統一些至關重要的功能模塊要做好對其的監控,防止其影響係統的運行,造成不可估算的損失。另外,如果可以,監控到故障後去去試圖恢複,恢複失敗再發送告警。對於一些很重要的數據文件,還要做到冗餘備份,防止發生一些突然故障造成數據丟失。



7.數據庫設計時設計一些便於追蹤曆史、整理的列


比如create_time、update_time可以說明記錄的創建和更新時間。create_by、update_by可以說明記錄是由誰創建和更新的。

此外,刪除記錄有時候並非真正刪除,這時需要設計表示此記錄狀態的列,如可以取‘Active’或‘Inactive’的 ‘status’列。



8.製定好項目回滾計劃


新的功能上線時,如果發生故障,沒有一份回滾計劃,那麼可能會手忙腳亂而造成線上服務一段時間不可用。有一個良好的回滾計劃,可以讓你能夠有條不紊的執行相關操作,在可控時間內將係統恢複到一個可運行的狀態。



9.項目上線前要做好量化分析


對於項目中用到的內存、數據庫、文件、緩存等,要做好量化分析。預估出未來一段時間的空間占用,給運維分配機器時一個參考。防止,由於數據量增長過快,導致存儲不夠。這一點是非常重要的,不然很容易造成線上服務不可用。



10.製定好係統的部署計劃


係統部署的平台是一個至關重要的部分。對於部署平台的描述,不能僅限於一台服務器、兩個數據庫這個層麵,至少需要包括:

  • 操作係統的特定版本,JVM等。 

  • 有多少內存(包括物理內存,JVM堆內存,JVM棧內存和JVM永久代的空間)。 

  • CPU(內核數)。 

  • 負載均衡器,需要的節點數、節點類型,比如是Active-Standby型還是Active-Active型。 

  • 文件係統要求,例如,你的應用程序可能會收集生成的日誌並將其保存很長的周期,之後才進行歸檔。這樣的話,你就需要有足夠的硬盤空間。



11.選擇最合適的工具/技術


很多情況下,開發者會在生產係統中使用一門想要學習的語言或某種工具。通常這不是最好的選擇。比如,為已經實際上是關係型的數據使用NoSQL數據庫。不管是語言還是工具,都有其適用的場景。不能求新,也不能以“自我”為標準。



12.在一些關鍵技術領域具有充足的知識儲備


設計模式 
JVM調優 
多線程“並發問題” 
事務問題,包括分布式事務 
性能問題,包括GC、計算等 
緩存



0

最後更新:2017-07-27 10:33:02

  上一篇:go  2017年英特爾在其數據中心業務和AI方麵下大注
  下一篇:go  回顧2016年:我們見證了一場存儲行業的廝殺