热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Netty:可能是世界上最好的包装结构

通过优锐课的java学习,在依赖项和包结构方面,Netty可能是首屈一指的。看看是什么使它如此出色Netty的包装结构很棒。每个程序员都应该研究它。每个系统都应该模仿它;每个项目经

通过优锐课的java学习,在依赖项和包结构方面,Netty可能是首屈一指的。 看看是什么使它如此出色

Netty的包装结构很棒。
每个程序员都应该研究它。 每个系统都应该模仿它; 每个项目经理都应将其打印出来,打在墙上,然后对开发人员说:“那样”。
Netty是一个“ …用于快速开发可维护的高性能协议服务器和客户端的异步事件驱动的网络应用程序框架”,但这并不重要,因为我们没有分析其行为。 而是看图1。
Netty:可能是世界上最好的包装结构
图1:Netty的包装结构历时7年。

图1展示了Netty不断发展的软件包结构的spoiklin图(圆圈是包;直线是页面下的依赖关系;曲线是页面上的依赖关系),如果你不能立即看到它的结构如何, 然后查看Junit,Struts或Ant。

“旁观者眼中的良好结构”也不是唯一的情况。 结构障碍为程序的结构化程度提供了客观的衡量标准:结构障碍越低,结构越好。
Netty的疾病远低于其他疾病,请参见表1。
Netty:可能是世界上最好的包装结构

表1:本系列中所有程序的结构紊乱。
此外,图2显示了这种最终的结构异常并非偶然。 Netty在整个七年的生命周期中一直处于低水平。
Netty:可能是世界上最好的包装结构
图2:通过11个发布发布的Netty的结构混乱(与其他发布者进行比较)。
那么,为什么这个包结构这么好?

给定如图1所示的图,我们可以提出两个快速问题来粗略地评估所描述结构的优点。

在商业软件开发中,“良好的结构”仅表示“便宜的更新”。 此外,证据表明每位掌握波纹效应的程序员都知道:X依赖的东西越多,涟漪效应的影响就越大,因此X的成本就越高。

因此,选择一个严重依赖他人的软件包并询问:
1.我们可以轻松地确定所依赖的软件包吗?
2.这些依赖软件包的整体中有多少子集?

结构不良的程序会掩盖这些依赖关系,仔细检查通常会发现几乎整个系统都存在依赖关系。 但是,结构合理的程序显然会提供依赖的程序包,而且数量很少。

让我们先问一个结构不好的程序的两个问题。
图2显示了詹金斯噩梦般的90%结构性混乱,然后显示了来自五个软件包(工具提示)中最依赖其他软件包的突出传递依存关系。
Netty:可能是世界上最好的包装结构
Figure 2: Jenkins, oh Jenkins.
显然,在Jenkins中跟踪依赖关系是一个挑战,许多软件包取决于系统其余部分的75%以上。

图3重复了该实验,显示了五个Netty软件包的传递依赖关系,这五个软件包最依赖其他软件包:epoll,spdy,websocketx,http和nio。
Netty:可能是世界上最好的包装结构

图3:以蓝色突出显示Netty中最差的传递依赖项。
与詹金斯形成鲜明对比的是,我们可以看到Netty软件包所依赖的数量以及数量。 Netty有55个软件包,但其他任何人所依赖的最大数量仅为12。这只是系统的22%。

Netty的包装结构是否完美?当然不是。特别是,内部和并发之间的循环依赖关系在该核心内部/并发/通道/缓冲区/实用程序包集群中创建了令人遗憾的强耦合。

从表面上看,Netty的类结构确实不好。 Netty的设计师在建立班级级别时显然放弃了一些出色的结构原理。丢人现眼。

但是看看那个包装的结构……哇。
最后,没有分析Netty的关键版本,而是提出了自己的架构观察。 Netty的架构师似乎已经决定了一个相当出色的部署策略。下载Netty既可以提供一个一体的JAR文件,又可以提供13个JAR文件,其中包含系统的各个部分。据推测,你可以加载所有Netty或仅加载所需的部分。

一个JAR文件(即公共''jar)包含内部/并发/通道/缓冲区/实用程序包群集,而其他文件则包含例如编解码器’’,tcnactive'',传输’'等,建议后者JAR是公共JAR的客户端,但不是彼此的客户端,因此彼此之间没有依赖关系。因此,在他们的部署中,Netty的设计师可能已经将子系统的分离和封装包含在内,从而导致了这种行业领先的封装结构。

剩下的唯一问题是:为什么没有更多的项目跟随Netty的领导?为什么詹金斯有90%的结构异常? Jenkins的设计者为什么不适当地划分他们的系统以减少包装间的耦合?为什么软件开发领域如此愿意接受这些不良结构所产生的成本?

我们不是比这个更好吗?

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以交流学习,共同学习进步。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring
Boot、Spring
Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货

Netty:可能是世界上最好的包装结构
Netty:可能是世界上最好的包装结构


推荐阅读
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 快速掌握Tomcat 8.5.40的配置与应用技巧 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
author-avatar
雷神白中凌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有