首頁 php教程 php手册 知名网站分享:PHP代替Perl,Redis置换MySQL,日处理过亿PV

知名网站分享:PHP代替Perl,Redis置换MySQL,日处理过亿PV

Jun 06, 2016 pm 07:42 PM
m perl php redis 代替 分享

导读:你要相信,技术是不带有任何歧视色彩的,即使你从事着一个饱受争议的业务,也不能抹杀技术对于创新的贡献。 早先(2012年)我们有报道过 著名成人网站Youporn的IT主管Eric Pickup在Google Groups中的发言,Youporn现在是100%的Redis的基础,每天处理1

导读:你要相信,技术是不带有任何歧视色彩的,即使你从事着一个饱受争议的业务,也不能抹杀技术对于创新的贡献。早先(2012年)我们有报道过著名成人网站Youporn的IT主管Eric Pickup在Google Groups中的发言,Youporn现在是100%的Redis的基础,每天处理1亿PV,每秒处理30万次请求。而近日Eric接受了Justin Mares的采访,分享了Redis在Youporn的最佳实践。

以下为采访译文:

Justin:可以说说你们迁往Redis的时间和原因吗?

Eric:大约两年前我加入了这个网站。当时网站使用的是Perl,这也是我加入YouPorn的一个理由。尽管我在Perl上有丰富的工作经验,但是很快就发现如果继续使用Perl,网站将很难得到发展,因为公司缺乏开发者——特别是强大的高级开发者。而网站的停滞不前显然不是我们想看到的。

我们很快的做出了决定并寻找其它的替代技术,那时候的第一直觉就是PHP;然而我们并不想再次受到限制,所以我们开始关注基于Java的解决方案。但是经过一系列的研究和观察后,我们仍然选用了PHP。

在决定使用Redis之前,我们有尝试过Redis、Varnish以及其它的一些技术。有一些网站内部已经开始使用Redis,大多数用例都是缓存解决方案,但是我们想知道它究竟可不可以做为一个真实的数据储存。

知名网站分享:PHP代替Perl,Redis置换MySQL,日处理过亿PV

我们做了一些早期的测试,并将性能作为主要考虑因素,因为这个问题一直困扰着我们。我们很震惊于Redis的测试结果,在一些讨论后,我们决定使用Redis作为我们网站的主数据库。

之前网站使用的一直是传统的LAMP堆栈。网站由Linux、Perl、MySQL及Memcached组成,同样我们也担心过网站的过渡期,我们使用了一个折中方案,在整个系统中保留了MySQL,现在看来这个方案确实非常的明智。我们不通过网站读取MySQL,但是我们使用它来填充新的列表或者哈希表,用以处理无法预计的突发状况。我们使用MySQL做一些特殊的查询,使用Redis作为网站的数据库。

在方案投入建设后,我们很快就发现这是一个多么英明的决定;时间检验了这个解决方案确实非常适合我们的用例,网站的性能也得到了颠覆性的提升。

Justin:你从什么方面进行了评估并认定这是一个很好的解决方案?

Eric:易于开发占了很大的部分,特别是像我们这样重写整个项目的情况。幸运的是,Redis的数据结构非常匹配我们的业务。

YouPorn的主要任务还是关于视频和对象列表,这些对象可能是评论、收藏等等。最受好评的视频,或者是观看最多的视频。基本是都是关于列表和对象,而这些都可以很好的映射到哈希表。我们也尝试了一些其它数据类型,但是90%情况都陷入排序或者是哈希上的困境。

Justin:在决定使用Redis后,花费了多长的时间去实现并且运行?

Eric:公正的说,回溯那个阶段,我们团队的产能提升得很大。就像我刚说的,这是一个全新的项目,而在初期阶段大部分都是我和另外一个同事完成。

我曾今说过,4周左右我们完成了网站原型的一大部分。我们拥有首页、所有主页并完成了大部分的视频页面;尽管不可以添加,但是你可以查看评论。然而我们只有两个人,只用了四周的时间!这些时间还包括了学习一门新的框架(那个时候使用的是Symfony),所以生产效率确实太快了。

Justin:你们使用了多少个实例?

Eric:少于10个。

Justin:令人震惊的数字,你的团队是如何操作以达到这一效果的?

Eric:随着功能的增加,实例的数量也随之增加,但是通常情况下我们使用Redis做大量的缓存。在网站第一次发布时,我们没有任何缓存,我们只是依赖Redis。

经过一段时间,我们发现服务器过热,所以我们加入了不同级别的缓存。我们添加了Redis的第二个节点,并为一些人气页面建立短时间的缓存。还有一点需要注意的是,我们使用了Varnish,这样许多页面就不需要通过Redis来缓存。

Justin:你什么时候开始做架构决策,可以说说你们在什么地方使用了Redis,以及发展至今都有什么改变?

Eric:我想说的是Redis只是第一个我们准备使用的技术。Varnish则是我们之前制定的决策。这两个技术的测试结果让我们非常满意,就像我所说的,在决定重写网站之前,公司就有使用过这两个技术,所以对我们来说并不陌生。

迄今为止我们所做改变中最大的应该就是添加了二级Redis缓存层,这个措施切实的减少了服务器上每秒的查询次数,并且提升了网站的安全性。

Justin:你觉得网站重写以后最大的收益是什么?

Eric:如果只有一个的话,我认为是使用了Redis以后可以快速添加新特性。当然不仅仅是Redis,而是整个堆栈。我们编写了一个非常有用的库,基于Redis库,它让我们可以快速的整合新特性。

Justin:这一转变中遇到过什么障碍及困难,是否根据自己的情况做了一些定制?

Eric:让我回忆一下。实现缓存层耗费了一些时间。就像我说的,服务器运行得越来越热,我们也不想靠不停的投入服务器去解决这个状况,所以制定解决方案需要不短的时间。

另一个耗费时间的是弄清问题发生的原因。那个时代,多数使用Linux系统搭建的网站都会选择MySQL作为数据库。MySQL确实有着巨大的优势,因为这里存在很多技术文献。如果出现问题,有很大的可能已经被别人解决过,你将在大把的网站上发现信息及建议。Redis还没有这样的社区,因此在问题发生后可用的信息非常之少。

因为对比MySQL缺少了这些技术文献,所以制定问题解决方案,或者类似备份到磁盘设置的简单操作都将花费更多的时间。然而随着Redis变的愈来愈流行,这个方面逐渐得到了完善。

Justin:有可以和读者分享的技巧和秘诀吗?

Eric:我就说说最有价值的一个吧,这方面我了解的也不是很多,因为我主要负责的不是系统,而这些都是系统相关知识。我想说的是磁盘备份时容易被忽视的一个点,在拥有一个主节点、N个从节点的集群中,要确定给备份留有足够的时间,这样就不会出现几个操作同时对磁盘写入的情况。

这一点非常容易被忽视。默认设置在只有一台服务器的情况下运行良好,然而随着我们不定期的加入服务器,错误也随之产生。

更多消息:据@developerWorks得知,YouPorn有超过100TB的情色资料,每天数据传输量950TB。而Redis为了处理用户登录、观看记录等操作,每小时记录数据更多达8-15GB。

更多内容请关注CSDN云计算频道 及@CSDN云计算微博

How YouPorn Uses Redis: SFW Edition (编译/仲浩 审校/周小璐)

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的未來:改編和創新 PHP的未來:改編和創新 Apr 11, 2025 am 12:01 AM

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

php:死亡還是簡單地適應? php:死亡還是簡單地適應? Apr 11, 2025 am 12:13 AM

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

redis底層怎麼實現 redis底層怎麼實現 Apr 10, 2025 pm 07:21 PM

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

redis-server找不到怎麼辦 redis-server找不到怎麼辦 Apr 10, 2025 pm 06:54 PM

解決redis-server找不到問題的步驟:檢查安裝,確保已正確安裝Redis;設置環境變量REDIS_HOST和REDIS_PORT;啟動Redis服務器redis-server;檢查服務器是否運行redis-cli ping。

H5:工具,框架和最佳實踐 H5:工具,框架和最佳實踐 Apr 11, 2025 am 12:11 AM

H5開發需要掌握的工具和框架包括Vue.js、React和Webpack。 1.Vue.js適用於構建用戶界面,支持組件化開發。 2.React通過虛擬DOM優化頁面渲染,適合複雜應用。 3.Webpack用於模塊打包,優化資源加載。

redis怎麼查看所有的key redis怎麼查看所有的key Apr 10, 2025 pm 07:15 PM

要查看 Redis 中的所有鍵,共有三種方法:使用 KEYS 命令返回所有匹配指定模式的鍵;使用 SCAN 命令迭代鍵並返回一組鍵;使用 INFO 命令獲取鍵的總數。

See all articles