知名网站分享:PHP代替Perl,Redis置换MySQL,日处理过亿PV
导读:你要相信,技术是不带有任何歧视色彩的,即使你从事着一个饱受争议的业务,也不能抹杀技术对于创新的贡献。 早先(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,大多数用例都是缓存解决方案,但是我们想知道它究竟可不可以做为一个真实的数据储存。
我们做了一些早期的测试,并将性能作为主要考虑因素,因为这个问题一直困扰着我们。我们很震惊于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 (编译/仲浩 审校/周小璐)

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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

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