开篇明义:
【大型网站技术架构笔记】系列是阅读《大型网站技术架构核心原理与实践》一书的一些笔记,记录了原书的一些重要内容以及我的个人理解。其中很多内容网上都能找得到。其实整本书,我最赞同的是作者阐述的网站架构的价值观——“业务成就技术,而不是相反”。在没有业务场景的时候就一味追逐架构,为技术而技术,或者一上来就想要设计出一个可以适用所有场景的解决方案,是不理智的。我们有的时候可能会陷入技术的怪圈而忘了考虑业务本身。我曾经看到的一句我很喜欢的话,在这边也与诸君分享:好的架构都是进化来的,不是设计来的。
以下为 (一)演化过程 内容:
一、初始阶段
初始阶段考虑到使用量规范较小,且快速开发等原因,采用单服务器,将文件、数据库与应用程序一起部署即可。语言可以采用LAMP。如下图:
二、应用服务于数据服务分离
随着访问量的增多,导致存储空间不足,所以需要将应用与数据存储分离部署。文件和数据库存储需要分开。以避免由于大文件io而导致实时数据库服务的长响应延时。文件服务器需要更多的磁盘空间,数据库服务由于需要进行磁盘检索和数据缓存,所以需要较多的磁盘和内存。而应用服务器由于需要业务逻辑带来的频繁密集计算,所以需要较好的CPU。如下图。
三、使用缓存改善网站性能
网站访问中,对访问频率比较高的数据进行本地缓存和分布式缓存,能够很好地提高网站性能。什么时候采用本地缓存,什么时候采用分布式缓存呢?一些公司会选择将热点数据存入本地缓存,同时异步写入分布式缓存。而更多时候,我们较少采用本地缓存,因为其会占用宝贵的应用程序的内存空间。采用本地缓存只有那种占用少量内存,且使用率非常高的数据。比如每次请求都需要判断用户是否在黑名单中。此时就可以把名单加载入本地缓存。分布式缓存我们常用的就是memcached和redis。二者的伸缩性都非常优秀。
四、应用服务集群化
单一的服务器存在着并发处理能力不足,高峰期负载过高,单点等问题。此时可以用过简单的同构集群化部署来解决这一问题。
五、数据库读写分离
随着网站的发展,数据库的负载会变得越来越大。而且读、写数据库的操作本身就不是一个时间量级上的操作。如果都混在一起处理,则将很可能导致操作长时间阻塞等其他问题。大部分的主流数据库都自带主从热备的功能,所以部署起来还是比较简单的。而读写分离以及下面将提到的分库之后,我们常会采用一些中间件来对这个底层数据访问进行封装,从而对应用透明。比如mybatis有阿里巴巴的cobar client框架。读写分离后,我们的应用服务的设计中,就需要慎重考虑,读写同步的延时这一最终一致性的保证,对用户体验带来的影响是否可以接受。
六、采用其他缓存代理技术
以上说的基本都是服务器端的优化,而用户访问网站时候,带宽、地域等其他因素会对访问体验带来不可忽视的影响。来改善这一体验,加快网站访问速度的办法主要有cdn加速和反向代理。可以认为cdn是一种特殊的反向代理,其也是基于反向代理的原理过来实现的缓存和加速。其主要缓存一些静态资源到离用户最近的网络提供商的机房。而此处的反向代理则是部署在网站服务端的机房。其既可以进行一些静态数据的高速缓存,也由于采用了SSL与内部服务器进行交互从而节省了大量开销。
七、采用分布式数据库和分布式文件系统
随着网站规模的增大,单一的数据库和文件服务器已经无法很好迎合业务场景。所以同理地,也会将其集群化部署。
八、采用nosql和搜索引擎
随着数据需求越来越复杂,比如需要对log进行存储和分析以及检索。此时可以引入nosql数据库(如mongodb、hbase等)和搜索引擎技术(如lucense等)。同时,此时的数据源可能已经比较多,可以来自关系型数据库集群、非关系型数据库、缓存、文件系统甚至从消息队列订阅的数据等等。所以需要一个统一的数据访问模块(DAL)来统一对这一过程进行封装和管理。
九、业务拆分与分布式化
前面我们提到,对业务服务进行同构部署来实现业务的并发处理。而我们知道这样简单的加机器在前期确实可以实现服务性能的线性增长,但是到了后期,并发量上来了之后,会发现这一处理将会很快达到瓶颈。而且于此同时,各个子业务的差异性带来的架构以及请求量方面的差异将日趋明显,如果还这样进行同构化的混部,其服务的性能将可能最终跟不上业务的发展,甚至可能导致雪崩。所以最好的做法,就是对业务服务进行垂直拆分。同时对基础服务进行水平拆分。真正实现SOA。
如此,便是一个网站架构演化的常见路径
相关推荐
李智慧老师的大型网站技术架构的读书笔记
大型网站技术架构_核心原理与案例分析_李智慧 pdf
《大型网站技术架构》读书笔记思维导图,初始架构、服务数据分离、缓存改善性能、服务器集群化、数据库读写分离、反向代理CDN、分布式FS/DBS、NOSQL和搜索引擎、业务切分
大型网站技术架构笔记3.docx
《大型网站技术架构 核心原理与案例分析》的作者是李智慧,原阿里巴巴技术专家。 Java 的大多数应用都是用在Web上的,现在只要稍微大型一点的Web应用,都一定是一个分布式系统,那么一个分布式系统用到了哪些技术?...
文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人经验总结。对大型分布式网站架构有很好的参考...
大型分布式网站架构设计与实践+笔记.zip 1.Cache缓存 2.持久化存储 3.消息系统MQ 4.垂直化搜索引擎 5.其他基础设施
站在更高的维度做架构,来自一线互联网大厂的经验总结,少走弯路少踩坑,值得拥有。
完成这部分的学习后,可以进一步学习计算机基础知识、软件开发过程、软件架构设计、UML技术、XML技术、设计模式以及面向构件的软件设计等内容。掌握这些知识是成长为架构师的必要条件。 进一步地,系统架构师需要...
WikiPedia 技术架构学习分享 Tailrank 网站架构 LinkedIn 架构笔记 Yahoo!社区架构 Craigslist 的数据库架构 Fotolog.com 的技术信息拾零 Digg 网站架构 Amazon 的 Dynamo 架构 财帮子(caibangzi.com)网站架构
SpringCloud微服务架构笔记(二) 本资源摘要信息主要讲解了使用Feign来实现微服务架构中的服务调用。Feign是一个声明式、模板化的HTTP客户端,由Netflix开发,灵感来自Retrofit、JAX-RS 2.0和WebSocket。Feign可以...
本篇复习笔记主要涵盖了2021年系统架构师考试的关键知识点,旨在帮助有一定基础的考生快速掌握考试所需的知识,提升通过率。笔记首先介绍了系统架构的概念及其发展历史,强调了规划在架构中的核心地位。系统架构包括...
本文主要讨论了大型网站架构的演进过程,以及在这个过程中遇到的问题和相应的解决方案。 大型网站架构的演进通常由以下几个阶段组成: 1. **单机架构**:最初,网站可能基于Java技术,通过单台服务器承载所有业务...
各大网站架构总结笔记,总结了对于海量数据,高并发访问,存储,索引等应用
本文总结了 Spring Cloud 微服务架构笔记(一),涵盖了微服务基础知识、系统架构演变、单体应用架构、垂直应用架构、分布式 SOA 架构、微服务架构、分布式核心知识等方面的知识点。 微服务基础知识: 1. 微服务...
电商高并发、高可用技术架构学习笔记
读书笔记:《大型分布式网站架构设计与实践》代码
同时,架构需要不断演化以适应业务的发展,这个过程涉及到识别复杂度、设计备选方案以及评估和选择方案。 4. 架构设计流程包括:从评估和选择备选方案开始,包括横向扩展、系统拆分和360度环评,到详细方案设计,...
该脑图是通过阅读《亿级流量网站架构核心技术》拓展过来的,针对书中的重点知识点做了汇总和梳理,知识点明晰,可以依据此图,选择性学习
笔记记录分享-笔记记录分享网站-笔记记录分享网站源码-笔记记录分享网站java代码-笔记记录分享网站设计与实现-基于springboot的笔记记录分享网站-基于Web的笔记记录分享网站设计与实现-笔记记录分享项目-笔记记录...