写点什么

架构师训练营 第四周 系统架构作业

用户头像
且听且吟
关注
发布于: 2020 年 07 月 01 日

作业

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。



以下将会以大型互联网应用系统的架构要素为维度,分别从性能、可用性、伸缩性、扩展性和安全性几个角度列举架构技术要点。

1、性能

定义

性能是网站的一个重要指标,不同的视角下有不同的性能标准,不同的标准有不同的性能测试指标,例如:从开发和测试人员的视角,网站性能测试的主要指标包括:RT(响应时间)、Throughput(吞吐量)、HPS(每秒点击数)、TPS(每秒事务数)等。

技术方案

Web前端性能优化技术

1)CDN加速:

CDN(Content Distribute Network)是内容分发网络,本质上还是缓存,由于CDN部署在网络运营商的机房,这些运营商又是终端用户的网络服务提供商,因此用户请求路由的第一站就到达了CDN服务器,当CDN中存在用户请求的资源时,以最短路径返回响应,加快用户访问速度,减少数据中心的负荷。



2)反向代理

反向代理服务器可以通过配置缓存功能加速Web请求,当用户第一次访问静态内容的时候,静态内容被缓存在反向代理服务器上,其他用户访问的时候可将反向代理的缓存直接返回,加速响应速度,减少对应用服务器的访问压力;同事可通过内部通知机制通知反向代理服务器缓存失效的动态资源,重新加载最新的动态内容,实现了对动态资源的缓存。

应用服务器性能优化技术

1)高性能缓存架构

缓存的基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。缓存能够带来性能的大幅提升,但同时也给架构引入了更多复杂性,需要避免缓存穿透、缓存雪崩、缓存热点等问题。



2)高性能数据库集群

关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前是互联网业务系统的核心存储系统,但是随着互联网业务的发展速度和数据增长速度,单个数据库服务器已经难以满足业务需要,必须考虑数据库集群的方式来提高性能。高性能数据库集群的第一种方式是“读写分离”,其本质是将访问压力分散到集群中的多个节点;第二种方式是“分库分表”,既可以分散访问压力,又可以分散存储压力。



3)高性能NoSQL

常见的 NoSQL 方案分为 4 类:

K-V 存储:解决关系型数据库无法存储数据结构的问题,以 Redis 为代表。

文档数据库:解决关系型数据库强 schema 约束的问题,以 MongoDB 为代表。

列式数据库:解决关系型数据库大数据场景下的 I/O 问题,以 HBase 为代表。

全文搜索引擎:解决关系型数据库的全文搜索性能问题,以 Elasticsearch 为代表。



2)消息队列异步通信

使用消息队列将调用异步化,可以有效的改善网站系统的性能。在不使用消息队列的情况下,用户的请求在高并发的情况下,会对应用服务器和数据库造成巨大的压力,同时也会使得响应延迟加剧。使用了消息队列后,通过异步机制,将短时间高并发产生的事务消息存储在消息队列中,消息队列的消费者进程会按照一定的顺序获取消息数据进行业务处理,有效抵御了高并发请求对系统的冲击。消息队列中间件是分布式系统中重要的组件,目前使用较多的消息队列中间件主要包括ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。



3)高性能负载均衡和集群

单服务器无论如何优化总会有性能极限,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法。对于任务分配器,现在更流行的通用叫法是“负载均衡服务器”。

常见的负载均衡系统包括 3 种:

DNS 负载均衡:是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。

硬件负载均衡:通过硬件设备来实现负载均衡功能,目前业界典型的硬件负载均衡设备有F5 和 A10。

软件负载均衡:通过负载均衡软件来实现负载均衡功能,常见的有 Nginx 和 LVS。

2、可用性

定义

可用性是在某个考察时间,系统能够正常运行的概率或时间占有率期望值。

技术方案

1)高可用存储架构,双机架构

存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,常见的高可用存储架构有主备、主从、主主、集群、分区等。

主备复制:是最常见也是最简单的一种存储高可用方案,几乎所有的存储系统都提供了主备复制的功能,例如 MySQL、Redis、MongoDB 等。

主从复制:主机负责读写操作,从机只负责读操作,不负责写操作。

双机切换:以上两个方案存在两个共性的问题:1、主机故障后,无法进行写操作。2、如果主机无法恢复,需要人工指定新的主机角色。该方案是为了解决这两个问题而产生的,包括主备切换和主从切换两种方案。简单来说,这两个方案就是在原有方案的基础上增加“切换”功能,即系统自动决定主机角色,并完成角色切换。

主主复制:指的是两台机器都是主机,互相将数据复制给对方,客户端可以任意挑选其中一台机器进行读写操作。



2)异地多活架构

高可用架构的本质都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有可能所有服务器都出现故障。例如,典型的有机房断电、机房火灾、地震、水灾……这些极端情况会导致某个系统所有服务器都故障或者业务整体瘫痪,而且即使有其他地区的备份,把备份业务系统全部恢复到能够正常提供业务,花费的时间也比较长。如果业务期望达到即使在此类灾难性故障的情况下,业务也不受影响或者在几分钟内就能够很快恢复,那么就需要设计异地多活架构。

根据地理位置上的距离来划分,异地多活架构可以分为同城异区、跨城异地、跨国异地



3)通过负载均衡进行无状态服务的失效转移

负载均衡,顾名思义,主要是用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡的手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。负载均衡起到了系统高可用的作用,因此即使某个应用访问量非常少,如果需要保证服务高可用,也必须至少部署两台服务器,使用负载均衡技术构建一个小型的集群。

3、伸缩性

定义

伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发压力和不断增长的数据存储需求。

技术方案

无状态应用服务器集群的伸缩性

应用服务器应该是无状态的,即应用服务器不存储请求上下文信息,如果将部署有相同的服务器组成一个集群,每次用户请求都可以发送到集群任意一台服务器处理,且任何服务器的处理结果都是相同的,主要涉及的技术包括:HTTP重定向负载均衡、DNS域名解析负载均衡、反向代理负载均衡等。

4、扩展性

定义

可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。

技术方案

1)利用分布式消息队列降低业务的耦合性

如果模块之间不存在直接的调用,那么新增或者修改模块就会对其他的模块影响最小,系统的可扩展性也较高。在大型网站中,通常使用分布式消息队列保持模块的松散耦合,并且借助事件消息的通信完成模块之间的合作。



2)微服务

微服务架构风格是一种将单个应用程序开发为一组小型服务的方法,每个小服务运行在自己的进程中,并且以轻量级机制(通常是HTTP REST API)通信。这些服务是围绕业务能力建立的,并且可以由完全自动化的部署机构独立部署。这些服务的集中管理只有最低限度,可以用不同的编程语言编写并且使用不同的存储技术。

主要特征包括:技术异构性、支持功能降级和弹性处理、支持横向扩展、独立部署并部署简化、与组织结构相匹配(康威定律)、服务可组合、服务可替代性。

5、安全性

定义

系统的安全架构就是保护系统不受到恶意访问和攻击,保护网站的重要数据不被窃取。

技术方案

1)信息加密技术以及密钥安全管理

主要技术包括:单向散列加密、对称加密、非对称加密、密钥安全管理;



2)信息过滤与反垃圾

主要技术包括:文本匹配、分类算法、黑名单;



3)电子商务风险控制

主要技术包括:风控等。



内容引用和参考:

1)大型网站技术架构.核心原理与案例分析,李智慧

2)从0开始学架构,李运华

发布于: 2020 年 07 月 01 日阅读数: 94
用户头像

且听且吟

关注

没有绝世高手 2018.06.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第四周 系统架构作业