大型网站技术架构分析(余浩东)


CE v6.3 BeetleSoft “大型”网站技术架构探讨 余浩东 2011年6月 BeetleSoft 大型网站技术架构探讨[2] 大型网站架构的目标与挑战 网站架构演变及其技术脉络 架构设计理论与原则 讨论及总结 BeetleSoft 大型网站技术架构探讨[3] 大型网站架构的目标与挑战 ■何谓“大型”网站? 网站 日均流量[IP/PV] www.hao123.com IP≈ 5,972,587 PV≈ 9,376,962 www.facebook.com IP≈229,680,000 PV≈2,955,981,600 www.sina.com.cn IP≈25,680,000 PV≈222,132,000 www.tianya.cn IP≈5,532,000 PV≈25,723,800 www.pingan.com IP≈300,000 PV≈747,000 没有统一的判断标准,流量大小是一个重要指标 日均流量至少IP>1,000,000才算大型网站 BeetleSoft 大型网站技术架构探讨[4] 大型网站架构的目标与挑战 ■何谓“大型”网站? 网站内容是否“劢态”才是关键 BeetleSoft 大型网站技术架构探讨[5] 大型网站架构的目标与挑战 ■网站架构目标与挑战 每个目标背后面临着技术、设计、维护等诸多方面的挑战。 而目标本身的期望值也会根据实际情况进行调整,这也意味着网站架构建设是个不断调整的过程。 负载均衡 数据备份 异地容灾 。。。 高速缓存 并行计算 异地镜像 。。。 开发框架 多层设计 业务分割 。。。 BeetleSoft 大型网站技术架构探讨[6] 大型网站架构的目标与挑战 网站架构演变及其技术脉络 架构设计理论与原则 讨论及总结 BeetleSoft 大型网站技术架构探讨[7] 网站架构演变及其技术脉络 ■[Step1]Web动静态资源分离及其与DB物理分离 优点:“简单”、安全性提高 缺点:存在单点,谈丌上高可用性( high availability架构目标) 技术点:应用设计要保证可扩展(framework很重要Spring/Beetle)、Web Server劢 /静态资源分离 Web Server(Apache\Nginx\IIS\JBoss…)、 Database Server(Mysql\Oracle\Redis…) BeetleSoft 大型网站技术架构探讨[8] ■[Step1]技术点—Web动静态资源分离 img,doc,js,css等静态资源使用单独的Web HTTP Server处理请求 劢态页面静态化处理 网站架构演变及其技术脉络 BeetleSoft 大型网站技术架构探讨[9] ■[Step2]采取缓存处理 优点:简单有效、维护方便 缺点:依然存在单点 技术点:客户端(浏览器)缓存、前端页面缓存、页面片段缓存、本地数据缓存/数据库缓存 网站架构演变及其技术脉络 减少对网 站的访问 减少对Web应用 服务器的请求 减少对数据库 的查询 减少文件系 统I/O操作 BeetleSoft 大型网站技术架构探讨[10] ■[Step2]技术点—客户端(浏览器)缓存 技术点说明 根据HTTP协议特性,修改Header参数(Cache-Control、Expires、Pragma、Last- Modified、Etag),让浏览器来缓存页面(一些优秀开发框架会对此做透明的封装, 例如:Beetle)http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 使用HTTP1.1协议,由于http pipelining技术特性,能够使用get请求的决丌采取 post 请求 为了节约带宽,压缩页面(Content-Encoding: gzip);页面各个元素能“小”即“ 小”,例如:js包压缩,js合幵,图片压缩等 会话状态信息采取Cookie代替传统使用服务器Sessions对象存储习惯做法;使用Ajax 实现页面局部刷新 如果可能,可采取浏览器插件技术突破浏览器功能限制,将原本在服务 器端运算,尽量迁到浏览器端。ActiveX/Applet/Flash/…. HTML5 最值得期待,她的出现必定改变整个Web世界 能够让浏览器缓存的数据一定要缓存;浏览器能够处理的 运算,决丌放在服务器端来处理。 网站架构演变及其技术脉络 BeetleSoft 大型网站技术架构探讨[11] ■[Step2]技术点—前端页面缓存 采用具备缓存功能的http反向代理服务器作前端页面缓存器, Varnish\Squid\Ncache\AiCache(商业)…【硬件F5】 网站架构演变及其技术脉络 BeetleSoft 大型网站技术架构探讨[12] ■[Step2]技术点—页面片段缓存ESI(Edge Side Includes) ESI需要服务器端支持,常见apache(mod_esi)、WebLogic、 JSP标签库(JESI)等。 网站架构演变及其技术脉络 BeetleSoft 大型网站技术架构探讨[13] ■[Step2]技术点—本地数据缓存 需要从数据库系统和Web应用服务器两个层面考虑缓存优化 网站架构演变及其技术脉络 技术点说明 关系数据库系统(如:Oracle\MySql)Query Cache策略: 一般以sql为key来缓存查询结果,尽量丌要拼 sql,使用 PreparedStatement的“?”模式sql;Query Cache大小要 根据数据库系统具体情况合理设置,过大只会浪费内存,参考 值:128M 关系数据库系统Data Buffer策略:就是数据库数据内存缓存器 ,其访问命中率决定数据库性能,可根据实际物理内存大小适 量增大,如:MySql建议buffer值为物理内存60-80% 应用服务器Cache包括:对象缓存(例如:对象线程安全,做 成单例),更新频率丌大数据考虑缓存(如:基表数据、配置 文件信息),考虑使用线程池,对象池,连接池等 常见java解决方案:map\OSCache\EHCache等 BeetleSoft 大型网站技术架构探讨[14] ■[Step3]增加机器做HA、数据库读写分离 网站架构演变及其技术脉络 优点:增加服务器和HA机制,系统性能及可用性得到保证 缺点:读写分离,增加程序难度,架构变复杂,维护难度增加 技术点:负载均衡、DAL、数据库读写分离 BeetleSoft 大型网站技术架构探讨[15] ■[Step3]技术点—负载均衡 网站架构演变及其技术脉络 类型 说明 DNS负载均衡 实现简单、有Cache缺乏灵活性,但对分区域(如构 建CDN方案)访问简单有效 反向代理软件 HAProxy、Nginx、Apache、Lighttpd等 硬件产品 F5、NetScaler等 LVS(Linux Virtual Server) http://www.linuxvirtualserver.org/ SMART Client 自己写代码某些情况下简单有效 BeetleSoft 大型网站技术架构探讨[16] ■[Step3]技术点—数据库读写分离及DAL 网站架构演变及其技术脉络 ■读写分离逻辑分批 ■负载均衡 ■失效转移(failover) ■数据库分区透明支持 ■两大实现模式:独立Proxy服务器;单独 API库文件 各个数据库厂商都有自己复制方案 常见通用方案:ETL、GoldenGate TJS… BeetleSoft 大型网站技术架构探讨[17] ■[Step4]CDN、分布式缓存、分库 网站架构演变及其技术脉络 优点:异地缓存有效解决丌同地方用户访问过慢 的问题;分库策略带来网站性能整体提升 缺点:成本大幅增加,架构进一步复杂化,也维 护难度进一步增大,架构开始臃肿了 技术点:CDN、分布式缓存、Shard分库 BeetleSoft 大型网站技术架构探讨[18] ■[Step4]技术点—CDN 网站架构演变及其技术脉络 CDN(Content Delivery Network)内容分发网络 将网站的内容分发到最接近用户的网络“边缘”,使用户可以就近 获取,从而解决互联网网络拥挤的状况,提高用户访问的响应速度。 适合静态内容很多(如:静态页面、图片、视频等)及页面内容实 时性要求丌高的网站,如:新闻类门户网站 CDN构建可以做的很简单,也可以很复杂,主要根据自己网站实际 情况而定 BeetleSoft 大型网站技术架构探讨[19] ■[Step4]技术点—分布式缓存 网站架构演变及其技术脉络 本地缓存性能优秀,但容量有限,无伸缩性 采用分布式缓存方案突破容量限制,具备良好伸缩性;但分布式涉 及远程网络通信消耗其性能本地缓存来得优秀,幵可涉及节点状态维 护及数据复制问题,其稳定性和可靠性是个挑战。 目前流行分布式缓存方案:memcached、membase、redis等, 基本上当前的NoSQL方案都可以用来做分布式缓存方案 BeetleSoft 大型网站技术架构探讨[20] ■[Step4]技术点—分库 网站架构演变及其技术脉络 读写分离(简单有效,前面已介绍) 垂直分区 良好的松耦合的模块化设计是垂直分库的前提 BeetleSoft 大型网站技术架构探讨[21] ■[Step4]技术点—分库 网站架构演变及其技术脉络 水平分区(Shard) 分片Key识别(划分检索依据)是关键 是否还有其它招?用NoSql数据库部分替换关系数据库 BeetleSoft 大型网站技术架构探讨[22] ■[Step5]多个数据中心,向分布式存储和计算的架构体系迈进 网站架构演变及其技术脉络 优点:多数据中心,带来更高质量区域服务体验; 分布式存储及计算架构有效解决pb级数据量存储、检 索及计算性能问题 缺点:架构复杂、数据同步、一致性及系统维护、 技能要求等成本十分高 技术点:分布式文件系统、Map/Reduce、Key- Value存储 BeetleSoft 大型网站技术架构探讨[23] ■[Step5]技术点—向分布式存储计算解决方案[DFS、Map/Reduce、Key-Value DB] 网站架构演变及其技术脉络 DFS分布式文件系统,如:Lustre\HDFS\GFS\TFS\FreeNas等 Map/Reduce算法(计算框架),基本上现有NoSQL数据库中都支持此算法。 Key-Value DB,也作为NoSQL解决方案,如:BigTable\Tair\Hbase\ HyperTable等 提供完整解决方案: Google(GFS|Map/Reduce|BigTable) Apache Hadoop(HDFS|Map/Reduce|HBase) BeetleSoft 大型网站技术架构探讨[24] 大型网站架构的目标与挑战 网站架构演变及其技术脉络 架构设计理论与原则 讨论及总结 BeetleSoft 大型网站技术架构探讨[25] 架构设计理论与原则 ■网站架构设计的精神食粮 BeetleSoft 大型网站技术架构探讨[26] 架构设计理论与原则 ■关于数据一致性—ACID vs BASE ACID( Atomicity 、 Consistency 、 Isolation 、 Durability )是关系型数据库的最基本原则, 遵循ACID原则强调一致性,对成本要求很高,对性能影响很大。 问题:ACID原则适用于互联网应用吗?可用性似乎比一致性重要些 BASE( Basically Available 、 Soft state 、 Eventually consistent )策略 BASE策略与ACID不同,其基本思想就是通过牺牲强一致性,以获得更好的可用性或可靠性 基本可用 数据能够保证80%一致 性就够了,剩下20%就 不要过于纠结了。可参 考八二定律 软状态 在不过分追求数据一致性 (强一致性)前提下可考 虑软状态策略,例如把数 据缓存(State)在客户端 一段时间,过后若没有新 请求的话,就清除此缓存 (Soft) 最终一致性 在某一段短时间内允许数 据不一致,但经过一段较 长时间,等所有节点上数 据的拷贝都整合在一起的 时候,数据会最终达到完 全一致 BeetleSoft 大型网站技术架构探讨[27] 架构设计理论与原则 ■关于分布式系统—CAP理论 一致性 分布式系统中,数据一 般会存储在不同节点, 一致性就是要保证对数 据操作的原子性 可用性 确保客户访问数据时可得 到响应。不强调各个节点 上数据要保持一致性。 分区容忍性 数据分区存储后,即使部 分分区组件不可用,其施 加的操作也能够完成 CAP理论指出:一个分布式系统不可能同时满足一致性、可用性 和分区容忍性这三项需求,最多只能同时满足其中两个。 BeetleSoft 大型网站技术架构探讨[28] 架构设计理论与原则 ■无共享架构(Share Nothing Architecture) BeetleSoft 大型网站技术架构探讨[29] 架构设计理论与原则 ■ED-SOA架构 ED-SOA,事件驱劢,面向服务架构 SOA是系统组件化、模块化构建性理论;ED是系统组件之间同步通信,采取事件机制异步化,提高 响应速度 基于ED-SOA构建松耦合系统可以显著改善网站可伸缩性 ■架构进化与退化--奥卡姆剃刀原理 进化—寻找最适合的;退化—简化丌必要的 简单就好,慎防过渡设计 BeetleSoft 大型网站技术架构探讨[30] 架构设计理论与原则 ■考量成本,先硬后软原则 BeetleSoft 大型网站技术架构探讨[31] 大型网站架构的目标与挑战 网站架构演变及其技术脉络 架构设计理论与原则 讨论及总结 BeetleSoft 大型网站技术架构探讨[32] 讨论及总结 ■大型网站架构是怎么样子的? ■存在万能的架构吗?架构本质是什么? ■网站架构如何选型?开发语言重要吗? ■架构只是浮云?神马才是重要的?。。。 CE v6.3 BeetleSoft Thank you!- Q&A
还剩32页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 6 人已下载

下载pdf

pdf贡献者

bb7d

贡献于2013-10-02

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf