架构师训练营 - 命题作业 - 第四周
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
目前技术上遇到的问题主要有:
高并发
高可用
海量数据
全球跨域导致的网络复杂
安全环境恶劣
需求变更快
应对高并发的两个技术方向:
垂直伸缩
通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架 构,所以通常被认为是最简
单的短期伸缩性方案。
水平伸缩
水平伸缩是指通过增加服务器提升计算能力的一类架构方法。当垂直伸缩达到物理瓶颈时,我们只能通
过水平伸缩提升性能。水平伸缩是互联网公司最常用的手段,但也对系统架构提出了更高的要求,小公
司还是得审慎采用。
解决问题的主要手段和方法如下:
DNS
DNS 是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换。它能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的 IP 数串。当查询(域名) IP 时,路由或 ISP 提供连接 DNS 服务器的信息,在一些全球布局的互联网服务中,DNS 可以帮助用户连接到就近部署服务器。
CDN
内容分发网络是一个全球性的代理服务器分布式网络,它从靠近用户的位置提供内容。通常,网页的 HTML、CSS、JS、图片和视频等静态内容由 CDN 提供。
将内容存储在 CDN 上可以从两个方面来提供性能:
从靠近用户的数据中心提供资源
通过 CDN 获取的资源,消耗服务器计算资源
负载均衡
负载均衡器将传入的请求分发到不同的应用服务器和数据库等计算资源中。负载均衡器的效用在于:
防止请求进入不好的服务器
防止资源过载
帮助消除单一的故障点
负载均衡器还能帮助水平扩展,提高性能和可用性。
反向代理
反向代理是一种可以集中调用内部资源的服务;它为用户提供了一个统一接口的 web 服务器。来自客户端的请求先被反向代理服务器转发到可响应请求的服务上,然后代理再把该服务的响应结果返回给客户端。反向代理的好处是:
隐藏后端服务器的信息,屏蔽黑名单中的 IP,限制每个客户端的连接数。
客户端只能看到反向代理服务器的 IP,这使你可以增减服务器或者修改它们的配置。
此外,还可以做加密、压缩、缓存等操作提供性能或安全性
微服务
微服务将一个大型应用拆分成一些列可以独立部署的小型的、模块化的服务。各个模块的服务又可以通过上面提到的负载均衡器或是反向代理进一步扩展为服务集群,提升服务的吞吐率。每个服务被运行在一个独立的容器中,通过明确定义的通讯机制互相调用,共同实现业务目标。
数据库
数据库还可以做进一步的拆分提升读写性能:
主从复制
联合
分片
NoSQL
缓存
缓存利用了所谓的信息二八原则,将一些未更改的数据存放在更高速读取的硬件设备上,用于减少服务器和数据库的负载。系统经过分层后,每一层都可以有缓存,如:
客户端缓存:像端浏览器里就有内存级缓存、cookie、local storage、indexDB 等等。
CDN:上面提到的 CDN,在全球边缘站点分发静态资源,这也是一种缓存。
反向代理 & 负载均衡,无论是软硬件的设备都自带缓存
内存缓存:这个就比较多了,服务本身就可以在内存里缓存,还有一些专门的内存级缓存应用如 Redis、memcached 等等
数据库缓存:如 DB 里的查询级别的缓存、对象缓存等等
异步
异步工作有助于减少那些原本顺序无关请求的响应时间:
Nodejs 应用:JS 本身就是异步语言,可以使用原生方法
Promise.all
来做异步操作消息队列:有 RabbitMQ、Amazon SQS、RocketMQ 等等专用服务来托管异步消息,解耦不同应用
通讯
通讯就是上面提到的客户端/服务器,或是微服务间互相调用使用的一些交互机制,常用的通讯机制有:
RPC: 远程过程调用协议,通常用于处理内部通讯,如阿里的 Dubbo 框架就是典型的 RPC 应用
Rest:表述性状态转移,各种模块都通用的交互协议,以 JSON 的格式传送数据
Graphql:FaceBook 出品的一款 API 查询语言,常用于客户端/服务器通讯,是 Rest 的一种替代品
安全
安全涉及到的面很多很多了,常用的手段有:
在运输和等待过程中加密
使用参数化的查询来防止 SQL 注入
对所有的用户输入和从用户那里发来的参数进行处理以防止 XSS
权限控制等等
评论