`
lirig
  • 浏览: 237442 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

《又拍网架构中的分库设计》读后感

    博客分类:
  • Arch
阅读更多

今天看了周兆兆写的“又拍网架构中的分库设计”从受益不少,又拍网是一个照片分享社区,从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
5
1
分享到:
评论
2 楼 ilvice 2011-03-09  
用映射表的方式会増加一次DB操作,CACHE比较适合这种很少变更的映射数据
1 楼 ilvice 2011-03-09  
用hash和取模可能会影响后期新増DB

相关推荐

    又拍网架构中的分库设计

    ### 分库设计在又拍网架构中的应用 随着互联网技术的发展和用户数量的激增,Web 2.0网站面临的数据库压力越来越大。为了提高数据库的处理能力、减少响应时间并提高系统的可扩展性,分库设计成为了一种非常有效的...

    安全架构设计方法指南.pptx

    华为出品-安全架构设计方法指南,...华为安全架构设计方法流程示意图,安全架构设计方法支撑能力,安全架构设计原则,架构级安全威胁分析,安全架构设计的知识库,安全方案设计的抽象模型,安全方案设计的优秀实践等

    中台架构和实现读后感分享

    中台架构和实现读后感分享

    系统设计规范和模板word+pdf版(架构设计、概要设计、详细设计和数据库设计)

    在IT行业中,系统设计是软件开发过程中的关键环节,它涉及到架构设计、概要设计、详细设计和数据库设计等多个步骤。这些步骤都是确保项目成功、高效且可维护的关键。以下是对这些知识点的详细阐述: 1. **架构设计*...

    java 架构设计示例文档

    Java架构设计示例文档涉及的知识点众多,通常它旨在为读者提供一个关于如何设计高效、可扩展和可维护的Java应用架构的参考。文档可能包含以下几个核心部分:需求分析、系统设计、技术选型、模块划分、接口设计、安全...

    软考系统架构设计师教程(第4版)+历年系统架构设计师考试试题分类精解(综合知识篇)+历年系统架构设计师考试试题分类精解_案例分析与论文篇 三本全集

    6. 安全性设计:讲解系统架构中的安全策略,包括数据加密、访问控制、防火墙配置等,确保系统安全稳定运行。 7. 可扩展性和可用性:如何设计可扩展的架构,以应对未来可能的业务增长,同时保证系统的高可用性。 8....

    架构实战——软件架构设计的过程

    在现代软件开发中,软件架构设计扮演着至关重要的角色。良好的架构设计能够确保软件系统的可扩展性、可维护性和性能等关键特性。《架构实战——软件架构设计的过程》一书深入探讨了软件架构设计的方法论和技术实践,...

    京东应用架构设计与治理.pdf

    在数据架构中,京东采用水平扩展、垂直拆分、业务分片、水平拆分等策略: 1. **水平扩展**:通过多机集群提高并发能力,并实施读写分离,比如商品读库与商品写库的分离。 2. **垂直拆分**:按业务域划分系统,比如...

    系统架构设计师32小时通关1

    【系统架构设计师】是软件开发领域中的核心角色,他们承担着设计和规划复杂软件系统架构的任务,确保系统在技术上可行、高效,并满足业务需求。系统架构设计师不仅要具备深厚的技术底蕴,还需拥有良好的管理和协调...

    系统架构设计师-思维导图.pdf

    针对这个职位,思维导图被广泛地应用来组织和可视化设计过程中的关键要素,帮助设计师更加直观地理解和掌握架构设计的相关知识点。 首先,软件架构设计被视为软件系统的“布局谋篇”,这意味着它关注的是软件的整体...

    架构设计经典书籍

    在IT行业中,架构设计是构建复杂软件系统的关键环节,它涉及到如何组织和管理代码,以及如何确保系统的可扩展性、可维护性和性能。这两本经典书籍——《设计原本》和《架构之美》提供了深入的洞察力,帮助读者理解并...

    软件架构设计案例分析

    软件架构设计是软件工程领域中一个至关重要的方面,它涉及到软件系统的高层次结构和组件的组织方式。在这个案例分析中,我们从多个维度来探讨软件架构设计的细节和实践。 首先,软件架构是一个系统的抽象。它定义了...

    系统架构设计师教程.pdf

    根据提供的信息,我们可以推断这份文档“系统架构设计师教程.pdf”是关于系统架构设计方面的教程。由于提供的部分内容仅包含重复的网址(www.TopSage.com),我们无法从中直接获取具体的教学内容。因此,我们将基于...

    系统架构设计师教程 系统架构设计师教程

    系统架构设计师教程 系统架构设计师教程 系统架构设计师教程 系统架构设计师教程 系统架构设计师教程 系统架构设计师教程

    嵌入式系统软件架构设计.pdf

    比较全面的阐述嵌入式系统软件架构设计的资料,pdf版本,文字版,完整无广告。 本课程是针对嵌入式软件开发的特点,讨论架构设计的思路和方法。试图给大家提供一种思想,启发大家的思维。框架,自动化代码生成和...

    数据中心网络架构和设计指南

    数据中心 网络架构 数据中心设计指南 系统集成 讲义。

    系统架构设计师 第四版 高清 带书签

    适读人群 :本书可作为系统架构设计师和系统分析师的工作手册,也可作为软件设计师、数据库系统工程师和网络工程师进一步发展的学习用书,还可作为计算机专业教师的教学参考书。 近十年4个版本的更新,专注软考系统...

    百度林仕鼎:架构设计与架构师(演讲稿)ppt

    存储是架构设计中的重要组成部分,演讲稿中提到了几种典型的存储模型,包括基于文件、对象和表的存储结构,以及不同的访问模式如实时读写、批量写实时读、流式读和范围查询。此外,演讲稿还深入探讨了存储的矛盾之处...

Global site tag (gtag.js) - Google Analytics