1、分布式系统分布式系统“大型大型”网网站架构设计站架构设计2大型网站架构的目标与挑战网站架构演变及其技术脉络架构设计理论与原则讨论及总结3大型网站架构的目标与挑战何谓“大型”网站?网站日均流量IP/PVIP 5,972,587 PV 9,376,IP229,680,000 PV2,955,981,IP25,680,000 PV222,132,IP5,532,000 PV25,723,IP300,000 PV747,000没有统一的判断标准,流量大小是一个重要指标日均流量至少IP1,000,000才算大型网站4大型网站架构的目标与挑战何谓“大型”网站?网站内容是否“动态”才是关键5大型网站架构的目
2、标与挑战网站架构目标与挑战 每个目标背后面临着技术、设计、维护等诸多方面的挑战。 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。负载均衡数据备份异地容灾。高速缓存并行计算异地镜像。开发框架多层设计业务分割。6大型网站架构的目标与挑战网站架构演变及其技术脉络架构设计理论与原则讨论及总结7 LAMPLinuxApache (or LightHTTPd, Nginx)MySQL (or Postgres)PHP (or Perl, Python, Ruby) 开源 良好的社区支持 可应用于大型系统LAMP网站架构演变及其技术脉络8InternetLinuxAp
3、achePHP, Python, Perl.MySQLAppScriptLAMP网站架构演变及其技术脉络9LAMP网站调用流程网站架构演变及其技术脉络10大量网站使用 Top 20 中绝大部分网站Microsoft, Google and Chinese sites 例如: Digg (Apache, PHP, MySQL) Wikipedia (Apache, PHP, MySQL) Yahoo (Apache, PHP, MySQL) WordP (PHP, MySQL) Youtube (Apache)谁使用LAMP网站架构演变及其技术脉络11Step0 基于LAMP的Webserver
4、网站架构演变及其技术脉络12Step1Web动静态资源分离及其与DB物理分离n优点:“简单”、安全性提高n缺点:存在单点,谈不上高可用性(high availability架构目标)n技术点:应用设计要保证可扩展(framework很重要Spring/Beetle)、Web Server动/静态资源分离Web Server(ApacheNginxIISJBoss)、Database Server(MysqlOracleRedis)网站架构演变及其技术脉络13Step1技术点Web动静态资源分离img,doc,js,css等静态资源使用单独的Web HTTP Server处理请求动态页面静态化处
5、理网站架构演变及其技术脉络14Step1技术点动态页面静态化处理网站架构演变及其技术脉络MySQL15Step1技术点动态页面静态化处理网站架构演变及其技术脉络img,js,css使用单独的服务器处理请求apache httpdtomcat浏览器静态资源静态资源动态请求动态请求动态请示动态请示16Step1技术点动态页面静态化处理网站架构演变及其技术脉络现实网站图片存储分析 http:/ http:/ http:/ http:/ 图片服务器的域名不同 多台机器保存相同的图片(img3,img2子域名) 同一页面不同图片随机生成不同的子域名进行负载均衡17Step2采取缓存处理n优点:简单有效、
6、维护方便n缺点:依然存在单点n技术点:客户端(浏览器)缓存、前端页面缓存、页面片段缓存、本地数据缓存/数据库缓存网站架构演变及其技术脉络减少对网站的访问减少对Web应用服务器的请求减少对数据库的查询减少文件系统I/O操作18Step2技术点客户端(浏览器)缓存技术点说明根据HTTP协议特性,修改Header参数(Cache-Control、Expires、Pragma、Last-Modified、Etag),让浏览器来缓存页面(一些优秀开发框架会对此做透明的封装,例如:Beetle)http:/www.w3.org/Protocols/rfc2616/rfc2616-sec14.html使用H
7、TTP1.1协议,由于http pipelining技术特性,能够使用get请求的决不采取post请求为了节约带宽,压缩页面(Content-Encoding: gzip);页面各个元素能“小”即“小”,例如:js包压缩,js合并,图片压缩等会话状态信息采取Cookie代替传统使用服务器Sessions对象存储习惯做法;使用Ajax实现页面局部刷新如果可能,可采取浏览器插件技术突破浏览器功能限制,将原本在服务器端运算,尽量迁到浏览器端。ActiveX/Applet/Flash/.能够让浏览器缓存的数据一定要缓存;浏览器能够处理的运算,决不放在服务器端来处理。网站架构演变及其技术脉络19Step
8、2技术点前端页面缓存采用具备缓存功能的http反向代理服务器作前端页面缓存器,VarnishSquidNcacheAiCache(商业)【硬件F5】网站架构演变及其技术脉络20Step2技术点页面片段缓存ESI(Edge Side Includes)ESI需要服务器端支持,常见apache(mod_esi)、WebLogic、JSP标签库(JESI)等。网站架构演变及其技术脉络21Step2技术点本地数据缓存需要从数据库系统和Web应用服务器两个层面考虑缓存优化网站架构演变及其技术脉络技术点说明关系数据库系统(如:OracleMySql)Query Cache策略:一般以sql为key来缓存查
9、询结果,尽量不要拼sql,使用PreparedStatement的“?”模式sql;Query Cache大小要根据数据库系统具体情况合理设置,过大只会浪费内存,参考值:128M关系数据库系统Data Buffer策略:就是数据库数据内存缓存器,其访问命中率决定数据库性能,可根据实际物理内存大小适量增大,如:MySql建议buffer值为物理内存60-80%应用服务器Cache包括:对象缓存(例如:对象线程安全,做成单例),更新频率不大数据考虑缓存(如:基表数据、配置文件信息),考虑使用线程池,对象池,连接池等常见java解决方案:mapOSCacheEHCache等22Step3技术点负载均
10、衡网站架构演变及其技术脉络 DNS负载均衡n 简单n 缺少灵活性(DNS缓存)D:pythonDjango-1.1.1nslookup Server: Address: 2001:470:20:2Non-authoritative answer:Name: Addresses: 8.37.233.6, 8.37.233.2, 8.37.233.4, 8.37.233.5Aliases: Step3技术点负载均衡网站架构演变及其技术脉络24RequestsTo Client BrowserForwardsRequestS1S2S3S4S5S6W(S1) W(S2) W(S3) W(S6)Ar(S
11、1) Ar(S2) Ar(S3) Ar(S6)Step3技术点负载均衡网站架构演变及其技术脉络 反向代理负载均衡 负载均衡软件/硬件 nginx HAProxy apache httpd LVS(网络第四层工作) F5(硬件,四层/七层)Step3技术点负载均衡网站架构演变及其技术脉络Step3技术点负载均衡网站架构演变及其技术脉络Linux Virtual Server(LVS)Step3技术点负载均衡网站架构演变及其技术脉络网络地址转换(NAT):VS-NAT用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本
12、身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。Step3技术点负载均衡网站架构演变及其技术脉络IP隧道方式:VS-TUN用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等29Step3技术点负载均衡网站架构演变及其技术脉络直接路由方式:VS-DR
13、用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。30类型说明DNS负载均衡实现简单、有Cache缺乏灵活性,但对分区域(如构建CDN方案)访问简单有效反向代理软件HAProxy、Nginx、Apache、Lighttpd等硬件产品F5、NetScaler等LVS(Linux Virtual Server)http:/www.linuxvirtualserver.org/SMART Client自己写代码某些情况下简单有效Step3技术点负载均
14、衡网站架构演变及其技术脉络31Step4增加机器做HA、数据库读写分离网站架构演变及其技术脉络n优点:增加服务器和HA机制,系统性能及可用性得到保证n缺点:读写分离,增加程序难度,架构变复杂,维护难度增加n技术点:负载均衡、DAL、数据库读写分离32Step4技术点高可用性HA网站架构演变及其技术脉络使用双机热备故障时切换至备份机工具(Linux-HA)heartbeat33Step4技术点数据库读写分离及DAL(数据访问层)网站架构演变及其技术脉络读写分离逻辑分批负载均衡失效转移(failover)数据库分区透明支持两大实现模式:独立Proxy服务器;单独API库文件各个数据库厂商都有自己复
15、制方案常见通用方案:ETL、GoldenGateTJS34Step4技术点DAL(数据访问层)网站架构演变及其技术脉络对应用透明的使用数据库的水平分区及垂直分区应用DAL 服务器useruserDAL Proxy(实现1)35Step4技术点DAL(数据访问层)网站架构演变及其技术脉络对应用透明的使用数据库的水平分区及垂直分区DAL Proxy(实现2)应用应用DALuseruser36Step4技术点DAL(数据访问层)网站架构演变及其技术脉络 独立的DAL Proxy服务器 MySQL: Amoeba PostgreSQL: PL/Proxy (Skype) DAL API Java: H
16、ibernate Shard,Ibatis Shard,HiveDB Python: Pyshards37Step5CDN、分布式缓存、分库网站架构演变及其技术脉络n优点:异地缓存有效解决不同地方用户访问过慢的问题;分库策略带来网站性能整体提升n缺点:成本大幅增加,架构进一步复杂化,也维护难度进一步增大,架构开始臃肿了n技术点:CDN、分布式缓存、Shard分库38Step5技术点CDN网站架构演变及其技术脉络nCDN(Content Delivery Network)内容分发网络n将网站的内容分发到最接近用户的网络“边缘”,使用户可以就近获取,从而解决互联网网络拥挤的状况,提高用户访问的响应
17、速度。n适合静态内容很多(如:静态页面、图片、视频等)及页面内容实时性要求不高的网站,如:新闻类门户网站nCDN构建可以做的很简单,也可以很复杂,主要根据自己网站实际情况而定39Step5技术点CDN网站架构演变及其技术脉络Akamai Statistics Distributed servers Servers: 100,000 Networks: 1,000 Countries: 70 Many customers Apple, BBC, FOX, GM IBM, MTV, NASA, NBC, NFL, NPR, Puma, Red Bull, Rutgers, SAP, Client
18、requests Hundreds of billions per day Half in the top 45 networks 15-20% of all Web traffic worldwideReference:http:/www.cs.princeton.edu/courses/archive/spr13/cos461/40Step5技术点CDN网站架构演变及其技术脉络How Akamai works? (content provider)DNS root server12Nearby Akamai clusterGET index.htmlhttp:/ global DNS se
19、rverAkamai regionalDNS serverEnd userReference:http:/www.cs.princeton.edu/courses/archive/spr13/cos461/ (content provider)DNS TLD server12Nearby Akamai clusterDNS lookup Akamaicluster34ALIAS:Akamai global DNS serverAkamai regionalDNS serverEnd userStep5技术点CDN网站架构演变及其技术脉络How Akamai works?42Step5技术点CD
20、N网站架构演变及其技术脉络How Akamai works? (content provider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverNearby Akamai clusterAkamaicluster3465ALIASDNS End (content provider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverNearby Akamai clusterAkamaicluster346587DNS Address1
21、.2.3.4End userStep5技术点CDN网站架构演变及其技术脉络How Akamai works?44Step5技术点CDN网站架构演变及其技术脉络How Akamai works? (content provider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverNearby Akamai clusterAkamaicluster3465879GET /foo.jpgHost: End user45Step5技术点CDN网站架构演变及其技术脉络How Akamai works? (content p
22、rovider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverNearby Akamai clusterAkamaicluster3465879GET /foo.jpgHost: 1211GET foo.jpgEnd user46Step5技术点CDN网站架构演变及其技术脉络How Akamai works? (content provider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverAkamaicluster346587
23、9121110End userNearby Akamai cluster47Step5技术点CDN网站架构演变及其技术脉络How Akamai works? Cache H (content provider)DNS TLD server12Akamai global DNS serverAkamai regionalDNS serverNearby Akamai clusterAkamaicluster4356End user48Step5技术点分布式缓存网站架构演变及其技术脉络n本地缓存性能优秀,但容量有限,无伸缩性n采用分布式缓存方案突破容量限制,具备良好伸缩性;但分布式涉及远程网络通信
24、消耗其性能本地缓存来得优秀,并可涉及节点状态维护及数据复制问题,其稳定性和可靠性是个挑战。n目前流行分布式缓存方案:memcached、membase、redis等,基本上当前的NoSQL方案都可以用来做分布式缓存方案49Memcached介绍:什么是Memcached?Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。LiveJournal 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目。官方网站
25、:http:/ 原理和使用详解,heiyeluren(黑夜路人)50Memcached介绍Memcached运行图51Memcached介绍谁在用Memcached?国外 国内52Memcached介绍与Memcached类似的还有什么?国外 Tokyo Cabinet:http:/ (日本mixi.jp公司开发)国内MemcacheDB:http:/memcachedb.org (新浪开源Team开发)tmcache: http:/ (heiyeluren(黑夜路人) )53Memcached介绍Memcached的主要特点基于C/S架构,协议简单基于libevent的事件处理自主内存存储处
26、理基于客户端的Memcached分布式54Memcached介绍基于C/S架构,协议简单55Memcached介绍基于libevent的事件处理libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。包装的接口包括:poll、select(Windows)、epoll(Linux)、kqueue(BSD)、/dev/pool(Solaris)Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。libevent: http:/www.
27、monkey.org/provos/libevent/56Memcached介绍自主的内存存储处理 数据存储方式:Slab Allocation 数据过期方式:Lazy Expiration + LRU57Memcached介绍数据存储方式:Slab AllocationSlab Alloction 构造图Slab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。Slab Allocation的原理相当简单。 将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)58Memcached介绍数据存储方式:
28、Slab AllocationSlab Classes 分配图Page:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大小切分成chunk。Chunk:用于缓存记录的内存空间。Slab Class:特定大小的chunk的组。memcached根据收到的数据的大小,选择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然后将数据缓存于其中。59Memcached介绍:数据存储方式:Slab AllocationSlab Alloction 缺点这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内
29、存。例如,将100字节的数据缓存到128字节的chunk中,剩余的28字节就浪费了。60Memcached介绍:数据过期方式 Lazy Expirationmemcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间。 LRUmemcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当
30、memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。61Memcached介绍:基于客户端的Memcached分布式62Memcached介绍:基于客户端的Memcached分布式/按照Key值,获取一个服务器IDint getServerId(char *key, int serverTotal) int c, hash = 0; while (c = *key+) hash += c; return hash % serverTotal;/服务器列表node0 =
31、192.168.0.1:11211node1 = 192.168.0.2:11211node2 = 192.168.0.3:11211/获取key是tokyo的节点ID(服务器ID)int id = getServerId(test, 3);/得出的结果是1,那么对应的机器就是 nodeid = node163Memcached介绍:基于客户端的Memcached分布式 写入操作 读取操作64Step5技术点分库网站架构演变及其技术脉络n读写分离(简单有效,前面已介绍)n垂直分区良好的松耦合的模块化设计是垂直分库的前提65Step5技术点分库网站架构演变及其技术脉络n水平分区(Shard)分片
32、Key识别(划分检索依据)是关键是否还有其它招?用NoSql数据库部分替换关系数据库66Step5技术点分库网站架构演变及其技术脉络n水平分区(Shard)67Step5技术点分库网站架构演变及其技术脉络 shard改变数据库设计 尽量避免join 数据冗余/反范式 shard before comment(id,blog_id,content) shard after comment(id,blog_id,content,user_id)68Step6多个数据中心,向分布式存储和计算的架构体系迈进网站架构演变及其技术脉络n优点:多数据中心,带来更高质量区域服务体验;分布式存储及计算架构有效解
33、决pb级数据量存储、检索及计算性能问题n缺点:架构复杂、数据同步、一致性及系统维护、技能要求等成本十分高n技术点:分布式文件系统、Map/Reduce、Key-Value存储69Step6技术点向分布式存储计算解决方案DFS、Map/Reduce、Key-Value DBnDFS分布式文件系统,如:LustreHDFSGFSTFSFreeNas等nMap/Reduce算法(计算框架),基本上现有NoSQL数据库中都支持此算法。nKey-Value DB,也作为NoSQL解决方案,如:BigTableTairHbase HyperTable等n提供完整解决方案: Google(GFS|Map/R
34、educe|BigTable) Apache Hadoop(HDFS|Map/Reduce|HBase) 70大型网站架构的目标与挑战网站架构演变及其技术脉络架构设计理论与原则讨论及总结71关于数据一致性ACID vs BASE nACID( Atomicity 、 Consistency 、 Isolation 、 Durability )是关系型数据库的最基本原则,遵循ACID原则强调一致性,对成本要求很高,对性能影响很大。n问题:ACID原则适用于互联网应用吗?可用性似乎比一致性重要些nBASE( Basically Available 、 Soft state 、 Eventually
35、 consistent )策略BASE策略与ACID不同,其基本思想就是通过牺牲强一致性,以获得更好的可用性或可靠性基本可用数据能够保证80%一致性就够了,剩下20%就不要过于纠结了。可参考二八定律软状态在不过分追求数据一致性(强一致性)前提下可考虑软状态策略,例如把数据缓存(State)在客户端一段时间,过后若没有新请求的话,就清除此缓存(Soft)最终一致性在某一段短时间内允许数据不一致,但经过一段较长时间,等所有节点上数据的拷贝都整合在一起的时候,数据会最终达到完全一致架构设计理论与原则72关于分布式系统CAP理论 一致性分布式系统中,数据一般会存储在不同节点,一致性就是要保证对数据操作
36、的原子性可用性确保客户访问数据时可得到响应。不强调各个节点上数据要保持一致性。分区容忍性数据分区存储后,即使部分分区组件不可用,其施加的操作也能够完成CAP理论指出:一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三项需求,最多只能同时满足其中两个。架构设计理论与原则73无共享架构(Share Nothing Architecture) 架构设计理论与原则74ED-SOA架构 nED-SOA,事件驱动,面向服务架构nSOA是系统组件化、模块化构建性理论;ED是系统组件之间同步通信,采取事件机制异步化,提高响应速度n基于ED-SOA构建松耦合系统可以显著改善网站可伸缩性架构进化与退化-奥卡姆剃刀原理n进化寻找最适合的;退化简化不必要的n简单就好,慎防过渡设计架构设计理论与原则75考量成本,先硬后软原则 架构设计理论与原则76大型网站架构的目标与挑战网站架构演变及其技术脉络架构设计理论与原则讨论及总结77大型网站架构是怎么样子的? 存在万能的架构吗?架构本质是什么? 网站架构如何选型?开发语言重要吗? 架构只是浮云?神马才是重要的?。 讨论及总结78参考 部分内容来源: “大型”网站技术架构探讨 , 余浩东 大规模网站架构, 邱百超 Memcached 原理和使用详解,heiyeluren(黑夜路人)