第四周作业
一个典型的大型互联网应用系统使用了那些技术方案和手段,主要解决什么问题?
请列举描述。
首先介绍一下,大型互联网应用架构几个概念。
分层:讲系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
分割:分割就是在纵向方面对软件进行切分,将不同的功能和服务分割开来,包装成高内聚 ,低耦合的模块单元。一方面有助于软件的开发和维护,另一方面,便于不同的模块的分布式部署。
分布式:
分布式意味着解决同样的问题,可以使用更多的机器,计算机越多,CPU,内存,存储资源也就越多 ,
能够处理的并发访问和数据量就越大。
分布式包含: 分布式应用和服务,分布式静态资源,分布式数据和存储,分布式计算
集群:对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡共同对外提供服务。
缓存:缓存就是将数据存放在距离计算最近的位置以加快处理速度,缓存是改善软件性能的第一手段。
缓存包含:CDN,反向代理,本地缓存,远程缓存
异步:在大型网站架构中,系统解耦合的手段除了前面提到的分层,分割等手段,别的手段就是异步,
就是将多个阶段,每个阶段之间通过共享数据而不是之间调用的方式进行协作。
异步发作用:提高系统的可用性,加快网站响应速度,消除并发访问高峰
冗余: 为了防止服务器宕机的影响,需要一定程度的服务器冗余运行,数据冗余备份。
自动化:在无人值守的情况下,网站可以正常运行,一起都可以自动化是网站的理想状态。
安全:互联网的开放特性使得其从诞生起,就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式。
然后再介绍一下,大型互联网应用系统架构的核心要素:
高性能:性能是互联网的一个重要指标,任何架构设计方案都要考虑潜在的性能问题
高可用:应对宕机的问题,主要手段是冗余:应用部署在多台服务器上,数据存在多台服务器上。
安全:判断安全与否的标准,是对现存的各种攻击和窃密手段,是否有应对策略。
可扩展:主要目的是系统的架构能够快速响应需求变化,主要手段是事件驱动架构和分布式服务。
可伸缩:是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。衡量标准是:是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后,是否可以提供和原来服务器无差别的服务。集群中可容纳的总的服务器是否有限制。
下面梳理一下,大型互联网应用系统使用了那些技术方案和手段,主要解决什么问题。
3.1 前端架构
3.1.1 CDN服务
CDN的全称是Content Delivery Network,即内容分发网络。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
3.1.2 动静分离
让静态的资源只走静态资源服务器,动态的走动态的服务器;
让程序上将不经常发生改变的内容静态化,经常变化的内容动态化,实时显示或者是一段时间变化显示3,让运算资源文件(php,aspx,jsp)等与静态资源文件(jpg,png,css,js)走不同的文件;
提升资源的利用率,让用户更快,效率更高。
3.1.3 图片服务
分布式文件系统的一个具体实现,因为图片类文件的耗费服务器资源,所以单独讲图片拿出来做一个服务使用。
加入web应用的访问速度,解耦应用,去关注核心功能。
3.1.4 反向代理
如果一个代理服务器可以代理外部网络主机访问内部网络,这类代理服务模式称之为反向代理服务。
反向代理缓存服务器,如Squid,Nginx:(提高了内部服务器的安全),可用来作为Web加速,就是使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
提高访问效率,提高了内部服务器的安全
3.1.5 DNS、GeoDNS
DNS(Domain Name System)域名服务,是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
其中,GeoDNS是根据IP判断位置,选择数据中心,来提高访问速度的。
更方便快速的访问互联网
3.1.6 HTTPs/HTTP
HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
HTTPS (Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 [1] 。HTTPS 在HTTP 的基础下加入SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
规定WWW服务器与浏览器之间信息传递规范
3.2 网关和应用层架构
3.2.1 网关架构
网关(Gateway)又称网间连接器bai、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
3.2.2 分布式缓存服务器:解决单一服务器的压力
3.2.3 负载均衡(Linux Virtual Server、Nginx)
解决客户端访问并发的问题,分派到不同的应用服务器
3.2.4 动态页面静态化:讲内容很少变化的页面静态化,不用每次重新生成页面。提高访问效率
业务拆分:解耦业务,降低不同业务之间的影响
3.3 服务层架构
3.3.1 微服务框架
它解决了复杂性的问题。它将一个可怕的、庞大的整体应用分解成一组服务
这种架构使得每个服务可以由单独的团队独立开发,这些团队可以专注于某个服务
3.3.2 分布式消息队列:ActiveMQ,RabbitMQ,RocketMQ,Kafka
解耦:
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。
异步:
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度
削峰:
并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常
中间件模式:
系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的
通过以上的策略,加快消息的处理
3.3.3 分布式缓存 Memcached集群,Redis集群
通过从缓存读取数据,加快访问数据的速度
3.3.4 分布式一致性(锁)服务(如:Chubby)
如果是单机情况下(单JVM),线程之间共享内存,只要使用线程锁就可以解决并发问题。
如果是分布式情况下(多JVM),线程A和线程B很可能不是在同一JVM中,这样线程锁就无法起到作用了,这时候就要用到分布式锁来解决。
3.4 存储层架构
3.4.1 分布式文件:
如NFS:(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。
将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。
加速资源的访问速度
3.4.2 分布式关系数据库:
数据库读写分离,主、从库数据库的拆分(水平拆分,垂直拆分)
将不同功能的数据库模块拆分,从而加快数据的访问
3.4.3 NOSQL数据库:
例如MongoDB,同等的成本下发挥更好的作用(灵活性、性能等)
3.4.4 分布式存储:TFS
如TFS(Taobao File System)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统。
主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问
3.4.5 数据的冷热分离(数据库层面):
将不会经常访问的数据,看做冷数据,单独存放。
减小对现在热数据访问速度的影响
3.5 后台架构
3.5.1 大数据平台
1、容纳海量数据
2、速度快
3、兼容传统工具
4、利用Hadoop
5、为数据科学家提供支持
6、提供数据分析功能
以上的这些功能,能够帮助一个庞大的平台,处理相关的业务
3.5.2 搜索引擎:ISearch,Lucene
提高数据大的情况下的搜索速度
3.5.3 推荐引擎
推荐引擎 ,是主动发现用户当前或潜在需求,并主动推送信息给用户的信息网络。
利用基于内容、基于用户行为、基于社交关系网络等多种方法,为用户推荐其喜欢的商品或内容。
3.5.4 数据仓库
数据仓库是一个面向主题的、集成的、不可更新的、随时间不断变化的数据集合,它用于支持企业或组织的决策分析处理。数据仓库是一个过程而不是一个项目。
信息技术与数据智能大环境下,数据仓库在软硬件领域、Internet 和企业内部网解决方案以及数据库方面提供了许多经济高效的计算资源,可以保存极大量的数据供分析使用,且允许使用多种数据访问技术。
评论