写点什么

架构训练营——第四周学习总结

用户头像
关注
发布于: 2021 年 01 月 20 日

系统架构

互联网系统面临的挑战

  • 高并发 大流量

  • 高可用

  • 7x24 小时不间断提供服务

  • 海量数据

  • 用户分布广泛 网络情况复杂

  • 一些强依赖国外用户的大型网站,不得不在海外建立数据中心

  • 安全环境恶劣

  • 大型网站几乎每天都会遭到黑客攻击

  • 需求快速变更 发布频繁

  • 渐进式发展 小步快跑

高并发挑战

  • 高并发场景下真正的问题,在于每个请求都需要消耗系统资源(包括内存、CPU、磁盘 IO、网络带宽),并发量较大时系统资源会达到瓶颈

  • 应对高并发问题,本质上就是要增加服务的计算资源,同时减少大量请求对于计算资源的消耗

  • 解决方案

  • 垂直伸缩

  • 提升单台服务器的计算资源

  • 通过升级硬件来实现垂直伸缩

  • 使用 RAID(独立冗余磁盘阵列)提升 I/O 吞吐能力

  • 将机械硬盘升级到 SSD(固态硬盘)提升磁盘 I/O 访问速度

  • 增大内存以减少磁盘 IO 次数

  • 升级网络接口或者增加网络接口以提高网络吞吐能力

  • 更新服务器,使用更多处理器或者更多超线程

  • 由于不需要改变整体技术架构,因此垂直伸缩通常被认为是最简单的短期优化方案

  • 缺点

  • 达到某个临界点后,成本的投入和服务能力的提升就是非线性的了

  • 垂直伸缩有物理极限

  • 受操作系统和应用程序的制约,垂直伸缩效果可能并不理想

  • 水平伸缩

  • 通过增加服务器的数量来提升计算能力

  • 水平伸缩可以克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题

  • 一般来说,水平伸缩总是可以增加更多服务器,不受单台服务器瓶颈的限制

  • 我们学习的各种分布式技术,就是用来解决多台服务器如何构成一个集群对外提供服务,以满足高并发的用户访问

互联网架构演化

  • 阶段零:单体应用

  • 应用程序、文件系统和数据库部署在同一台服务器上

  • 当并发量较高时,不同应用程序会争用服务器资源,最终导致资源耗尽

  • 阶段一:应用数据分离

  • 应用程序、文件系统和数据库服务独立部署

  • 仅需对单体应用简单改造,即可提升整体服务能力

  • 虽然处理方式比较简单,但是体现了互联网架构演化的一个基本思路:将大量的请求分摊到不同的服务上去执行

  • 阶段二:使用缓存改善系统性能

  • 本地缓存

  • 远程分布式缓存

  • 单台应用服务器无法满足高并发访问需求

  • 阶段三:使用应用服务器集群改善系统的并发处理能力

  • 通过负载均衡调度服务器,将用户请求分发到不同的应用服务器

  • 每台应用服务器只分摊一部分用户请求

  • 数据库的读写能力成为整个系统瓶颈

  • 数据库的读写能力成为整个系统瓶颈

  • 阶段四:数据库读写分离

  • 主库处理读写请求

  • 从库处理读请求

  • 阶段五:使用反向代理和 CDN 加速网站响应

  • CDN:内容分发网络,CDN 服务器部署在网络运营商的数据中心,本质上是一个缓存服务

  • 我们自己的应用服务部署在我们自己的数据中心

  • 我们可以将自己应用服务的数据缓存在网络运营商的 CDN 服务器中,这样当用户请求我们的应用时,CDN 服务器就可以直接返回结果,大大减轻我们自己应用的负载

  • CDN 可以选择距离请求用户最近的服务器

  • 通常可以将视频、图片、HTML 网页等静态资源缓存在 CDN 中

  • 反向代理服务器是代理我们自己整个数据中心的服务

  • CDN 和负载均衡服务器会拦截掉大量的静态资源请求

  • 数据库的存储容量和主库的写操作是瓶颈

  • 阶段六:分布式文件系统和分布式数据库

  • 关系型数据库分片集群

  • 分布式文件系统

  • 分布式缓存

  • 无法应对复杂维度的搜索和查询

  • 阶段七:使用 NoSQL 和搜索引擎

  • 分布式 NoSQL 集群

  • 分布式搜索引擎

  • 阶段八:业务拆分

  • 阶段九:微服务与中台化

  • 阶段十:大数据与人工智能

  • 大数据采集与分析

  • 用户画像 千人千面

  • 智能推荐

架构模式

  • 模式是对于一系列重复发生的问题的通用解决方案

  • 模式的关键在于可重复性:问题与场景的可重复性带来解决方案的可重复使用

  • 常用架构模式

  • 分层

  • 在横向上对软件进行切分

  • 分层后,不同层次的模块可以部署在不同的服务器集群上,实现分布式的分层结构

  • 分割

  • 在纵向上对软件进行切分

  • 分布式

  • 在进行横向分层、纵向分割后,系统就被划分成了一个个独立的模块,每个模块可以独立开发、部署和维护

  • 将不同的模块部署在不同的服务器上,模块之间通过远程调用进行通信

  • 集群

  • 多台服务器部署相同的应用,构成一个集群,通过负载均衡服务,以整体的形式统一对外提供服务

  • 缓存

  • 缓存的本质,就是将数据存放在距离计算最近的位置,以加快响应速度

  • 缓存是改善软件性能的第一手段

  • 典型的缓存服务

  • CDN

  • 反向代理

  • 应用本地缓存

  • 远程分布式缓存

  • 异步

  • 事物之间越少直接关联,那么就越少被彼此影响,越可以独立发展

  • 异步的目标就是解耦

  • 异步的优势

  • 提升系统可用性

  • 加快网站响应速度

  • 削平并发访问高峰

  • 冗余

  • 冗余是保证服务可用性和数据可靠性的重要手段

  • 服务冗余

  • 数据冗余

  • 自动化

  • 目前互联网的自动化架构设计主要集中在运维方面

  • 安全

  • 通过手机号、验证码进行身份验证

  • 登录、交易等操作,对网络通信进行加密

  • 图片验证码防止机器人恶意刷

  • 防止 XSS 攻击,SQL 注入

  • 对敏感信息进行加密存储

  • 对垃圾信息进行过滤

  • 对支付、交易等重要操作进行风控

互联网系统架构的核心要素

  • 高性能

  • 很多时候,性能问题是系统架构优化升级的触发器

  • 任何架构设计方案都必须考虑性能问题

  • 高可用

  • 高可用是硬指标

  • 高可用的主要手段就是冗余

  • 可伸缩

  • 衡量伸缩性的标准:是否容易向集群中添加新的服务器,且提供的服务在功能上与原来无差别

  • 分布式关系数据库的伸缩性就差一些,相对来说 NoSQL 的可伸缩性就很好

  • 可扩展

  • 主要关注功能性需求

  • 衡量伸缩性的标准:是否容易向集群中添加新的服务器,且提供的服务在功能上与原来无差别

  • 可扩展架构的主要手段是事件驱动架构和微服务架构

  • 安全

架构技术概览

  • 前端架构

  • APP 及 WEB 开发技术

  • 浏览器与 APP 相关技术

  • CDN

  • 动静分离

  • 图片服务

  • 反向代理

  • DNS

  • 网关及应用层架构

  • 网关架构

  • 负载均衡

  • 动静页面分离

  • 业务拆分

  • 微服务架构

  • 微服务治理

  • 分布式缓存

  • 分布式消息

  • 分布式一致性

  • 存储层架构

  • 分布式文件系统

  • 分布式关系型数据库

  • 分布式 NoSQL 数据库

  • 基础设施架构

  • 大数据平台

  • 搜索引擎

  • 推荐引擎

  • 数据仓库

  • 数据中心和机房硬件架构

  • 安全架构

  • 数据采集与监控架构

维基百科技术架构

十几个人的团队,维护了全球第六大的互联网应用

  • GeoDNS

  • 基于地理位置的 DNS 服务

  • 根据用户请求所在的 ip 地址,返回距离用户最近的负载均衡服务器的 ip 地址

  • 维基百科在全球部署了 3 个数据中心,GeoDNS 提供了用户就近访问的能力

  • LVS

  • 负载均衡服务

  • Squid Caching Layers

  • Squid:网站静态资源缓存代理服务

  • Application Servers

  • PHP 应用服务集群

  • 部署在 Apache 服务器上

  • Distributed Object Cache

  • 基于 Memcached 分布式缓存服务

  • Core Database

  • MySQL 主从集群

  • Image Server

  • Lighttpd

  • Search Engine

  • 基于 Lucene 的搜索引擎

  • Invalidation Notification

  • 失效通知服务

  • 当词条被修改时,通知 Squid 缓存失效

淘宝业务发展及技术架构


  • 是业务的发展,驱动了技术的发展。技术是为业务服务的。


用户头像

关注

还未添加个人签名 2018.07.18 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营——第四周学习总结