首页 > 其他分享 >企业级应用于架构设计笔记

企业级应用于架构设计笔记

时间:2024-03-07 09:02:36浏览次数:27  
标签:架构设计 服务 EE Jakarta 笔记 企业级 EJB Spring 架构

课堂笔记-主要是给自己复习的

第一节课

课程结构:

架构定义:一致认可方式从多个角度对系统的组成部分及各部分之间的协作关系所做的描述。

软件架构的定义(软件体系结构Software Architecture):用开发团一致认可的方式多个角度(业务、开发、运维等)对软件的组成部分及各部分之间的协作关系所做的描述。

例如:UML规范,功能、逻辑、代码、部署、运行,分层结构、功能模块、代码模块、数据,层间接口、API、业务流程、模块依赖关系。

本质:将系统分解成相应的组成部分(组件、连接件等),并将这些部分重新组装成整个系统

孵化基地。

常见软件架构模式:

  • 单体应用架构(服务器、数据库运行在一台机器上)
  • 面向服务架构(软件拆分+通过“服务”联系起来)
  • 微服务架构(“微”=> 拆分成小的服务单元)
  • 事件驱动架构(“事件“驱动 行为)
  • 分层架构(分不同的层次-> 可以包含其它架构<如 事件驱动架构>)
  • 客户/服务器架构(局域网中:数据库<网络中>+客户计算机<在本地计算机上需要安装一个软件”客户“>)
  • MVC架构
  • 云计算架构(直接在云端运行服务器)
  • 前后端分离架构(开发Web应用)
  • 单页应用架构(SPA)
  • 渐进式Web应用架构(PWA) <先上线=>后续添加功能>
  • 主从架构

代码模块快捷键 : ctrl+shift+k/`

第二周课

软件架构

三层结构

表示层(向用户显示信息并收集信息)——应用层(业务逻辑层或中间层,可增删改查数据层中的数据)——数据层(数据库的访问和数据库)

MVC

Model(应用程序核心,负责处理业务逻辑和数据)——View(显示数据,即用户界面)——Controller(处理输入,与用户交互)

组件化开发——不用考虑组件内部的实现逻辑

第三节课

前端框架

angular、Vue框架和Svelte

尝试使用svelte,每个组件可以对应一个功能块or一个页面

嵌套 + 定义布局(BootstrapBootstrap 入门 · Bootstrap v5 中文文档 v5.3 | Bootstrap 中文网 (bootcss.com)Web前端作业可以使用这个来 美化

SiteNav.svelte => 导航栏组件

User.svelte => 用户组件

...

使用 jsDelivr 的话可以跳过下载文件的操作,直接在你的项目中使用 Bootstrap 编译过的 CSS 和 JS 文件。放在app.html的首行

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" int

前端路由

单页应用(svelte适合)or 多页应用

传统路由:每个页面都有唯一的URL,刷新整个页面的全部信息

前端路由:用户输入特定的URL,前端路由技术URL映射到SPA中的一个特定部分,有JavaScript动态添加和显示内容,不需要重新加载整个页面。(浏览器中的url可能只是访问前端的JavaScript程序,由程序访问指定后端URL获取数据信息,而不是访问页面)

第六周

写svelte前端实验

第七周

Jakart EE

理解其基本的概念?

是一个成熟的基于 Java 的框架,可帮助开发人员转向使用现代技术,同时仍然利用现有的 Jakarta EE 代码。 它主要用于创建支持不同应用程序之间通信的 API。

容器Container:

是支持Jakarta EE应用程序组件运行的软件环境

Jakarta EE应用程序组件不直接与其他组件交互,它们使用容器协议和方法实现交互,以及与平台服务交互

三种容器:应用程序客户机容器、Web组件容器、企业Bean容器

容器~=计算机主版

Jakarta配置文件

Profile:针对特定类型应用程序的Jakarta EE平台配置

两种:Web Profile,Core Profile

需要兼容Jakarta EE规范的服务器(提供Jakarta EE容器)

Jakarta EE组件

用于实现特定功能的软件单元。

组件类型:运行客户端的客户程序和Applet、Web组件(Jakarta Servlet、Jakarta Faces、Jakarta Server Pages)、业务组件(Enterprise beans)

标准系统服务<==>展示逻辑、业务逻辑

分层模型

Jakarta EE应用部署与运行

Open Liberty

Eclipse GlassFish

Tomcat:实现了部分Jakarta规范的产品

第八周

Maven管理Java应用:

Apache开源的管理及自动构建工具(基于对象模型管理)

核心功能:描述项目中的依赖关系(统一管理),通过pom.xml文件的配置获取jar包

<!--导包形式(导依赖)--> 
<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>10.0.0</version>
    <scope>provided</scope>
</dependency>

Open Liberty

也是一个应用服务器,支持的范围更大。

Open Liberty是实现了Jakarta EE所有的规范(大容器),Tomcat只实现了部分Jakarta EE的部分规范(小容器)

SpringBoot和Open Liberty的关系:

SpringBoot是一个框架,用于快速开发基于Spring的java应用程序。

Open Liberty是一个Java应用服务器,用于部署Java应用程序。它实现了Jakarta EE和Eclipse MicroProfile标准-。

一般可以将Spring Boot应用程序部署到Open Liberty服务器上

SpringBoot内置服务器可以换成Open Liberty,需要导依赖。

管理Open Liberty服务器的文件,server.xml

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <!-- Enable features -->
    <featureManager>
        指定JakartaEE规范
        <feature>jakartaee-10.0</feature>
        
        <feature>microProfile-6.0</feature>
    </featureManager>

    <!-- This template enables security. To get the full use of all the capabilities, a keystore and user registry are required. -->

    <!-- For the keystore, default keys are generated and stored in a keystore. To provide the keystore password, generate an 
        encoded password using bin/securityUtility encode and add it below in the password attribute of the keyStore element. 
        Then uncomment the keyStore element. -->
    <!--
    <keyStore password=""/> 
    -->

    <!--For a user registry configuration, configure your user registry. For example, configure a basic user registry using the
        basicRegistry element. Specify your own user name below in the name attribute of the user element. For the password,
        generate an encoded password using bin/securityUtility encode and add it in the password attribute of the user element.
        Then uncomment the user element. -->
    <basicRegistry id="basic" realm="BasicRealm">
        账号密码:用户的账号密码也可以写在这里面(但不推荐,而是写在数据库中)
        <user name="yourUserName" password="{xor}pj08bm1s" />加密 密文
        
    </basicRegistry>

    <!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
    类似于tomcat启动端口
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443" />

    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>

    <!-- Configures the application on a specified context root -->
    <webApplication contextRoot="/app-name" location="app-name.war" />

    <!-- Default SSL configuration enables trust for default certificates from the Java runtime -->
    <ssl id="defaultSSLConfig" trustDefaultCerts="true" />
</server>

Web应用程序的类型

面向展示:Jakarta Faces、Jakarta Servlet(SpringBoot框架也是对Servlet进行了封装)

面向服务:Jakarta XML Web Service(程序与程序打交道)、RESTful Web Service(通过http打交道)

Servlet:基于“请求-响应”(中间的处理:通过调用Bean组件来完成逻辑之类的处理)

init(ServletConfig ) 初始化仅一次

doXXX(request,response)处理请求

destroy()清空

Context:定义了Servlet与Servlet容器通信时使用的一组方法,每个Web应用都有一个Context(运行环境

打包-> war文件

RESTful Web Services

  • REST是一种软件架构风格,适用于客户机创建API

  • 松耦合

  • 每个资源都有唯一的URL作为访问地址

  • 客户端可以创建、删除、读取、更新这些资源

Http GET 读取(get获取的数据可以缓存在中间件中)

HTTP POST 新建(不可缓存)

HTTP PUT 更新

HTTP DELETE 删除

第十周

Enterprise Beans

EJB到底是什么?(通俗易懂) - 知乎 (zhihu.com)

EJB到底是什么?(通俗易懂白话文)_ejb是什么-CSDN博客

EJB和Spring的区别|极客教程 (geek-docs.com)

容器:管理Enterprise Bean的生命周期及实例数量

业务人员只需要写好业务代码,其余的并发、安全等问题都交给容器来管理。

适用场景:

  • 需要封装业务功能
  • 需要扩展以适应大量用户
  • 需要管理复杂的数据,并且需要事务支持
  • 存在着不同类型的客户端
会话Bean

@Stateless

@Singleton

单例Session Bean在应用程序中只实例化一次,多个客户端可以同时访问,

消息驱动Bean

访问Session Bean的方法

本地访问:(远程使用、可扩展的)

@Stateless
public class MyBean{
    
}

依赖注入:

@EJB
ExampleBean exampleBean;

EJB和Spring之间的区别:

属性 EJB Spring
规格 EJB是Java EE的一个规格。 Spring是一个框架。
依赖注入 EJB可以在容器中注入任何东西,包括EJB数据源、JMS资源和JPA资源。 Spring可以注入任何东西,包括列表、属性、地图和JNDI资源。
事务管理 EJB只支持JTA事务管理器。 Spring支持多种事务管理器,如JTA、JDBC和Hibernate。
持久性 EJB与JPA紧密集成。 Spring支持各种持久性技术,如JDBC、Hibernate、JPA和iBatis。
消息传递 EJB通过消息驱动Bean提供开箱即用的消息传递功能。 需要为每个消息添加监听器配置。
调度 EJB通过EJB时间服务提供简单的调度功能。 需要添加和配置Quartz来进行调度。
安全 EJB通过JAAS支持声明性和程序性安全。 Spring通过Spring配置文件提供声明式安全。
AOP EJB通过拦截器提供有限的支持。 Spring通过AspectJ提供强大的支持。

Jakarta Persistence

Java用来访问数据库的标准接口

对象/关系映射元数据(java对象->数据库二维表

实体Entity

轻量级持久化领域对象,通常代表关系数据库中的一张表,每个实体对象代表数据表中的一条数据。

尽量一对一的关系(一对一、一对多、多对一、多对多)

EJB+OpenLiberty 再去了解下

第十二周

关系型数据库:User表、Group表、User_Group表

现在:单表操作、在程序中进行关系的关联。

(学习实战中的数据练习,关系型数据库+[非关联的])

在代码中定义实体—>有软件自动生成数据库表结构

Jakarta Security

安全性:权限验证、Token,Authorization

需要保护的层

web层业务层

业务层(Controller层的)、会话层(Entry Bean,Session Bean[无状态Bean])

两种安全机制

  • 声明式安全:通过描述文件(web.xml)或在类文件中使用标注来描述应用组件的安全需求。
  • 编程式安全:通过Java EE安全相关API以编程式方式实现安全模型

Realms服务器上的安全策略域:

  • 存放合法用户和用户组的数据库

  • 认证授权机制

  • 受保护的资源定义

用户解析

  1. User:

个人或应用程序的身份标识

  1. Group:

​ 按特性分类的一组用户,如:顾客、推销员

  1. Role:

​ 角色,代表一种访问控制权限,是一类权限的集合,类似于钥匙;

​ Jakarta EE Security API规定组名默认对应到同名角色名(导致组合角色混为一谈的原因)

买家组:购买权限(role)。 卖家组:售卖权限(role)、购买权限(role)。

Principal:已通过认证的用户。

Security attributes:与每个principal关联属性

Credential:认证凭据、证书、授权码

另一种解释:用户-角色-权限(√)

RBAC(Role-Based Access Control)

基于角色的访问控制:

  • 为用户分配角色
  • 为角色分配权限
  • 用户通过成为某种角色来获得相应的访问权限

优点:简化了用户和权限的关系;

  • 通过将权限赋予角色,然后哦将角色赋予用户或组,降低了管理用户和权限的复杂性
  • 简化了IT管理工作:如,可以根据人力资源属性自动为新员工分配访问权限
  • 易扩展、易维护:需求发生变化时,可以通过调整角色和权限的配置来实现系统的扩展或维护

缺点:

  • 需要充分了解组织结构,才能定义好角色和权限
  • 实施时遇到各种权限分配特例,处理不够灵活
  • 团队为了实现灵活的权限分配,可能会定义越来越细粒度的角色、或创建零时角色来解决,导致“角色爆炸”

Jakarta EE身份认证机制

(一下使用Java语言来实现)

  • 基本认证(访问受保护资源->要求凭据->发送凭据->发送资源)路由器认证,内容放在HTTP头中的 Authoriza: Basic Base64编码的用户名+密码

​ 缺点:Base64无法加密、安全性不够、只能通过关闭浏览器来注销

  • 表单认证(访问任何受保护资源->重定向返回登录界面->提交登录表单->验证返回受保护资源)通过Html表单来提交用户名和密码

  • 摘要认证

  • 客户端认证

  • 相互认证

  • 自定义表单

  • Open ID Connect

身份存储机制(Identify store)

  • 用于存储管理用户身份认证授权的组件
  • 提供一个集中的位置,以存储和管理用户名、密码、角色等信息
  • Jakarta Security内置两种身份存储机制:Database、LDAP

使用表单认证来保护访问点

定义包点认证

定义身份存储机制

实现授权和访问机制

代码验证

进行基础配置后,直接加注解进行权限验证

@DeclareRoles({"Admin","Manager"}) //这里权限验证
@ApplicationPath("/api")
public class ...{}

授权

@DeclareRoles("manager") //角色
public class MyService{
    
    @RoleAllowed({"manager"})//给方法添加权限
    public void ...{}
}

SpringBoot原理、Spring原理、Security原理 再去了解下

第十四周

SpringSecurity相关的。

第十五周

前后端分离与微服务架构。

  • 前端开发Servlet阶段:将HTML代码嵌入到程序代码中。

    • 后端渲染阶段:模板引擎提供特定格式的模板,后端填入数据后,将模板输出到浏览器

      • 优点:提高页面加载速度、有利于搜索引擎优化(SEO)。
      • 缺点:后端开发人员需要了解HTML页面的结构。前后端开发人员紧密耦合。
      • 常见模板引擎JSP:HTML代码中嵌入程序代码
      • 常见引擎模板Thymeleaf(本质上与JSP没有不同的,多了些特性):Spring默认支持的模板引擎。需要提高搜索的需要使用模板引擎
    • 不同模板引擎在SpringMVC中比较

  • 前后端分离架构

    • 前后端分别独立开发、测试、部署。
      前后端通过API耦合。

      界面生成和数据填充工作在前端完成(前端渲染)

      前后端分离的框架为微服务的实现提供了可能

    • 前后端分离框架的实现方式

      • 前端开发
        • 基于JavaScript、CSS、HTML
        • 使用React、Angular、Vue、Svelte等框架
      • 后端开发
        • 基于Java、Python、Node.js等技术
        • 使用Jakarta EE 或SpringBoot、Django、Flask等框架
      • 前端与后端通过RESTFUL API、GraphQL、WebSocket或RPC等方式交互
      • 前端与后端通过JSON交互数据
      • 挑战:
        • 数据一致性
          • 前端显示的数据与后端实际存储的数据不一致
          • 解决方案:使用分布式事务或者补偿事务
        • 接口安全性
          • 解决方案:使用OAuth或者JWT进行认证和授权
        • 接口管理和版本控制
          • 解决方案:使用OpenAPI(Swagger)进行接口文档化和版本管理
        • 跨域问题
          • 解决放案:CORS(跨资源共享)
    • 经典软件架构

      • 单体架构:
        • 整个软件项目是一个完整的应用程序
        • 通常采用分层架构
        • 使用统一的数据库
        • 使用统一的技术栈
        • 整个应用通常部署在一台服务器上(数据库除外)
      • 问题:
        • 软件变的庞大、复杂、每次修改代码需要重新发布整个应用。

      • 微服务:

        • 是一种软件架构风格

        • 复杂应用被拆分成独立的、职责单一的小型功能模块(微服务)

        • 服务之间使用与语言无关的API相互通信;

        • 服务由各个小型独立团队负责开发

      • 微服务优势:

        • 易于理解、每个服务都比较简单、只关注于一个业务功能。
        • 可由独立的团队开发,带来更短的开发周期、更敏捷的部署和更新。
        • 高扩展性,可跨多个服务器和基础架构部署。
        • 出色的弹性,单个服务故障不会导致整个应用下线。
        • 模块化、小乔的服务易于部署。
        • 松耦合、可以提供更高的灵活性。
        • 更开放、开发人员可以自由选择合适的技术、语言。
      • 问题+挑战:

        • 运维开销及成本增加,需要自动化运维、监控
        • 开发人员必须由DevOps开发运维一体化技能
        • 更高的发布风险:发布时需要集成、协调更多的接口
        • 代码重复:为了避免耦合,可能需要向不同服务添加重复的底层公用代码
        • 分布式系统的复杂性:网络延迟、容错性、异步操作、事务、可靠性...
        • 服务间的依赖关系带来构建的复杂性
        • 可测性的挑战:集成测试和端到端测试更加困难
      • 微服务架构的取舍:

        • 在核实的项目、合适的团队,采用微服务架构的收益会大于成本
        • 采用微服务架构前,需要人情它所带来的挑战
        • 需要避免为了“微服务”而“微服务”
        • 对传统企业而言,可以先考虑设计易于拆分的单体架构,随着业务发展和需要,逐步过渡到微服务。
      • 案例:

        • 京东的商品评论分开,采用微服务。

      • 技术及工具:

        服务注册与发现:ZooKeeper/Consul

        服务熔断、降级:Hystrix + Turbine

        客户端负载均衡:Ribbon

        内部服务调用:Feign

        网关:Kong/Spring Cloud Gateway / Zuul

        授权认证:OAuth2 + JWT

        微服务监控:Hystrix dashboard/ Eureka admin dashboard / Spring Boot admin dashboard

        消息队列:ActiveMQ/RabbitMQ

        分布式配置中心:Spring Cloud Config

        分布式调用链监控:Spring Cloud Sleuth + zipkin

        部署:Docker / Kubernetes

        缓存:Redis / Hazelcast / Infinispan

        服务注册与发现:Eureka / Consul / Nacos

        服务熔断、降级:Hystrix / Resilience4j

        客户端负载均衡:Ribbon / Feign

Jakarta EE与微服务

​ Microprofile —— 企业级Java微服务的开源社区规范:

Spring 与 微服务

​ Spring Cloud

  • 基于Spring Boot的微服务平台
  • 提供了一系列的工具和组件来帮助开发人员构建和管理微服务应用
  • 功能包块:
    • 服务注册与发现
    • 负载均衡
    • 断路器
    • 配置中心
    • ...

第十七周

单项选项:25(四选一、一题一分)

程序填空:30()

简答题、问答题:

4-安全.pdf

安全概念

声明式安全、编程式安全 概念了解

安全策略

Realms、Users、Groups(人的组) 、and Roles(权限的组) 安全策略必考

principal已认证的用户、credential凭据

角色访问控制机制

RBAC(Role-Based Access Control):基于角色的访问控制机制。

​ 基本原理:为用户分配角色、为角色分配权限、...

Jakarta EE:身份认证机制。

​ 基本认证(所有浏览器都支持,但是安全性较低):明文密码Base64格式。

​ 表单认证:HTML登录表单。SpringSecurity中的登录表单j_security_check、j_username、j_password。

身份存储机制

用户名密码既可以存储在数据库,也可以存储在目录服务器 。

Spring

看pdf文档

Spring基于Jakarta EE10,

登录注册:WebService(接口)、业务层(判断合法性)、数据层(登录注册)、安全机制。

MicroProfile:微服务规范(消息驱动是用来解耦的,)

标签:架构设计,服务,EE,Jakarta,笔记,企业级,EJB,Spring,架构
From: https://www.cnblogs.com/Hygge1024/p/18058078

相关文章

  • 推荐系统学习笔记(一)
    好的推荐系统疑问:推荐系统的主要任务,推荐系统和分类目录以及与搜索引擎的区别等什么是推荐系统如果对象数目巨大,用户只能通过搜索引擎找到自己需要的目标如果用户没有明确需求时,需要一个工具帮助筛选,给出一些建议,这个工具就是推荐系统推荐系统的任务联系用户和信息,一方......
  • 2024.3.6学习笔记
    1.InfoNCEloss(源自知乎https://zhuanlan.zhihu.com/p/506544456)1.引入把对比学习看成是一个字典查询的任务,即训练一个编码器从而去做字典查询的任务。假设已经有一个编码好的queryq以及一系列编码好的样本k0,k1,k2...,把k0,k1,k2...可以看作是字典里的key。假设只有一......
  • 模拟退火学习笔记
    模拟退火,优雅的暴力我认为有必要摘抄一下提单上的简介ZX写的前言:本片适用于模拟退火入门-进阶模拟退火(SA)是一种随机化算法。当一个问题的方案数量极大(甚至是无穷的)而且不是一个单峰函数时,我们常使用模拟退火求解。一般的,很多题都可以用模拟退火水过,在OI界称之[优雅的暴......
  • 学习笔记
    coreUSER:存放工程文件、主函数文件main.c,以及其他包括system_stm32f10x.c等CORE:用来存放核心文件和启动文件OBJ:是用来存放编译过程文件以及hex文件STM32F10x_FWLib:用来存放ST官方提供的库函数源码文件SYSTEM:此文件夹里面的代码由ALIENTEK提供,是STM32F10x系列的底......
  • SOME/IP 笔记
    参考链接1:https://mp.weixin.qq.com/s?__biz=MzI0NTU1NDQ3Mw==&mid=2247483718&idx=1&sn=35ec9b655c6d20b9ea14972133a2ce28&chksm=e94d8d00de3a04162fd1acf8eb1dd3300266cc5be77fb66b018a882dd7274ba5a71f1347ab41&scene=21#wechat_redirect#SOME/IP协议......
  • java复习笔记 - 1
           java是一门面向对象的语言,其解决问题的方式是通过封装属性和方法为对象,通过调用对象的不同方法来达到解决问题的步骤。其本身一开始封装了不少类,可以直接使用,常见的比如String,包装类,集合类,文件类,异常类等常用的,还有一些关于数字处理的后面再说。因为最近在看数据......
  • MA-GCL论文阅读笔记
    Abstract​ 在图中生成对比视图比在图像中更具挑战性,因为我们对如何在不改变图标签的情况下显著增强图缺乏先验知识。我们认为,在GCL中,典型的数据增强技术(例如,边缘下降)不能产生足够不同的对比视图来过滤掉噪声。此外,以往的GCL方法采用了两个具有完全相同的神经结构和绑定参数的视......
  • Vue学习笔记36--VueComponent构造函数
    VueComponent构造函数<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>VueComponent&......
  • 技术笔记(1)QFramework
    技术笔记(1)QFramework希望实现的功能或目标:了解学习游戏开发中的架构演化过程了解学习IOC容器、DI等相关概念‍‍学习笔记:‍BindableProperty类实际上是数据+事件我理解为将模型层中的一个数据整合升级成一个类,并将修改和获取其的具体方法放在属性的get和set......
  • 技术笔记(3)扩展方法
    技术笔记(3)扩展方法希望实现的功能或目标:继续学习MMORPG游戏开发的框架了解扩展方法‍学习笔记:CanGetLayersExtension类扩展方法GetSystem:publicstaticTGetSystem<T>(thisICanGetSystemself)whereT:class,ISystem{returnStartArchitecture.I......