听豆瓣架构变迁分享会总结
要点如下:
目前23台pc server
每天pv数2k万左右。注册用户数300万。
表的数据,大部分是行数量是千万的。
5个人算法团队。另外开发人员总共11个,包括全职和兼职(以前看百姓网分享其技术也只有10名)
06年的时候每天120万左右动态请求。这个时候主要瓶颈在磁盘i/0上面,拿到风投,有钱购买硬件设备。购买两台iu服务器(双核,4g内存)
一台作为应用服务器,一台作为数据库服务器,迁移到双线ip机房,使用dns解析不同网段ip(自己去找哪些网段是电信的哪些网段是网通,然后自己进行解析)。看演讲后面提到的机房调整感觉到,其实这是走了弯路,可以选择一个好的机房来解决dns解析方面(后来总结是靠ip段来分布数据不靠谱)
具体怎么做,就是放到一个支持多线的(教育网铁通等)机房,现在我们公司用的阿里云就是多线)
那么这样子就不需要自己多ip段分配了(就是判断访问用户是电信还是网通等)。
使用内存缓存(豆瓣使用的是memcached)的两点原则:
1、对于需要比较消耗资源的数据
2、需要重复使用的数据。如果只需要使用一次,那么即便是比较消耗资源,丢入缓存也没多少意义
理解:内存缓存也需要内存,没必要浪费。如果不需要重复使用,丢入内存中也比较浪费(毕竟内存不便宜,也占用服务器资源)
豆瓣的memached命中率挺高的。靠这个也缓解了很多压力。
innodb并发访问支持好,因为支持行级存储。使用myisam还是innodb他们的的业务特点是:读多写少使用myisam,写多读少使用innodb
数据库切分方面:目前是按照功能进行分区(作者没有详细解释,应该是按照功能模块划分表。一个功能模块相关的表放到一个库中去),提到,采用了经典的mysql主从架构。所以每个库其实是重复三份的(他说的主辅库)。应该是三个mysql从服务器
分库之后,操作多个库,使用游标的方式获取具体的库和具体的表。传入参数进去(具体没看懂)
数据库主从复制延迟问题一直是一个常见问题。
购买硬盘是一个教训:刚开始还是宁愿投资多点钱购买好的点的磁盘,因为磁盘这东西升级不太可能。到时候网站扛不住了。仍然得换。那么,刚开始宁愿多花点钱,购买高速磁盘,因为业务如果发展快了的话,就得换。即便贵点,磁盘仍然没有浪费的。
200万每天的动态请求的时候,豆瓣提到,静态的小文件服务(用户头像、封面图片)使得磁盘i/0成为瓶颈,以前愚蠢得把图片都放到一个目录下面,这个目录下面有几十万个小文件(直接导致不能使用ls命令,一使用服务器就死掉了),这个时候把文件分目 录。分成每个目录存储10000个文件。
有专门的数据挖掘团队。算法团队进行矩阵计算,把结果放入mysql,供前端查询显示出来。
豆瓣的fs是专门针对图片存储,自己开发的。其实机制是参考了amazon的,写的时候写三份数据。
磁盘随机寻道比吞吐量更加重要,当时的性能瓶颈在磁盘寻道速度上(这点跟之前看淘宝的图片文件系统分析的大量的图片访问带来的磁盘磁头频繁定位造成的延时类似)
后来把所有myisam表改为innodb表。
innodb的缓存:是在进程中自我管理(也就是内存中),而myisam的缓存是基于文件中(受操作系统控制)。以前既用myisam表也用innodb表,导致两种类型的表相互竞争内存,效率不高。索引全部换成innodb存储引擎(这点我不是很理解,只明白其考虑点是为了更好利用内存)
应用服务器故障:nginx自带功能。
图片的流量成为很大成本:迁移到天津机房是因为更加便宜点。机柜比较便宜,把数据挖掘方面的数据和图片数据都搬过去。
北京与天津两个机房。里面各自搭建mysql的master-slave结构。
搜索方面:以前一直使用mysql的全文索引。后来迁移使用sphinx(这个结合mysql来使用,作为mysql的一个存储引擎),后来又变为xapain
为什么没使用sphinx了?没有详细解释
使用MogileFS来存储图片,后来又自己开发了doubanfs存储。迁移的原因:mogilefs出现性能瓶颈,由于mogilefs是把元数据(命名空间, 和文件在哪里)存储在mysql中,数据库行数变多之后,就会变得越来越慢。而大量的小文件需要读取数据库,也影响了速度。当时的行数增长非常快,当时瓶颈在于mysql数据库上。
大字段影响了数据库的性能,实际上数据表行数并不多。就是大字段的影响。大文本字段移除出去,存储到自己开发的doubanDB中(是一个key-value数据库,参考了亚马逊的dymamo,进行简化)。底层存储基于tokyocabinet。后来把doubanfs重写,基于doubandb实现,把图片存储进去。
使用双master方案。解决了复制延迟问题,因为写和读都是对同一个master,读取到的数据是最新的。而以前:从master写入,然后从slave读,存在数据延迟
部署lvs。
之前使用spread作为消息队列,后来使用rabbitMQ替代
=========================================================
总结:照搬其架构和技术方案是不可行的。借鉴他的错误经验和背后的设计思想才能学到本质(主要了解为什么那样子做,出于什么考虑)。
教训:磁盘的选择和机房的选择。磁盘选择转数快的,开始成本贵点值得。
分库,首先从功能角度划分区。暂时还没必要去做水平分区。功能相关表放到一个库中或者单独的服务器上这是必经的阶段。
把钱花在内存上是值得的的,一台机器的内存永远不嫌多,数据库消耗的内存比较多,一般内存往往会成为瓶颈(大量连接,计算数据都能导致内存不够用)。memcached并不廉价(网络i/0,消耗cpu)。放入memcached的东西要慎重。
避免数据库的join操作(这点与以前看的石展分享的观点类似,减少join操作,宁愿拆分成多次获取数据,facebook的架构中也提到不做JOIN 操作)
总体感觉,从豆瓣中学到数据库方面的经验是分库方面。他们的访问量级别还不需要进行到水平切分,进行分库即可了,按照业务功能分区。一个业务功能模块相关的表都拆分到同一个库中去。然后对数据库服务器做主从同步保持数据热备份。
Sharding 在业界的应用场景基本上也就是这种读应用比较重的情况,而且对事务的安全性要求不高,这样的场景会非常适合。
sata*3查了一下 450G 1000多块钱一个。
sata硬盘故障率比较高,换了scsi硬盘。
针对图片存储或者小文件存储方面,因为量大(流量成本,存储成本),开发了自己的文件系统
图片存储如果依赖于数据库做存储,数据量大之后,确实会成为瓶颈(难怪淘宝的图片文件系统,将一部分元数据隐藏到图片的保存文件名上)
疑问:北京和天津跨机房,两边的mysql之间进行同步数据,或者是天津那边的数据挖掘程序往北京写入数据,这个速度如何?
这个我查了一下资料,一般是需要使用专用光钎网络通道。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











소셜 미디어의 급속한 발전으로 Xiaohongshu는 가장 인기 있는 소셜 플랫폼 중 하나가 되었습니다. 사용자는 Xiaohongshu 계정을 만들어 자신의 개인 신원을 표시하고 다른 사용자와 소통하고 상호 작용할 수 있습니다. 사용자의 Xiaohongshu 번호를 찾으려면 다음의 간단한 단계를 따르세요. 1. Xiaohongshu 계정을 사용하여 사용자를 찾는 방법은 무엇입니까? 1. Xiaohongshu 앱을 열고 오른쪽 하단에 있는 "검색" 버튼을 클릭한 다음 "메모" 옵션을 선택합니다. 2. 노트 목록에서 찾고자 하는 사용자가 게시한 노트를 찾아보세요. 클릭하시면 메모 세부정보 페이지로 이동합니다. 3. 노트 상세페이지에서 해당 사용자의 아바타 아래 '팔로우' 버튼을 클릭하여 해당 사용자의 개인 홈페이지로 진입합니다. 4. 이용자 개인 홈페이지 우측 상단의 점 3개 버튼 클릭 후 '개인정보' 선택

소셜 네트워킹과 전자상거래를 통합한 플랫폼인 Xiaohongshu는 점점 더 많은 사용자를 끌어들이고 있습니다. 일부 사용자는 Xiaohongshu와 더 나은 상호 작용 경험을 위해 여러 계정을 등록하기를 원합니다. 그렇다면 Xiaohongshu에 여러 계정을 등록하는 방법은 무엇입니까? 1. Xiaohongshu에 여러 계정을 등록하는 방법은 무엇입니까? 1. 다른 휴대폰 번호를 사용하여 등록합니다. 현재 Xiaohongshu는 주로 휴대폰 번호를 사용하여 계정을 등록합니다. 사용자들은 때때로 여러 개의 휴대폰 번호 카드를 구입하여 여러 개의 Xiaohongshu 계정을 등록하는 데 사용하려고 합니다. 그러나 이 방법에는 여러 장의 휴대폰 번호 카드를 구입하는 것이 번거롭고 비용이 많이 들기 때문에 몇 가지 제한 사항이 있습니다. 2. 이메일을 사용하여 등록하세요. 휴대폰 번호 외에도 이메일을 사용하여 Xiaohongshu 계정을 등록할 수 있습니다. 사용자는 여러 개의 이메일 주소를 준비한 후 해당 이메일 주소를 사용하여 계정을 등록할 수 있습니다. 하지만

생활, 엔터테인먼트, 쇼핑, 공유를 통합한 소셜 플랫폼인 Xiaohongshu는 많은 젊은이들의 일상생활에서 없어서는 안 될 부분이 되었습니다. 그렇다면 Xiaohongshu 계정을 등록하는 방법은 무엇입니까? 1. Xiaohongshu 계정을 등록하는 방법은 무엇입니까? 1. Xiaohongshu 공식 웹사이트를 열거나 Xiaohongshu 앱을 다운로드하세요. 아래의 "등록" 버튼을 클릭하면 다양한 등록 방법을 선택할 수 있습니다. 현재 Xiaohongshu는 휴대폰 번호, 이메일 주소 및 제3자 계정(예: WeChat, QQ, Weibo 등) 등록을 지원합니다. 3. 관련 정보를 입력하세요. 선택한 등록 방법에 따라 해당 휴대폰 번호, 이메일 주소 또는 제3자 계정 정보를 입력하세요. 4. 비밀번호를 설정하세요. 계정을 안전하게 보호하려면 강력한 비밀번호를 설정하세요. 5. 인증을 완료합니다. 안내에 따라 휴대폰 인증 또는 이메일 인증을 완료하세요. 6. 개인을 온전케 하라

세계에서 가장 인기 있는 라이프스타일 공유 플랫폼 중 하나인 Xiaohongshu는 수많은 사용자를 끌어 모았습니다. 그렇다면 Xiaohongshu 계정을 등록하는 방법은 무엇입니까? 이번 글에서는 Xiaohongshu 계정 등록 과정을 자세히 소개하고, Xiaohongshu 계정 이상 현상을 복구하는 방법에 대한 질문에 답변해 드리겠습니다. 1. Xiaohongshu 계정을 등록하는 방법은 무엇입니까? 1. Xiaohongshu 앱 다운로드: 모바일 앱 스토어에서 Xiaohongshu 앱을 검색하여 다운로드하고 설치가 완료된 후 엽니다. 2. 계정 등록: Xiaohongshu 앱을 연 후 홈페이지 오른쪽 하단에 있는 '나' 버튼을 클릭한 후 '등록'을 선택하세요. 3. 등록 정보 입력: 프롬프트에 따라 휴대폰 번호, 비밀번호, 인증 코드 및 기타 등록 정보를 입력합니다. 4. 개인정보 입력: 등록이 완료되면 안내에 따라 이름, 성별, 생일 등 개인정보를 입력하세요. 5. 설정

1. 먼저 NetEase Cloud Music에 들어간 다음 소프트웨어 홈페이지 인터페이스를 클릭하여 노래 재생 인터페이스로 들어갑니다. 2. 그런 다음 노래 재생 인터페이스에서 아래 그림의 빨간색 상자에 표시된 것처럼 오른쪽 상단에서 공유 기능 버튼을 찾아 공유 채널에서 공유 채널을 선택하고 다음 위치에서 "공유 대상" 옵션을 클릭합니다. 하단에서 첫 번째 "WeChat Moments"를 선택하면 WeChat Moments에 콘텐츠를 공유할 수 있습니다.

최근 Baidu Netdisk Android 클라이언트는 새로운 버전 8.0.0을 선보였습니다. 이 버전은 많은 변화를 가져올 뿐만 아니라 많은 실용적인 기능도 추가했습니다. 그 중 가장 눈길을 끄는 것은 폴더 공유 기능 강화다. 이제 사용자는 쉽게 친구를 초대하여 업무와 생활에서 중요한 파일을 공유하고 더욱 편리하게 협업하고 공유할 수 있습니다. 그렇다면 친구들과 공유해야 하는 파일을 어떻게 공유합니까? 아래에서 이 사이트의 편집자가 자세한 소개를 해줄 것입니다. 1) Baidu Cloud 앱을 열고 먼저 홈페이지에서 관련 폴더를 클릭한 다음 인터페이스 오른쪽 상단에 있는 [...] 아이콘을 클릭합니다(아래 참조). 2) 그런 다음에서 [+]를 클릭합니다. "공유 멤버" 열 ]을 선택하고 마지막으로 모두 확인합니다.

SpringDataJPA는 JPA 아키텍처를 기반으로 하며 매핑, ORM 및 트랜잭션 관리를 통해 데이터베이스와 상호 작용합니다. 해당 리포지토리는 CRUD 작업을 제공하고 파생 쿼리는 데이터베이스 액세스를 단순화합니다. 또한 지연 로딩을 사용하여 필요한 경우에만 데이터를 검색하므로 성능이 향상됩니다.

Bilibili(빌리빌리)는 중국 젊은이들 사이에서 큰 인기를 얻고 있는 동영상 공유 웹사이트로 많은 사용자를 유치하고 있습니다. 일부 사용자는 별도로 관리하고 사용할 수 있도록 두 개의 Bilibili 계정을 갖고 싶어합니다. 그렇다면 하나의 휴대폰 번호로 두 개의 B 사이트 번호를 등록하는 방법은 무엇입니까? 이 기사에서는 이 문제와 휴대폰 바인딩을 해제하는 방법에 중점을 둘 것입니다. 1. 하나의 휴대폰 번호로 두 개의 B 사이트 번호를 등록하는 방법은 무엇입니까? 1. 새 계정 등록: 먼저 휴대폰에서 Bilibili 앱을 열거나 공식 웹사이트에 로그인한 후 "등록" 버튼을 클릭하고 휴대폰 번호, 이메일 또는 제3자를 사용하여 등록 방법을 선택할 수 있습니다. 당사자 계정(예: WeChat, QQ 등)을 등록합니다. 2. 계정 등록 시 시스템 안내에 따라 휴대전화 번호, 인증번호, 비밀번호 설정 등 필요한 정보를 입력하세요. 반드시 다른 계정을 사용하세요
