防止断更 请务必加首发微信:1716143665
关闭
讲堂
极客商城
客户端下载
兑换中心
企业服务
免费资讯
渠道合作
推荐作者

结束语 | 静下心来,品味经典

2019-08-17 李号双
深入拆解Tomcat & Jetty
进入课程

讲述:李号双

时长05:05大小4.66M

从专栏上线发布到现在,不知不觉三个月时间过去了,感谢你的一路陪伴,今天到了说再见的时候,我想简单回顾一下专栏的内容,并且聊聊我的一些感受。

Tomcat 和 Jetty 发展这么多年,已经比较成熟稳定。这些年技术发展迭代速度又很快,在一个“追新求快”的时代,Tomcat 和 Jetty 作为 Java Web 开发的必备工具,似乎变成了“熟悉的陌生人”。对于很多新同学来说,虽然有些 Tomcat 和 Jetty 的知识点在面试中会碰到,但从侧面来说 Tomcat 和 Jetty 似乎没有那么“火”,那是不是说如今就没有必要深入学习 Tomcat 和 Jetty 了呢,只要会用就行呢?要回答这个问题,我先讲讲为什么我选择这个主题来写专栏吧。我写这个专栏的初心还是希望我们可以静下心来,细细品味经典的开源作品,从而进一步提升我们的“内功”。“内功”这个词有些抽象,具体来说就是学习大牛们如何设计、架构一个中间件软件系统,并且让这些经验可以为自己所用。作为一名 IT 从业者,我认为我们很有必要深入思考一下,这些大牛为什么能够创造出这些优秀的作品,并且能引领技术的发展呢。

不知道你发现没有,美好的事物往往是整洁而优雅的。但这并不等于简单,而是要将复杂的系统分解成一个个小模块,并且各个模块的职责划分也要清晰合理。与此相反的是凌乱无序,比如你看到一堆互相纠缠在一起的电线,可能会感到不适。

同样的道理,当我们在设计一个软件系统时,追求的目标也应该是整洁和优雅。我觉得首先需要合理划分功能模块,主要是分清楚“变与不变”的边界,因为变化往往会给系统实现带来混乱,因此需要将“变”的因素控制、隔离起来。如果你发现一个软件系统里有大量 if else 语句、大量的重复代码、大量的相互依赖,那么这个系统多半还有提高的空间,所以分清楚“变与不变”十分重要。

从宏观上看,中间件实现的功能基本上是稳定不变的,它们往往会实现一些协议和规范,比如 Tomcat 作为一个“HTTP 服务器 + Servlet 容器”,它向开发人员屏蔽应用层协议和网络通信细节,我们拿到的是一个标准的 Request 和 Response 对象;而具体业务逻辑则作为变化点,交给我们来实现。

从微观上来看,Tomcat 内部也隔离了变化点和不变点,比如 Tomcat 和 Jetty 都采用了基于组件化的设计,其目的就是为了实现“搭积木式”的高度定制化,而组件的生命周期管理有一些共性,被提取出来成为接口和抽象类,而具体子类实现变化点。

其实当下流行的微服务也是这个思路,首先按照功能将单体应用拆成微服务,拆分的过程中要注意从众多微服务中提取一些共性,而这些共性就会成为一些核心的基础服务,或者成为一些通用库。

设计模式往往是封装变化的一把利器,我在专栏里也谈到不少 Tomcat 和 Jetty 所采用的设计模式,合理地运用设计模式能让我们的代码看起来优雅且整洁。

除此之外,我们在编写程序时应该时刻考虑到高性能,尤其是开发基础的中间件系统,在大数据量、高并发情况下,可能一行代码的改动会带来明显的性能提升。高效意味着合理的数据存储和流动方式,换句话说其实就是合理地运用数据结构和算法,举个最简单的例子,在某个场景是选择数组还是链表。如果你深入了解过 Tomcat,你会发现在许多实际场景中,Tomcat 都会有针对性的选择,所以对于一些常见的数据结构和算法,虽然我们不需要深入到实现细节,但是一定要知道在什么场景下用哪个。

此外写高性能程序,还意味着你需要掌握操作系统底层原理,并且深入到 JVM 底层的实现细节,比如我们调用了一个 Java API,JVM 和操作系统在背后为我们做了什么呢?挖得更深一点,我们对程序的理解也就更深刻,也许就是因为深入的这一小步,能够让我们在竞争中脱颖而出。

不知不觉,我从 Tomcat 和 Jetty 的学习谈到了如何优雅地设计一个复杂的系统。由点及面,你可以把 Tomcat 和 Jetty 当作一个支点,从我们身边“熟悉又陌生”的 Tomcat 和 Jetty 入手,不光掌握它们的使用,更能从它们的源码中汲取经验,提升自己的系统设计能力。学习这件事千万不能浮躁,很难做到一口吃成大胖子,最重要的是需要静下心慢慢体会和思考。我看到不少同学的留言,从提问的内容我能感受到你们的好奇心和思考,有些问题我也还要去查阅源码才能回答上来,在这个过程中我自己也主动或被动的学到不少东西,所以说多和同行们交流也非常有必要。

学习永远在路上,最后祝我们一起进步!

© 加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表
上一篇
41 | 热点问题答疑(4): Tomcat和Jetty有哪些不同?
 写留言

1716143665 拼课微信(19)

  • 飞翔
    2019-08-17
    老师 您讲的超好 求老师开新的源码解读专栏 比如spring啥的
    6
  • neohope
    2019-08-17
    这门课程让我学到了很多,而且顺路复习了很多知识点,感觉老师很有传业授道的天赋!
    对比其他课程,您的课程有一种提纲挈领、拨云见日的感觉,感觉您水平很高,很厉害!
    希望能尽快的学到老师的下一门课程。
    如果老师出书的话,一定买,哈哈哈。
    展开
    2
  • 酱油君
    2019-08-17
    专栏还没看完,老师的结束语已经出来了。

    泪奔T﹏TT﹏TT﹏T
    展开
    2
  • QQ怪
    2019-08-17
    希望老师继续出些类似分析源码的专栏,一定买!一定学,老师讲的超好的,棒棒哒
    2
  • 辣椒
    2019-08-17
    感谢老师,让我化了区区几十元就能深入了解tomcat内部原理,并应用到了项目中,希望老师能够再出好的作品
    展开
    1
  • 小呆娃
    2019-08-19
    老师讲的很好,解答了我之前的很多疑问,后面也会多复习,感谢老师。
  • 新世界
    2019-08-18
    感谢老师的专栏,从头到尾跟下来,学到了很多
    展开
  • chun1123
    2019-08-18
    感谢老师,明天再刷一遍,后面继续三刷
    展开
  • 门窗小二
    2019-08-17
    感谢
    展开
  • 有米
    2019-08-17
    还在学习中,期待能在更深层次理解软件架构的意义
    展开
  • Feng.X
    2019-08-17
    谢谢老师!
    老师的专栏质量非常高!以图文的方式将繁复的知识点讲解得清晰明了,读来通顺流畅,醍醐灌顶。
    展开
  • 皮卡皮卡丘
    2019-08-17
    老师写的文章很好,干货满满,文笔也超赞!
    展开
  • 0x6c6a68
    2019-08-17
    感谢老师
    展开
  • 许童童
    2019-08-17
    老师再见,跟着老师学到了很多,一起加油,进步。
    展开
  • 发条橙子 。
    2019-08-17
    跟着老师 真是学到了很多 谢谢老师的用心
    展开
  • 夜空中最亮的星(华仔...
    2019-08-17
    不想说再见
    展开
  • 朱晋君
    2019-08-17
    感谢
    展开
  • 2019-08-17
    感谢老师,非常好的专栏,后面再准备二刷。
    展开
  • -W.LI-
    2019-08-17
    老师再见!我会定期复习,温故知新。
    展开
    1