本文转载自微信公众号《锥子的编程之家》,作者锥子。转载本文请联系锥子编程之家公众号。你好,我是。最近在看《大规模互联网架构》这本书。今天想跟大家聊聊架构。高并发、大流量、海量数据、分布式等这些词大家可能不陌生,但每个词的背后其实都是为了解决当前的问题。问题总结出的一套架构范式,今天一起来看看架构。阅读本文后,您可以了解架构从单体应用到大型应用的演进过程。文本大纲单一应用程序服务阶段所有大型网站都是从最小的网站架构发展而来的。回想一下,刚开始写服务器端代码的时候,数据库MySQL是不是本地的,服务器也是本地的,初期也是这样,网站访问量不大。通常,应用服务、数据服务、文件资源等所有资源都分配到一台服务器上。比如我们学javaweb的时候用的是Tom??等web容器开始运行应用服务程序,比如JSP,然后在需要数据库的时候使用JDBC连接到本地的MysqlServer。一图胜千言:在应用和数据服务分离阶段,业务发展迭代增长,用户数和DAU增长。一个简单的服务器无法处理它。例如,由于用户产生的数据量过大,可能导致存储空间不足,服务器不得不同时处理数据业务和用户应用Web响应。在CPU资源有限的情况下,无法满足用户想要快速响应的需求。网站对数据的访问越来越慢,数据服务和应用服务对计算机资源的要求不同。例如,应用服务器需要更多的CPU资源。服务可能需要处理磁盘,用更多的闪存。这时候,应用服务和数据服务就分离了。分离应用服务器,专注于响应web请求,提高用户访问速度,将数据库放在单独的服务器上,专注于处理来自应用服务器的数据请求,将文件资源放在一台服务器上,与应用服务器打交道并提供文件服务,一图胜千言:在使用缓存提升性能的阶段,随着用户的增加,业务将再次升级。网站对数据库服务的压力太大,导致整体访问效率下降,再次影响用户的访问体验。可以想象,我们每天的微博,以及?的那些热点数据,都是每一个打开这些APP的人都在索取的。所以80/20规则永远存在,80%的请求针对20%的数据。所以这个时候,将这20%的数据缓存到高校,让网站的整体性能再次得到提升。缓存分为两种:一种是直接缓存在应用服务器上,另一种是开一个缓存服务器进行缓存。后者可以很好地弹性扩展,而前者会受到本地容量的限制。我们称后者为服务器:分布式缓存服务器。目前笔者写的后端程序也处于这个阶段,也在尝试向后续集群的方向演进。一图胜千言:在应用服务集群阶段使用缓存,有效缓解了数据库的访问压力。再次,随着业务的增加,单个应用服务器并发处理的请求数和连接数是有限的。在流量高峰期,应用服务器开始成为整个系统的性能瓶颈。因此,此时启动组件应用服务器集群。不仅应用服务器有集群,缓存服务器也可以形成集群。那么既然有了服务器集群,这些请求应该由哪个服务器来响应。于是负载均衡调度服务器出现了。通过负载均衡调度服务器,可以将浏览器的访问请求分发到应用集群中的任意一台服务器上。使用服务器集群还有一个优势。Web应用程序的更新可以让用户感觉不到,当一个节点的服务器宕机时,它不会影响整个请求。一图胜千言:虽然数据库读写分离阶段加了一层数据缓存。比如使用redis缓存,但是随着用户数量的不断增加。总有一些事情是无法通过缓存来改善的,比如缓存过期、缓存未命中等。然后所有这些请求都会到达数据库服务器。这时候数据库服务就成了整个系统的瓶颈。于是就出现了数据读写分离。目前大多数数据库都提供了主从热备份功能。通过配置主从服务器,当应用服务器向主服务器写入数据时,通过主从复制机制将数据更新同步到从数据库。读写分离后,解决了数据库的性能瓶颈。一图抵千言:在反向代理和CDN加速阶段,当网站业务再次升级,用户规模再次扩大时,为满足不同地区的用户访问速度,提高响应速度,CDN和反向代理出现。两者的基本原因是相同的。是缓存。CDN是一个内容分发网络。您的请求响应服务器将从离您最近的服务器集群响应。比如你在云南,你可能在云南的机房回复。反向代理部署在中心机房。当请求来到中心机房时,首先访问反向代理服务器,看名字是否被缓存。如果被击中,它会直接返回。一图胜千言:在分布式数据库阶段,分布式数据库是系统数据库拆分的最后手段。这个只有在单表数据规模非常大的时候才会用到。一般来说,数据库的拆分就是将不同的业务数据分开部署在不同的服务器上。如下图所示:NoSQL和搜索引擎阶段当它成为一个大型系统时,搜索成为日常需求。这时候就会用到NoSQL和搜索引擎来提高搜索效率。Redis在缓存的时候也是NoSQL类型。如下图所示:业务拆分阶段当业务日益增长时,团队成员可能不利于管理。这时候大型系统会进行业务拆分。比如抖音拆分了很多很多的业务线。每个业务线服务不同的服务,每个服务单独部署,可以通过消息队列进行数据分发。如下图所示:在分布式服务阶段,随着业务拆分越来越小,存储系统越来越大,应用系统整体复杂度呈指数增长,部署和维护难度越来越大。由于每个应用系统都需要进行很多相同的业务操作,比如用户管理、商品管理等,所以这些共享服务可以抽取出来独立部署。这些可重用的服务与数据库相连,提供通用的业务服务,而应用系统只需要管理用户界面,通过分布式服务调用通用的业务服务即可完成特定的业务操作。如下图所示:总结目前,很少有人能够体验到以上的系统演进。大部分的大型系统都已经成型了,小系统可能支撑不了它变成大系统,所以很少有人能体验到这些,但是了解这些,对我们理解整体的系统架构很有帮助.
