企业级软件开发技术
企业级软件开发技术
J2EE产生背景
1
2J2EE是Sun公司为了满足多层体系结构企业级应用开发的需求,在J2SE的基础上,根据企业级应用的各种需求,提出的一种标准。
背景:互联网的兴起,企业级应用的需求,跨平台的需求,分布式计算的需求(随着企业应用的复杂性增加,需要将应用逻辑分布在不同的服务器上,以提高性能、可靠性和可伸缩性。)J2EE设计的考虑
1
J2EE设计考虑到系统的可维护性和可扩展性进行了分层架构,包括客户层,Web层,业务层和企业信息系统层。考虑到业务逻辑的不同将系统划分为不同的组件,如JavaBeans、Servlet、Enterprise JavaBeans等,组件时可重用的,可替换的。
J2EE针对分布式的处理,在分布式上的相关技术
1
2
3
4J2EE平台本质上是一个分布式的服务器应用程序设计环境,是一个专为分布式计算设计的平台,它提供了一套标准化的规范和接口,使得开发者能够构建分布式、多层次、高可用性、可扩展的企业级应用。
与分布式相关的技术:
EJB、JMS、JPA、JTA、JAXJ2EE的组成
1
2
3四层模型
客户层-Web层-业务层-企业信息系统层
JavaApplet-JSP|Servlet|EJB|数据库J2EE和MVC的关系
1
2
3J2EE是一个Java平台,提供了一系列规范和接口,用于开发多层次、分布式、可扩展、安全的企业级应用。J2EE包含了多个组件和技术,如Servlets、JavaServer Pages、Enterprise JavaBeans、Java Message Serice(JMS)。
MVC是一种设计模式,用于将应用分为三个核心部分:模型,视图和控制器。这种分离有助于管理复杂的应用,并使代码更易于维护和扩展。
J2EE与MVC架构的关系在于,J2EE平台提供了实现MVC模式所需的技术和组件。J2EE应用中,模型可以时JavaBeans,Session Beans或实体Beans。视图通常是JSP页面、HTML、XML或JSON实现。控制器通常是Servlets实现。J2EE平台提供了构建MVC架构所需的所有工具和架构。Web容器和ejb容器的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Web容器主要负责运行和管理Web应用程序,特别是基于Servlet和JSP的技术,Web容器处理客户端的HTTP请求,并将这些请求分发给相应的Servlet或JSP页面进行处理。Web容器的主要作用包括
1.请求处理,接受客户端的HTTP请求,并将其分发给相应的Web组件(如Servlet)
2.生命周期关系,负责Servlet的创建,初始化,服务请求,销毁等生命周期管理。
3.会话关系,管理用户会话,包括会话的创建,维护和销毁。
4.安全性:提供用户身份验证和授权等安全功能
5.日志记录:记录Web应用程序的运行记录
6.部署和配置:负责Web应用程序的部署和配置管理。
EJB
EJB容器主要负责运行和管理企业JavaBean,提供事务管理,安全性,并发控制,分布式计算等服务。
EJB容器的主要作用包括:
1.事务管理:提供声明式事务管理,确保业务操作的原子性,一致性,隔离性和持久性。
2.安全性:提供细粒度和安全控制
3.并发控制
4.生命周期管理
5.远程调用
6.资源池1
2
3Web容器主要处理HTTP请求和Web相关的功能,而EJB容器主要处理企业级业务逻辑和分布式服务。
Web容器运行Servlet和JSP,而EJB容器运行会话Bean、实体Bean和消息驱动Bean。
部署单元不同,Web容器部署Web应用程序(WAR),EJB容器部署企业应用(EAR),其中可能包含EJB(JAR)和Web(WAR)模块。JSP
1
2
3
4
5
6JSP是一种动态网页技术,JSP技术允许开发者将Java代码和HTML标记语言混合在一起,以创建动态的、基于Web的应用程序。JSP页面在服务端执行,生成HTML或其他格式的内容,然后发送到客户端浏览器进行显示。
工作原理:
1.用户请求jsp页面,浏览器发送请求到服务器。
2.如果是第一次请求改jsp页面,服务器会将jsp文件转换为一个servlet(java类),然后编译这个java类。
3.服务器调用这个Servlet的service方法,处理请求并生成响应。
3.Servlet生成HTML内容,并将其作为响应发送回客户端浏览器。Servlet
1
2
3
4
5Servlet是Java提供的一种用于扩展服务器功能的技术。它是运行在Web服务器或应用服务器上的Java类,用于处理客户端请求并生成响应。Servlet通常用于处理HTTP请求,但它们也可以用于处理其他类型的协议。
1.当Web服务器(Tomcat)启动或第一次请求到达时,Servlet容器回加载并实例化Servlet。
2.初始化
3.处理请求,service()
4.销毁EJB
1
2
3
4
5EJB是一种Java EE技术,用于开发和部署分布式、面向对象的业务逻辑。将业务逻辑从客户端界面和底层数据访问代码中分离出来,使得业务逻辑可以独立于应用程序的其他部分进行开发,部署和扩展。
三种Bean
1.会话Bean,代表客户端的一次操作或会话,有状态:Bean的状态改变,接下来的方法调用中,客户端会出现同样的状态,无状态:不用保存客户端的状态,方法调用之间没有存储信息,不会保存会话状态、
2.实体Bean,代表持久化数据,通常与数据库中的表行对应,用于表现O/R映射。
3.消息驱动Bean,用于处理异步消息,接受客户端发送的消息,并据此触发响应的业务逻辑。通常与JMS一起使用,JMS
1
2
3
4
5JMS是一个Java EE的API,用于在两个或多个客户端之间异步发送和接受消息。JMS提供了一种标准的方式来实现消息传递,使得开发这可以专注于业务逻辑,而不必关心消息的底层传输细节。
JMS支持两种消息传递机制:
1.点对点模型,消息被发送到一个特定的队列,然后被一个或多个消费者接受,每个消息只能被一个消费者接受,一旦被消费,就会从队列中消失,保证了消息的顺序传递,并且会确保消息不会消失。
2.发布/订阅模式。消息被发送到一个特定的主题,然后被所有订阅了该主题的消费者接受,与点对点模型不同,发布/订阅模型中的消息可以被多个消费者接受,而且消费者可以随时加入或离开主题。
主要组件:消息生产者,消息消费者,消息,队列管理器,主题管理器,JMS提供者JNDI
1
2
3
4
5
6
7JNDI(Java Naming and Directory Interface)是一个Java API, 用于在Java应用程序中查找和访问各种命名和目录服务。JNDI提供了一种统一的方式来访问不同类型的目录和命名服务,如DNS,LDAP,CORBA等。JNDI允许开发者将服务名称与实际服务实现分离,使得应用程序可以更加灵活和可配置。
主要概念:
1.命名上下文,包含一组名称和对象的目录结构,类似文件系统中的目录
2.目录服务i,提供了命名和目录功能的服务,如LDAP(Lightweight Directory Access Protocol)服务。
3.绑定,将一个名称与一个对象关联起来的操作。
4.查找,根据名称在命名上下文中检索对象的操作。
5.引用ejb和javabean的区别
1
2
3
4
5
6JavaBean是一种Java类,它遵循特定的命名和设计模式,JavaBean通常用于封装数据,作为一个简单的值对象或者数据容器。JavaBean类通常是可序列化的,并且提供无参构造函数。它的属性通过一组标准的getter和setter方法来访问和修改,JavaBean可以在任何Java应用程序中使用,包括桌面应用程序,Web应用程序等。
EJB是Java EE的一部分,它是一个规划,用于开发和部署分布式、面向对象的业务逻辑,EJB旨在简化企业级应用程序的开发,提供事务管理、安全和分布式计算等底层服务,EJB分为会话Bean、实体Bean、消息驱动Bean,企业级、分布式、并发、生命周期
1.两者都是可重用的组件,都有get和set方法,都可以进行组装来构建java应用
2.JavaBean不能跨进程访问,较简单,EJB基于RMI技术,可以被远程访问,较复杂
3.JavaBean可以运行在一般的Web容器上,EJB必须部署在EJB容器中JDBC
1
2
3
4
5
6
7是Java语言提供的一种数据库连接API,允许Java程序和多种关系型数据库进行交互。
1.加载数据库驱动
2.建立与数据库的连接
3.创建statement
4.执行SQL
5.处理结果
6.关系资源JDBC两种连接方式的特点和优缺点
1
2
3
4
5直接连接:使用DriverManager
每次请求时,通过DriverManager直接创建一个新的连接。连接的创建和关闭通常在应用程序代码中显式进行。特点是简单,更容易理解,新手。缺点是每次数据库操作都要创建和关闭,增加数据库的负载和延迟。浪费系统资源。连接不复用
池连接(使用DataSource和连接池)
连接池是一个预先创建的连接集合,用于管理和复用数据库连接。应用程序从连接池中获取连接,使用完毕后返回到池中,而不是关闭连接。优点提高了应用程序的性能,避免过多的消耗系统资源。灵活,线程安全。缺点,复杂,配置需要学习时间。连接池优点、配置、特性、访问步骤
1
2
3
4
5
6
7优点:性能提升、节约资源、加快响应、并发支持、稳定性强、配置灵活
配置:最大连接数、最小连接数、连接超时、测试连接、最大空余时间
特性:连接复用、自动收缩、负载均衡
访问步骤:加载驱动 -> 创建数据源DataSource -> 获取连接(从连接池) -> 使用连接创建StateMent -> 处理SQL结构 -> 释放资源 -> 关闭连接池EJB本地接口、远程接口
1
EJB访问过程:EJB客户端通过JNDI查找EJB的Home接口,然后通过Home接口获得EJB对外接口,获得对外接口后,调用对外接口定义的EJB业务方法,而真正的逻辑是Bean对象完成的
消息中间件的原理
1
2
3
4
5
6
7
8
9
10
11基于消息队列的机制。允许应用程序根据队列来发送和接受消息,从而实现系统间的解耦和异步通信,
消息生产者:
发送消息的应用程序或服务,将消息发送到消息队列中,然后可以继续执行其他任务,无需等待消息被处理。
消息队列:
存储消息的缓冲区,确保消息在生产者发送和消费者接受之间得到暂存。队列通常由消息中间件管理,提供对消息的持久化,有序传递,优先级排序
消息消费者
从消息队列中接受消息的应用程序或服务
中间件服务
管理和协调消息传递的核心组件,接受生产者消息,存储队列,传递消费者消息
消息协议
定义消息格式和通信规则社交通讯软件的架构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18社交通讯软件的架构通常需要支持高并发、实时性、数据一致性以及高可用性。通常采用微服务架构、事件驱动架构或两者的结合。
客户端层:
IOS,Android,Web前端,用户交互,网络请求
API网关:
负责处理客户端的所有请求,进行路由、认证、授权、限流、熔断、日志记录,提供统一的接口给客户端,简化客户端的调用逻辑。
服务层;
微服务,消息服务,搜索,服务之间用RESTful方式交互
消息队列/中间件
RebbitMQ、Kafka,用于处理异步消息,事件广播、服务解耦。用户发送消息时,消息服务可以将消息写入消息队列,由其他服务异步处理和分发。
数据库层
缓存层
搜索引擎
文件存储
实时通讯
分布式
服务的注册与发现
持续集成持久化技术,ORM技术
1
2
3
4
5
6
7
8
9
10
11
12持久化包括:
文件系统
关系数据库
非关系数据库
对象数据库
分布式数据库
内存数据库
ORM技术
面向对象程序设计语言和关系数据库之间的桥梁,主要特点
映射,封装,数据持久化,事务管理,查询语言
常见ORM包括,Hibernate,JDBC、实体Bean和Hibernate特点
1
JDBC提供了最基础的数据库操作能力,适用于简单的数据库交互场景;实体Bean是EJB规范的一部分,主要用于表示业务数据,但在现代Java应用中已经较少使用;Hibernate是一个功能强大的ORM框架,适用于需要复杂对象关系映射和数据库操作的场景。
缓存的分类
1
2
3
4
5
6
7
8
9读取缓存:解决读取速度慢
写入缓存:解决写入速度慢
读写缓存,狭义上解决介质读写速度不匹配问题,
HTTP缓存,页面级缓存,数据库缓存,opcode缓存,反向代理缓存,
按存储介质分,内存:网站进程内,同服务器独立进程,独立服务器,分布式服务器组。磁盘:本地文件和数据库,独立服务器
按照存储的数据分
延迟加载的缓存:大型网站设计一般涉及的主要缓存技术
1
2
3
4
5
6
7
81.浏览器缓存:图片、css、脚本存储
2.cdn缓存:内容分发网络缓存静态资源,图片,视频,css/js文件到全球各地的边缘服务器上,当用户请求这些资源时,CDN会从最近的边缘服务器提供内容,从而减少延迟和提高加载速度。
3.反向代理缓存:Nginx位于Web服务器前,缓存用于请求的动态内容,相同的请求再次到来时,代理服务器可以直接缓存的内容,减轻后端服务器的负担。
4.数据库缓存:MySQL的查询缓存,存储了查询结果,减少数据库的查询时间。
5.对象缓存系统:Redis用于存储小块的经常访问的数据,如用户会话,配置参数,计数器等, 这些数据通常在内存中,访问速度非常快
6.页面缓存,将整个动态生成的页面缓存起来,当用户请求相同的页面时,直接返回缓存的页面内容,而不是重新生成。
7.应用层缓存
8.分布式缓存:存储跨多个服务器共享的数据,确保所有服务器都能快速访问相同的数据副本。缓存失效
1
2
3
4解决缓存失效有三种思路
1.使用consistent hashing算法,把数据缓存分片,减少缓存宕机对服务的影响范围。在服务器数量比较少时,增加虚拟节点保证服务器能均匀分布在圆环上。
2.缓存多份
3.实现缓存持久化或半持久化缓存的常见模型和应用场景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16常见缓存模型:
1.内存缓存:LRU、MRU、FIFO、LFU
2.磁盘缓存:用于存储那些不经常访问,但需要快速访问的数据
3.分布式缓存:Redis,Memcached用于分布式系统中,可以提供高性能、可扩展的缓存服务。
4.浏览器缓存:根据HTTP头部信息决定是否使用本地缓存的资源
5.数据库缓存:某些数据库管理系统如MySQL的查询缓存会缓存查询结果,以加快后续查询的速度。
应用场景:
1.Web应用:缓存经常请求的页面或数据,减少数据库负载,提高响应速度。
2.数据库查询优化:预先计算和存储复杂的查询结果,以便快速响应用户的请求
3.文件系统
4.电商平台
5.社交媒体:缓存用户动态、评论等
6.移动应用:在没有网络连接时也能访问内容
7.API服务
8.大数据处理负载均衡几种策略
1
2
3
4
5
6
71.轮询
2.加权轮询
3.最少链接
4.加权最少连接
5,IP哈希
6.URL哈希
7.基于延迟的负载均衡负载均衡下Session的处理方案,优缺点
1
2
3
41.Session复制,
2.cookie-based session,完全无状态,服务器不需要存储任何session信息,所有的状态都存储在客户端的cookie中,安全性问题,大小限制
3.分布式缓存,redis,高性能,可伸缩性共,多个服务器之间共享
4.数据库session存储,SOA(ESB)
1
2
3SOA,面向服务的架构,是一种设计方法,其中应用程序由一系列松散耦合的服务组成,这些服务通过标准化的接口和协议进行通信。SOA关注于服务的重用性和互操作性。
ESB是一种中间件,它支持SOA的实施,允许不同服务之间的消息传递,并且可以转换消息的格式以适应不同的接收者
微服务架构是一种将应用程序构建为一组小型,独立服务的方法,每个服务运行在自己的进程中,通常通过轻量级机制如HTP RESTful API进行通信,中台
1
2
3在大型企业和互联网公司中,中泰通常指的是一个集中的服务平台,它提供一套共享的服务和工具,如用户管理,订单处理,数据分析,支付处理等,以支持多个业务线和产品。
中台提供的服务和工具可以被多个业务线和产品共i想,避免重复开发的情况。
封装和抽象,数据整合,微服务架构
1
2
3
4微服务架构是一种将应用程序设计为一组小型、独立服务的方法,每个服务运行在自己的进程中,通常通过轻量级机制进行通信,
优点,模块化,松散耦合,独立开发,独立部署,灵活性和扩展性,技术多样性,可以采用不同的技术栈,容错性,易于部署
缺点,复杂性,运维,初始成本系统拆分,水平和垂直
1
2
3
4系统拆分呢是将一个大型、复杂的系统分解为多个较小的、更易于管理和维护的部分的过程,可以提高系统的可伸缩性,可维护性和可扩展性。
水平拆分:也称为分层架构,将系统按照不同的功能层次进行拆分,将表现层,业务逻辑层和数据访问层分离,每一层负责不同的功能,层与层之间通过定义良好的接口进行通信,提高了系统的模块化程序,便于管理和维护,各层可以独立开发,降低耦合,层数过多,系统复杂性增加
垂直拆分:将系统按照业务功能进行拆分,每个部分负责一个特定的业务领域或功能模块。每个模块专注于一个业务领域,可能会导致重估的功能实现,数据库拆分
1
2
3
4水平拆分:将数据表按照某种规则,拆分到多个数据库中,每个数据库中包含相同的数据表结构,但是存储不同的数据集,提高了系统的可伸缩性,
垂直拆分,将不同的表或表的一部分拆分到不同的数据库中,通常基于业务功能或数据访问模式,将相关的表或数据存储在一起,以提高性能和可维护性,
功能拆分
地理拆分提高网站访问速度的常用方法
1
2
3
4
5
6
7
8
9CDN内容分发网络
压缩文件
减少HTTP请求
使用异步加载
优化图片
使用缓存
服务器优化,优化配置
数据库优化,
最小化HTTP重定向TOGAF
1
2
3
4The Open Group Architecture Framework是一个开放的组织架构框架,提供了一套全面的结构化的方法来设计和实施企业架构。
主要的架构包含
业务架构,应用架构,技术架构,数据架构,安全架构,治理交媾,基础设施架构,服务架构,运营架构
企业级软件开发技术
https://jetthuang.top/所有/企业级软件开发技术/