您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 大规模网站架构ppt博客园
大规模网站架构•PHP–facebook,yahoo•Java–taobao,163•Python–google•.NET–MySpace语言不是可伸缩性的关键,架构才是关键网站架构的目标•高可用性(HighAvailability)•可伸缩性(Scalability)•高性能(HighPerformance)事务传统的事务(ACID)•原子性(Atomicity)•一致性(Consistency)•隔离性(Isolation)•持久性(Durability)CAP原则•Consistency一致性•Availability可用性•PartitionTolerance分区耐受性•在任意时刻,只有两项能同时成立•不要浪费精力可能突破上面限制可用性一致性分区耐受性新的事务策略-BASE策略•避免分布式事务–基本可用(BasicallyAvailable)–软状态(Softstate)–选择最终一致(Eventuallyconsistent)数据库读写分离MySQLProxy(数据库读写分离)•loadbalancing•failover•queryanalysis•R/WSplitting数据库Shard•水平分区•垂直分区ShardingvsPartitionShardingPartition存储依赖可跨越DB可跨越物理机器可跨越表空间,不同的物理属性不能跨DB存储存储方式分布式集中式扩展性ScaleOut(横向扩展,增加便宜设备)ScaleUp(升级设备)可用性无单点存在单点(DB数据本身)价格低廉适中,甚至昂贵应用场景web2.0网站多数传统应用垂直分区userblogAppDAL水平分区user33%user33%AppDALuser34%水平分区DAL(数据访问层)•对应用透明的使用数据库的水平分区及垂直分区DALProxy(实现1)应用DAL服务器useruserDALAPI(实现2)应用DALuseruser两种实现方式•独立的DALProxy服务器–MySQL:Amoeba–PostgreSQL:PL/Proxy(Skype)•DALAPI–Java:HibernateShard,IbatisShard,HiveDB–Python:Pyshardsshard改变数据库设计•尽量避免join•数据冗余/反范式数据冗余forshard•shardbefore–comment(id,blog_id,content)•shardafter–comment(id,blog_id,content,user_id)数据分区策略•水平分区–2*N(如定单,购买者与网店各一份)–N/n(按日期或ID范围分区)–hash(N)%n(按hash分)–查找表•垂直分区–按功能分(论坛,博客)消息队列(MessageQueue)•程序解耦•隔离•消息的可靠传输(物理存储中转消息)ACMQMQ消息总线应用场景•耗时操作–邮件发送/短消息发送•日志•程序解耦(A挂了,但B继续可以使用)MQ产品•开源–RabbitMQ(Erlang)–ActiveMQ(JAVA)•商业–IBMMQ–WebLogicMQ回顾CAP及BASE可用性一致性分区容忍性负载均衡•DNS负载均衡•反向代理负载均衡•直接路由•......failoverDNS负载均衡•简单•缺少灵活性(DNS缓存)D:\python\Django-1.1.1nslookup:10.20.18.10Non-authoritativeanswer:Name::反向代理负载均衡•负载均衡软件–nginx–HAProxy–apachehttpd–LVS(网络第四层工作)–F5(硬件,四层/七层)LinuxVirtualServer(LVS)网络地址转换(NAT):VS-NATIP隧道方式:VS-TUN直接路由方式:VS-DR其它工作模式•VirtualServerviaNAT(VS-NAT)–用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。•VirtualServerviaIPTunneling(VS-TUN)–用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等.•VirtualServerviaDirectRouting(VS-DR)–用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。高可用性•使用双机热备•故障时切换至备份机•工具(Linux-HA)–heartbeat缓存•让数据更靠近用户DataBaseMemchchedAppCachePageCache/StaticBrowseCacheThreePartyCDN本地缓存•节点有状态,状态更新需要同步至其它服务器–可以使用组播方式通知数据改变–需要通知的服务器过多会存在性能问题•比远程缓存更高性能•慎用,不具备可伸缩性ShareNothingArchitecture•无共享架构•数据缓存(memchched)•动态内容缓存•浏览器缓存数据缓存•分布式memchched•基本满足大部分性能要求动态内容缓存•页面片段缓存•静态化内容反向代理缓存•squid巨无霸•Varnish反向代理缓存Varnish缓存tomcatNginx负载均衡静态资源分离•img,js,css使用单独的服务器处理请求apachehttpdtomcat浏览器静态资源静态资源动态请求动态请求动态请示动态请示现实网站图片存储分析•••••图片服务器的域名不同•多台机器保存相同的图片(img3,img2子域名)•同一页面不同图片随机生成不同的子域名进行负载均衡•CDN?ContentDeliveryNetwork浏览器优化•节省带宽:js,css的静态gzip压缩–httpheader:Content-Encoding:gzip•浏览器缓存–httpheader:Etag,Last-Modified•小图片,css,js合并js混淆工具•JSA(推荐)––js压缩–多个js合并为一个–可以与ant集成Session•cookie(强烈推荐)•集中式sessionmemcached(推荐)•session复制(过多服务器复制存在性能问题)分布式文件系统•MogileFS–Automaticfilereplication–Nosinglepointoffailure自动化总结•CAP原则•BASE策略•异步(MessageQueue)•数据库•数据的水平切分及垂直切分•数据库读写分离•避免分布式事务•反范式的数据库设计•负载均衡•DNS负载均衡•反向代理负载均衡•LVS•缓存•数据库缓存•服务器缓存/页面缓存/数据缓存/静态化•反向代理缓存•Session/ShareNothingArchitecture架构•浏览器优化•浏览器缓存/CDN/小图片合并•分布式文件系统(MogileFS)参考•••
本文标题:大规模网站架构ppt博客园
链接地址:https://www.777doc.com/doc-6131727 .html