今天看了周兆兆写的“又拍网架构中的分库设计”从受益不少,又拍网是一个照片分享社区,从2005年6月至今积累了260万用户,1.1亿张照片,目前的日访问量为200多万,一个网站经过精心经营一定有很大的改进。下面是“又拍网架构中的分库设计”几个要点。
尽量用开源产品
开源,免费都是我们最喜欢听的产品,无论在哪个技术领域。现在很多大型电子商务公司都大量使用开源产品,淘宝就是一个典型范例。现在好多web2网站都使用开源的,包括原来接触过豆瓣网架构,手机之家的架构,facebook架构等都是用大量开源产品又拍主要使用:包括MySQL、PHP、nginx、Python、memcached、redis、Solr、Hadoop和RabbitMQ等等。又拍网的服务器端开发语言主要是PHP和Python,其中PHP用于编写Web逻辑(通过HTTP和用户直接打交道), 而Python则主要用于开发内部服务和后台任务。在客户端则使用了大量的Javascript, 主要使用MooTools这个JS框架。 另外,把图片处理过程从PHP进程里独立出来变成一个服务。这个服务基于nginx,但是是作为nginx的一个模块而开放REST API。
数据库分库
通过主从数据库,分解压力,其实又拍从库主要是做备份。其实他们大可以做读写分离来减轻压力。不过使用了memcached来减轻压力,还是不错的选择。把相对变化比较小的query数据放到memcached中。
我到建议他们开发独立的搜索引擎系统。
数据水平划分
数据垂直划分很简单,把数据安装业务分开,又拍使用的按功能模块拆分,比如可以将群组相关表和照片相关表存放在不同的数据库中,这种方式多个数据库之间的表结构不同。
水平划分
水平划分是将原来一个库的数据划分到多个不同的数据库中,每个库的表结构完全一样。在文档中题了几种划分方式:按照奇偶ID;按照id大小范围,一定范围在一个库;建立映射关系表,又拍就是采用了该方法。通过memcached保存关系表来提高访问速度。
其实水平划分规则还有很多,也可以采取“Memcached Consistent Hashin”方法。还可以通过数字取取模等。
又拍总结了几条水平划分后出现的问题:不能执行跨库的关联查询;不能保证数据的一致/完整性;所有查询必须提供数据库线索;自增ID不能唯一。其实我倒不觉得是问题,根据业务的可以容忍度来做相应的处理就达到比较好的效果了。
在文档中没有提及图片是怎么存储的,我想又拍应该也开发了和豆瓣网差不多的图片存储系统(豆瓣使用doubanfs)。
看完又拍架构文章后受益不少,任何一个成功的网站都是通过技术人员不断耕耘,用加班和熬夜换来的成果,有苦有乐,从中获取的不是切身不能体会。
感谢周兆兆的分享,文档地址:http://www.infoq.com/cn/articles/yupoo-partition-database
- 大小: 13.9 KB
分享到:
相关推荐
### 分库设计在又拍网架构中的应用 随着互联网技术的发展和用户数量的激增,Web 2.0网站面临的数据库压力越来越大。为了提高数据库的处理能力、减少响应时间并提高系统的可扩展性,分库设计成为了一种非常有效的...
### 系统架构设计师教程第二版知识点概览 #### 一、系统架构设计师的基本要求与基础知识 1. **绪论**: - 系统架构设计师的职业定位和发展趋势。 - 系统架构设计师应具备的基本素质和技术能力。 2. **计算机...
本书从基本原理入手,介绍软件架构设计过程中涉及的一些概念、流程、方法、用到的工作产品及可重用的资源,从第6章开始,通过介绍一个具体的案例来阐述如 何定义需求、创建逻辑架构、创建物理架构。在第10章“进阶”...
《系统架构设计师考试全程指导》是一本专门为全国计算机技术与软件专业技术资格(水平)考试中的系统架构设计师级别考试编写的参考书。这本书由希赛IT教育研发中心组织编写,由张友生和王勇主编,根据2009版大纲进行...
在现代软件开发中,软件架构设计扮演着至关重要的角色。良好的架构设计能够确保软件系统的可扩展性、可维护性和性能等关键特性。《架构实战——软件架构设计的过程》一书深入探讨了软件架构设计的方法论和技术实践,...
【系统架构设计师】是软件开发领域中的核心角色,他们承担着设计和规划复杂软件系统架构的任务,确保系统在技术上可行、高效,并满足业务需求。系统架构设计师不仅要具备深厚的技术底蕴,还需拥有良好的管理和协调...
在IT行业中,架构设计是构建复杂软件系统的关键环节,它涉及到如何组织和管理代码,以及如何确保系统的可扩展性、可维护性和性能。这两本经典书籍——《设计原本》和《架构之美》提供了深入的洞察力,帮助读者理解并...
根据提供的信息,我们可以推断这份文档“系统架构设计师教程.pdf”是关于系统架构设计方面的教程。由于提供的部分内容仅包含重复的网址(www.TopSage.com),我们无法从中直接获取具体的教学内容。因此,我们将基于...
软件架构设计说明书中的架构设计目标与约束是指软件架构设计过程中需要考虑的各种约束和目标。这些约束和目标包括关键功能需求、关键质量需求、开发策略等。其中,关键功能需求是指软件需要实现的主要功能,例如图书...
MySQL分库分表是数据库架构设计中用于处理大规模数据量以及高并发请求的一种技术手段。通过将数据拆分到不同的数据库服务器中,能够有效降低单个数据库的负载,提高系统的扩展性和性能。Python作为一种流行的编程...
存储是架构设计中的重要组成部分,演讲稿中提到了几种典型的存储模型,包括基于文件、对象和表的存储结构,以及不同的访问模式如实时读写、批量写实时读、流式读和范围查询。此外,演讲稿还深入探讨了存储的矛盾之处...
2. **数据管理与数据库设计**:在这一部分,作者讨论了数据在系统架构中的重要性,涵盖了关系型数据库、非关系型数据库(NoSQL)以及数据存储的最佳实践。同时,还介绍了数据一致性、事务处理和数据安全等相关概念。...
本书是系统架构设计师教程,涵盖了计算机组成与体系结构、操作系统、数据库系统、计算机网络、系统性能评价、开发方法、系统规划、系统分析与设计方法等多个方面的知识。 在计算机组成与体系结构方面,本书详细介绍...
《系统架构设计师教程(第2版)-希赛版》是一本专注于系统架构师考试的学习资料,由希赛教育编写,2009年发行了第二版,全书共计670页,是系统架构领域的重要参考资料。本书适合于参加软考(软件和信息技术服务业...
支付包支付架构设计图;Java开发支付架构;阿里架构设计;分布式事务解决方案;
架构设计目标 (Goals) 架构分类 (Categories) 企业级应用架构 (Enterprise Architecture) 架构组成 (Constitution) 架构设计原则 (SOA) 架构实现方法论 (Methodology) 火龙果架构培养体系 企业级架构案例...