许式伟的架构课
许式伟
七牛云CEO
立即订阅
20092 人已学习
课程目录
已更新 72 讲 / 共 77 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 怎样成长为优秀的软件架构师?
免费
基础平台篇 (21讲)
01 | 架构设计的宏观视角
02 | 大厦基石:无生有,有生万物
03 | 汇编:编程语言的诞生
04 | 编程语言的进化
05 | 思考题解读:如何实现可自我迭代的计算机?
06 | 操作系统进场
07 | 软件运行机制及内存管理
08 | 操作系统内核与编程接口
09 | 外存管理与文件系统
10 | 输入和输出设备:交互的演进
11 | 多任务:进程、线程与协程
12 | 进程内协同:同步、互斥与通讯
13 | 进程间的同步互斥、资源共享与通讯
14 | IP 网络:连接世界的桥梁
15 | 可编程的互联网世界
16 | 安全管理:数字世界的守护
17 | 架构:需求分析 (上)
18 | 架构:需求分析 (下) · 实战案例
19 | 基础平台篇:回顾与总结
加餐 | 我看Facebook发币(上):区块链、比特币与Libra币
加餐 | 我看Facebook发币(下):深入浅出理解 Libra 币
桌面开发篇 (16讲)
20 | 桌面开发的宏观视角
21 | 图形界面程序的框架
22 | 桌面程序的架构建议
23 | Web开发:浏览器、小程序与PWA
24 | 跨平台与 Web 开发的建议
25 | 桌面开发的未来
26 | 实战(一):怎么设计一个“画图”程序?
27 | 实战(二):怎么设计一个“画图”程序?
28 | 实战(三):怎么设计一个“画图”程序?
29 | 实战(四):怎么设计一个“画图”程序?
30 | 实战(五):怎么设计一个“画图”程序?
31 | 辅助界面元素的架构设计
课外阅读 | 从《孙子兵法》看底层的自然法则
加餐 | 想当架构师,我需要成为“全才”吗?
32 | 架构:系统的概要设计
33 | 桌面开发篇:回顾与总结
服务端开发篇 (14讲)
34 | 服务端开发的宏观视角
35 | 流量调度与负载均衡
36 | 业务状态与存储中间件
37 | 键值存储与数据库
38 | 文件系统与对象存储
39 | 存储与缓存
40 | 服务端的业务架构建议
41 | 实战(一):“画图”程序后端实战
42 | 实战(二):“画图”程序后端实战
43 | 实战(三):“画图”程序后端实战
44 | 实战(四):“画图”程序后端实战
45 | 架构:怎么做详细设计?
46 | 服务端开发篇:回顾与总结
加餐 | 如何做HTTP服务的测试?
服务治理篇 (11讲)
47 | 服务治理的宏观视角
48 | 事务与工程:什么是工程师思维?
49 | 发布、升级与版本管理
50 | 日志、监控与报警
加餐 | 怎么保障发布的效率与质量?
51 | 故障域与故障预案
52 | 故障排查与根因分析
53 | 过载保护与容量规划
54 | 业务的可支持性与持续运营
55 | 云计算、容器革命与服务端的未来
56 | 服务治理篇:回顾与总结
架构思维篇 (9讲)
57 | 心性:架构师的修炼之道
用户故事 | 站在更高的视角看架构
58 | 如何判断架构设计的优劣?
59 | 少谈点框架,多谈点业务
60 | 架构分解:边界,不断重新审视边界
加餐 | 实战:“画图程序” 的整体架构
61 | 全局性功能的架构设计
62 | 重新认识开闭原则 (OCP)
63 | 接口设计的准则
许式伟的架构课
登录|注册

15 | 可编程的互联网世界

许式伟 2019-06-05
你好,我是七牛云许式伟。
前面我们讨论架构思维的时候说过,架构的第一步是做需求分析。需求分析之后呢?是概要设计。概要设计做什么?是做子系统的划分。它包括这样一些内容:
子系统职责范围的定义;
子系统的规格(接口),子系统与子系统之间的边界;
需求分解与组合的过程,系统如何满足需求、需求适用性(变化点)的应对策略。
对于我们理解这个精彩的互联网世界来说,理解它的子系统的划分思路是非常非常重要的。

网络应用程序的全视图

在上一讲 “14 | IP 网络:连接世界的桥梁” 中我们介绍了 IP 网络的工作原理。我们还画了一幅与数据传输这件事本身有关的网络协议图,如下:
那么,从一个典型的网络应用程序角度来说,它的完整视图又是什么样子的呢?
上图是我给出的答案。当然,它并不代表所有的网络应用程序,但这不影响我们借它的结构来解释网络世界是怎么划分子系统的,每个子系统都负责了些什么。
第一层是物理层。你可以理解为网络设备的原生能力,它定义了硬件层次来看的基础网络协议。
第二层是数据链路层。它负责解决的是局部网络世界的数据传输能力。网络数据传输技术会层出不穷,今天主流有固网、WiFi、3G/4G,明天有 5G/6G,未来也必然还会出现更快速的网络新技术。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《许式伟的架构课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(28)

  • lckfa李钊
    最近对网络协议很感兴趣,也订阅了极客的其他网络专栏,所以相比而言,对上一节的内容不是很
    满意,觉得没有讲到架构的点上,今天发现许老师把前一节内容又更新了下,还是很有心的。看了今天的内容,觉得老师还是理性的,上一节是本节的引入点,现代系统如果没有网络,谈架构可能都是多余的,所以网络基础至关重要。还记得大学时基于传统的tcp写服务器的日子,那真是刀耕火种了,现在任何一种语言都有封装的特别好的网络库直接用,但是这并不代表我们不需要理解网络协议栈的底层原理。网络协议栈的划分本就是架构设计的现成模板。期待下一节的安全方案的讲解。
    2019-06-05
    1
    18
  • 陶辉
    ”如果说有谁能够打败微信,那么我个人一个基本的思考是:用微信的的方式打败微信恐怕很难,但微信是封闭协议,开放也许是一个打败微信的方式!“,赞!
    2019-07-11
    5
  • 一笔一画
    老师,请教一下,我可否这样认为,越往上层的协议其效率越低,到HTTP这样高阶的协议,它的性能会不会是一个瓶颈?

    作者回复: 不能这么看,是做的事情越来越多。HTTP协议首先是TCP协议的,只不过干了更多的业务,如果不用HTTP,并不代表你可以节约这块的成本,只不过换成你自己写的而已

    2019-06-05
    4
  • Peiel
    Nginx 可以用作应用层网关,那么应用层网关怎么理解?可以理解成我们通常在 Nginx 中对 HTTP 请求根据不同的api做相关的反向代理、负载均衡等相关配置,也就是所谓的api网关?

    作者回复: 嗯

    2019-06-05
    4
  • fjpcode
    老师的洞察力总能深入到事务的本质,对网络协议来龙去脉的分析,让人感觉非常顺畅。应用平台层网络协议的选择,对一个网络应用项目来说是至关重要的,这方面也踩过不少坑。感谢老师的梳理,对网络协议的认知又深入了一步。
    2019-06-05
    4
  • 小智e
    打卡,再次被老师的高纬思想折服
    2019-06-05
    3
  • 贾志猛
    你好老师,网关这个词一开始是在传输层接触到的,路由器起到的就是网关的作用,本质上是一个关口,数据包通过关口之后去寻找自己的目的地。现在谈的应用层的网关,是不是就是HTTP的请求的关口,根据不同的URL映射到不同的服务端接口,可以把负载均衡器理解为应用层的网关吗?

    作者回复: 是的

    2019-06-07
    2
  • Panda
    大道至简
    2019-06-10
    1
  • 立耳
    请教许老师一个技术细节的问题,假如服务端向客户端回复了一个超大的包,或者通过responseWriter的write方法写一个大文件,这个文件大小可能超过网卡的连接缓存大小,实际上客户端的Client.Do返回的response对象是在TCP链接结束后产生的,还是由HTTP协议来控制呢?

    作者回复: Response对象里面有Body字段,调用其Close方法才会有**可能**释放socket,但是也只是可能,因为背后的socket是复用的

    2019-06-09
    1
  • 王克
    近几年来HTTPS协议发展的很好,老师能简单的介绍下优缺点吗?

    作者回复: 下一讲谈https

    2019-06-06
    1
  • 老师好,请问使用socket编程是不是就是在TCP/UDP层面的?您觉得未来Restful api会占据垄断地位,成为PaaS上的SaaS服务间的标准调用协议吗?谢谢。

    作者回复: 1、是的
    2、看起来有这个迹象

    2019-06-06
    1
  • 虎哥
    相对应地,在 HTTP 协议中以 “资源路径” 表达资源,以 PUT-POST-GET-DELETE 表达 CURD 操作(也有一些服务以 POST 而不是用 PUT 请求来创建资源)。这段写错了吧,post 是 C put 是U吧

    作者回复: 不同人用的惯例不一样,从实际我看到的api案例看,put用的比较少

    2019-06-05
    1
  • 马哲富
    许老师好!
        "由于TCP基于连接,所以每Accept一个连接后,我们可以有一个独立的执行体去处理它;但是UDP是无连接的,需要我们手工根据来源IP+Port来判断如何分派",是否可以理解为基于TCP的协议,服务端每接收一个数据包就处理一个,而基于UDP的协议,服务端接收到数据包之后是先分派后处理?而这个分派的条件是IP+Port,1.为啥要分派?2.为啥是根据IP+Port来分派?

    作者回复: 服务器是同时服务很多客户的,不同客户的请求无关,一个客户是通过请求包的来源ip+port来区分。

    2019-06-05
    1
  • 1900
    “如果我们限定传输的数据包一定是某种应用层协议时,就会出现所谓的应用层网关”,这句话很费解,为什么“传输的数据包”会是“某种应用层协议”?数据包和协议是两个东西吧?

    作者回复: 协议只是数据格式而已

    2019-06-05
    1
  • 1900
    对象存储作为目前新颖的一种存储类型,它相对于传统网络存储类型的优势在哪里呢?另外它也有什么不足或者局限么?

    作者回复: 后面服务端开发会讨论这个问题。最大的区别其实不是协议的选择,而是编程模型的改变。传统网络存储延续了本地文件系统的习惯,基本上都是filesystem的树状元数据组织方式,对象存储是key-value这种平面结构。

    2019-06-05
    1
  • 感恩大佬分享 随喜大佬
    2019-06-05
    1
  • coderfocus
    许老师看问题的角度 高屋建瓴 满满的收获
    2019-06-05
    1
  • Aaron Cheung
    打卡15 HTTP编程逻辑
    2019-06-05
    1
  • 码农Kevin亮
    请问老师,开放协议与封闭协议是怎么理解呢

    作者回复: 封闭协议是指自己定义应用层的网络协议,而不是用http或者protobuf之类的开放协议。

    2019-10-09
  • 弹弹君
    基于成熟应用层协议,资源和对资源的CURD都很方便去操作和维护
    2019-09-09
收起评论
28
返回
顶部