1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,PHP,facebook,yahoo,Java,taobao,163,Python,google,.NET,MySpace,语言,不是可伸缩性的关键,,架构,才是关键,网站架构的目标,高可用性(,H,igh,A,vailability),可伸缩性(Scalability),高性能(High Performance),事务,传统的事务(
2、ACID),原子性(,A,tomicity,),一致性(,C,onsistency,),隔离性(,I,solation,),持久性(,D,urability,),CAP原则,C,onsistency 一致性,A,vailability 可用性,P,artition Tolerance分区耐受性,在任意时刻,只有两项能同时成立,不要浪费精力可能突破上面限制,可用性,一致性,分区耐受性,新的事务策略-BASE策略,避免分布式事务,基本可用(,B,asically,A,vailable),软状态(,S,oft state),选择最终一致(,E,ventually consistent),数据库读写分
3、离,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,
4、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改变数据库设计,尽量
5、避免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挂
6、了,但B继续可以使用),MQ产品,开源,RabbitMQ(Erlang),ActiveMQ(JAVA),商业,IBM MQ,WebLogic MQ,回顾CAP及BASE,可用性,一致性,分区容忍性,负载均衡,DNS负载均衡,反向代理负载均衡,直接路由,.,failover,DNS负载均衡,简单,缺少灵活性(DNS缓存),D:pythonDjango-1.1.1nslookup,Server:,Address:10.20.18.10,Non-authoritative answer:,Name:,Addresses:220.181.28.54,220.181.28.212,220.181.28.
7、50,220.181.28.51,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,地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到
8、内部网的哪个节点。优点是节省,IP,地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。,Virtual Server via IP Tunneling,(,VS-TUN,),用,IP,隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将,IP,包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的,VPN,,也可使用租用专线。集群所能提供的服务是基于,TCP/IP,的,Web,服务、,Mail,服务、,News,服务、,DNS,服务、,Proxy,服务器等等,Virtual Server via Direct Routing,(,
9、VS-DR,),用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。,高可用性,使用双机热备,故障时切换至备份机,工具(Linux-HA),heartbeat,缓存,让数据更靠近用户,DataBase,Memchched,App Cache,Page Cache/Static,Browse Cache,ThreeParty CDN,本地缓存,节点有状态,状态更新需要同步至其它服务器,可以使用组播方式通知数据改变,需要通知的服务器过多会存在性能问题
10、比远程缓存更高性能,慎用,不具备可伸缩性,S,hare,N,othing,A,rchitecture,无共享架构,数据缓存(memchched),动态内容缓存,浏览器缓存,数据缓存,分布式memchched,基本满足大部分性能要求,动态内容缓存,页面片段缓存,静态化内容,反向代理缓存,squid 巨无霸,Varnish,反向代理缓存,Varnish 缓存,tomcat,Nginx负载均衡,静态资源分离,img,js,css使用单独的服务器处理请求,apache httpd,tomcat,浏,览,器,静态资源,静态资源,动态请求,动态请求,动态请示,动态请示,现实网站图片存储分析,img,3,
11、b,9,img,08,.taobao,cdn,.com,t,3,图片服务器的域名不同,多台机器保存相同的图片(img3,img2子域名),同一页面不同图片随机生成不同的子域名进行负载均衡,CDN?,C,ontent,D,elivery,N,etwork,浏览器优化,节省带宽:js,css的静态gzip压缩,http header:Content-Encoding:gzip,浏览器缓存,http header:Etag,Last-Modified,小图片,css,js合并,js混淆工具,JSA(推荐),www.xidea.org/,js压缩,多个js合并为一个,可以与ant集成,Session,
12、cookie(强烈推荐),集中式session memcached(推荐),session复制(过多服务器复制存在性能问题),分布式文件系统,MogileFS,Automatic file replication,No single point of failure,自动化,总结,CAP原则,BASE策略,异步(MessageQueue),数据库,数据的水平切分及垂直切分,数据库读写分离,避免分布式事务,反范式的数据库设计,负载均衡,DNS负载均衡,反向代理负载均衡,LVS,缓存,数据库缓存,服务器缓存/页面缓存/数据缓存/静态化,反向代理缓存,Session/Share Nothing Architecture架构,浏览器优化,浏览器缓存/CDN/小图片合并,分布式文件系统(MogileFS),参考,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818