技术标签: 架构 博客 java Java后台框架系列 开发框架 框架
已经毕业两年,真是时间飞逝。
其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了。
你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务逻辑开发。
如果你更努力一点,你可能有去摸索一些配置的作用,一些问题的排查会更有经验和自己的想法。
如果你好奇心更强一点,可能会去了解一些框架的原理,各个框架之间是怎么相互协助工作的。自己能否从无到有将这些框架串联起来。
小宝鸽想写一系列这样的文章:将Java项目开发过程中的一些框架,如何一步步串联起来,并且结合源码探索其核心部分原理。以及项目从小项目演变到大项目的过程中,需要开发框架以及结构变化。以及特定业务场景设计。具体概请见下文。
大概使用的开发框架及工具:
基本工具:Eclipse、Maven、Tomcat
前端:Jquery、Vue.js、 Element
后台核心框架:Spring、SpringMVC、MyBatis
后台辅助框架:日志框架Logback、安全框架Shiro、任务调度框架Quartz
分布式框架:Dubbo、RabbitMQ、Redis…………..
除了这些框架还有一些特定业务场景,以及高扩展高可用的架构演变过程等等。
主要分为下面三个阶段博客提纲。
一、基本工具:Eclipse、Maven、Tomcat(此篇不写博客,关于Maven猿友可自行网上安装教程及博客)
二、Spring介绍及探索:主要就是依赖注入以及AOP原理,Spring使用大多以配置为主,因此从配置入手,结合源码探索其原理。
三、SpringMVC:以实例入手,结合源码探索其主要原理。
四、Mybatis:以实例入手,结合源码以及分页插件拓展探索其用法及原理。
五、日志框架Logback:结合实例、配置、源码了解其原理,并对Logback封装,使得更加符合实际业务需求。
六、前端框架Vue.js+Element使用,Jquery默认猿友已经会用了。
七、安全框架Shiro:主要登录及权限认证实例入手,探索其用法。
八、任务调度框架Quartz:实例+配置+源码探索用法及基本原理。
九、异步线程池使用及业务场景。
十、数据库事务实例及应用场景
十一、ehcache本地缓存实例及应用场景。
之所以阶段一叫集中式基本架构,是因为这种结构适合前端代码,后台代码在一个工程,部署到一台服务器上里面。带来的问题有:性能问题、工程十分臃肿、风险很大、不好迭代。
当然性能问题可以通过集群方式,就是部署到多台机器上,然后根据用户访问的ip进行分流到不同机器响应。目前web项目大多采用这种做法。
但是一旦业务及功能模块多了起来,需要快速迭代,必然要模块拆分。因此必须采用分布式架构。
分布式架构一般根据功能进行划分模块,以电商为例:对外web端一个模块、管理web端、商品后台一个模块、订单支付后台等一个模块、用户信息后台一个模块。各个模块之间通过接口服务实时通信,异步通过MQ方式通信、缓存也需要使用分布式缓存框架。
接下来我们看下阶段二的博客提纲。
一、分布式服务框架Dubbo:主要实例以及原理探索。
二、日志流水透传:让同一个请求经过的多个模块的日志流水保持一致。
三、分布式消息框架RabbitMQ:实例+配置+源码理解其原理。
四、任务调度框架Quartz改造:将所有模块的JOB任务集中管理,以服务调用形式触发。
五、分布式缓存框架Redis:了解其原理并规范使用,各个模块定义系统码,共享缓存内存资源,但是已系统码隔离。
六、前后端分离:对性能以及用户体验较高的web模块进行前后端分离,前端模块全部为静态资源,部署待静态资源服务器,与controller拆分开。
七、session共享:之前也提到根据功能划分模块,多个web模块对外提供请求相应,那么就会涉及session共享,一次登录即可。主要采用tomcat-redis技术实现session共享。
八、OAuth2.0认证和授权:这是扩展外部合作渠道的毕竟之路,如授权给外部商户获取你的用户信息。如微信公众号就是这种做法,很多可以使用微信登录以及QQ登录也是这种做法。
九、封装常用的业务工具类:如批量导入导出,ftp上传及下载文件、json处理等等。
十、将框架集成部分抽出形成一个基础框架:这个非常有意义,可以简化配置,对框架升级等等。
一、日志监控,自动告警:将ERROR日志通过邮件或短信方式发给对应的开发人员,可以起到很好的提醒作用。
二、自动化部署以及持续集成:模块多了,上线部署变得更加频繁的时候,就需要简化部署流程。
三、代理与负载均衡&集群:根据阶段二,一般web项目通过ip进行负载分流,后台可以使用Dubbo的负载均衡。
四、资源服务器搭建
五、数据读写分离
六、分库分表
七、秒杀设计
八、非关系型数据库使用
九、大数据工具的使用
一、写此系列文章,主要是希望比较深入探索一下框架原理,不然仅限会使用,很难有实质性的提高。
二、更希望把一些框架基础串联起来,形成一套与业务无关的基础框架。
三、之前阅读过小宝鸽的博客的猿友应该都知道,小宝鸽喜欢将工程代码分享出来,让大家可以动手边运行,边看看其原理。
四、对博客提纲有什么建议的猿友欢迎提出,一个人未必能思考周全。
五、有兴趣一起参与本系列博客书写的猿友,非常欢迎,请私信我,我一起交流探讨,也可以将源码放到git上一起维护。
Secure CRT中文显示乱码1、远程连接上Secure CRT2、Secure CRT的设置,选项->会话选项->外观->字符编码->uft-8 3、退出,再重新登录。发现utf8的文件都能正确读了,utf8的文件名也能正确显...
用户态进程的虚拟地址如何转换成物理地址用户态进程的虚拟地址如何转换成物理地址?mmapmmap基础概念mmap内存映射原理mmap详解UMA和NUMA:mmap优点总结mmap相关函数用户态进程的虚拟地址如何转换成物理地址?区分一个进程,我们都知道最简单就是进程的pid。我们就从(pid,virtualaddress)来看看如何将一个进程的虚拟地址转换为物理地址phyaddress。首先根据pid我们可以得到这个进程的task_struct,进而通过task_struct得到mm,通过mm得到pg
转:http://blog.csdn.net/wangningyu/article/details/37997079用VC6在64位Windows7下调试的时候,如果中断(Shift+F5)调试,程序无法退出。问题描述:当点击F5开始一个项目的调试时,程序在设置的断点处停止,这时按下Shift+F5后,vc6可以退出调试状态,但是WINDOWS系统的任务栏上会留下前面调
用Java做一个简易的员工管理系统文章目录第一步:引入数据库及JDBC的jar包 第二步:创建学生管理系统的类与方法 第三步:测试员工管理系统前言本文章适合学完javase,数组,面向对象,mysql数据库,JDBC核心功能:JDBC连接数据库及项目结构实现员工管理系统一、引入数据库及JDBC的jar包MySQL :: Download MySQL Community Server mysql下载地址MySQL :: Download Conn....
代码下载编译安装$ git clone https://github.com/opencv/opencv.git$ cd opencv$ mkdir build$ cd build$ cmake ..$ make$ sudo make install编译后demo运行出错> terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(4.4.0-dev) /home/hui/dat
1. 本周学习总结1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容。2. 书面作业本次PTA作业题集异常1. 常用异常结合题集题目7-1回答1.1 自己以前编写的代码中经常出现什么异常、需要捕获吗(为什么)?应如何避免?答:7-1这题中主要做的就是捕获运行时产生的异常以及用户主动抛出的异常;以前编写的代码容易出现以下问题:ArrayIndexOutO...
红帽和centos项目今天宣布了一个新的名为CentOS Stream的GNU / linux发行版本,为开发人员和贡献者提供了滚动发布的操作系统。CentOS Linux一直是商业上可用于企业的Red Hat Enterprise Linux操作系统的开源替代方案,现在,Red Hat和CentOS都决定将他们的联盟提升到一个新的水平,并为该产品创建以开发人员为中心的发行版。认识CentOS...
本节给大家带来的是WallpaperManager(壁纸管理器),如其名,就是手机壁纸相关的 一个API,在本节中我们会描述下WallpaperManager的基本用法,调用系统自带的 壁纸选择功能,将Activity的背景设置为壁纸背景,以及写一个定时换壁纸的例子~ 好了,不BB,开始本节内容~ 官方API文档:WallpaperManager
具体流程:资源上报GPU Share Device Plugin利用nvml库查询到GPU卡的数量和每张GPU卡的显存, 通过ListAndWatch()将节点的GPU总显存(数量 显存)作为另外Extended Resource汇报给Kubelet; Kubelet进一步汇报给Kubernetes API Server。 举例说明,如果节点含有两块GPU卡,并且每块卡包含16276MiB,从用户的角度来看:该节点的GPU资源为16276 2 = 32552; 同时也会将节点上的GPU卡数量2作为另
准备出一个新的分类,叫【奇文异事】,记录自己在网上看到的有意思的文章和事情。一、《技术分享周刊》访问地址:https://github.com/ruanyf/weekly最近偶然看到阮一峰整理的《技术分享周刊》,觉得很有意思,推荐收藏查看。每周的分享基本都包含以下几个方面:新闻教程工具资源文摘图片金句二、《数字世界中的纸张——理解 PDF》访问地址:https...
模块化的目标是:1.代码单元冠以命名,增强代码段的辨识度2.建立代码之间的依赖关系,降低代码段之间的耦合3.命名空间和上下文管理,减少代码段之间的相互冲突4.形成模块规范,提高代码段的复用性因此,一个完整的模块应当包含这几个属性1.模块名2.实现逻辑3.返回值4.所依赖的模块...
大多数时候,贝叶斯统计在结果在最好的情况下是魔法,在最糟糕时是一种完全主观的废话。在用到贝叶斯方法的理论体系中,马尔可夫链蒙特卡洛方法尤其神秘。这篇文章将介绍马尔可夫链蒙特卡洛方法,极其背后的基本数学推理。首先,什么是马尔可夫链蒙特卡洛(MCMC)方法呢?最简短的回答就是:“MCMC就是一种通过在概率空间中随机采样来近似感兴趣参数的后验分布的方法”在这篇文章中,我不用任何数学知识就可以解释上面这个