国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

四種緩存的避坑總結

開發 新聞
最初 90% 的開發工作將會用去你最初 90% 的開發時間,剩下的 10% 的開發量將會用去你另外一個 90% 的開發時間。

背景

分布式、緩存、異步和多線程被稱為互聯網開發的四大法寶。今天我總結一下項目開發中常接觸的四種緩存實際項目中遇到過的問題。

JVM 堆內緩存

JVM 堆內緩存因為可以避免 Memcached、Redis 等集中式緩存網絡通信故障問題,目前還在項目中廣泛使用。

堆內緩存需要注意 GC 的問題。假如我們的設計是定時的從遠程來拉取數據更新本地緩存。一定要注意兩點:第一不要全量拉取覆蓋,第二不要把一個大對象整體替換為新對象。

先說全量拉取覆蓋。全量拉取會有很大的網絡開銷,會造成網絡流量尖刺。有人說沒事,我們帶寬很足,內網訪問,不怕不怕。但是穩定性需要修煉的一項是削峰填谷。讓系統在平穩的環境中運行。不然,在拉取大緩存新數據的數據突然來了個突發流量?根據墨菲定律,凡是有幾率會發生的事情就一定會發生。編程需謹慎。

再說大對象整體替換的問題,這會造成 GC 問題。偽代碼如下:

List<POJO> oldList = initList();

public void refresh() {

List<POJO> newList = dataFromNetworkService.getAll();

oldList = new List();

for(POJO pojo : newList) {

oldList.add(pojo);

}

}

如果從網上拉取的數據和在緩存里存儲的數據,對象類型沒有發生改變。引起的轉換開銷還稍微小點。因為比如對象 POJO 存在一個列表里。這個列表雖然很大,但是里面存的都是對象的引用。實際的 POJO 并沒有發生變化。上面偽代碼雖然新建一個 List 對象,遍歷添加新對象比直接 oldList=newList 要傻些。但是遍歷過程實際上 POJO  對象沒有發生改變。所以這里影響 GC 的只是 oldList 這個對象(不包括從網絡上拉取回來數據的過程)。

但是如果代碼這樣寫:

List<POJO2> oldList = initList();

public void refresh() {

List<POJO1> newList = dataFromNetworkService.getAll();

oldList = new List();

for(POJO2 pojo : newList) {

oldList.add(Beanutils.copy(new POJO2(), pojo));

}

}

遍歷過程將會將原來的 POJO1 全部新建一遍,這些對象一般情況下全部先進入堆內存的新生代,再經過數次 Young GC 后進入老年代。會造成GC頻繁。

我所做過的項目,一般認為一天一到兩次 Full GC 為合理值。這樣,如果比如預先知道某個時間點有大促,可通過提前觸發 GC 等方式避免高峰期爆發 Full GC。Young GC 至少是 5 分鐘一次,甚至更久觸發認為是正常。這樣可以通過控制避過秒殺等場景。

JVM 堆外緩存

堆外緩存的內存回收原理使用的是 Java 的虛引用 。這個設計可以避免 JVM 的 GC 問題,但是處理不好可能會造成更嚴重的后果:整個機器內存被打滿,機器可能會掛掉。 其實掛掉一臺在一般企業的生產環境還好,因為一般都會有容災的冗余機器。 但是更常見的一種情況是機器忙于 swap 內存交換,機器活著但是響應很慢。 屬于半死不活。 這個問題我沒在線上遇到過,但是我同事之前在超級大廠的時候遇到過。

有的同學說那我嚴格算好內存,做好監控。這里面要就要依賴人為的因素來做緊急處理。而人是穩定性中最不可靠的。因為問題通常不發生在人清醒、手里事情很少的時候。而是一種雪上加霜的存在。比如大促時,流量上來了,線程數會增多,每個線程都會申請線程棧資源,系統處理 IO,這時候系統會申請更多的 buffers/cached 內存。

Linux 的 buffers/cached

Linux 系統上運行一下 top 命令或者 free 命令,都能夠看到 buffers 和 cached 相關的數據。需要注意的是通常我們看到的監控數據空閑內存百分比,并非是下面顯示的 free/total,而是 (free+buffers+cached)/total。

buffers 在 Linux 系統中通常被作為與塊存儲的 IO 緩存使用。所謂塊存儲可簡單理解為將數據直接寫到裸磁盤。而 cached 則一般會用于文件系統的 IO 緩存。比如 page cache 這種內存換頁功能。

聽不明白也沒關系,因為事實上它們兩個經常配合使用。比如與磁盤交換數據、進行網絡通信時都會用。buffers 和 cached 是實實在在被操作系統的系統進程在使用的,但是如果用戶進程需要可以很快釋放。所以通常會將它算到剩余可用內存里。

但是這個也要注意了。比如在 IO 密集型的系統,如果 buffers/cached 被大幅占用,會降低 IO 速度,進而降低系統吞吐。甚至有可能一個請求幾秒才能到達應用程序,造成請求超時。

集中式緩存

Redis 緩存其實也有本機代理,可以緩存一些活躍的數據在本機上,本機可以在取 不 到數據時不需要跨網絡通信。但是因為 Redis 本質是 key-value 的結構。如果需要根據通配符取數據全量,如果網絡出現故障,可能會影響數據的完整性。

但是 Redis 緩存最讓人擔心的是不規范的使用方法。比如存一個很大的 value。具體這個對網絡和存儲造成的問題就不詳細說了。可以想象下馬桶堵了的情景。

總結

貝爾實驗室的面向對象編程專家 Tom Cargill 說:

最初 90% 的開發工作將會用去你最初 90% 的開發時間,剩下的 10% 的開發量將會用去你另外一個 90% 的開發時間。

我理解剩下 10% 占用了 90% 的時間是由于超出了原有知識貯備,需要臨時抱佛腳,甚至需要拿著錘子找釘子造成的。所以或者也可以這樣做:

每周持續投入 5% 的學習時間,10% 的思考時間,再用 100% 的時間去完成 100% 的開發。

責任編輯:張燕妮 來源: 編程一生
相關推薦

2009-11-23 15:57:51

PHP偽靜態

2022-07-04 07:09:55

架構

2011-11-24 16:34:39

Java

2010-01-20 10:56:14

VB.NET Main

2017-07-06 15:40:19

DevOps核心能力

2011-03-16 09:05:53

NATiptables

2019-10-24 07:42:28

Java引用GC

2012-09-11 09:55:26

編程HTML5編程能力

2020-06-12 08:28:29

JavaScript開發技術

2013-05-30 10:06:05

光纖光纖跳線

2013-06-14 15:24:57

Android開發移動開發數據存儲方式

2018-12-05 16:25:14

2021-12-01 23:05:27

物聯網計算數據

2023-02-10 11:13:42

網絡功耗無線網絡設備

2020-11-10 10:08:41

Kubernetes容器開發

2010-10-19 17:40:30

SqlServer主鍵

2021-10-24 08:37:18

網絡監控網絡架構網絡

2012-02-29 09:44:54

MySQL

2020-06-24 07:49:13

Kubernetes場景網絡

2020-05-19 20:13:04

物聯網計算類型IOT
點贊
收藏

51CTO技術棧公眾號

久久婷婷国产91天堂综合精品| 天堂精品在线视频| 国产精品第十页| 欧美日韩国产小视频| 免费在线国产精品| 亚洲大胆在线| 日韩av卡一卡二| 国内精品久久久久久久久| 免费的成人av| 99re99热| 日韩精品一二区| 在线观看17c| 国产99久久久国产精品潘金| 一本色道久久综合亚洲精品婷婷| 黄色毛片视频| 欧美亚洲专区| 91麻豆国产精品| 国产一区二区三区| 日韩精品一二三四区| 牛牛精品成人免费视频| 精品一区二区三区视频日产| 9999国产精品| 好吊色视频988gao在线观看| 亚洲一区二区在线视频| 精品精品国产三级a∨在线| 杨幂一区欧美专区| 亚洲综合色视频| 久草成人资源| 成人免费视频网址| 视频一区中文| 亚洲资源在线网| 亚洲第一狼人社区| 小草在线视频在线免费视频| 国产一区二区精品| 免费一区二区三区在在线视频| 亚洲自拍偷拍综合| 亚洲啊v在线| 最新亚洲国产精品| 爱爱精品视频| 成人自拍视频网站| 天天综合网天天综合色| 欧美精品成人网| 伊人久久久久久久久久久| 日韩在线观看一区 | 欧美va在线观看| 日韩一区二区电影网| av在线二区| 一区二区三区四区不卡在线| 国产理论在线播放| 亚洲欧洲国产专区| 最全影音av资源中文字幕在线| 久久久五月婷婷| www.天天射.com| 国产三级一区二区| 91精选福利| 日本精品一区二区三区四区的功能| 日本调教视频在线观看| 午夜精品爽啪视频| 欧美高清视频| 欧美日韩激情一区二区三区| 69日本xxxxxxxxx49| 国产欧美日本| 69免费视频| 久久久精品日本| 九色porny丨首页在线| 国产精品亚洲网站| 成人一区而且| 探花国产精品| 欧美一级日韩免费不卡| 视频一区中文字幕精品| 欧美在线性爱视频| 亚洲高清激情| 热这里只有精品| 亚洲精品五月天| 最新国产露脸在线观看| 性久久久久久| 91精品网站在线观看| 久久国产精品久久国产精品| 国产国产一区| 911国产网站尤物在线观看| 成人看片网页| 久久人人爽国产| 欧美69视频| 妞干网视频在线观看| 日韩欧美美女一区二区三区| 91麻豆国产自产在线观看亚洲| 久久久久久久久亚洲精品| 欧美在线观看视频在线| 精品久久久久久久久久岛国gif| 91高清免费在线观看| 久久成人精品| 欧美极品欧美精品欧美图片| 在线亚洲高清视频| 青青草国产一区二区三区| 免费亚洲一区二区| 欧美日韩国产页| 国产乱人伦丫前精品视频| 亚洲天堂第一区| 91精品午夜视频| 日韩大片在线| 日本成在线观看| 久久精品免费播放| 懂色av中文一区二区三区| 黄色av电影在线播放| 日本精品一区二区| 自拍偷拍亚洲一区| 午夜久久久久久| 国语产色综合| 国产va在线观看| 中日韩午夜理伦电影免费| 国产精品xxxav免费视频| 色综合久综合久久综合久鬼88 | 国产福利91精品| 成人黄色影视| 国内精品模特av私拍在线观看| 久久综合九色综合97_久久久| 久久精品超碰| 成年人黄视频网站| 亚洲a在线观看| 日韩高清中文字幕| 欧美视频精品在线观看| 国产精品x453.com| 9色在线观看| 日本在线观看一区二区| 亚洲四色影视在线观看| 不卡在线观看av| 亚洲国产一区二区三区网站| 韩国一区二区av| 欧美二区乱c黑人| 亚洲成国产人片在线观看| 国内精品99| 91嫩草国产线观看亚洲一区二区| 天天爽天天爽夜夜爽| 96久久精品| 欧美激情精品久久久久久大尺度 | 国产婷婷一区二区| 99av国产精品欲麻豆| 国产精品国产三级国产在线观看| 好操啊在线观看免费视频| 国产成人亚洲综合无码| 欧美大尺度激情区在线播放| 亚洲一二三四在线观看| 欧美日韩国内| 欧美亚洲综合视频| 在线播放evaelfie极品| 亚洲啪啪av| 国产日韩在线一区| 国产午夜精品全部视频播放| 亚洲精品国产一区二区精华液 | 国产老熟妇精品观看| 小说区图片区图片区另类灬| 日产国产精品精品a∨| 久久久久久久久亚洲| 日韩高清中文字幕| 欧美视频在线一区| 亚洲一区中文日韩| 99re这里只有精品首页| 久久精品国产精品亚洲综合| 欧美va天堂| 欧美成人精品| 国内精品久久久久久久影视麻豆| 日韩精品dvd| 美洲天堂一区二卡三卡四卡视频| 亚洲欧美色图| 亚洲国产高清在线观看| 在线能看的av网址| free性欧美hd另类精品| www.视频在线.com| 96久久久久久| 在线国产福利网站| 日本在线中文电影| 黄色av地址| 啦啦啦啦免费高清视频在线观看1| 国产91对白刺激露脸在线观看| 精品国产一区二区三区在线| 国产综合动作在线观看| 国产精品久久国产三级国电话系列| 欧美一区二区影院| 国产98色在线| 91嫩草视频在线观看| 国产免费一区二区三区在线能观看 | 芒果视频成人app| 天天操天天爱天天爽| 国产极品jizzhd欧美| 国产精品免费福利| 国产欧美日韩免费看aⅴ视频| 成人精品一区二区三区电影免费| 热久久免费国产视频| 国产成人一区三区| 国产欧美精品久久久| 国产精品高清在线| 六月婷婷久久| 日韩有码在线观看| 亚洲不卡1区| 国产日韩第一页| 国产一区二区视频免费在线观看 | 亚洲一本视频| 国产亚洲在线观看| 欧美国产国产综合| 26uuu亚洲综合色欧美|