2022年2022年互联网系统架构的演进 .pdf
《2022年2022年互联网系统架构的演进 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年互联网系统架构的演进 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、互联网系统架构的演进发表于 2013-08-29 09:27| 14048次阅读 | 来源程序员| 60条评论 | 作者杨光辉程序员杂志 2013年9月刊特别策划互联网系统架构技术架构性能系统摘要: 多终端接入、开放平台给互联网带来了前所未有的用户数量和访问规模,信息之多、传播速度之快,是传统网站难以想象的。本文将从发展演进的角度,解读高性能互联网系统架构。多终端接入、开放平台给互联网带来了前所未有的用户量级和访问规模,SNS网站产生了海量的 UGC(用户产生内容), 而且这些内容依托关系链扩散速度之快、传播范围之广是传统网站难以想象的,海量数据的计算存储也一直是近年互联网领域的热点。本文将从
2、发展演进的层面探讨互联网的系统架构。天下武功唯快不破网站初期的架构一般采用“短平快”的架构思路,架构以简单清晰、 容易开发为第一衡量指标。互联网架构选型首先包括开发语言的选择,目前 PHP 、Java 是主力语言。 开发语言的选择一般从团队人员的知识储备、社区活跃度、 商业应用的成熟度、 招聘人才的人力成本等方面考量。选择语言之后,一般会选择该语言的流行框架辅助研发, 例如 Java 的 SSH 、 Python的 Django 等。 但这些框架并不是通常意义上的架构, 架构一般可分为物理架构、运行架构、逻辑架构、开发架构、数据架构等多个维度,框架往往只是代码架构的一部分。代码架构是指代码的组
3、织形式、规范、设计模式等,框架其实是常用设计模式的软件化。例如Struts是 MVC 模式的实现, Hibernate 、iBATIS 是ORM 模式的实现。在架构视图中,早期关注的主要是开发视图和数据视图,一般数据存储采用DB ,初期数据的关注点主要是安全和备份,MySQL 的 Master-Slave模式可以满足该需求。鸡蛋不要放在一个篮子里采用“短平快”三板斧将网站开发出来之后,急需解决的是网站的可用性问题。可用性最基本的要求是不能有单点, 对程序节点而言,前端可采用 LVS 、 HAProxy、Nginx 等负载均衡 / 反向代理设备。DB 的可用性就复杂了很多,数据库天然是有状态的,
4、状态就是其中的数据,新增一个数据节点一般伴随着大量的数据复制和迁移。对金融行业而言, 昂贵的商用存储是解决之道,“ IBM+Oracle+EMC ”是该类系统的标配。互联网企业则一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 般采用较为廉价的方案,例如开源的DRDB+Heartbeat 技术组合可以在 MySQL主库宕机时实现备机接管,接管时间可以控制在30秒内。程序节点其实也可能存在状态,例如Web服务中常用的Session
5、 就是保存在容器中的状态, 这种状态保持要求所有相同用户的请求都在同一台机器上处理,无状态的程序节点才能水平扩展。无状态一般有两种设计思路,还以 Session为例,一种思路是把用户的状态保存在客户端Cookie,每次请求都把客户端的用户信息带到服务器端,淘宝的分布式Session 就是该思路的一种实现;另一种思路是状态保留在另外一个服务中,例如有些公司将Session 放在分布式缓存中。性能是生命线去除单点之后的系统就可以水平扩展,架构如图 1所示。但随着网站的推广运营,系统的规模开始扩大, 此时可能会出现服务访问缓慢,甚至不可用的状况, 如何提升系统性能就成了架构师的当务之急。图1 去除单
6、点之后进行水平扩展存储架构和性能互联网系统所有的性能瓶颈中, 数据存储和访问速度往往是最重要也是最难解决的,选择合适的存储是系统的关键。存储的选择一般需要从多个方面考量,如成本、内容、用途和模型。目前主流的存储介质包括硬盘和内存两种。对机械硬盘来说, 1秒可以完成 150次左右的随机I/O 。而结合设计优良的Hash算法,内存查找可以每秒执行40万次左右。硬盘的随机读写能力决定了其读写的最差性能,但操作系统在实现文件系统时会把最近读写过的数据缓存在内存中。由于磁盘访问和内存访问性能量级的差距,从操作系统的 Cache命中率就可以简单计算文件存储的性能,如果内存命中率可以达到80% ,系统的 I
7、/O 能力相名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 较完全随机 I/O 将有5倍提升。对于数据层服务器,大内存已成为标配(一般为 100GB 左右) , 如果 DB中存储 200GB的数据,根据 8/2 原则,Cache命中率应为 87.5%,因此对 MySQL 而言,一般读写可以达到每秒 1千次以上。对于读写频率都很高、 且可容忍数据丢失的场景, 可以采用内存作为数据存储的介质。可靠的内存存储需要每次操作都记录Bigl
8、og ,即使数据丢失也可以恢复,同时内存中的数据一般定期持久化到硬盘。从功能角度考量,还可以分为持久化存储和Cache。持久化存储也可称为可靠存储,Cache是为了提升系统性能,在可靠存储的基础上建立的访问性能更加高效的数据读取节点,通常是内存存储,其架构一般如图2所示。图2 持久化存储和 Cache 存储的数据模型一般分为结构化存储和NoSQL存储。结构化存储以各种传统DB为代表,NoSQL 技术的代表系统则有HBase 、Memcached 、 Redis 等。各种 NoSQL系统虽然特性各异,但相对传统DB而言,由于结构化信息的缺失,往往不能做各种关联查询,适用场景更多是主键查询,而且一
9、般是写少读多的系统。对于大型互联网公司, 为了某些场景下的性能优化, 也会定制个性化的文件系统,例如为了适应大文件存储的场景,Google 开发了 GFS ;为了更快读取海量商品的描述图片, TFS在阿里诞生。虽然各类存储快速涌现,但DB作为结构化数据的传统存储设备,依然在架构中处于非常重要的地位。由于随机I/O 的瓶颈, DB的性能天花板十分明显。在大型系 统中通常需要分库操作,分库一般有两个维度水平切分和垂直切分。水平切分一般根据主键规则或某种规则将同类数据切分到不同的单元表中,原则名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
10、 - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 是数据切分均匀,尤其是热点数据分布均匀。垂直切分是把大表中的字段拆分到多张表。垂直切分一般按照数据访问频率的不同。逻辑关系的差别进行切分,例如将大字段、kv 字段、计数等高频访问字段单独剥离存储都是常见的垂直切分方案。除了切库之外, MySQL的分表也会有效减少单表大小,使数据变得更简单,甚至可以做到不下线变更,单表索引规模的下降也会带来性能的提升。分库分表作为 DB架构中重要的一环, 使 DB更加稳健,但它给业务代码带来了额外的复杂性,最好通过中间件来屏蔽DB的底层分布,对业务透明。作
11、为高性能网站必不可少的组件,Cache在各种主流架构中也起着重要的作用。从部署模式上看,它可分为本地Cache和分布式 Cache 。本地 Cache是指在应用进程中的 Cache ,通常的数据结构是一个MAP ,其优点是结构简单,效率较分布式 Cache更高,缺点是一般应用程序服务器的内存有限,导致本地 Cache容量受到局限,而且数据冗余度较高,每个应用服务器都需要一份数据,更新比较烦琐,一般采用超时删除机制。分布式 Cache的容量较大,方便扩容和更新,其数据分布可采用一致性Hash算法,减少节点变化带来的数据迁移。引入 Cache不可避免的问题是服务器的宕机处理。Cache通常是一个集
12、群,数据分布在多个节点, 如果挂掉一个节点, 只会影响部分数据, 而且对于可靠性要求较高的系统,每个节点都可以有备份。作为可靠存储的数据备份, Cache在架构设计上往往承担大部分读访问需求,其命中率尤为重要。 Cache不命中有两种情况,一是数据在Cache 中不存 在,二是在持久化存储中也不存在。对于后者的频繁访问会导致请求直接压在DB上,在设计时应尽量避免, 可以通过维护 Bitmap 对持久化存储中没有的数据进行拦截,直接返回,也可以简单地将这些数据对应空对象放进Cache。Cache的存储一般是将索引和数据分离,对于索引数据可以全量缓存,对于体量较大的数据一般采用部分缓存的方式。Ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年互联网系统架构的演进 2022 互联网 系统 架构 演进
限制150内