成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從應用角度談新浪微博Redis服務平臺

數據庫 MySQL 大數據 Redis
Redis不是比較成熟的Memcache或者Mysql的替代品,是對于大型互聯網類應用在架構上很好的補充。現在有越來越多的應用也在紛紛基于Redis做架構的改造。

可以簡單公布一下Redis平臺實際情況

2200+億 commands/day   5000億Read/day   500億Write/day

18TB+ Memory

500+ Servers in 6 IDC    2000+instances

應該是國內外比較大的Redis使用平臺,今天主要從應用角度談談Redis服務平臺。

Redis使用場景

1.Counting(計數)

計數的應用在另外一篇文章里較詳細的描述,計數場景的優化 http://www.xdata.me/?p=262 這里就不坳述了。

可以預見的是,有很多同學認為把計數全部存在內存中成本非常高,我在這里用個圖表來表示下我的觀點:

很多情況大家都會設想純使用內存的方案會很有很高成本,但實際情況往往會有一些不一樣:

1.COST,對于有一定吞吐需求的應用來說,肯定會單獨申請DB、Cache資源,很多擔心DB寫入性能的同學還會主動將DB更新記入異步隊列,而這三塊的資源的利用率一般都不會太高。資源算下來,你驚異的發現:反而純內存的方案會更精簡!

2.KISS原則,這對于開發是非常友好的,我只需要建立一套連接池,不用擔心數據一致性的維護,不用維護異步隊列。

3.Cache穿透風險,如果后端使用DB,肯定不會提供很高的吞吐能力,cache宕機如果沒有妥善處理,那就悲劇了。

4.大多數的起始存儲需求,容量較小。

2.Reverse cache(反向cache)

面對微博常常出現的熱點,如最近出現了較為火爆的短鏈,短時間有數以萬記的人點擊、跳轉,而這里會常常涌現一些需求,比如我們向快速在跳轉時判定用戶等級,是否有一些賬號綁定,性別愛好什么的,已給其展示不同的內容或者信息。

普通采用Memcache+Mysql的解決方案,當調用id合法的情況下,可支撐較大的吞吐。但當調用id不可控,有較多垃圾用戶調用時,由于memcache未有命中,會大量的穿透至Mysql服務器,瞬間造成連接數瘋長,整體吞吐量降低,響應時間變慢。

這里我們可以用redis記錄全量的用戶判定信息,如string key:uid int:type,做一次反向的cache,當用戶在redis快速獲取自己等級等信息后,再去Mc+Mysql層去獲取全量信息。如圖:

當然這也不是最優化的場景,如用Redis做bloomfilter,可能更加省用內存。

3.Top 10 list

產品運營總會讓你展示最近、最熱、點擊率最高、活躍度最高等等條件的top list。很多更新較頻繁的列表如果使用MC+MySQL維護的話緩存失效的可能性會比較大,鑒于占用內存較小的情況,使用Redis做存儲也是相當不錯的。

4.Last Index

用戶最近訪問記錄也是redis list的很好應用場景,lpush lpop自動過期老的登陸記錄,對于開發來說還是非常友好的。

5.Relation List/Message Queue

這里把兩個功能放在最后,因為這兩個功能在現實問題當中遇到了一些困難,但在一定階段也確實解決了我們很多的問題,故在這里只做說明。

Pinterest使用Redis存儲社交graph信息:

http://blog.gopivotal.com/case-studies-2/using-redis-at-pinterest-for-billions-of-relationships

Message Queue就是通過list的lpop及lpush接口進行隊列的寫入和消費,由于本身性能較好也能解決大部分問題。

6.Fast transaction with Lua

Redis 的Lua的功能擴展實際給Redis帶來了更多的應用場景,你可以編寫若干command組合作為一個小型的非阻塞事務或者更新邏輯,如:在收到message推送時,同時1.給自己的增加一個未讀的對話 2.給自己的私信增加一個未讀消息 3.最后給發送人回執一個完成推送消息,這一層邏輯完全可以在Redis Server端實現。

但是,需要注意的是Redis會將lua script的全部內容記錄在aof和傳送給slave,這也將是對磁盤,網卡一個不小的開銷。

7.Instead of Memcache

很多測試和應用均已證明,

1.在性能方面Redis并沒有落后Memcache多少,而單線程的模型給Redis反而帶來了很強的擴展性。

2.在很多場景下,Redis對同一份數據的內存開銷是小于Memcache的slab分配的。

3.Redis提供的數據同步功能,其實是對cache的一個強有力功能擴展。

#p#

Redis使用的重要點

1.rdb/aof Backup!

我們線上的Redis 95%以上是承擔后端存儲功能的,我們不僅用作cache,而更為一種k-v存儲,他完全替代了后端的存儲服務(MySQL),故其數據是非常重要的,如果出現數據污染和丟失,誤操作等情況,將是難以恢復的。所以備份是非常必要的!為此,我們有共享的hdfs資源作為我們的備份池,希望能隨時可以還原業務所需數據。

2.Small item & Small instance!

由于Redis單線程(嚴格意義上不是單線程,但認為對request的處理是單線程的)的模型,大的數據結構list,sorted set,hash set的批量處理就意為著其他請求的等待,故使用Redis的復雜數據結構一定要控制其單key-struct的大小。

另外,Redis單實例的內存容量也應該有嚴格的限制。單實例內存容量較大后,直接帶來的問題就是故障恢復或者Rebuild從庫的時候時間較長,而更糟糕的是,Redis rewrite aof和save rdb時,將會帶來非常大且長的系統壓力,并占用額外內存,很可能導致系統內存不足等嚴重影響性能的線上故障。我們線上96G/128G內存服務器不建議單實例容量大于20/30G。

3.Been Available!

業界資料和使用比較多的是Redis sentinel(哨兵)

http://www.huangz.me/en/latest/storage/redis_code_analysis/sentinel.html

http://qiita.com/wellflat/items/8935016fdee25d4866d9

2000行C實現了服務器狀態檢測,自動故障轉移等功能。

 

但由于自身實際架構往往會復雜,或者考慮的角度比較多,為此@許琦eryk 和我一同做了hypnos項目。

hypnos是神話中的睡神,字面意思也是希望我們工程師無需在休息時間處理任何故障。:-)

其工作原理示意如下:

Talk is cheap, show me your code! 稍后將單獨寫篇博客細致講下Hypnos的實現。

4.In Memory or not?

發現一種情況,開發在溝通后端資源設計的時候,常常因為習慣使用和錯誤了解產品定位等原因,而忽視了對真實使用用戶的評估。也許這是一份歷史數據,只有最近一天的數據才有人進行訪問,而把歷史數據的容量和最近一天請求量都拋給內存類的存儲現實是非常不合理的。

所以當你在究竟使用什么樣的數據結構存儲的時候,請務必先進行成本衡量,有多少數據是需要存儲在內存中的?有多少數據是對用戶真正有意義的。因為這其實對后端資源的設計是至關重要的,1G的數據容量和1T的數據容量對于設計思路是完全不一樣的

 

Plans in future?

1.slave sync改造

全部改造線上master-slave數據同步機制,這一點我們借鑒了MySQL Replication的思路,使用rdb+aof+pos作為數據同步的依據,這里簡要說明為什么官方提供的psync沒有很好的滿足我們的需求:

假設A有兩個從庫B及C,及 A `— B&C,這時我們發現master A服務器有宕機隱患需要重啟或者A節點直接宕機,需要切換B為新的主庫,如果A、B、C不共享rdb及aof信息,C在作為B的從庫時,仍會清除自身數據,因為C節點只記錄了和A節點的同步狀況。

故我們需要有一種將A`–B&C 結構切換切換為A`–B`–C結構的同步機制,psync雖然支持斷點續傳,但仍無法支持master故障的平滑切換。

實際上 我們已經在我們定制的Redis計數服務上使用了如上功能的同步,效果非常好,解決了運維負擔,但仍需向所有Redis服務推廣,如果可能我們也會向官方Redis提出相關sync slave的改進。

2.更適合redis的name-system Or proxy

細心的同學發現我們除了使用DNS作為命名系統,也在zookeeper中有一份記錄,為什么不讓用戶直接訪問一個系統,zk或者DNS選擇其一呢?

其實還是很簡單,命名系統是個非常重要的組件,而dns是一套比較完善的命名系統,我們為此做了很多改進和試錯,zk的實現還是相對復雜,我們還沒有較強的把控粒度。我們也在思考用什么做命名系統更符合我們需求。

3.后端數據存儲

大內存的使用肯定是一個重要的成本優化方向,flash盤及分布式的存儲也在我們未來計劃之中。

原文鏈接:http://www.xdata.me/?p=301

【編輯推薦】

責任編輯:彭凡 來源: xdata
相關推薦

2011-12-08 16:10:18

2010-04-28 08:38:19

微博開發楊衛華

2011-12-08 16:51:55

新浪微博開放平臺

2014-04-22 10:34:57

新浪微博Redis

2012-02-15 17:39:36

2011-12-08 16:31:43

新浪微博開放平臺

2011-09-09 11:09:26

Web

2011-12-07 16:25:01

新浪微博平臺

2010-07-23 15:13:11

身份驗證云服務

2013-07-10 14:15:38

php新浪微博

2011-12-13 13:55:17

新浪微博開放平臺

2012-05-11 11:40:16

新浪企業微博

2015-01-21 15:28:16

Android源碼新浪微博

2013-07-01 18:34:47

個推案例新浪微博

2017-04-15 21:36:05

微服務新浪微博WOT

2011-07-22 10:38:55

HTC新浪Facebook

2018-05-16 14:04:05

人工智能新浪微博實時流計算

2012-02-15 17:09:34

開放平臺

2018-08-06 10:50:02

新浪微博短視頻

2015-09-24 18:08:50

微博架構架構演進架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 最新av中文字幕 | 91精品国产91久久综合桃花 | 夜夜骚视频 | 欧美激情精品久久久久久变态 | 成人欧美一区二区三区黑人孕妇 | a网站在线观看 | 国产精品欧美一区二区三区 | 偷拍自拍在线观看 | 天天操天天射综合 | 久久中文网 | 欧美激情一区二区三级高清视频 | 一区二区三区欧美在线 | 区一区二在线观看 | 国产馆 | 精品av | 亚洲中午字幕 | 国产真实乱对白精彩久久小说 | 亚洲成人免费观看 | 在线观看国产三级 | 在线a视频| 久草免费电影 | 日韩看片| 国产精品自拍啪啪 | 午夜久久久久 | 亚洲精品福利在线 | av影片在线 | 久久国产婷婷国产香蕉 | 久久成人一区 | 99只有精品 | 中文字幕高清免费日韩视频在线 | 国产永久免费 | 午夜免费电影院 | 欧美激情国产日韩精品一区18 | 免费观看黄网站 | 91精品久久久久久久久久小网站 | 羞羞网站在线免费观看 | 午夜精品91 | 色一级 | 成人精品毛片国产亚洲av十九禁 | 孕妇一级毛片 | 亚洲成人国产 |