写点什么

图解大型网站技术架构的历史演化过程

  • 2019-11-07
  • 本文字数:2024 字

    阅读完需:约 7 分钟

图解大型网站技术架构的历史演化过程

开篇明义:


【大型网站技术架构笔记】系列是阅读《大型网站技术架构核心原理与实践》一书的一些笔记,记录了原书的一些重要内容以及我的个人理解。其中很多内容网上都能找得到。其实整本书,我最赞同的是作者阐述的网站架构的价值观——“业务成就技术,而不是相反”。在没有业务场景的时候就一味追逐架构,为技术而技术,或者一上来就想要设计出一个可以适用所有场景的解决方案,是不理智的。我们有的时候可能会陷入技术的怪圈而忘了考虑业务本身。我曾经看到的一句我很喜欢的话,在这边也与诸君分享:好的架构都是进化来的,不是设计来的。


以下为 (一)演化过程 内容:

一、初始阶段

初始阶段考虑到使用量规范较小,且快速开发等原因,采用单服务器,将文件、数据库与应用程序一起部署即可。语言可以采用 LAMP。如下图:


二、应用服务于数据服务分离

随着访问量的增多,导致存储空间不足,所以需要将应用与数据存储分离部署。文件和数据库存储需要分开。以避免由于大文件 io 而导致实时数据库服务的长响应延时。文件服务器需要更多的磁盘空间,数据库服务由于需要进行磁盘检索和数据缓存,所以需要较多的磁盘和内存。而应用服务器由于需要业务逻辑带来的频繁密集计算,所以需要较好的 CPU。如下图。


三、使用缓存改善网站性能

网站访问中,对访问频率比较高的数据进行本地缓存和分布式缓存,能够很好地提高网站性能。什么时候采用本地缓存,什么时候采用分布式缓存呢?一些公司会选择将热点数据存入本地缓存,同时异步写入分布式缓存。而更多时候,我们较少采用本地缓存,因为其会占用宝贵的应用程序的内存空间。采用本地缓存只有那种占用少量内存,且使用率非常高的数据。比如每次请求都需要判断用户是否在黑名单中。此时就可以把名单加载入本地缓存。分布式缓存我们常用的就是 memcached 和 redis。二者的伸缩性都非常优秀。


四、应用服务集群化

单一的服务器存在着并发处理能力不足,高峰期负载过高,单点等问题。此时可以用过简单的同构集群化部署来解决这一问题。


五、数据库读写分离

随着网站的发展,数据库的负载会变得越来越大。而且读、写数据库的操作本身就不是一个时间量级上的操作。如果都混在一起处理,则将很可能导致操作长时间阻塞等其他问题。大部分的主流数据库都自带主从热备的功能,所以部署起来还是比较简单的。而读写分离以及下面将提到的分库之后,我们常会采用一些中间件来对这个底层数据访问进行封装,从而对应用透明。比如 mybatis 有阿里巴巴的 cobar client 框架。读写分离后,我们的应用服务的设计中,就需要慎重考虑,读写同步的延时这一最终一致性的保证,对用户体验带来的影响是否可以接受。


六、采用其他缓存代理技术

以上说的基本都是服务器端的优化,而用户访问网站时候,带宽、地域等其他因素会对访问体验带来不可忽视的影响。来改善这一体验,加快网站访问速度的办法主要有 cdn 加速和反向代理。可以认为 cdn 是一种特殊的反向代理,其也是基于反向代理的原理过来实现的缓存和加速。其主要缓存一些静态资源到离用户最近的网络提供商的机房。而此处的反向代理则是部署在网站服务端的机房。其既可以进行一些静态数据的高速缓存,也由于采用了 SSL 与内部服务器进行交互从而节省了大量开销。


七、采用分布式数据库和分布式文件系统

随着网站规模的增大,单一的数据库和文件服务器已经无法很好迎合业务场景。所以同理地,也会将其集群化部署。


八、采用 nosql 和搜索引擎

随着数据需求越来越复杂,比如需要对 log 进行存储和分析以及检索。此时可以引入 nosql 数据库(如 mongodb、hbase 等)和搜索引擎技术(如 lucense 等)。同时,此时的数据源可能已经比较多,可以来自关系型数据库集群、非关系型数据库、缓存、文件系统甚至从消息队列订阅的数据等等。所以需要一个统一的数据访问模块(DAL)来统一对这一过程进行封装和管理。


九、业务拆分与分布式化

前面我们提到,对业务服务进行同构部署来实现业务的并发处理。而我们知道这样简单的加机器在前期确实可以实现服务性能的线性增长,但是到了后期,并发量上来了之后,会发现这一处理将会很快达到瓶颈。而且于此同时,各个子业务的差异性带来的架构以及请求量方面的差异将日趋明显,如果还这样进行同构化的混部,其服务的性能将可能最终跟不上业务的发展,甚至可能导致雪崩。所以最好的做法,就是对业务服务进行垂直拆分。同时对基础服务进行水平拆分。真正实现 SOA。



如此,便是一个网站架构演化的常见路径。


作者介绍:


陈超,猫眼娱乐基础架构负责人,腾讯云 TVP,历任百度凤巢某业务团队技术负责人、丁丁租房基础架构与运维部负责人,现猫眼娱乐基础架构负责人。参与国内最大的商业广告平台“凤巢系统”服务化过程,从 0-1 搭建丁丁租房整体业务微服务架构和基础架构体系,从 0-1 搭建猫眼娱乐基础架构体系。具备 8 年互联网工作经验,在服务治理领域具备丰富经验。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/RZvJYQdd6CQofyPoSRgHdQ


2019-11-07 10:281882

评论

发布
暂无评论
发现更多内容

如何在 Vue 中使用 Chart.js - 手把手教你搭可视化数据图表

蒋川

Vue Vue 3

架构实战营模块八作业

Jude

架构实战营

2022中国化妆品行业发展趋势洞察

易观分析

化妆品行业

异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算 FC

模块八作业

whoami

「架构实战营」

java商城源码(servlet,springboot,html,vue,uniapp,小程序,android)一套任意组合

清风

计算机毕业设计 java商城 java商城源码 商城毕业设计源码

网络安全必学渗透测试流程

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

建木持续集成平台v2.2.3发布

Jianmu

DevOps CI/CD 开源项目

阿里云资深专家李国强:云原生的一些趋势和新方向

阿里巴巴云原生

阿里云 容器 微服务 云原生 趋势

关于SaaS的内容营销策略(15/100)

hackstoic

营销 SaaS平台

亿级数据量场景下,如何优化数据库分页查询方法

华为云开发者联盟

MySQL 缓存 查询 数据表 分页查询

Hoo 交易所虎符研究院 ∣ 如何对NFT进行估值

区块链前沿News

NFT 虎符 Hoo 虎符交易所 虎符研究院

如何防止Arp攻击

喀拉峻

网络安全

梦幻联动!金蝶&华为云面向大企业发布数据库联合解决方案

华为云开发者联盟

数据库 华为云 数据管理 GaussDB(for openGauss) 金蝶

Vue Router 手把手教你搭 Vue3 路由 - 卡拉云

蒋川

Vue Vue 3 vue cli

学生管理系统详细架构设计

Geek_8d5fe5

架构实战营

资本热衷的垂直SaaS,如何能大有作为?

ToB行业头条

详解基于机器学习的恶意代码检测技术

华为云开发者联盟

机器学习 深度学习 静态分析 恶意代码 恶意代码检测

视频图像色彩增强的主要方法与落地实践

RTE开发者社区

Dev for Dev 视频技术 色彩增强

最好用的 7 款 Vue admin 后台管理系统测评 - 卡拉云

蒋川

Vue Vue 3 vue cli

权威可信 | 华为云云测通过中国电子技术标准院软件测试工具能力评价

华为云开发者联盟

软件测试 测试 华为云 测试工具 华为云云测

掌握这20个JS技巧,做一个不加班的前端人

华为云开发者联盟

JavaScript 数组 箭头函数 逻辑运算符 计数器对象

MySQL是怎么保证redo log和binlog是完整的?

华为云开发者联盟

MySQL Binlog Redo Log WAL机制 日志逻辑序列号

存储高性能、传输如闪电,焱融科技携手瑞云科技给你带来不一样的体验

焱融科技

云计算 分布式 云原生 高性能 文件存储

这么写简历,offer拿到手软,从业5年的软件测试工程师手把手教你写出满分简历

程序员暴龙

软件测试 简历优化 简历 就业 软件测试工程师

要做需求管理?看这篇就够了。

石云升

产品经理 需求管理 需求分析 2月月更

安全开采数据“富矿”:隐私计算基建的融合与进击

脑极体

系统学习 TypeScript(四)——变量声明的初步学习

编程三昧

typescript 前端 2月月更

网络安全kali渗透学习 web渗透入门 Metasploit基本使用方法

学神来啦

微服务用户为什么要用云原生网关

阿里巴巴云原生

阿里云 Kubernetes 微服务 云原生网关

几纳米间风云:手机摄影的制高点争夺战

脑极体

图解大型网站技术架构的历史演化过程_文化 & 方法_陈超_InfoQ精选文章