架构师 1 期 - 系统架构作业

用户头像
ltl3884
关注
发布于: 2020 年 10 月 11 日



性能与可扩展性

  • 垂直扩展

垂直扩展通过提升单机处理能力扩展性能,垂直扩展是最简单最靠谱的提升手段,垂直扩展到达一定规模的时候,成本会急剧上升。

  • 水平扩展

水平扩展通过增加服务器数量扩充系统性能。水平扩展是互联网公司最常用的手段,但也对系统架构提出了更高的要求。水平扩展成本是线性上升的。

DNS

DNS 是一种分布式网络目录服务,主要用于域名代替 IP 地址。它能够使人更方便的访问互联网,在一些全球布局的互联网服务中,DNS 可以帮助用户连接到就近部署服务器。dns轮询可以做最前端的负载均衡。

CDN

内容分发网络是代理服务器分布式网络,它从靠近用户的位置提供内容。图片和视频等静态内容由 CDN 提供。

负载均衡

负载均衡器将传入的请求分发到不同的提供相同服务的应用服务器中。负载均衡器的效用在于:

  • 防止资源过载

  • 消除单点故障

  • 帮助水平扩展,提高性能和可用性



微服务

微服务将一个大型应用拆分成一些列可以独立部署的小型的、模块化的服务。各个模块的服务又可以通过上面提到的负载均衡器或是反向代理进一步扩展为服务集群,提升服务的吞吐率。每个服务被运行在一个独立的容器中,通过明确定义的通讯机制互相调用,共同实现业务目标。

缓存

缓存将一些未更改的数据存放在更高速读取的硬件设备上,用于减少服务器和数据库的负载。系统经过分层后,每一层都可以有缓存

  • 客户端缓存:像端浏览器里就有内存级缓存、cookie、local storage、indexDB 等等。

  • CDN:上面提到的 CDN,在全球边缘站点分发静态资源,这也是一种缓存。

  • 反向代理 & 负载均衡,无论是软硬件的设备都自带缓存

  • 内存缓存:服务本身就可以在内存里缓存,还有一些专门的内存级缓存应用如 Redis、memcached 等等

  • 数据库缓存:如 DB 里的查询级别的缓存、对象缓存等等

异步通讯

消息队列有助于解耦不同应用,分布式事务,削峰等作用,常见的消息队列有RabbitMQ、kafka、RocketMQ 



数据库

数据库还可以做进一步的拆分提升读写性能:



  • 主从复制

一般的应用都是读大于写,当数据库读取速率成为系统瓶颈时,可以将数据库进行读写分离:主库主要负责写入操作,并复制写入到多个从库中,从库只负责读操作。

  • 分片

分片就是将相同功能的数据分散存储到不同的数据库上,使得每个数据库仅管理整个数据集的一个子集。以用户数据库为例,我们可以把 A~F 开头的用户存放在一个数据库,G~Z 开头的用户存放在另一个数据库中,这样可以提升单个数据库的读写效率。

  • NoSQL

NoSQL 是键-值数据库、文档型数据库、列型数据库或图数据库的统称。NoSQL 通常用于存储简单数据模型或频繁修改的数据,某些操作不需要很强的 ACID 的事务,我们可以通过 NoSQL 提升读写性能。



用户头像

ltl3884

关注

还未添加个人签名 2017.12.08 加入

还未添加个人简介

评论

发布
暂无评论
架构师 1 期 - 系统架构作业