网站架构常识一点通

网站架构常识一点通,第1张

网站架构常识一点通

参考:《大型网站技术架构-李智慧》

文章目录

一、大型网站软件系统的特点二、大型网站架构演化发展历程

初始应用、数据分离使用缓存应用服务器集群数据库读写分离使用反向代理、CDN分布式文件系统、分布式数据库使用NoSQL和搜索引擎业务划分 三、网站架构模式

模式一:分层模式二:分割模式三:分布式模式四:集群模式五:缓存模式六:异步模式七:冗余模式八:自动化模式九:安全 四、网站架构要素和优化策略

1.性能2.可用性3.伸缩性4.扩展性5.安全性

近期,有幸阅读了李智慧作者撰写的《大型网站技术架构》,作者用通俗易懂的语言、多角度描述的方法、三百多页的简短篇幅,将网站架构的演化进程、架构模式、核心要素等知识描述得如此有趣又清晰,使原本枯燥的架构知识变得“平易近人”起来,作为读者的我,在比较轻松的阅读中逐渐领略到了技术架构的魅力。一边阅读一边写下了这篇读书笔记,希望可以为同样想了解一些网站架构常识的人带去些许帮助。

本文将重点放在架构常识的梳理上,而非具体的架构技术和算法。

一、大型网站软件系统的特点

要想摸清楚网站技术架构的来龙去脉,不如先从大型网站软件所具备的一般特点入手。一般大型网站软件系统具有以下几个特点:

高并发,大流量: 需要面对千万级甚至上亿的日均PV数。这些网站包括了如今全民使用的淘宝、京东、拼多多等购物网站,也包含了QQ、微信、微博等社交网站。高可用: 需要为广大网民们提供24小时不间断的有效服务。海量数据: 需要使用大量服务器来存储和管理海量的数据。用户分布广泛,网络情况复杂: 许多网站的用户遍布全球,用户分布范围的广泛,使得网站不得不面对各地千差万别的网络情况。网络环境恶劣: 随着互联网时代的快速发展,网络攻击、泄露等现象的频繁发生,使得大型网站不得不充分考虑网络安全问题。需求快速变更,发布频繁: 为了快速适应市场需求,网站需要不断地迭代版本,以更好地满足用户需要。渐进式发展: 所有的大型网站都是从小网站开始不断扩展的。 二、大型网站架构演化发展历程

大型网站架构需要处理由高并发、高可用、海量数据、需求快速变更、渐进式发展等特点带来的技术问题。然而,在最初的时候,网站系统往往并没有后期那般庞大,而是以单一、纯净的形式存在着,随着后期需求的不断扩张也不断地走向复杂和完善。也就是说,大型网站的架构一般是渐进式的:

初始

应用程序、文件、数据库都在同一个服务器上。

应用、数据分离

不同特性的服务器承担不同的服务角色:应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘。

使用缓存

本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限;远程分布式缓存可以使用集群的方式,可以在理论上做到不受内存容量限制的缓存服务。

应用服务器集群

通过负载均衡调度服务器,可将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上

数据库读写分离

配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。

使用反向代理、CDN

CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器是反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

分布式文件系统、分布式数据库

分布式数据库是网站数据库拆分的最后手段,不到不得已时,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

使用NoSQL和搜索引擎

NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。

业务划分

根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

注释:
反向代理
CDN

三、网站架构模式

在上一章,我们学习了大型网站架构的演化发展历程,不难看出,为了满足不同阶段的需求,网站的发展过程中需要采用合理的网站架构模式来实现高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。

模式一:分层

现在的网站一般是三层架构:应用层、服务层、数据层。

各层负责的任务具有相互独立性,层与层之间通过接口调用服务。网站一开始的分层架构对后期的高并发、分布式升级具有至关重要的作用,因此应在一开始就采用这种模式。

模式二:分割

对于业务复杂的大型网站,功能的分割不仅有利于代码的开发和维护,还有利于不同模块间的分布式部署,从而提高项目的并发性。分割的粒度应以网站的实际情况为准。

模式三:分布式

虽然分布式部署能提高网站的并发性,但与此同时也带来了相应的弊端。分布式部署的服务器越多,带来的维护代价就是管理复杂、可用性降低等后果,因此我们应该只在必要的时候才采用分布式架构。

常见的分布式方案:

分布式应用和服务: 将分层、分割后的应用分布式部署,降低开发复杂性、提高并发性、提高复用性。分布式静态资源: 将动态资源和静态资源分开部署,可以有效提高网站性能。分布式数据和存储: 面对海量数据的存储需求,大型网站可以将关系型数据库、非关系型数据库分布式部署,从而提高数据的存储性能。分布式计算: 对于搜索引擎的索引构建、数据仓库的数据分析统计等大规模计算业务,可以通过将计算程序分发到数据所在的位置来加速计算和分布式计算。 模式四:集群

将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。这样做可以提高网站系统的并发性、可用性。

模式五:缓存

缓存是指将用户经常访问的数据放在更近的位置,从而加快访问速度。常见的缓存策略:

CDN: 参考反向代理: 参考本地缓存: 可以在应用服务器本地缓存着热点数据,可以极大地加快数据访问速度,但本地缓存非常有限。分布式缓存: 对于大型网站来说,单机缓存是非常有限的,因此需要部署分布式缓存。 模式六:异步

异步是指将任务分成多个阶段,多个阶段之间共享数据。异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响。

异步带来的好处有加快响应速度、提高系统可用性、流量削峰等,但同样的,异步也不可滥用,建议仅在必要时使用。

模式七:冗余

对于大型网站来说,适量的冗余是有必要的。为了提高系统的可用性,有必要进行定期备份,当一个服务器宕机时不至于导致整个系统瘫痪。

模式八:自动化

一切都可以自动化是网站的理想状态。自动化包含了发布过程自动化、自动化代码管理、自动化测试、自动化测试、自动化测试等等。

模式九:安全

常见的安全策略有(不限于)以下几点:

设置密码、手机校验码来进行身份认证;对交易网络通信、敏感数据等进行加密;使用验证码防止网站攻击;对垃圾信息、敏感信息进行过滤。 四、网站架构要素和优化策略 1.性能

衡量的指标有响应时间、TPS、系统性能计数器等。优化可以从如下几个方面着手:

(1)前端优化

浏览器访问优化:

减少http请求: 合并CSS、合并Javascript、合并图片。将浏览器一次访问需要的Javascript、CSS合并成一个文件,这样浏览器就只需要一次请求。
使用浏览器缓存: 将静态文件缓存在浏览器中,可以极好地改善性能。
启用压缩: 在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效减少通信传输的数据量。
CSS放在页面最上面、Javascript放在页面最下面: 浏览器会在下载完全部CSS之后才对整个页面进行渲染,在加载Javascript后立即执行。
减少cookie缓存传输: 应减少cookie传输的次数。

CDN加速: CDN能够缓存的一般是静态资源,如图片、文件、CSS、script脚本、静态网页等,这些文件访问频度很高,将其缓存在CDN可极大改善网页的打开速度。反向代理: 反向代理具有提高响应速度、负载均衡等功能。

(2)服务器优化

分布式缓存异步 *** 作: 使用消息队列不仅可以改善网站的扩展性,还可以进行事务削峰,提升网站的性能。使用集群: 使用集群,可在忙碌时降低每台服务器的处理请求数量。代码优化: 实现多线程、进行资源复用(单例对象、对象池等)、使用恰当的数据结构、采用有效的垃圾回收机制。 2.可用性

网站应尽可能地7*24可用。任何一次宕机都是一次事故,会为网站带来不可估量的损失。但由于硬件故障是常态,网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。这一切的实现都得依赖网站数据和服务的冗余备份和失效转移。

优化策略简单来说可以有以下几点:

分层与分割: 网站可采用分工明确的三层架构,应用层、服务层、数据层每一层的内部还可以对服务进行粒度合适的划分,各模块各司其职,模块间耦合度较低,业务复用性高。服务器分布式部署: 可以对不同层次的服务器进行分布式部署,通过负载均衡,不仅可以提升网站的并发性,还可以通过备份、失效服务的无状态转移有效降低数据丢失的风险。分级管理: 核心服务使用更好的硬件,服务部署之间有必要的隔离措施避免连锁反应。超时异常: 对于长时间无响应的服务器应解除其对资源的占用,重新调度其他服务器。异步: 通过消息队列来应对服务调用。服务降级: 在网站访问高峰期,对于不断涌现的服务请求,采用拒绝服务及关闭服务等措施。幂等性设计: 必须在服务层保证服务重复调用和调用一次产生的结果相同,即服务具有幂等性。 3.伸缩性

指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。网站的伸缩性架构从实现的方向来看可以分为 对不同功能进行物理分离实现伸缩 、对单一功能通过集群规模实现伸缩 。

4.扩展性

网站的扩展性是指在网站增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。

其核心思想是模块化,并在此基础之上,降低模块间的耦合性,提高模块的复用性。常见的策略如下:

利用分布式消息队列实现的生产者消费者模式降低系统之间的耦合:

利用分布式服务打造可复用的业务平台:

将一个大应用拆分为多个小应用;将复用的业务拆分出来,独立部署为分布式服务。通过这样的纵向拆分与横向拆分,将模块独立部署,降低模块之间不必要的耦合性。


为数据层设置可扩展的数据结构:

使用支持ColumnFamily结构的NoSQL数据库,创建表的时候,只需要指定ColumnFamily的名字,无需指定字段(Column),可以在数据写入时再指定

5.安全性

对于互联网上存在着的各种攻击与数据泄漏等现象,网站应有相应的对策。常见的策略如下:

对网站的敏感数据进行加密: 包括单向散列加密、对称加密、非对称加密。信息过滤与反垃圾: 文本匹配过滤敏感词、通过分类算法过滤广告和垃圾邮件等、通过设置黑名单过滤垃圾信息。

除了以上列举的常见安全性策略,对于类似账号盗取、聊天信息泄露、交易诈骗等更为严重的现象,应采取更具复杂性和防御性的安全策略。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存