大型网站技术架构 读书笔记1 大型网站架构模式

架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

关于什么是模式,这个来自建筑学的词汇是这样定义的:“每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作”。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。

针对现在的高并发访问,海量数据处理,高可靠运行等一系列问题,众多大型互联网公司提出了各种系统解决方案。这些优秀可靠的方案又被别的网站重复使用,从而形成了模式。

1 分层

分层,这个很好理解。J2EE里经常使用的表现层,应用层,持久层。就是这个逻辑。当然,更细的,我们可以把表现层再细分为视图层与业务逻辑层,前者由美工负责,后者由工程师负责。而应用层,我也能再细分为数据接口层与逻辑处理层,前者做数据的转换,后者是真正的逻辑处理与运算。

2 分割

分割与分层刚好垂直。例如在系统里,把退款和购物这个两个功能分割开来,包装成高内聚低耦合的模块单元。

分层是横向划分,分割是纵向划分。

3 分布式

这个略麻烦。

把经过分层和分割的不同模块部署在不同的服务器上,通过远程调用来协同工作就是分布式。

分布式的优势在于:整个系统可以有更多的硬件/软件资源来对外提供服务,能够应对的并发量也会增大。

劣势在于:1 模块间的调用得通过网络,这样性能会降低一些。

2 因为整个系统被拆分到了多个服务器上,因而系统内部出现宕机的可能性就会增大,一旦有宕机情况发生,就会影响应用。

3 数据一致性不好把握

4 维护比较麻烦

总而言之,得看具体情况,不能为了分布式而分布式。

分布式的具体策略有下面几种:

1 分布式应用和服务

这个请参考 我对Java分布式系统的一点认识

文章写的不错

就看图1 ,就是各个应用之间的互相调用。

对于分布式系统中的某个应用来说,它的入口往往有三个:

远程过程调用(其他应用来调用我的服务)、

消息中间件(我订阅了其他系统的消息,其他系统会给我发消息)、

web访问(主要访问页面)。

它的出口则有很多:远程过程调用(调用其他应用的服务)、消息中间件(我向消息服务器发消息,供其他应用消费)、访问分布式缓存、访问分布式日志、访问数据库,执行调度任务。有了入口和出口,剩下的就是应用的核心部分,包括核心逻辑代码和辅助框架。对于分布式系统来说,有个东西必不可少,那就是配置中心。无论是远程过程调用、消息中间件还是分布式缓存,它们都需要从配置中心获取地址列表。

请问:远程过程调用,消息中间件有什么区别

远程调用是指另外的模块直接调用本应用中的一个方法。(请参考Dubbo框架)

消息中间件这块,就是说我收到了来自其他应用的消息,我根据消息来做某些事。(请参考ActivityMQ或RocketMQ)

2 分布式静态资源

说白了就是把js,css,图片等静态的资源独立部署,并采取独立的域名。

这样一来可以降低应用服务器的压力,二来还可以因为独立域名而加快浏览器并发下载的速度。

关于浏览器并发下载资源的问题,请参考

不同浏览器对于同一域名的并发获取(加载)资源数是有限的

3 分布式数据和存储

这个我没看懂,后面再说。

4 分布式计算

应该就是把一个复杂的运算过程,拆解成n个小的过程,然后用n台服务器处理,最后再把结构汇总。

4 集群

集群就是有多个组件来干同一件事情。

最简单的,一个tomcat不行,我就来十个。当然对外,我们得提供一个负载均衡设备,对外部来说,就只有一个应用系统。

5缓存

1 cdn

CDN的全称是Content Delivery Network,即内容分发网络。说白了就是把静态资源(或者是较少变化的资源)放在里用户物理距离更近的网络服务商的服务器上,如果这里有数据,就不用往后走了。

2 反向代理

这里也是缓存的数据,不过它与cdn不同在于,cdn在网络服务商的机房,而反向代理属于网站前端架构的一部分,如果这里有数据,就不用访问应用服务器了。

3 本地缓存

本地缓存主要保存在内存中,如果这里有数据,就不用访问数据库了。

4 分布式缓存

如果本地缓存(也就是内存)不够用了,就采用分布式缓存。

使用缓存有两个前提

1 某些数据要经常被访问

2 数据在一定时间内是有效的,不会马上过期。

6 异步

在前面的说的分层,分隔,分布,多个模块间的相互调用并不是直接调用。而是异步的。也就是说,之前,a调用b,只有等b执行完毕之后,a才会去做其他事。而异步的情况是,a调用b,准确的说是,a发布一个消息,b看到了就去执行,在b执行的过程中,a已经去干别的事情了。

在单机环境下,多个模块间的调用"消息"保存在内存的消息队列中。

在分布式情况下,多个模块就通过分布式消息队列来实现异步。

异步架构就是典型的生产者消费者模式。

异步有这样几个好处

1 调用者与被调用者解耦,只要数据结构布局,两个模块内部可以随意变化,而不用担心影响对方。

2 提高系统的可用性。如果消费者宕掉了,生产者会继续发布消息,对外来说,系统仍是可用的。等消费者恢复了,再继续去处理消息即可。

3 加快网站响应速度。

4 消除并发高峰。

7 冗余

多台应用服务器,一个宕掉,另一个还能用

多台数据库服务器(或者说就是数据库),一个断电,地震,海啸了还有别的可以用。

8 自动化

发布过程自动化:自动化代码管理 、自动化测试、自动化安全检测、自动化部署

网站在运行过程中可能会遇到各种问题:服务器宕机、程序Bug、存储空间不足、突然爆发的访问高峰。

自动化监控、自动化报警、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源

完全看不懂。或者说看懂了,不知道怎么实现自动化

9 安全

通过密码和手机校验码进行身份认证

网络通信加密(登录、交易等)

存储敏感数据加密处理

网站验证码

常见攻击处理:XSS攻击、SQL注入

垃圾信息、敏感信息过滤

风险控制(对交易转账等重要操作)

时间: 2024-12-22 09:49:59

大型网站技术架构 读书笔记1 大型网站架构模式的相关文章

大型网站技术架构 读书笔记4 高可用架构

说句掏心窝的话,高可用甚至比高性能更重要.为什么? 因为你把系统的性能优化10倍,你的老板可能会说:小董呀,干的不错. 可是,如果你负责的模块,三天两头就宕掉了,嘿嘿,你懂得. 可用性度量 99%-----网站年度不可用时间小于88个小时 99.9%---网站年度不可用时间小于9个小时 99.99%---网站年度不可用时间小于53分钟 高可用架构 一般的互联网公司大多采用pc级服务器,开源的数据库和操作系统,这样来说,当然节省成本,不过另一方面来说,服务器宕机就是一个大概率事件了. 所以,高可用

大型网站技术架构 读书笔记2 大型网站核心架构要素

通常情况下,一个网站的架构出来功能性需求外,还应该考量以下五个方面: 性能 可用性 伸缩性 扩展性 安全性 性能 性能的官方解释,我就不说了.对用户来说,就是系统的反应速度是否快. 对网站来说,性能问题是无处不在的,继而,我们优化性能的手段也有很多. 我们从前到后一个一个来说 在浏览器端,可以通过浏览器缓存,页面压缩,合理布局页面等方式 还可以使用cdn,让一些静态文件放在网络服务商的机房,这样离用户近一些. 也可以使用反向代理,把静态文件存在反向代理服务器上,例如apache 服务器端就是缓存

大型网站技术架构读书笔记目录

这是一本什么样的书籍 <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型.架构设计.性能优化.Web安全.系统发布.运维监控等在内的大型网站开发全景视图.虽然没有相关的细节内容,不妨碍一览众山小大型网站的各个方面. ? 为什么会读此书 为以后有机会做大型网站做技术储备,深入了解大型网站建设的各个方面.以此形成笔记,方便以后复习和查阅,必经书读一遍是远

读书笔记2大型网站的架构模式

? 一.分层 最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责.网站一般分为三个层次:应用层.服务层和数据层,其具体结构如下图所示: 通过分层,一个庞大系统切分成不同部分,便于分工合作和维护. 但是,分层架构也有一些挑战:①必须合理规划层次边界和接口:②禁止跨层次的调用及逆向调用. 二.分割 分割是在纵向方面对软件进行切分->将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,有助于软件开发和维护,还便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力. 三.

Linux内核架构读书笔记 - 2.5.3 处理优先级

1 优先级的内核表示 内核使用 0 - 139 表示内部优先级,值越低,优先级越高.0 -99 实时进程使用 nice 值 [-20,19]映射到范围100 - 139,如下图 内核定义了一系列宏来辅助优先级之间的转换 sched.h 1 /* 2 * Priority of a process goes from 0..MAX_PRIO-1, valid RT 3 * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH 4 *

Linux内核架构读书笔记 - 2.5.2 数据结构

调度系统各个组建关系如下 激活调度器两种方法:进程睡眠或其他原因放弃CPU,周期性检测 上述两个组件统称为通用调度器或核心调度器. 调度器用于判断接下来运行那个进程,内核支持不同的调度策略( 完全公平调度 实时调度 无事可做的空闲调度进程) 调度器被调用时候 需要执行体系相关的进程上下文切换 每个进程属于某个调度器类,各个调度器负责管理所属进程,通用调度器不涉及进程管理,都由调度器来 下面分别讲述: task_struct 成员 sched.h 1 struct task_struct { 2

《软件测试方法和技术》 读书笔记

<软件测试方法和技术> 读书笔记 2014-07-17 第一章 引论  1.3 什么是软件测试  1.4 软件测试与软件开发的关系第二章 软件测试基本概念  2.1 软件缺陷  2.3 软件测试的分类  2.4 测试阶段  2.5 软件测试的工作范畴第三章 软件测试方法  黑盒测试    边界值测试    等价测试      报表日期      三角形    基于决策表的测试      NextDate函数  白盒测试    语句覆盖    判定覆盖    条件覆盖    判定条件覆盖   

Linux内核架构读书笔记 - 2.5.4 核心调度器

什么是核心调度器? 参考前面的博文http://www.cnblogs.com/songbingyu/p/3696414.html 1 周期性调度器 作用: 管理内核中与整个系统和各个进程的调度相关的统计量 负责当前调度类的周期性调度方法 kernel/sched.c 1 /* 2 * This function gets called by the timer code, with HZ frequency. 3 * We call it with interrupts disabled. 4

漫谈架构读书笔记

漫谈架构阅读笔记 阅读了漫谈架构这本书后,感受颇深.在此书中,文章书写简单易读,并没有过多的专业词汇,其中还不乏举出了许多生动有趣的例子给人以印象深刻,我认为,此书写的确实不错,值得阅读. 首先关于什么是架构?结合文章和最近所学我认为架构就是软件的框架,软件在设计好的框架中生产运行发展与维护,联系文章世间万物皆有框架,从最早的木头到桌子椅子,做成这一事物所依赖的标准原则便是架构.人的出行时做火车还是汽车还是飞机取决于要去的地方与所需的其他要求,每个交通工具有自己的特点,其相互运行却互不打扰,是架