T31项目第8天

T31项目第8天

  • 工程结构规约
    • 1.应用分层
      • 1.1分层作用:
      • 1.2分层架构示例
        • 1.2.1 MVC框架
        • 1.2.2 分层结构
      • 1.3分层异常处理
      • 1.3分层领域模型
    • 2.maven
      • 2.1构建工具
      • 2.2主要功能
      • 2.3 G A V
      • 2.4 依赖仲裁
      • 2.5 排除依赖
    • 3.二方库依赖
      • 3.1GAV的定义
      • 3.2G 引入二方库的规约
      • 3.2G 引入二方库的原则
    • 4.TCP/ICP
      • 4.1 五层结构
      • 4.2 IP协议的报头
    • 5.服务器设定
      • 5.1 高并发服务器参数调优

今天是孤尽班第八天学习,今天跟着无尘老师学习了工程结构的规约,包括应用层设计、Maven、二方库、TCP/IP、服务器调优的方法。

工程结构规约

1.应用分层

1.1分层作用:

可扩展性:将流程细化,降低系统业务之间耦合,便于后续功能扩展;
可维护性:适应永适应各种场景的使用,增加代码的复用性,提升了编程的效率;
扩展:计算机的任何问题可以通过中间层来解决;

1.2分层架构示例

1.2.1 MVC框架

M:数据处理的业务逻辑和数据
V:表现层,用户页面渲染展现
C:控制器,全盘统筹

1.2.2 分层结构

终端显示层/开放API
请求处理层:controller
业务逻辑层/通用逻辑层:service
数据持久层/第三方服务:manage/dao
数据存储系统/第三方数据服务:jdbc,redis,

1.3分层异常处理

dao层:异常不打印日志
manager/service:跨服务器,AB服务器都需要打印日志,异常信息都需要记录日志信息
web:不能向上抛出异常,捕获异常之后,给用户一个友好性提示
开放性接口层:将异常处理为错误码和错误信息返回

1.3分层领域模型

DO:和数据库表一一对应,dao层向上传输信息
DTO:服务之间交换数据,不应该包含所有信息,设计序列化和反序列化处理
BO:业务对象,由service向上传输,可以是多个DO的组合信息,可以暴露所有信息,例如:controller层调用service 的数据,
QUERY:各层接受上层的查询请求,2个参数的传输需要封装查询,禁止map传输,例如:/user/queryByname/xiaoming
VO:显示层对象,web向模板渲染层传输,可以包含多个对象

2.maven

管理项目中依赖和项目的构建

2.1构建工具

Ant(不能打包,管理依赖)、Maven(约定大于依赖,统一管理,)、Gradle

2.2主要功能

依赖管理,目录结构(依赖层级查询),项目构建阶段(maven的插件 test,jar,clean)

2.3 G A V

G:组织的ID,一般用组织的名称
A:依赖名称
V:版本号

2.4 依赖仲裁

如果在项目中同一个依赖被定义了多次,项目中依赖版本的确定遵循依赖仲裁原则:
1.DependencyManagement中依赖进行仲裁(父工程约定了子工程的依赖版本号)
例如:父工程依赖(spring-boot-parent)中的pom文件中会定义了相关的依赖(jdbc,spring-boot-starter-web等)
2.无依赖关系(DependencyManagement),按照最短的路径来确定版本(是否在同一个Pom文件中,优先使用同一个pom文件中依赖)
3.路径相同,按照第一声明优先原则(同一个Pom文件,相同依赖,优先使用先声明的依赖)

2.5 排除依赖

在依赖中增加exclusion标签,标签中添加去除的依赖,例如在spring-boot-starter-web中依赖中去掉tomcat的依赖(spring-boot-starter-tomcat)
扩展:jetty作用和Tomcat的依赖作用一致
在项目打包之前要排除依赖冲突,否则上线之后会有错误信息

3.二方库依赖

一方库:工程内各个模块的依赖
二方库:公司内部的依赖库,公司内部其他项目的依赖
三方库:公司之外开源库,google,alibba,apache发布的依赖

3.1GAV的定义

G:com.{公司名称}.{业务线}.{子业务线},最高四级
A:产品名称—模块名称
V:1.0.0 主版本号(大规模的API和架构升级) 次版本号(相对兼容,少量API的修改,增加模块) 修订号(修改BUG或者兼容性)

3.2G 引入二方库的规约

不依赖SNAPSHOT版本(镜像版本)
使用RELEASE(正式版本)
类库版本号不允许覆盖升级
二方库升级或者新增时,保证其他jar包仲裁一致
依赖二方库群时,定义统一的版本号
GAV保持一致

使用建议:
底层基础技术框架、核心数据管理平台、或接近硬件谨慎引入
所有仲裁使用<.DependencyManagement>
二方库不需要配置型
不使用不稳定的工具包或Util类

3.2G 引入二方库的原则

精简原则:
移除不必要的API
只包含必须的API和工具类
可追溯原则
记录每个版本的变化
二方库位置,源码维护者

4.TCP/ICP

网络中实现信息传输的协议簇

4.1 五层结构

应用层:HTTP,IP,SMAPT
传输层:TCO/UDP
网络层:IP/ARP
链路层:IEEE 802
物理层:网卡

4.2 IP协议的报头

IP:
T31项目第8天_第1张图片
TCP
T31项目第8天_第2张图片
SYN(建立连接的信息),ACK(确认信息),FIN(断开连接)
三次握手:
T31项目第8天_第3张图片
**总结:**建立连接需要AB机器都能获取对方的确认信息,才能建立连接;
作用:确认信息,防止超时

*断开连接–四次挥手:
T31项目第8天_第4张图片
TIME_WAIT 的默认时间是2分钟,过了2分钟,也会自动断开连接,谁发起来连接,谁最后断开连接
扩展:TIME_WAIT 时间可以设置减少,长期占用SOCKET连接数资源(1024),影响系统传输;
**总结:**断开连接需要保证AB机器都同时断开,连接才断开,所以需要AB机器向对方都发送fin信号来确认断开

5.服务器设定

5.1 高并发服务器参数调优

服务器的优化:
TCP协议的time_wait超时时间
操作系统超时时间默认240s超时
调大服务器所支持的文件句柄数
JVM调优:
ORM异常时打印堆中异常信息
Xms和Xmx设置一样大小内存(堆内存4G以下)

你可能感兴趣的:(maven,tcpip,jvm)