说明

系统架构演进

讲师:李智慧

系统架构概述

互联网系统面临怎样的挑战?

20年前的系统架构主要是面对大型企业:IBM、SUN、Microsoft、Oracle、沃尔玛、家乐福、用友、金蝶、联想等。
最近这10几年主要是互联网的系统:Google、AWS、Facebook、阿里巴巴、腾讯等。

互联网系统面临挑战:高并发、大流量

  • Google 日均 PV 数 35 亿,日均 IP 访问数 3 亿。
  • 微信在线用户数10亿。
  • 天猫双十一活动一天交易额 3000 亿。

高并发是系统的需求,面临的问题;高性能、高可用是追求的目标。

高可用

系统 7x24 小时不间断服务。大型互联网网站的宕机事件通常会成为新闻焦点。

服务器升级,要可用。
数据迁移,要可用。
超过服务器接收能力(比如系统设计可接收用户为100w,来了1个亿用户),要可用。

海量数据

需要存储、管理海量数据。

  • Facebook 每周上传的照片数目接近10亿。
  • Google 有近百万台服务器为全球用户提供服务。
  • 百度收录的网页数目有数百亿。

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

许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,有各个运营商网络互通难的问题。而中美光缆的数次故障,也让一些对国外用户依赖较大的网站不得不考虑在海外建立数据中心。

安全环境恶劣

由于互联网的开放性,使得互联网网站更容易受到攻击,大型网站几乎每天都会遇到黑客攻击情况。2011年国内多个重要网站泄漏用户密码,让普通用户也直面一次互联网安全问题。

需求快速变更,发布频繁

和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率也是极高的。Office 的产品版本以年为单位发布,而一般大型网站的产品每周都有新版本发布上线,至于中小型网站的发布就更频繁了,有时候一天会发布几十次。

渐进式发展

不同于传统软件产品或者企业应用系统,一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网网站都是从一个小网站开始,渐进的发展起来的。

  • Facebook 是扎克伯格同学在哈佛大学的宿舍里开发的;
  • Google 的第一台服务器部署在斯坦福大学的实验室里;
  • 阿里巴巴则是在马云家的客厅里诞生的。

好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,有巨大背景的网站,后来发展都很惨淡。

应对高并发挑战的两个技术方向

垂直伸缩


通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩方案。

  • 通过使用 RAID (独立冗余磁盘阵列)增加 I/O 吞吐能力。
  • 通过切换到 SSD (固态硬盘)改善 I/O 访问速度。
  • 通过增加内存减少 I/O 操作。
  • 通过升级网络接口或者增加网络接口提升网络吞吐能力。
  • 更新服务器使用更多处理器或者更多超线程。

垂直伸缩的缺点

  • 达到某个程度后,增加计算能力需要的更多的花费。
  • 垂直伸缩有物理极限。
  • 操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点。

水平伸缩


水平伸缩是指通过增加服务器提升计算能力的一类架构方法。

水平伸缩被认为是伸缩性的圣杯,水平伸缩可以克服垂直伸缩带来的单位计算成本随机算能力增加而迅速飙升的问题。

另外,水平伸缩是可以增加更多服务器,这样,就不会像垂直伸缩那样遭遇到单台服务器的极限。

Google 大概有200W台服务器。

互联网架构演化

架构演化第0阶段:最简单的互联网应用架构

最早的Google的服务器,没有机箱壳,一堆线放在桌子底下。

架构演化第1阶段:应用数据分离

架构演化第2阶段:使用缓存改善系统性能


绝大多数的操作都是读操作,比如商品查看,Google搜索解决,所以用缓存可以解决。通过读写分离解决。

架构演化第3阶段:使用应用服务器集群改善系统的并发处理能力


增加服务器,增强计算能力,以应对大量用户访问的压力。

架构演化第4阶段:数据库读写分离


数据库是在磁盘中,比CPU、内存慢了1~2个数量级。就算有缓存,缓存也会有失效的时候,所以要把数据库读写分离。写数据会比较慢,所以把频繁的读数据分离出去,可以有多个读数据库,做到灾备的效果。

架构演化第5阶段:使用反向代理和 CDN 加速网站响应


热门的资源放到就近的CDN服务器里面,让用户快速访问资源。
反向代理服务器: 代理服务器提供服务。

大量的流量来自图片、视频等静态资源,都放在CDN服务器上。

架构演化第6阶段:使用分布式文件系统和分布式数据库系统

如果数据库主从分离解决不了,技术不成熟之前,永远不要忘记垂直伸缩,通过硬件提升解决问题。
小型机最终不是银弹,替代方案是分布式数据库。

架构演化第7阶段:使用NoSQL 和搜索引擎

架构演化第8阶段:业务拆分


比如淘宝业务拆分子系统:首页、商品列表、商品详情、搜索、购物车、订单、支付、算法、推荐等等。
通过消息队列同步,比如用户注册成功后,通过异步消息同步到支付宝系统。

业务拆分符合单一职责原则。

架构演化第9阶段:微服务及中台化

架构演化第10阶段:大数据与智能化

典型的系统是:字节跳动公司,头条、抖音通过大数据给用户提供资讯、内容。

架构模式

每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必要做重复工作。

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

互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网软件系统的重要组成部分。

分层

分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。

分割

如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。

系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

分布式

对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据流就越大。

  • 分布式应用和服务
  • 分布式静态资源
  • 分布式数据和存储
  • 分布式计算

集群

使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问几种的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多态服务器部署相同应用构成一个集群,通过负载均衡设备功能对外提供服务。

缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。

  • CDN
  • 反向代理
  • 本地缓存
  • 远程缓存

异步

计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接关系,那么就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦中的手段除了前面提到的分层、分割、分布等手段,还有一个重要手段是异步,就是讲一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。

  • 提高系统的可用性。
  • 加快网站响应速度。
  • 消除并发访问高峰。

冗余

互联网应用需要 7 x 24 小时连续运行,但是服务器总有可能出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。

2007年,阿里巴巴在香港上市期间,要求开个服务器可以查询数据,阿里巴巴仅仅提供了一台服务器,而这台服务器竟然宕机了,香港证监会就发了一个很严肃的警告,如果再次宕机,就不允许上市。这个例子说明,任何一个服务,都要有灾备意识。

自动化

在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网的自动化架构设计主要集中的运维方面。

安全

互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:通过密码和手机校验码进行身份认证;登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;对于常见的用于攻击网站的 XSS 攻击, SQL 注入,进行编码转换等相应处理;对于垃圾信息、敏感信息进行过滤;对转账交易等重要操作根据交易模式和交易信息进行风险控制。

注意:以上信息如有侵权,请联系作者删除,谢谢。

极客大学架构师训练营 系统架构 高并发 高可用 垂直伸缩 水平伸缩 第7课 听课总结相关推荐

  1. 什么是系统架构师,系统架构师应具备哪些能力?

    目录 什么是系统架构师? 系统架构师应具备哪些能力? 什么是系统架构师? 系统架构师是一个既需要掌控整体,又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师需要有足够的想 ...

  2. 极客大学产品经理训练营 产品文档和原型 作业4

    作业 [本周作业]写一个用例,挑一个:你自己的产品 / 你喜欢的产品 / [拍东西]发起拍卖/ [知识星球]加入星球/ [极客时间]购买课程: 1. 标题作者修改历史 标题:[极客时间]购买课程 作者 ...

  3. 极客大学产品经理训练营:业务流程与产品文档 第11课总结

    讲师:邱岳 1. 原型图 1.1 手绘图 + Scanner Pro 1.2 线框图 1.3 高保真产品图 1.4 做原型图的目的 坍缩:规划时梦到自己成了乔布斯,赶紧画个图让自己冷静冷静: 具体:具 ...

  4. 极客大学产品经理训练营:产品文档和原型咋弄 - 流程图 第9课总结

    讲师:邱岳 1. 图的意义 流程图.活动图.时序图.状态图,本次聚焦于过程和行为描述. 提效.宏观.点睛. 梳理思路 用例:做什么? 流程图:怎么做? 2. 流程图.活动图.时序图 3. 动手画 – ...

  5. 极客大学产品经理训练营 极客时间购买课程-大作业

    1. 标题作者修改历史 标题:[极客时间]购买课程 作者 历史 时间 易筋 创建 2021-01-09 易筋 添加购买流程图6 2021-03-02 易筋 添加购买时序图7 2021-03-16 2. ...

  6. 极客大学产品经理训练营:数据分析与商业分析,商业分析到业务分析 第18课总结

    讲师:邱岳 1. 产品经理眼中的利润.成本.收入 利润 = 收入 - 成本 奶茶利润率极高,达到60%左右.但是奶茶盈利比较难. 所有买水的产品利润率都极高,比如可口可乐,咖啡,奶茶等. 案例:有个面 ...

  7. 极客大学产品经理训练营:业务架构与概念模型 第10课总结

    讲师:邱岳 1. 什么是状态图 系统中的概念或对象随着一些事件的发生,改变了状态,通常这个状态比较多.比较复杂时,我们需要用状态图来表示他们的边界,以及触发状态转换的活动. 2. 动手画 – 员工状态 ...

  8. 极客大学产品经理训练营 解决方案的设计与积累 第6课总结

    说明 讲师:邱岳(二爷) 1. 解决方案 解决方案的前提是明确了 利益相关者 和 待解决的问题 出解决方案是产品经理的天职,不要直接转发 注意 X-Y Problem,核心关注 X 大量的练习/模仿/ ...

  9. 极客大学产品经理训练营 认识产品经理下 第2课总结

    说明 讲师:邱岳(二爷) 分享提纲 互联网产品经理的能力模型 互联网产品经理的个人素质 产品经理的特质与气场 互联网产品经理的职业发展阶段与晋级之路 互联网产品经理的若干真相 1. 产品经理的能力模型 ...

  10. 极客大学产品经理训练营:产品经理的职业规划 第20课总结

    讲师:邱岳 1. 简历(你)作为产品 简历可能是你向你未来同事展示的第一个作品,关于你自己的经历.特点.审美,所以要像设计和研发一个产品那样设计好你的简历. 当谈论产品的时候,我们的思路应该依然是:用 ...

最新文章

  1. Linq to Entities in Ado.net EF的事务
  2. Java Thread类的使用
  3. php语言中 类的关键词是,c语言中的关键字有哪些类型?
  4. 全球及中国健康保险市场运作模式与需求潜力预测报告2022版
  5. 多边形面积(Area_Of_Polygons)
  6. linux缓存代码,Linux使用的缓存
  7. 08 | RNN 与 LSTM:模型也可以持续不断地思考
  8. G面经prepare: Straight Partition of A Deck of Cards
  9. python int转str_用Python生成抖音字符视频!
  10. C 和 C++ 不安全?Android 支持 Rust 开发操作系统
  11. 使用 Pig 进行数据分析
  12. Fiddler自动保存抓包内容到文件
  13. 1.84亿月活换来400亿港元估值,网易云音乐的钱途在哪儿?
  14. wifi上行下行速度测试_测试网速_测试网速wifi在线测试
  15. LayUI树形表格treetable使用详解
  16. 小波去噪程序c语言,小波去噪c语言程序
  17. 360插件化踩坑记录(一),RePlugin无法Sync成功,No signature of method: com.android.build.gradle.internal.scope
  18. Mysql基础篇(8)—— 变量、流程控制和游标
  19. 加密、解密详解及CA的实现
  20. 碗状碎块三维模型的下载(.PLY格式)3D model file with Bowl-shaped Broken Piece (.ply format)

热门文章

  1. lstm 变长序列_Pytorch 是如何处理变长序列的
  2. C# 在服务器生成文件/文件夹并压缩下载到本地
  3. [译]利用贝叶斯推理做硬件故障率的准实时预测
  4. js es6 map 与 原生对象区别
  5. 调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?...
  6. 利用ffmpeg一步一步编程实现摄像头采集编码推流直播系统
  7. Centos7安装hive
  8. iOS和js交互三部曲,很不错的文章和demo
  9. 【 HDU1081 】 To The Max (最大子矩阵和)
  10. 【Deep learning】NLP