• 1. 大规模网站架构邱百超 badqiu(a)gmail.com
  • 2. PHP facebook,yahoo Java taobao,163 Python google .NET MySpace
  • 3. 语言不是可伸缩性的关键,架构才是关键
  • 4. 网站架构的目标高可用性(High Availability) 可伸缩性(Scalability) 高性能(High Performance)
  • 5. 事务
  • 6. 传统的事务(ACID)原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)
  • 7. CAP原则Consistency 一致性 Availability 可用性 Partition Tolerance分区耐受性 在任意时刻,只有两项能同时成立 不要浪费精力可能突破上面限制可用性一致性 分区耐受性
  • 8. 新的事务策略-BASE策略避免分布式事务 基本可用(Basically Available) 软状态(Soft state) 选择最终一致(Eventually consistent)
  • 9. 数据库读写分离
  • 10. MySQL Proxy(数据库读写分离)load balancing failover query analysis R/W Splitting
  • 11. (本页无文本内容)
  • 12. 数据库Shard水平分区 垂直分区
  • 13. Sharding vs PartitionShardingPartition存储依赖可跨越DB 可跨越物理机器可跨越表空间,不同的物理属性 不能跨DB存储存储方式分布式集中式扩展性Scale Out(横向扩展,增加便宜设备)Scale Up(升级设备)可用性无单点存在单点(DB数据本身)价格低廉适中,甚至昂贵应用场景web 2.0网站多数传统应用
  • 14. 垂直分区userblogAppDAL
  • 15. 水平分区user 33%user 33%AppDALuser 34%
  • 16. 水平分区
  • 17. DAL(数据访问层)对应用透明的使用数据库的水平分区及垂直分区
  • 18. DAL Proxy(实现1)应用DAL 服务器useruser
  • 19. DAL API(实现2)应用DALuseruser
  • 20. 两种实现方式独立的DAL Proxy服务器 MySQL: Amoeba PostgreSQL: PL/Proxy (Skype) DAL API Java: Hibernate Shard,Ibatis Shard,HiveDB Python: Pyshards
  • 21. shard改变数据库设计尽量避免join 数据冗余/反范式
  • 22. 数据冗余 for shardshard before comment(id,blog_id,content) shard after comment(id,blog_id,content,user_id)
  • 23. 数据分区策略水平分区 2 * N(如定单,购买者与网店各一份) N / n (按日期或ID范围分区) hash(N) % n( 按hash分) 查找表 垂直分区 按功能分(论坛,博客)
  • 24. 消息队列(MessageQueue)程序解耦 隔离 消息的可靠传输(物理存储中转消息) ACBMQMQ
  • 25. 消息总线
  • 26. 应用场景耗时操作 邮件发送/短消息发送 日志 程序解耦(A挂了,但B继续可以使用)
  • 27. MQ产品开源 RabbitMQ(Erlang) ActiveMQ(JAVA) 商业 IBM MQ WebLogic MQ
  • 28. 回顾CAP及BASE可用性一致性 分区容忍性
  • 29. 负载均衡DNS负载均衡 反向代理负载均衡 直接路由 ......
  • 30. failover
  • 31. DNS负载均衡简单 缺少灵活性(DNS缓存)D:\python\Django-1.1.1>nslookup www.163.com Server: rdev1.rdev.kingsoft.net Address: 10.20.18.10 Non-authoritative answer: Name: www.cache.gslb.netease.com Addresses: 220.181.28.54, 220.181.28.212, 220.181.28.50, 220.181.28.51 Aliases: www.163.com
  • 32. 反向代理负载均衡负载均衡软件 nginx HAProxy apache httpd LVS(网络第四层工作) F5(硬件,四层/七层)
  • 33. Linux Virtual Server(LVS)
  • 34. 网络地址转换(NAT):VS-NAT
  • 35. IP隧道方式:VS-TUN
  • 36. 直接路由方式:VS-DR
  • 37. 其它工作模式Virtual Server via NAT(VS-NAT) 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。 Virtual Server via IP Tunneling (VS-TUN) 用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等. Virtual Server via Direct Routing(VS-DR) 用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
  • 38. 高可用性使用双机热备 故障时切换至备份机 工具(Linux-HA) heartbeat
  • 39. (本页无文本内容)
  • 40. 缓存让数据更靠近用户DataBaseMemchchedApp CachePage Cache/StaticBrowse CacheThreeParty CDN
  • 41. 本地缓存节点有状态,状态更新需要同步至其它服务器 可以使用组播方式通知数据改变 需要通知的服务器过多会存在性能问题 比远程缓存更高性能 慎用,不具备可伸缩性
  • 42. Share Nothing Architecture无共享架构
  • 43. 数据缓存(memchched) 动态内容缓存 浏览器缓存
  • 44. 数据缓存分布式memchched 基本满足大部分性能要求
  • 45. 动态内容缓存页面片段缓存 静态化内容
  • 46. 反向代理缓存squid 巨无霸 Varnish
  • 47. 反向代理缓存Varnish 缓存tomcatNginx负载均衡
  • 48. 静态资源分离img,js,css使用单独的服务器处理请求 apache httpdtomcat浏 览 器静态资源静态资源动态请求动态请求动态请示动态请示
  • 49. 现实网站图片存储分析http://img3.cache.netease.com http://b9.photo.store.qq.com http://img08.taobaocdn.com http://t3.gstatic.cn 图片服务器的域名不同 多台机器保存相同的图片(img3,img2子域名) 同一页面不同图片随机生成不同的子域名进行负载均衡 CDN ?
  • 50. Content Delivery Network
  • 51. 浏览器优化节省带宽:js,css的静态gzip压缩 http header: Content-Encoding: gzip 浏览器缓存 http header: Etag,Last-Modified 小图片,css,js合并
  • 52. js混淆工具JSA(推荐) http://www.xidea.org/ js压缩 多个js合并为一个 可以与ant集成
  • 53. Sessioncookie(强烈推荐) 集中式session memcached(推荐) session复制(过多服务器复制存在性能问题)
  • 54. 分布式文件系统MogileFS Automatic file replication No single point of failure
  • 55. 自动化
  • 56. 总结CAP原则 BASE策略 异步(MessageQueue) 数据库 数据的水平切分及垂直切分 数据库读写分离 避免分布式事务 反范式的数据库设计 负载均衡 DNS负载均衡 反向代理负载均衡 LVS 缓存 数据库缓存 服务器缓存/页面缓存/数据缓存/静态化 反向代理缓存 Session/Share Nothing Architecture架构 浏览器优化 浏览器缓存/CDN/小图片合并 分布式文件系统(MogileFS)
  • 57. (本页无文本内容)
  • 58. 参考http://www.dbanotes.net/arch/base_arch.html http://www.dbanotes.net/arch/cap.html http://www.infoq.com/cn/articles/ebay-scalability-best-practices
  • 59. (本页无文本内容)