《大型网站技术架构》读书笔记 - 架构的模式
大CC上周写的读书笔记记录的是网络的升级路线,其中用到的各种技术手段只是点到即止(《大型网站技术架构》读书笔记 - 网站的技术升级路线);今天写的第二篇笔记,讨论架构的模式;这篇文章,其中主干是书中的重点笔记,分支和内容则是我展开的思考,如有不对的地方,还请大家指出;
需要说明,模式不是万能的,任何模式都是一定应用场景的经验总结;离开具体的场景生搬硬套就偏离的模式总结的初衷;
分层
随着应用框架的普及,分层的概念已经深入人心;从我们学习写web代码开始,框架就要求我们通过分层开发来适应框架的结构;只是到后来,才逐渐体会到分层带来的好处;
最基本的分层一般分为以下三层:
应用层:面向终端用户的应用;
服务层:为应用层提供服务的通用服务;
数据层:数据存储层;
分层架构是逻辑上的,但物理上也可部署在不同的机器上。
分割
网站大了,通过分割网站的功能和业务,大而化小,将不同的模块分布式部署,从而提高并发处理能力和功能扩展能力;
分布式集群
当单机负载无法满足我们的需求时,就会考虑分布式:
分布式静态资源 (动静分离)
这是最为简单的分布式,将网站中的静态资源分离出去,部署到别的机器上, 减轻应用服务器压力;这种分离最为简单,而且性能提升明显;同时,采用独立域名,加大浏览器的并发加载量,让网站更快的呈现在用户面前;web优化中有这么一个优化顺序,先前端后后台,前端优化是需要时间最少而见效最快的方式,关于具体的优化步骤和效果,可以参考大CC之前写的这篇文章:WEB站点性能优化实践(加载速度提升2s)
分布式应用和服务
分层和分割后的应用分布式部署,提升性能、增加网站的伸缩性和扩展性;
分布式数据和存储
包括关系数据库的分布式和NoSQL的分布式;关系数据库的分布式,可以细分为分表和数据分片;数据库的分布式不是那么简单,阿里的OceanBase项目貌似是做到了关系数据库的分布式;
Nosql的分布式相对简单许多,例如新浪的redis使用场景,就是分布式存储微博内容;关于新浪redis的分布式应用,请移步这篇文章:Redis 在新浪微博中的应用
分布式计算
以Hadoop和MapReduce为代表的分布式计算,主要应用场景为日志分析、索引建立,数据挖掘等,实时处理的分布式计算还是见得少;
分布式要注意的问题
任何事务都有其两面性,分布式并不一定就是好的,在网络访问量小的时候,没必要分布式,单机处理能大大节省运维成本;
分布式需要注意以下问题:
-
分布式服务器见通信的网络开销
-
服务器多了,服务器宕机概率增大
-
如何保持分布式存储的数据的一致性,一台机器宕机后故障恢复,如何保证一致性;
-
分布式事务难以保证
-
分布式部署后,结构会复杂很多,这带来了维护的困难
缓存
最简单的缓存是本地缓存:有页面缓存、前端页面静态化、前端页面的片段化缓存、以及数据缓存;大CC之前介绍过一篇关于Yii的缓存配置,有兴趣可以参考:Yii 的缓存(页面缓存配置实例)
需要缓存的内容多了,单机装不下,就得考虑分布式缓存;
反向代理也是缓存的一种,反向代理将缓存放到了应用层的前面,用户请求还未接入到应用层,反向代理就将之前被访问过的内容返回给用户;
CDN也是缓存,一般由第三方服务商提供;相比反向代理,CDN这个缓存与用户又近了一步;
下图展示了用户的WEB请求中会遇到的缓存;
CDN提供最基础的缓存(静态化的页面和静态资源(css、js等);
反向代理提供与CDN类似的数据;
WEB服务器的缓存提供片段化的缓存和警惕资源缓存;页面中变化的部分则需要通过web服务器生成,其中涉及到调用应用服务器;
应用服务器中的缓存为计算结果的缓存;主要是内容缓存;基础数据缓存;
异步
使用SEDA(分段消息驱动)设计,异步非阻塞技术,可提高系统可用性,加快网站响应速度;
异步还有个好处,就是消除并发访问高峰;发到后台的请求通过消息队列存起来,起到缓冲作用,后台按照其处理能力依次处理;
在实现上,单一服务器上使用多线程共享内存队列来实现异步,在集群中,通常使用分布式消息队列来实现,比如我们用到的MQ、ZeroQ等;
冗余
考虑到数据安全,备份必不可少;冷备份没有什么好说的,主要是热备,架构的设计中需要考虑数据的热备;
自动化
自动化应该是程序员最应该掌握的基础技能;一般而言,自动化要求的技术含量不是很高,但却是长期实践的经验结晶;自动化能有效的降低公司运营成本,提升程序员的生活质量,想想就欢乐,重复的工作都交给机器来做,创造性的工作才需要人来参与嘛;自动化主题广泛,大致包含以下方面:
发布过程自动化
自动化代码管理
自动化测试
自动化部署
自动化监控
自动化失效转移和恢复
自动化降级
自动化分配资源
附:思维导图
卓越亚马逊地址: 《大型网站技术架构》
点击查看原图
Posted by: 大CC | 10APR,2014
博客:blog.me115.com [订阅]
微博:新浪微博
相关推荐
3. **架构模式** - 分层架构:将系统分为多个独立的层次,每一层负责不同的功能。 - 微服务架构:将大型系统拆分为小型、独立的服务,每个服务都可以独立部署和扩展。 - MVC(模型-视图-控制器):分离用户界面、...
分布式商城项目笔记-乐优商城,是一个以Java技术为核心的电商系统开发案例,旨在提供全面、深入的学习材料,帮助开发者理解并掌握分布式系统在实际商业场景中的应用。该项目笔记包括了详细的课程内容,辅以丰富的...
学习如何利用Android组件(Activity、Service、BroadcastReceiver、ContentProvider)以及现代开发模式(如MVP、MVVM)将应用解耦,有助于构建大型、复杂的应用程序。 最后,持续学习和关注Android的新特性和更新也...
SSH2整合是提升开发效率,简化项目架构的重要手段,尤其对于大型企业级应用来说,其价值不言而喻。 **Struts2框架** Struts2是Apache软件基金会的一个开源项目,它是基于MVC设计模式的Web应用框架。Struts2的核心是...
《Springboot实现学生读书笔记共享平台》 在当今数字化时代,知识分享与交流的重要性日益凸显。本论文聚焦于使用Java语言和Springboot框架构建一个学生读书笔记共享平台,旨在为大学生提供一个便捷、高效的在线学习...
### SQL Server 2005 读书笔记 #### 一、SQL Server 2005 概览 **SQL Server 2005** 是微软公司发布的一款企业级数据库管理系统,它是在 SQL Server 2000 基础上的重大升级版本。此版本在性能、安全性、可管理性等...
2. **控制策略**:描述如何根据电网需求信号,调整笔记本电脑的电源管理设置,如CPU频率、屏幕亮度、休眠模式等,以减少或增加功耗。 3. **通信协议**:说明系统如何与电网运营商进行数据交换,接收需求响应信号,...
7. **架构模式和原则**:熟悉常见的架构模式(如分层、事件驱动、面向服务等)及其背后的指导原则,如单一职责原则、开放封闭原则等。 8. **项目管理和协作**:理解在大型项目中如何有效地进行沟通、协作和决策,...
再者,JavaWeb中的MVC(Model-View-Controller)设计模式是常见的架构模式。Model代表业务逻辑,View负责显示数据,Controller处理用户请求并协调Model和View。Spring框架的MVC模块是实现这一模式的典型工具,它提供...
以下是对这些阅读笔记的详细解读: 1. **数据仓库与 OLTP 系统的对比**: 数据仓库(Data Warehouse)和在线事务处理(OLTP)系统是两种截然不同的数据库应用场景。OLTP系统主要服务于实时业务操作,强调高并发的...
- **developerWorks**:IBM的技术社区网站,提供了大量的技术文章、示例代码等资源,对于深入学习非常有帮助。 #### ESB产品对比 - **IBM与BEA的产品对比**: - **IBM**:拥有较为完善的产品线,不仅提供了不同...
3. **分层架构**:这是一种常见的架构模式,将系统划分为多个独立的层次,如表示层、业务逻辑层、数据访问层等,各层之间有明确的责任划分。 4. **微服务架构**:近年来流行的架构风格,将大型软件系统拆分为一组小...
9. **系统设计**:作为"系统开源"标签的一部分,笔记可能还会涉及大型系统的设计和架构,这对于面试Google等大公司的系统设计岗位特别重要。 10. **实战经验**:师兄在笔记中分享的不仅仅是理论知识,还有他在解决...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据存储、管理和处理方面具有卓越性能。"Oracle经典学习笔记"显然是一份全面且深入的教程,旨在帮助学习者掌握Oracle的核心概念和技术。这份笔记...
笔记可能包含了CDN(内容分发网络)的使用、HTTP/2协议的应用、Gzip压缩、资源合并与压缩等技术,这些都有助于降低网络延迟,提高页面加载速度。 最后,容错与恢复策略也是亿级流量系统设计的重点。例如,断路器...
通过阅读和理解这些笔记和思维导图,开发者不仅可以巩固已有知识,还能发现自己的知识盲区,进一步提升前端开发技能。同时,这些资源也是很好的复习材料,对于准备面试或项目开发都大有裨益。 总之,“前端思维导图...
J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司提供的一个用于构建企业级分布式应用的平台,它包含了多种服务、API和组件,旨在简化开发和部署大型、多层架构的应用程序。这份笔记涵盖了J2EE的核心概念、...
《mldn学习笔记——网络编程》这篇博客主要探讨了计算机网络编程的相关概念和技术,结合提供的文件《215_网络编程.pdf》,我们可以深入学习这一主题。网络编程是IT领域中的核心部分,它涉及到如何通过网络进行数据...
Struts是一个MVC(Model-View-Controller)架构的Web应用框架,分为Struts 1和Struts 2两个版本。它提供了一种标准的方式来构建和维护大型企业级Web应用程序。 #### Ajax Ajax(Asynchronous JavaScript and XML)...