SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
互联网分布式系统架构分享
       54chen (陈臻) @ Qcon
           czhttp@gmail.com
      http://www.54chen.com
                  2011-04-10
互联网在中国

1987年第一封电子邮件:穿越长城,走向
世界
分布式系统:近几年发展活跃
常见的搭配
             mySQL
             Memcached




•大量数据放在内存中
•极致优化mySQL
•读写数据有套路
Mysql-memcached搭配-读

 先从memcached读取
 如果有值,返回
 如果无值,从mysql读取,返回并写
 memcache
Mysql-memcached搭配-写




 写入mysql,产生对应的key后删除
 memcache的值




而节点之间的关系又如何呢?
Memcached节点间

          读取加速
          一致性hash
          失效影响只到部分数据
          读多写少:凑合
Mysql上动作




  同步备份
  大多数一主多从
  垂直划分业务,多个一主多从
  读多写少:凑合。
即便如此

使用mysql
还需要
在代码中
小心翼翼

请看示例
小心翼翼的使用举例-忘记where
举例:delete from table_name
应该:delete from table_name where id = ?
习惯性加上limit
操作之前:
 连对机器了么?写条件了么?要备份么?
小心翼翼的使用举例-操作列
举例:date(time_column) = “2009-06-09”
应该:date between “2009-06-09 00:00:00” and “2009-06-09 23:59:59”
举例:timestamp + 3600 > unix_timestamp()
应该:timestamp > unix_timestamp() – 3600
举例:order by view_count + post_count * 5
应该:单搞一列叫weight
小心翼翼的使用举例-忘记引号
      mobile varchar(14) not null
      举例:where mobile = 13800138000
      应该: where mobile = “13800138000”
小心翼翼的使用举例-limit的问题
举例:select * from table limit limit 60000000, 100
应该:select * from table where id>60000000 limit 100
小心翼翼的使用举例-rand的问题
举例:select * from online_user order by rand() limit
100
应该:
  select * from online_user where page = $rand_page
  select * from online_user where id > $rand_pos limit 100
  select * from online_user + memcached …
任何一个不小心




Mysql锁死
速度慢
负载高
让coding更加轻松

不担心
够放心
睡安心
Dynamo

 去年很热的no-sql
 Key-value
 非常不错的各种实现
进入Dynamo的世界

一致性哈希
CAP原则
Merkle Tree
Gossip协议
hinted handoff数据
向量时钟
进入Dynamo的世界


目标:99.9%的请求延迟要在300毫秒以内
数据同步与负载均衡
一致性哈希

保障数据在有节点变动时影响范围最小
Dynamo设计时,使用了虚拟节点的概念
虚拟节点
虚拟节点让负载均衡
即便有节点变动也负载均衡
CAP原则
Consistency(一致性)
Consistency(一致性)
Availability(可用性)
Availability(可用性)
          tolerance(分区容错性)
Partition tolerance(分区容错性)
定理:任何分布式系统只可同时满足二点,没法三者兼顾。

忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。



NRW: Dynamo的CAP
NRW

N:复制的次数;
R:读数据的最小节点数;
W:写成功的最小分区数。
NRW:这三个数的具体作用
用来灵活地调整Dynamo系统的可用性与一致性。
例:
如果R=1,表示最少只需要去一个节点读数据即可,读到即返回,这
时是可用性是很高的,但并不能保证数据的一致性,
如果说W同时为1,那可用性更新是最高的一种情况,但这时完全不
能保障数据的一致性,因为在可供复制的N个节点里,只需要写成功
一次就返回了,也就意味着,有可能在读的这一次并没有真正读到需
要的数据(一致性相当的不好)。
如果W=R=N=3,每次写的时候,都保证所有要复制的点都写成功,
读的时候也是都读到,这样子读出来的数据一定是正确的,但是其性
能大打折扣,也就是说,数据的一致性非常的高,但系统的可用性却
非常低了。
如果R + W > N能够保证我们“读我们所写”,Dynamo推荐使用322的
组合。
Merkle Tree
 将每一个数据对应的key-value建立成一个hash tree
 微小的变化也会引发顶层的不一致
 用来通知各同步节点之间的分区数据变化
Gossip协议


当集群里的一个节点出现故障
或者增加一个节点
周知各节点的协议
什么是Gossip协议?
什么是Gossip协议?
hinted handoff数据

 当集群里的一个节点出现故障
 数据自动进入临近的节点handoff区
 收到恢复通知后自动恢复handoff数据
向量时钟 vector clock
 在写入数据时,各个节点对数据本身都一个向量记录
 在读取多个节点时,进行向量计算从而得出最正确结果


[a,1]
a节点 时钟计数1

[b,2]
b节点 时钟计数2
向量时钟 vector clock
 在写入数据时,各个节点对数据本身都一个向量记录
 在读取多个节点时,进行向量计算从而得出最正确结果


[a,1]
a节点 时钟计数1

[b,2]
b节点 时钟计数2
这些,构成Dynamo
然后是cassandra

 Facebook出品 2008年开源
 Cassandra最初作者Avinash Lakshman
 (Amazon's Dynamo的作者之一)
Cassandra偷懒的地方




大分区
Cassandra未用vector clock,而只用
client timestamps 简化了冲突选择
Cassandra牛X的地方

实现了bigTable
数据模型
基于列族
(Column Family)
然后是voldemort




LinkedIn出品
重点在使用Hadoop存放收集整理数据
定死了节点数量
国内一些dynamo产品

人人网nuclear
豆瓣beansdb
淘宝Tair
新浪sina-sdd
…
感谢始祖
Thanks
      54chen(陈臻)
   czhttp@gmail.com
http://www.54chen.com

Weitere ähnliche Inhalte

Andere mochten auch

分布式系统浅谈
分布式系统浅谈分布式系统浅谈
分布式系统浅谈song_son
 
Qq game后台架构及开发介绍
Qq game后台架构及开发介绍Qq game后台架构及开发介绍
Qq game后台架构及开发介绍mysqlops
 
ssdc-移动互联网技术挑战
ssdc-移动互联网技术挑战ssdc-移动互联网技术挑战
ssdc-移动互联网技术挑战zhen chen
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立Dahui Feng
 
MongoDB's index and query optimize
MongoDB's index and query optimizeMongoDB's index and query optimize
MongoDB's index and query optimizemysqlops
 
基于用户行为的数据分析
基于用户行为的数据分析基于用户行为的数据分析
基于用户行为的数据分析mysqlops
 

Andere mochten auch (7)

分布式系统浅谈
分布式系统浅谈分布式系统浅谈
分布式系统浅谈
 
Qq game后台架构及开发介绍
Qq game后台架构及开发介绍Qq game后台架构及开发介绍
Qq game后台架构及开发介绍
 
ssdc-移动互联网技术挑战
ssdc-移动互联网技术挑战ssdc-移动互联网技术挑战
ssdc-移动互联网技术挑战
 
What is new in JUnit5
What is new in JUnit5What is new in JUnit5
What is new in JUnit5
 
面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立面向生产环境的SOA系统设计 by 程立
面向生产环境的SOA系统设计 by 程立
 
MongoDB's index and query optimize
MongoDB's index and query optimizeMongoDB's index and query optimize
MongoDB's index and query optimize
 
基于用户行为的数据分析
基于用户行为的数据分析基于用户行为的数据分析
基于用户行为的数据分析
 

Ähnlich wie 互联网分布式系统架构分享-Qcon2011

Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 
MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理Michael Zhang
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理Lixun Peng
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江thinkinlamp
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysqlpwesh
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationisnull
 
Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Yousri Yan
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规isnull
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规mysqlops
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化向 翔
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍mysqlops
 

Ähnlich wie 互联网分布式系统架构分享-Qcon2011 (20)

Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理MySQL基础技能与原理——基本原理
MySQL基础技能与原理——基本原理
 
内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理内部MySQL培训.3.基本原理
内部MySQL培训.3.基本原理
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江2011 06-12-lamp-mysql-顾春江
2011 06-12-lamp-mysql-顾春江
 
2011 06-12-lamp-mysql
2011 06-12-lamp-mysql2011 06-12-lamp-mysql
2011 06-12-lamp-mysql
 
Mysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimizationMysql introduction-and-performance-optimization
Mysql introduction-and-performance-optimization
 
Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整Mysql数据库开发的三十六条军规 石展_完整
Mysql数据库开发的三十六条军规 石展_完整
 
My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规My sql数据库开发的三十六条军规
My sql数据库开发的三十六条军规
 
MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规MySQL数据库开发的三十六条军规
MySQL数据库开发的三十六条军规
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化Sql Server 高级技巧系列之三整体优化
Sql Server 高级技巧系列之三整体优化
 
众行业公司系统架构案例介绍
众行业公司系统架构案例介绍众行业公司系统架构案例介绍
众行业公司系统架构案例介绍
 

Mehr von Yiwei Ma

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconYiwei Ma
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconYiwei Ma
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconYiwei Ma
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qconYiwei Ma
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconYiwei Ma
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qconYiwei Ma
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qconYiwei Ma
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qconYiwei Ma
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconYiwei Ma
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qconYiwei Ma
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qconYiwei Ma
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconYiwei Ma
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qconYiwei Ma
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qconYiwei Ma
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qconYiwei Ma
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011Yiwei Ma
 

Mehr von Yiwei Ma (20)

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
 
Alibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qconAlibaba server-zhangxuseng-qcon
Alibaba server-zhangxuseng-qcon
 
Zhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qconZhongxing practice-suchunshan-qcon
Zhongxing practice-suchunshan-qcon
 
Taobao practice-liyu-qcon
Taobao practice-liyu-qconTaobao practice-liyu-qcon
Taobao practice-liyu-qcon
 
Thoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qconThoughtworks practice-hukai-qcon
Thoughtworks practice-hukai-qcon
 
Ufida design-chijianqiang-qcon
Ufida design-chijianqiang-qconUfida design-chijianqiang-qcon
Ufida design-chijianqiang-qcon
 
Spring design-juergen-qcon
Spring design-juergen-qconSpring design-juergen-qcon
Spring design-juergen-qcon
 
Netflix web-adrian-qcon
Netflix web-adrian-qconNetflix web-adrian-qcon
Netflix web-adrian-qcon
 
Google arch-fangkun-qcon
Google arch-fangkun-qconGoogle arch-fangkun-qcon
Google arch-fangkun-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Alibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qconAlibaba arch-jiangtao-qcon
Alibaba arch-jiangtao-qcon
 
Twitter keynote-evan-qcon
Twitter keynote-evan-qconTwitter keynote-evan-qcon
Twitter keynote-evan-qcon
 
Netflix keynote-adrian-qcon
Netflix keynote-adrian-qconNetflix keynote-adrian-qcon
Netflix keynote-adrian-qcon
 
Facebook keynote-nicolas-qcon
Facebook keynote-nicolas-qconFacebook keynote-nicolas-qcon
Facebook keynote-nicolas-qcon
 
Domainlang keynote-eric-qcon
Domainlang keynote-eric-qconDomainlang keynote-eric-qcon
Domainlang keynote-eric-qcon
 
Devjam keynote-david-qcon
Devjam keynote-david-qconDevjam keynote-david-qcon
Devjam keynote-david-qcon
 
Baidu keynote-wubo-qcon
Baidu keynote-wubo-qconBaidu keynote-wubo-qcon
Baidu keynote-wubo-qcon
 
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011淘宝线上线下性能跟踪体系和容量规划-Qcon2011
淘宝线上线下性能跟踪体系和容量规划-Qcon2011
 

互联网分布式系统架构分享-Qcon2011