如何学习一个大型分布式Java项目

news2025/1/11 7:11:14

前言

很多同学在没有实习经验的时候看到一个多模块分布式项目总是有一种老虎吃天的无力感,就像我刚毕业去到公司接触项目的时候一样,模块多的夸张,想学都不知道从哪开始学,那么我们拿到一份代码后如何从头开始学习一个新项目呢。

这里我们借助开源项目   D a t a l i n k X  DatalinkX  DatalinkX 举例,开源项目都会有比较完善的readme,如果要学习开源项目一定要先仔细看一遍readme描述,会帮助你对这个服务有一个大体的认知。

启服务动

拿到开源代码后先给导入到IDEA里,先解析pom并下载依赖,如果编译器里出现红线,先解决红线问题。(很多同学在这一步就望而却步了,其实这一步往往都是环境问题导致的,属于最恶心的一步。)

项目加载正常之后,冤有头债有主,先找有哪些启动类,换句话说先看哪些模块是作为web服务启动,现在的JavaWeb项目基本都是SpringBoot称霸武林,全局搜(ctronl + shit + f) @SpringBootApplication,这里插播一个面试题,大家都在心里默默回答一遍SpringBoot的启动流程,不会的先别看了,你应该在面试中到不了问项目的地步…

搜索完你会发现,在DatalinkX中有两个模块作为服务模块,datalink-serverdatalinkx-job,我们打开datalinkx-server的目录就会发现这是一个标准的web服务了,标准的四层模型,Controller、Service、Dao(repository)、Model(bean)

如果你看了readme就会发现,这块服务用来跟业务数据库交互的服务,先有一个大体概念。

再来看另一个启动模块datalinkx-job,你会发现这个模块跟web服务的四层结构没有一点关系。可能会疑惑没有controller怎么向外暴露入口呢,这时候再结合readme的描述发现使用了xxl-job,去看几篇xxl-job组件的文章就会反应过来,datalinkx-job是作为一个执行器,通过netty的方式暴露接口给xxl-job调度。

请求追踪

整体对系统有一个大体的业务认知,基于flink的异构数据源流转系统,核心业务就是用来流转数据的,什么是流转数据,说白了就是把A数据源的a库a1表的数据同步流转到B数据源的b库b1表,A和B两个数据源是不同架构的数据源,可以是mysql -> oracle,也可以是ES -> redis。

对系统有了大概了解之后根据readme提供的线索配置好yml配置不出意外的话就可以启动起来,选择最简单的业务场景进行debug,创建数据源,通过在DsController里添加端点,一点一点分析调试业务代码。

在调试中会发现datalinkx-server使用了其他子模块中的方法,在这个过程中不断扩展对整个服务的业务认知。

组件分析

很多同学看到服务中使用了各种中间件会心生畏惧,认为没有接触过组件,不知道怎么学或者认为学起来非常麻烦。这块我的建议是先知道这个组件是干什么的,能解决什么问题,再结合业务场景来思考为什么要用这个中间件,用这个中间件解决了什么问题。

做到这一步一个项目基本上已经吃的差不多了,应付别人的提问没啥问题,剩下的就是加分项了。

架构分析

不想当架构师的工程师不是好工程师,虽然听起来挺冠冕堂皇,哥们就是来挣钱的,架构不架构个锤子,要不是想混口饭吃谁研究这玩意。

但是不吹还不行,现在都喜欢问点分布式的东西,仔细分析下为什么server和job要分成两个服务启动呢,我们可以把它类比成传统分布式架构master + worker,在部署上我们可以横向扩展job模块来提升系统的性能。

这些只是冰山一角,还有更多优秀的设计藏在代码里等你发掘。感兴趣的话可以加入交流群一起学习,如果感觉很吃力的话可以酌情考虑购买文档加入股东委员会。会有独立的股东群里交流项目细节、分享内推岗位、共享大厂笔试面试经验等。

Gitee:   h t t p s : / / g i t e e . c o m / a t u p t o w n / d a t a l i n k x  https://gitee.com/atuptown/datalinkx  https://gitee.com/atuptown/datalinkx 

GieHub:   h t t p s : / / g i t h u b . c o m / S p l i t f i r e U p t o w n / d a t a l i n k x  https://github.com/SplitfireUptown/datalinkx  https://github.com/SplitfireUptown/datalinkx 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThingsBoard Edge 设备控制

文章目录 一、RPC 功能1.服务端 RPC2.客户端 RPC3.MQTT RPC API3.1.服务端RPC3.2.客户端RPC 二、设备控制1.环境准备2.创建设备3.服务端PRC3.1.RPC消息主题3.2.程序源码3.3.创建仪表板3.4.边缘分配仪表板3.5.测试 4.客户端RPC4.1.RPC消息主题4.2.程序源码4.3.规则链4.4.测试 Th…

Selenium-webdriver_manager判断是否已经下载过驱动(复用缓存驱动)

1,谷歌浏览器默认位置 2,ChromeDriverManager 下载的驱动位置 其中admin为机器的用户名 def installDriver(self):"""判断是否需要下载driver""""""找到本机谷歌浏览器版本""""""C:\P…

软考81-上午题-【面向对象技术3-设计模式】-行为型设计模式01

一、行为型设计模式一览 二、责任链模式 2-1、意图 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 1-2、结构 1-3、代码实现 1-4、适…

Kubectl常用命令

管理资源(查看、创建、更新、删除) 查看node资源 kubectl get nodes查看命名空间 kubectl get ns查看service资源 -n 指明所属的命名空间,不写默认看命名空间为default下的所有service kubectl get svc -n default查看pod资源 -n 指明所…

万界星空科技商业开源MES,技术支持+项目合作

商业开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境:jdk11tomcatmysql8springbootmaven 可以免费使用,需要源码价格便宜,私信我获取。 一、系统概述: MES制造执…

网络安全实训Day5

写在前面 昨天忘更新了......讲的内容不多,就一个NAT。 之前记的NAT的内容:blog.csdn.net/Yisitelz/article/details/131840119 网络安全实训-网络工程 NAT 公网地址与私网地址 公网地址 可以在互联网上被寻址,由运营商统一分配全球唯一的I…

Coursera上Golang专项课程2:Functions, Methods, and Interfaces in Go 学习笔记

Functions, Methods, and Interfaces in Go Course Certificate 本文是学习 Functions, Methods, and Interfaces in Go 这门课的学习笔记,如有侵权,请联系删除。 文章目录 Functions, Methods, and Interfaces in GoMODULE 1: FUNCTIONS AND ORGANIZ…

云原生部署手册02:将本地应用部署至k8s集群

(一)部署集群镜像仓库 1. 集群配置 首先看一下集群配置: (base) ➜ ~ multipass ls Name State IPv4 Image master Running 192.168.64.5 Ubuntu 22.04 LTS1…

多进程数据库不适合作为hive的元数据库

简介 “今天发现一个比较奇怪的现象,因为博主不熟悉mysql,所以在安装hive的使用了postgresql作为hive的元数据库,在测试几个连接工具对hive进行链接,后面再测试的时候发现链接不上了,并且报错日志如下:” …

利用生成式人工智能进行功能管理测试

就 DevOps 而言,生成式 AI与功能管理测试的新兴集成标志着一次重大演变。我们将认真研究这项技术如何彻底改变我们创建测试环境的方式。 使用人工智能生成测试使我们能够模拟大量的用户场景和环境,这意味着我们可以开发和部署不仅好而且很棒的功能&…

django实现api接口

(前期准备)第一步:虚拟环境 在windows上使用virtualenvwrapper。 pip install virtualenvwrapper-win 接着,添加环境变量。 echo %WORKON_HOME% 接下来就是创建虚拟环境,假如创建myenv mkvirtualenv myenv 进入…

线程的基本使用

线程 使用线程方法 继承Thread类,重写run方法实现Runnable接口,重写run方法 继承Thread vs 实现Runnable的区别 从java的设计来看,通过继承Thread或者实现Runnable接口来创建线程本质上没有区别,从jdk帮助文档可以看到Thread类本身就实现…

如何在不带备份的情况下恢复 Android 手机照片?

你的 Android 手机出了什么问题? Android 手机上的垃圾文件过多。 您的 Android 手机屏幕黑屏。 您的手机蓝屏死机。 您的设备卡在启动屏幕上。 电话停止工作。 手机一直关机。 ... 您是否遇到过以上情况并将您的 Android 手机恢复出厂设置?如果是这样&…

最后的挣扎 - Qt For Android on HuaWei Mate 60Pro (v4.0.0)

简介 为什么叫最后的挣扎, 其实都知道即将到来的 HarmonyOS NEXT 将抛弃Android支持,纯血HarmonyOS 将上线, 此时再说Qt for android支持Huawei HarmonyOS的设备其实并没有多少意思, 但恐怕在大多数基础软件完成兼容前, 很多人还是…

【Godot 4.2】常见几何图形、网格、刻度线点求取函数及原理总结

概述 本篇为ShapePoints静态函数库的补充和辅助文档。ShapePoints函数库是一个用于生成常见几何图形顶点数据(PackedVector2Array)的静态函数库。生成的数据可用于_draw和Line2D、Polygon2D等进行绘制和显示。因为不断地持续扩展,ShapePoint…

定位及解决OOM

一、定义 内存溢出:OutOfMemoryError,是指因内存不够,导致操作新对象没有剩余空间。会导致频繁fullgc出现STW从而导致性能下降。 内存泄漏:指用malloc或new申请了一块内存,但是没有通过free或delete将内存释放&#…

cmd常用指令

cmd全称Command Prompt,中文译为命令提示符。 命令提示符是在操作系统中,提示进行命令输入的一种工作提示符。 在不同的操作系统环境下,命令提示符各不相同。 在windows环境下,命令行程序为cmd.exe,是一个32位的命令…

全域电商数据API接口采集突破堆人头的方式的数据采集实现高效稳定大批量的电商商品数据采集

全域电商,是近几年的新趋势,几乎所有商家都在布局全域,追求全域增长。但商家发现,随着投入成本的上涨,利润却没有增加。 其中最为突出的是——商家为保证全域数据的及时更新,通过堆人头的方式完成每日取数…

vulhub中GitLab 任意文件读取漏洞复现(CVE-2016-9086)

GitLab是一款Ruby开发的Git项目管理平台。在8.9版本后添加的“导出、导入项目”功能,因为没有处理好压缩包中的软连接,已登录用户可以利用这个功能读取服务器上的任意文件。 环境运行后,访问http://your-ip:8080即可查看GitLab主页&#xff0…

cartographer学习与使用

记录一下在配置和使用cartographer建图时遇到的各种问题吧。 我的数据 配置文件&#xff1a; my_rslidar.launch <launch> <param name"/use_sim_time" value"false" /> <!--启动建图节点--> <node name"cartographer_n…