架构在很多程序员眼里,就是高大上的表现。在接触《大型网站技术架构》之前,对于架构方面的知识也鲜有了解。像分布式,分层,负载均衡等高大上的技术,但很不系统,详细。本人现在所在项目组也属于大型网站一种,初次看架构类的书,就选了阿里教授的架构。今天看了些总体内容,猛然恍然大悟,醍醐灌顶。
先说说这本书吧,书呢,自己看过才知道里面哪里经典。这本书里,纯干货,没有一句多余的话,且通俗易懂。用书中作者的话说就是可以当作一本科普书看,了解当前所流行的架构。其次呢,这本书验证了我很多想法,用这本书的理论和我所在的项目一 一 映射,对技术和逻辑有一定的提升,开阔了眼界。就像爬山一样,当你登山一层时,就会看到不一样的风景,眼界也大不相同。这样,通过学习,对我的学习方法也有一定启发,每次看到一个新技术,都会想去学,从零开始开发,但不知学了有什么作用。比如学缓存的时候,就知道缓存能提高速度,但不知什么时候用缓存,怎么用合理。读了大型架构之后,才明白技术是为业务而生,是为解决问题而存在。根据需求去学习,才会知道需要去学习什么,补充什么。
上面是我对本书的感想,下面就正式介绍本书的精华吧
首先先了解下大型架构的演变。我把这种演变总结为了两种,一种是宏观的演变,从单服务器到集群服务器等的演变;一种是微观的演变,从SSM框架的小项目到大型架构时的演变。
我们经常讲到大型网站的高可用性和高并发性。字面意思理解就是可用性高和并发性高。但什么样的情况是可用性和并发性高呢。可用性高是指网站需要7*24小时不间断的给用户提供服务,不能存在网站瘫痪或中途断开的现象,在这种情况下,网站可以正常运行。并发性高是指在单位时间内访问网站的次数(也叫并发量)非常大的情况下,网站可以正常运转,比如移动业务办理,天猫双十一等。
网站性能都是围绕这两个基础标准演化而开,还有其他标准要素,后面也会一一讲到。
网站搭建可以分为9个阶段:
如下图所示:
第一阶段:初始阶段。单一服务器,分文件存储,数据库存储,应用存储。通常我们初学的SSM,SSH等小小网站都是这种模式,使用量小,访问量小。
第二阶段:当用户量达到一定阶段时,单一服务器已经满足不了需求,比如数据量的增大,物理内存也会随之占用比增高。因此,就需要对小小网站进行升级,三个不同功能的服务器分开部署,分分文件服务器,数据库服务器,应用服务器。
第三阶段:随着访问量的增加,对数据库的消耗增大,同时,遵循二八定律,热门访问往往是部分。因此,解决方案就是引入缓存机制。缓存分本地缓存,本地缓存又分本地只读缓存和本地读写缓存,可以把系统基础配置文件放在本地缓存中。二是分布式缓存,这也是现在很火的缓存机制。对于分布式缓存,可以存储用户数据等信息。现常用的缓存有Memcache,Redis等缓存,可以共同使用,用途不同。
第四阶段:这个时候,三台服务器已经不足以支撑系统的正常访问。对于应用服务器和文件服务器,需要引入多台服务器做支撑。因此需要搭建多台应用服务器,通过负载均衡请求分发。
第五阶段:数据库服务器呢,怎么办呢。这样解决,搭建两个数据库,两个数据库关系为主从关系,数据进行同步。主数据库进行写操作,从数据库进行读操作,这样就可以做到主从分离。减少数据库服务器的压力。当然这块还需要对数据库内部做优化,比如索引,分区等操作,都可以减少压力。
第六阶段:前面三四五阶段,基本都是讲服务器的抗压能力的解决方案。这一阶段,就得着手解决网站的访问速度的问题。通常网站大多数都会有静态资源服务器。加速网站反应速度,就可以从静态资源做起。现阶段可以使用CDN加速和反向代理技术把静态资源缓存起来。用户访问时优先访问CDN服务器和反向代理服务器,优先反馈数据给用户。
第七阶段:对主从数据库进行业务分库操作,比如可以按主流城市,地市分库。
第八阶段:使用搜索引擎对业务优化
第九阶段:业务分模块区分。
以上就是大型网站的宏观阶段发展。
下面我们从技术层面来看看网站的发展:
第一阶段:入门项目
知识体系:SringMVC、SpringBoot、Spring、MyBatis
第二阶段:项目开发部署
知识体系:
jsp、maven、spring、mybatis、mysql
mybatis plus、swagger2、hibernate validator
linux、jenkins、git
项目结构:
第三阶段:增加页面缓存或页面静态化处理
知识体系:freemarker、squid
第四阶段:数据缓存
知识体系:redis、ehcache、memcached
项目结构:
第五阶段:应用负载均衡,集群
知识体系:keepalive、nginx、Apache、LVS
第六阶段:动静分离
知识体系:
页面静态化、分布式文件系统
nginx
cdn加速原理、反向代理
第八阶段:分布式缓存、缓存集群
知识体系:
Redis Cluster主从模式
Memcached集群
第九阶段:数据库读写分离
知识体系:
mycat
第十阶段:微服务架构
知识体系:
异步消息调用(Kafka, MQ)
resful
spring boot
RPC
dubbo+zookeeper
grpc
spring cloud
第十一阶段:NoSQL与搜索引擎
mongodb、HBase
ElasticSearch、lucene、solr
以上就是我所理解的大型架构分析。如有不对的地方烦请大拿们指导。