日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]傳統(tǒng)MySQL+ Memcached架構遇到的問題 .實際MySQL是適合進行海量數(shù)據(jù)存儲的,通過Memcached將熱點數(shù)據(jù)加載到cache,加速訪問,很多公司都曾經(jīng)使用過這樣的架構,但隨著業(yè)務

傳統(tǒng)MySQL+ Memcached架構遇到的問題 .

實際MySQL是適合進行海量數(shù)據(jù)存儲的,通過Memcached將熱點數(shù)據(jù)加載到cache,加速訪問,很多公司都曾經(jīng)使用過這樣的架構,但隨著業(yè)務數(shù)據(jù)量的不斷增加,和訪問量的持續(xù)增長,我們遇到了很多問題:

1.MySQL需要不斷進行拆庫拆表,Memcached也需不斷跟著擴容,擴容和維護工作占據(jù)大量開發(fā)時間。

2.Memcached與MySQL數(shù)據(jù)庫數(shù)據(jù)一致性問題。

3.Memcached數(shù)據(jù)命中率低或down機,大量訪問直接穿透到DB,MySQL無法支撐。

4.跨機房cache同步問題。

眾多NoSQL百花齊放,如何選擇 .

最近幾年,業(yè)界不斷涌現(xiàn)出很多各種各樣的NoSQL產(chǎn)品,那么如何才能正確地使用好這些產(chǎn)品,最大化地發(fā)揮其長處,是我們需要深入研究和思考的問題,實際歸根結底最重要的是了解這些產(chǎn)品的定位,并且了解到每款產(chǎn)品的tradeoffs,在實際應用中做到揚長避短,總體上這些NoSQL主要用于解決以下幾種問題

1.少量數(shù)據(jù)存儲,高速讀寫訪問。此類產(chǎn)品通過數(shù)據(jù)全部in-momery 的方式來保證高速訪問,同時提供數(shù)據(jù)落地的功能,實際這正是Redis最主要的適用場景。

2.海量數(shù)據(jù)存儲,分布式系統(tǒng)支持,數(shù)據(jù)一致性保證,方便的集群節(jié)點添加/刪除。

3.這方面最具代表性的是dynamo和bigtable 2篇論文所闡述的思路。前者是一個完全無中心的設計,節(jié)點之間通過gossip方式傳遞集群信息,數(shù)據(jù)保證最終一致性,后者是一個中心化的方案設計,通過類似一個分布式鎖服務來保證強一致性,數(shù)據(jù)寫入先寫內存和redo log,然后定期compat歸并到磁盤上,將隨機寫優(yōu)化為順序寫,提高寫入性能。

4.Schema free,auto-sharding等。比如目前常見的一些文檔數(shù)據(jù)庫都是支持schema-free的,直接存儲json格式數(shù)據(jù),并且支持auto-sharding等功能,比如mongodb。

面對這些不同類型的NoSQL產(chǎn)品,我們需要根據(jù)我們的業(yè)務場景選擇最合適的產(chǎn)品。

Redis適用場景,如何正確的使用 .

前面已經(jīng)分析過,Redis最適合所有數(shù)據(jù)in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-backed的功能,跟傳統(tǒng)意義上的持久化有比較大的差別,那么可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那么何時使用Memcached,何時使用Redis呢?

如果簡單地比較Redis與Memcached的區(qū)別,大多數(shù)都會得到以下觀點:

1? Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,zset,hash等數(shù)據(jù)結構的存儲。

2? Redis支持數(shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

3? Redis支持數(shù)據(jù)的持久化,可以將內存中的數(shù)據(jù)保持在磁盤中,重啟的時候可以再次加載進行使用。

拋開這些,可以深入到Redis內部構造去觀察更加本質的區(qū)別,理解Redis的設計。

在Redis中,并不是所有的數(shù)據(jù)都一直存儲在內存中的。這是和Memcached相比一個最大的區(qū)別。Redis只會緩存所有的 key的信息,如果Redis發(fā)現(xiàn)內存的使用量超過了某一個閥值,將觸發(fā)swap的操作,Redis根據(jù)“swappability = age*log(size_in_memory)”計 算出哪些key對應的value需要swap到磁盤。然后再將這些key對應的value持久化到磁盤中,同時在內存中清除。這種特性使得Redis可以 保持超過其機器本身內存大小的數(shù)據(jù)。當然,機器本身的內存必須要能夠保持所有的key,畢竟這些數(shù)據(jù)是不會進行swap操作的。同時由于Redis將內存 中的數(shù)據(jù)swap到磁盤中的時候,提供服務的主線程和進行swap操作的子線程會共享這部分內存,所以如果更新需要swap的數(shù)據(jù),Redis將阻塞這個 操作,直到子線程完成swap操作后才可以進行修改。

使用Redis特有內存模型前后的情況對比:

VM off: 300k keys, 4096 bytes values: 1.3G used

VM on:? 300k keys, 4096 bytes values: 73M used

VM off: 1 million keys, 256 bytes values: 430.12M used

VM on:? 1 million keys, 256 bytes values: 160.09M used

VM on:? 1 million keys, values as large as you want, still: 160.09M used

當 從Redis中讀取數(shù)據(jù)的時候,如果讀取的key對應的value不在內存中,那么Redis就需要從swap文件中加載相應數(shù)據(jù),然后再返回給請求方。 這里就存在一個I/O線程池的問題。在默認的情況下,Redis會出現(xiàn)阻塞,即完成所有的swap文件加載后才會相應。這種策略在客戶端的數(shù)量較小,進行 批量操作的時候比較合適。但是如果將Redis應用在一個大型的網(wǎng)站應用程序中,這顯然是無法滿足大并發(fā)的情況的。所以Redis運行我們設置I/O線程 池的大小,對需要從swap文件中加載相應數(shù)據(jù)的讀取請求進行并發(fā)操作,減少阻塞的時間。

如果希望在海量數(shù)據(jù)的環(huán)境中使用好Redis,我相信理解Redis的內存設計和阻塞的情況是不可缺少的。

補充的知識點: .

memcached和redis的比較

1 網(wǎng)絡IO模型

Memcached是多線程,非阻塞IO復用的網(wǎng)絡模型,分為監(jiān)聽主線程和worker子線程,監(jiān)聽線程監(jiān)聽網(wǎng)絡連接,接受請求后,將連接描述字pipe 傳遞給worker線程,進行讀寫IO, 網(wǎng)絡層使用libevent封裝的事件庫,多線程模型可以發(fā)揮多核作用,但是引入了cache coherency和鎖的問題,比如,Memcached最常用的stats 命令,實際Memcached所有操作都要對這個全局變量加鎖,進行計數(shù)等工作,帶來了性能損耗。

(Memcached網(wǎng)絡IO模型)

Redis使用單線程的IO復用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現(xiàn)了epoll、kqueue和select,對于單純只有IO操作來說,單線程可以將速度優(yōu)勢發(fā)揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對于這些操作,單線程模型實際會嚴重影響整體吞吐量,CPU計算過程中,整個IO調度都是被阻塞住的。

2.內存管理方面

Memcached使用預分配的內存池的方式,使用slab和大小不同的chunk來管理內存,Item根據(jù)大小選擇合適的chunk存儲,內存池的方式可以省去申請/釋放內存的開銷,并且能減小內存碎片產(chǎn)生,但這種方式也會帶來一定程度上的空間浪費,并且在內存仍然有很大空間時,新的數(shù)據(jù)也可能會被剔除,原因可以參考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/

Redis使用現(xiàn)場申請內存的方式來存儲數(shù)據(jù),并且很少使用free-list等方式來優(yōu)化內存分配,會在一定程度上存在內存碎片,Redis跟據(jù)存儲命令參數(shù),會把帶過期時間的數(shù)據(jù)單獨存放在一起,并把它們稱為臨時數(shù)據(jù),非臨時數(shù)據(jù)是永遠不會被剔除的,即便物理內存不夠,導致swap也不會剔除任何非臨時數(shù)據(jù)(但會嘗試剔除部分臨時數(shù)據(jù)),這點上Redis更適合作為存儲而不是cache。

3.數(shù)據(jù)一致性問題

Memcached提供了cas命令,可以保證多個并發(fā)訪問操作同一份數(shù)據(jù)的一致性問題。 Redis沒有提供cas 命令,并不能保證這點,不過Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。

4.存儲方式及其它方面

Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和復制等功能

Redis除key/value之外,還支持list,set,sorted set,hash等眾多數(shù)據(jù)結構,提供了KEYS

進行枚舉操作,但不能在線上使用,如果需要枚舉線上數(shù)據(jù),Redis提供了工具可以直接掃描其dump文件,枚舉出所有數(shù)據(jù),Redis還同時提供了持久化和復制等功能。

5.關于不同語言的客戶端支持

在不同語言的客戶端方面,Memcached和Redis都有豐富的第三方客戶端可供選擇,不過因為Memcached發(fā)展的時間更久一些,目前看在客戶端支持方面,Memcached的很多客戶端更加成熟穩(wěn)定,而Redis由于其協(xié)議本身就比Memcached復雜,加上作者不斷增加新的功能等,對應第三方客戶端跟進速度可能會趕不上,有時可能需要自己在第三方客戶端基礎上做些修改才能更好的使用。

根據(jù)以上比較不難看出,當我們不希望數(shù)據(jù)被踢出,或者需要除key/value之外的更多數(shù)據(jù)類型時,或者需要落地功能時,使用Redis比使用Memcached更合適。

關于Redis的一些周邊功能 .

Redis除了作為存儲之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對于此類功能需要了解其實現(xiàn)原理,清楚地了解到它的局限性后,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支持的,消費方連接閃斷或重連之間過來的消息是會全部丟失的,又比如聚合計算和scripting等功能受Redis單線程模型所限,是不可能達到很高的吞吐量的,需要謹慎使用。

總的來說Redis作者是一位非常勤奮的開發(fā)者,可以經(jīng)??吹阶髡咴趪L試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入了解后再使用。

總結: ?

1.Redis使用最佳方式是全部數(shù)據(jù)in-memory。

2.Redis更多場景是作為Memcached的替代者來使用。

3.當需要除key/value之外的更多數(shù)據(jù)類型支持時,使用Redis更合適。

4.當存儲的數(shù)據(jù)不能被剔除時,使用Redis更合適。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據(jù)LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉