许式伟的架构课
许式伟
七牛云CEO
立即订阅
20124 人已学习
课程目录
已更新 73 讲 / 共 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 | 服务治理篇:回顾与总结
架构思维篇 (10讲)
57 | 心性:架构师的修炼之道
用户故事 | 站在更高的视角看架构
58 | 如何判断架构设计的优劣?
59 | 少谈点框架,多谈点业务
60 | 架构分解:边界,不断重新审视边界
加餐 | 实战:“画图程序” 的整体架构
61 | 全局性功能的架构设计
62 | 重新认识开闭原则 (OCP)
63 | 接口设计的准则
64 | 不断完善的架构范式
许式伟的架构课
登录|注册

30 | 实战(五):怎么设计一个“画图”程序?

许式伟 2019-08-02
你好,我是七牛云许式伟。
我们继续聊我们的话题。这是画图程序的最后一讲了。当然我们后续还会结合这个实战程序展开讨论有关于架构的方方面面。

宏观的系统架构

上一讲开始,我们的画图程序有了跨团队协作:因为我们开始有了 paintdom 和 paintweb 两大软件。paintdom 监听的地址是 localhost:9999,而 paintweb 监听的地址是 localhost:8888。
应当注意,在实际业务中它们是不同的软件,事实上我们 paintweb 程序也完全是以进程间协作的方式,通过反向代理机制来调用 paintdom 的功能。但是在我们这个画图 DEMO 程序中,它们同属一个进程,paintdom 作为 paintweb 的一个 goroutine 在跑。这纯粹是因为我们想让这两个程序 “同生共死”,方便调试的时候起停进程。
paintdom 和 paintweb 之间相互协作的基础,是它们之间所采用的网络协议。
当我们说起网络协议,它其实通常包含两个层面的意思:其一是我们网络协议的载体,也就是协议栈(我们这里采纳的是 HTTP 协议,而 HTTP 协议又基于 TCP/IP 协议);其二是我们网络协议承载的业务逻辑。
当我们谈架构的时候,也会同时聊这两个层面,只是它们在不同的维度。我们会关心网络协议的协议栈选择什么,是基于 HTTP 还是基于自定义的二进制协议,这个是属于基础架构的维度。我们也会关心网络协议的业务逻辑,判断它是否自然体现业务需求,这是属于应用架构的维度。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《许式伟的架构课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(16)

  • fy
    看到最后一句说清楚事情为目标,而不是限制在几讲,大大点个赞!!!!!!
    2019-08-02
    1
    36
  • Peiel
    老师,我自己平时接触的比较多的语言是Java、Python、C、JS一类的,看到课程用到Go语言越来越多,我是不是需要学习下Go的一些基本语法和基础才有利于后续知识的吸收?

    作者回复: 学习一下会好一点。go入门不难,一周就够了。

    2019-08-02
    1
    5
  • 有铭
    老师,计算变更里,如果按方案3,版本对比,不记录编辑操作历史,怎么实现(离线下的)回撤功能呢

    作者回复: 后面在常见架构范式中会讨论undo/redo

    2019-08-02
    3
  • Geek_88604f
    相对于java技术栈实现的云服务来说,multi-user相当于云服务的后台(service manager);session-based model相当于云服务的前台(console),前台有前台的逻辑处理,通常也会调用后台提供的API;session-based view model相当于静态服务器上的资源。不知道这样理解对不对,许老师?

    作者回复: 👍

    2019-08-18
    1
  • xl000
    老师,您一直说要胖model层,那么model之间可以有依赖吗?我是做游戏服务器开发的,现在的设计是在model实例里弱引用着user实例,通过user实例可以获取到其他model,总觉着不太好,太胖了,所以改名叫module了。老师有什么好建议吗?

    作者回复: model 是一个整体,内部怎么设计是详细设计阶段的事情,这一章关注点暂时还只在子系统/模块边界上。

    2019-08-02
    1
  • Lrwin
    Model代表业务核心逻辑,如果不是业务发生颠覆性变化,Model层应该是很稳定的
    至于调用Model层的调用者来说,都是在用不同的方式体现需求(比如Rest/controller或者view)
    还有一些技术用于支持Model,比如Model要用到的基础组件(可以进行依赖导致DI,让依赖翻转)

    使用上述两个步骤,则就将Model层设计为最稳定的核心层了。

    作者回复: 👍

    2019-11-28
  • milley
    看了几遍感觉越来越有趣,还得多看几遍梳理下自己的思路,😄
    2019-11-10
  • 陈四丰
    个人体会,实战“画图”程序这几讲的最大问题是采用了“音频”,而不是“视频”。所以,理解起来难度很大。
    2019-09-01
  • 笨笨
    对许老师的认真负责点赞!!!相信很多同学没有及时反馈应该还都在消化中,反复研习后
    2019-08-25
  • Dimple
    等到老师全部更新完了,才来看这个画图程序,关键是一遍还不够
    2019-08-06
  • 张白水
    看得云里雾里,不得不说许大的编码能力和设计能力确实十分硬核
    2019-08-05
  • Jian
    一个闪念:即如果您在将来的课程中,为不同的版本打上相应的tag,这样是否更易懂?总之,您真的是辛苦啦!我们也不好太多要求给您。

    作者回复: 现在不同版本是不同的分支(branch)

    2019-08-04
  • Jian
    关于您提到的model层变厚,我的理解:这是系统进化的必然。是否可以想象系统中所有的操作起初都具备不可分的原子性质,具备同样属性(网络,操作,系统)的操作汇集到一起形成一个独立的模块。在同一模块内可能根据功能再进行划分。这是我第一次听改课的感受。您的课不听个三遍左右,总有理解不到位的地方,且还没有进入代码阶段,所以可能理解的有点不成熟。
    对于您最后提到的课程会变长,作为一名学生必须点赞——有幸遇到您这样追求细节的老师。如果将这门课比做开发一套系统的话,整套系统在开发推进的过程中,在不断迭代和升级。谢谢
    2019-08-03
  • 八哥
    大多数程序员和产品经理对单点登录理解不清楚,这个可以加一讲。
    2019-08-03
  • Charles
    最近一直用PHP的Laravel框架写应用,因为它的ORM封装的够简单,所以之前基本把所有业务逻辑和数据库操作都放在controller中,最近用了仓库模式拆开了业务逻辑,放到了model一侧。

    这一节许老师总结model厚度的问题,发现如出一辙,真发现复用逻辑和测试这两件事情变的简单许多。之前好几章实战理解着有点费劲,好像突然变的略懂了,回头读一读代码理解下再多点收获。

    另外最后的总结里“以说清楚事情为目标”,感谢许老师的极客精神。
    2019-08-02
  • Aaron Cheung
    获益良多 打卡30
    2019-08-02
收起评论
16
返回
顶部