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

前言

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

这里我们借助开源项目 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.mzph.cn/news/751280.shtml

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

相关文章

pyinstaller使用笔记

1. 简介 pyinstaller是一个第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。 PyIns…

Oracle Primavera Analytics 是什么,与P6的关系?

前言 Oracle Primavera P6 Analytics 是与P6有关的一个相对较新的模块,Primavera 用户社区在很大程度上尚未对其进行探索。 那么它到底有什么作用呢? 通过了解得知它旨在通过深入了解组织的项目组合绩效,帮助高级管理层对其项目组合做出更好…

「Linux系列」Linux 系统目录结构/忘记密码解决方法

文章目录 一、Linux 系统目录结构Linux系统目录结构的概念案例 二、Linux 忘记密码解决方法方法一:使用root用户重置密码方法二:使用单用户模式重置密码方法三:使用恢复模式或救援模式案例:使用CentOS的救援模式重置密码 三、相关…

PE文件格式知识点汇总

简单概述:可执行文件之所以被操作系统加载且运行,是因为它们遵循相同的规范,而这个规范正是PE文件格式所确定。 1、PE文件格式的定义 PE文件格式:PE(Portable Executable)是win32平台下可执行文件遵守的数…

Python进阶学习(6)异常

文章目录 异常1.异常的定义2.异常错误3.异常处理(捕捉异常)4.assert断言5. 定义异常 异常 1.异常的定义 什么是异常:报错 也可以去链接资源访问某个网站时,中断程序,也叫异常 捕捉异常:因为我们在程序编…

MySQL | 库的操作 | 表的操作

目录 1. 库的操作 1.1. 创建数据库 1.2. 字符集和校验规则 1.2.1. 查看系统默认字符集以及校验规则 1.2.2. 查看数据库支持的字符集 1.2.3. 查看数据库支持的字符校验规则 2. 操作数据库 2.1. 查看数据库 2.2. 显示创建语句 2.3. 修改数据库 2.4. 数据库的删除 2.4.…

维基百科推广秘诀13个方法助你成为行业领导者-华媒舍

维基百科(Wikipedia)作为全球最大、最权威的在线百科全书,拥有海量的知识内容,被广大用户广泛使用。对于任何一个领域的从业者来说,建立自己的维基百科页面,无疑是提升行业影响力的重要手段。本文将向您介绍…

Linux学习(4)——使用编辑器

1.gedit编辑器 简单易懂,依赖图形界面。可以使用ctrlc ctrlv等快捷键,ctrls进行保存,与windows系统中相类似。 2.vi/vim编辑器 vi/vim可以直接通过控制台的终端完成文本的编辑,不依赖图形界面,使用范围更广。它的编辑…

DataX-数据迁移Oracle到Mysql-ETL工具

一、安装 https://github.com/WeiYe-Jing/datax-web/blob/master/doc/datax-web/datax-web-deploy.md 1、直接下载DataX工具包:DataX下载地址 下载后解压至本地某个目录,进入bin目录,即可运行同步作业: $ cd {YOUR_DATAX_HOME}/…

Redis数据结构对象之字符串对象

字符串对象 字符串对象的编码可以是int、raw或者embstr 如果一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串对象会将整数值保存在字符串对象结构的ptr属性里面(将void *转换成long),并且将字符串对象的编码设…

为啥这么做实现不了优雅关闭服务,gin 项目

所谓的优雅关闭服务就是 在关闭服务时,服务不再监听新的请求,并且可以将之前的请求处理完毕。 细节请看 专栏博客Gin项目实战09-优雅关闭服务

【Cute】MMA抽象代码理解 c2d9bff3d88846eb8c523fb722166bc9

【Cute】MMA抽象代码理解 导读: cute 之 Layoutcute Layout 的代数和几何解释cute 之 Tensorcute 之 MMA抽象cute 之 简单GEMM实现 阅读本文前建议先读上面reed大神的数篇文章,文本逻辑主要是针对具体的代码,记录一下自己学习过程中的理解…

Atlas200板卡部署车道线

本博客包含推理的准备和部署代码,一步步实现部署。 这个运行时生成的一个batch的数据,NCHW,就是输入的N,单图片推理就是1,把里面的数量改成1,但是你可以多生成一些bin图片放到校准文件夹中,更改输出文件名…

“城市绿肺诊断:集成GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型技术深入解析生态系统与城镇化协调发展“

基于GIS、RS、VORS模型、CCDM模型、geodetecto、GWR模型集成的生态系统健康的耦合协调分析 城市群是一国经济发展水平的象征,也是一国经济发展到一定阶段的标志,我国城市群建设体量不断增加,将成为全球经济的核心,中国城市群的建…

MyFileServer

靶场下载地址 https://download.vulnhub.com/myfileserver/My_file_server_1.ova 信息收集 # nmap -sn 192.168.56.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-24 22:07 CST Nmap scan report for 192.168.56.2 (192.168.56.2) Host is up (0.…

QML与C++通信

一、QML中如何使用C的类和对象 前提条件: 1.从 QObject 或 QObject 的派生类继承 2.使用 Q_OBJECT 宏 这两个条件是为了让一个类能够进入 Qt 强大的元对象系统(meta-object system)中,只有使用元对象系统,一个类的某些…

Vue2前端权限控制实战

在Vue2项目中,前端权限控制是保障应用安全性的重要环节。本文将介绍如何使用Vue2实现前端权限控制,包括页面路由权限控制和按钮级别的权限控制。 一、页面路由权限控制 页面路由权限控制主要是根据用户的角色或权限来决定其可以访问哪些页面。在Vue2中…

- 概述 - 《设计模式(极简c++版)》

本文章属于专栏《设计模式(极简c版)》 “如果我看得更远,那是因为我站在巨人的肩膀上。” -牛顿 本系列,主要结合个人经验,对《设计模式:可复用面向对象软件的基础》书中经典设计模式,用极简的语…

HarmonyOS NEXT应用开发—状态栏显隐变化

介绍 本示例介绍使用Scroll组件的滚动事件 onScroll 实现状态栏显隐变化。该场景多用于各种软件的首页、我的等页面中。 效果预览图 使用说明 加载完成后显示状态栏显隐变化页面,上下拖动屏幕,顶端状态栏出现显隐变化。 实现思路 在置顶位置使用sta…

文件夹秒变应用程序?别慌,数据恢复有妙招!

在日常使用电脑的过程中,我们有时会遇到一个令人头疼的问题:原本好好的文件夹突然变成了应用程序的图标,点击也无法正常打开。这种“文件夹变应用程序”的现象不仅让人感到困惑,还可能导致重要文件的丢失或损坏。那么,…