- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大规模网站架构
大规模网站架构
邱百超
badqiu(a)
PHP
facebook,yahoo
Java
taobao,163
Python
google
.NET
MySpace
语言不是可伸缩性的关键,架构才是关键
网站架构的目标
高可用性(High Availability)
可伸缩性(Scalability)
高性能(High Performance)
事务
传统的事务(ACID)
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
CAP原则
Consistency 一致性
Availability 可用性
Partition Tolerance分区耐受性
在任意时刻,只有两项能同时成立
不要浪费精力可能突破上面限制
可用性
一致性
分区耐受性
新的事务策略-BASE策略
避免分布式事务
基本可用(Basically Available)
软状态(Soft state)
选择最终一致(Eventually consistent)
数据库读写分离
MySQL Proxy(数据库读写分离)
load balancing
failover
query analysis
R/W Splitting
数据库Shard
水平分区
垂直分区
Sharding vs Partition
Sharding
Partition
存储依赖
可跨越DB
可跨越物理机器
可跨越表空间,不同的物理属性
不能跨DB存储
存储方式
分布式
集中式
扩展性
Scale Out(横向扩展,增加便宜设备)
Scale Up(升级设备)
可用性
无单点
存在单点(DB数据本身)
价格
低廉
适中,甚至昂贵
应用场景
web 2.0网站
多数传统应用
垂直分区
user
blog
App
DAL
水平分区
user 33%
user 33%
App
DAL
user 34%
水平分区
DAL(数据访问层)
对应用透明的使用数据库的水平分区及垂直分区
DAL Proxy(实现1)
应用
DAL 服务器
user
user
DAL API(实现2)
应用
DAL
user
user
两种实现方式
独立的DAL Proxy服务器
MySQL: Amoeba
PostgreSQL: PL/Proxy (Skype)
DAL API
Java: Hibernate Shard,Ibatis Shard,HiveDB
Python: Pyshards
shard改变数据库设计
尽量避免join
数据冗余/反范式
数据冗余 for shard
shard before
comment(id,blog_id,content)
shard after
comment(id,blog_id,content,user_id)
数据分区策略
水平分区
2 * N(如定单,购买者与网店各一份)
N / n (按日期或ID范围分区)
hash(N) % n( 按hash分)
查找表
垂直分区
按功能分(论坛,博客)
消息队列(MessageQueue)
程序解耦
隔离
消息的可靠传输(物理存储中转消息)
A
C
B
MQ
MQ
消息总线
应用场景
耗时操作
邮件发送/短消息发送
日志
程序解耦(A挂了,但B继续可以使用)
MQ产品
开源
RabbitMQ(Erlang)
ActiveMQ(JAVA)
商业
IBM MQ
WebLogic MQ
回顾CAP及BASE
可用性
一致性
分区容忍性
负载均衡
DNS负载均衡
反向代理负载均衡
直接路由
failover
DNS负载均衡
简单
缺少灵活性(DNS缓存)
D:\python\Django-1.1.1nslookup
Server:
Address: 0
Non-authoritative answer:
Name:
Addresses: 4, 12, 0, 1
Aliases:
反向代理负载均衡
负载均衡软件
nginx
HAProxy
apache httpd
LVS(网络第四层工作)
F5(硬件,四层/七层)
Linux Virtual Server(LVS)
网络地址转换(NAT):VS-NAT
IP隧道方式:VS-TUN
直接路由方式:VS-DR
其它工作模式
Virtual Server via NAT(VS-NAT)
用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。
Virtual Server
文档评论(0)