單體應用有優點也有缺點,而所有缺點基本上都是乙個原因導致的。
功能模組都耦合在一起了。不同功能堆在一起了,會引發各種各樣的問題,下面說一下自己體驗過的單體應用的痛。
目前公司有乙個舊的後端應用,裡面保羅萬物,有訂單、商品、支付、庫存、定時任務、mq
,還有各種管理功能,在今年九月份的時候,其中乙個模組出現了記憶體洩漏,最後導致了作業系統級別的oom killer
,整個系統不可用了,而恰巧當時正在跑乙個重要的且不支援冪等的批量指派任務,由於被強制停掉了,直接影響資料在前端的展現,且又不支援重新跑資料,運營人員直接就發飆了:怎麼回事。後面研發只能邊挨罵邊修復資料,苦b
的很。
單體應用耦合的模組多了,容易造成功能相互影響,真是躺著也中槍
。
單體應用耦合的模組多了,也會導致應用啟動時間變長,像之前的乙個內部應用,啟動時間是2分多鐘,且有10臺機器,使用原始的滾動發布方式,線上發布完後要20分鐘,非常漫長;而對於測試人員來說,在測試環境裡,經常要驗證bug
是否修復好了,經常性的要發布應用,每次都要等很久,真是苦不堪言,極大的降低了測試效率。
另外,發布時間長,對於ci
來說,也是災難。
當乙個週期裡,有多個功能要上線的時候,研發這邊會基於主幹分支拉出各個功能分支,這裡會出現幾個問題:
對於新手來說,看到了一坨龐大的**,真心是無從下手,你讓他接手或者幹點活啥的,成本都賊高的,且容易犯錯。對於有**情操的人,是會立刻走人的。對於暫時忍受的了人,心理陰影也會逐漸加大,外面有啥風吹草動的,也會走人的。
簡單的說一說mmap
mmap memory map,就是記憶體對映 簡單的說就是將檔案對映到使用者的位址空間中。這麼做有什麼好處呢?1.傳統檔案訪問方式是,首先用open系統呼叫開啟檔案,然後使用read,write等呼叫進行順序或者隨即的i o.這種方式是非常低效的,每一次i o操作都需要一次系統呼叫.而通過mmap...
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo foo 下面是iife形式的函式呼叫 functionfoo 函...
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo window console.log a 2 js的模組就是函式...