8.4 day05软件学习

文章目录

  • 微服务的概念
    • 微服务的原则
    • 微服务的特征:
    • 集群介绍
  • spring aop

在家学习效率真不高,下午好兄弟喊出去玩,一直到晚上才回来,赶紧总结一下早上学习的内容。

继续看java基础进阶的思想,之前学的很多都忘了。

微服务的概念

优质的微服务架构说明文章

微服务 是分布式架构的一种,分布式架构就是把服务做一个拆分,springcloud就是解决拆分过程的服务治理问题

微服务相关的技术栈

1注册中心 一个业务一般需要多个服务来实现,a调用b,b调用c,c调用d,当业务变得很复杂的时候,这些服务之间调用关系很复杂,就需要一个注册中心用来记录每一个服务的ip、端口以及他们能完成的功能,然后这些服务之间相互调用的时候,不需要记录服务的ip,只要到注册中心就可以了;

2配置中心
每一个服务都有配置文件,而一个上线的项目可能存在成百上千的服务,这些配置文件不能一个个去修改,需要一个配置中心。用来统一管理整个服务集群成千上百的配置,需要某个配置的时候,只要找到配置中心即可

3网关
所有请求进来,不能直接访问对应的服务,需要通过一个网关服务,由它来路由对应的服务

4分布式缓存
即使数据库是集群部署的,也很难抵抗高并发,还需要一个缓存集群。把数据库的数据搬到内存中以提高访问效率。请求先查询缓存,缓存为命中再查询数据库

5分布式搜索
对于一些复杂的数据搜索、统计、分析,我们还需要使用搜索集群

6消息队列
一个业务可能调用多个服务,不能等到所有服务都执行完成再返回相应数据,使用消息队列,让服务发送消息通知其他服务去执行指定的认为,而自己可以结束运行,提高响应速度。

7分布式日志服务
分布式日志服务:主要用来统计成百上千的服务的运行日志,方便系统出问题时的定位。

8系统监控链路追踪
系统监控链路追踪:可以实时监控整个服务集群的所有节点的运行状态。

在这里插入图片描述
在这里插入图片描述

单体服务
在这里插入图片描述
分布式架构,耦合度低,有利于服务升级拓展
在这里插入图片描述

微服务的原则

不同微服务,不要重复开发相同的业务;

微服务数据独立,不要访问其他微服务的数据库;

微服务可以将自己的业务暴露为接口,供其他微服务调用。

微服务的特征:

单一职责:
微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发;

面向服务:
微服务对外暴露业务接口;

自治:
团队独立,技术独立,数据独立,部署独立;

隔离性强:
服务调用做好隔离、容错、降级、避免出现级联问题。

在这里插入图片描述

集群介绍

在上面的图解中其实是存在问题的,比如Tomcat存在单点故障问题,一旦Tomcat所在的服务器宕机不可用了,我们就无法提供服务了,所以针对单点故障问题,我们会使用集群来解决.那什么是集群模式呢

单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。

但问题是用户的请求究竟由哪个节点来处理呢?最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个“调度者”的角色,用户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这个“调度者”有个牛逼了名字——负载均衡服务器(Nginx)。

spring aop

spring的两大核心功能 控制反转ioc,可以降低系统之间的耦合度。

Spring IOC(Inversion of Control,控制反转)是Spring框架的核心概念之一,它是一种设计原则和模式,旨在降低系统之间的耦合度,提高代码的可维护性和可测试性。

IOC的基本思想是由容器负责对象的创建和管理,而不是由程序员显式地创建和管理对象。在传统的应用程序中,程序员通常通过使用 new 关键字在代码中直接创建对象,并且对象之间的依赖关系也是在代码中硬编码的,这样导致了程序之间的紧密耦合。

而使用IOC,它将创建和管理对象的责任委托给了一个称为IOC容器的机制。在Spring框架中,IOC容器负责创建、组装和管理应用程序中的对象,以及解决对象之间的依赖关系。程序员只需通过配置文件或注解等方式来描述对象之间的依赖关系,然后由IOC容器根据这些描述来创建和装配对象。

通过IOC,对象之间的关系变得松散耦合,代码变得更加灵活和可扩展。它有以下几个关键概念:

Bean:在Spring中,Bean是指由IOC容器管理的对象。它们是应用程序的基本构建块,由Spring容器创建、组装和管理。
容器:Spring IOC容器负责创建、组装和管理Bean。常见的容器实现包括ApplicationContext和BeanFactory。
配置:通过XML配置文件、注解或Java配置方式,描述Bean之间的依赖关系和其他配置信息。
依赖注入(Dependency Injection,DI):IOC容器通过依赖注入为Bean提供它们所需要的依赖项,即创建对象并将依赖项设置到对象中。依赖注入可以通过构造函数、Setter方法或字段注入来实现。
生命周期管理:IOC容器负责管理Bean的生命周期,包括创建、初始化、使用和销毁等阶段。
通过使用IOC,我们可以实现松散耦合的组件化开发,并使得对象的创建和管理更加灵活。它提供了很多好处,如简化对象创建、易于测试和维护、提高代码的可读性和可维护性等。Spring框架通过IOC容器的实现,使得IOC的使用变得更加便捷和强大。

切面编程
不修改源代码的请跨下,给程序动态统一添加额外功能的一种技术。

aop的一些核心概念

在这里插入图片描述

spring aop 通知类
在这里插入图片描述

苍穹外卖是采用Aspectj实现切面,基于注解的方式

定义注解AutoFill,用于标识需要进行公共字段自动填充的方法
自定义切面类,统一拦截加入AutoFill的方法,通过反射为公共字段赋值

技术点 枚举 注解 反射 AOP;

自定义注解

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {OperationType value(); //指定数据库曹操作类型}

切面类

package com.sky.aspect;import com.sky.annotation.AutoFill;
import com.sky.constant.AutoFillConstant;
import com.sky.context.BaseContext;
import com.sky.enumeration.OperationType;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.time.LocalDateTime;/*** 自定义切面,实现公共字段自动填充处理逻辑*/
@Aspect
@Component
@Slf4j
public class AutoFillAspect {/*** 切入点*/@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}/*** 前置通知,在通知中进行公共字段的赋值*/@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){log.info("开始进行公共字段自动填充...");//获取到当前被拦截的方法上的数据库操作类型MethodSignature signature = (MethodSignature) joinPoint.getSignature();//方法签名对象AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解对象OperationType operationType = autoFill.value();//获得数据库操作类型//获取到当前被拦截的方法的参数--实体对象Object[] args = joinPoint.getArgs();if(args == null || args.length == 0){return;}Object entity = args[0];//准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentId = BaseContext.getCurrentId();//根据当前不同的操作类型,为对应的属性通过反射来赋值if(operationType == OperationType.INSERT){//为4个公共字段赋值try {Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentId);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {e.printStackTrace();}}else if(operationType == OperationType.UPDATE){//为2个公共字段赋值try {Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {e.printStackTrace();}}}
}

这部分的作用是简化代码的开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/75415.html

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

相关文章

SQL基础复习与进阶

SQL进阶 文章目录 SQL进阶关键字复习ALLANYEXISTS 内置函数ROUND(四舍五入)TRUNCATE(截断函数)SEILING(向上取整)FLOOR(向下取整)ABS(获取绝对值)RAND&#x…

谷歌联合CMU提出全新语义金字塔概念,无需额外训练使LLMs学会执行视觉任务

​ 论文链接:https://arxiv.org/abs/2306.17842 代码仓库:https://github.com/google-research/magvit/ 在目前的大模型社区中,发展较为成熟的当属以ChatGPT为代表的纯语言模型(LLMs),以GPT-4为代表的多模态…

iOS——Block one

块类似于匿名函数或闭包,在许多其他编程语言中也存在类似的概念。 可以访问上下文,运行效率高 Block 以下是块的一些基本知识: 块的定义:块是由一对花括号 {} 包围的代码片段,可以包含一段可执行的代码。块的定义使…

银河麒麟v10 vnc环境配置

方法一、启用自带远程桌面 银河麒麟默认已经自带远程桌面,如下图。此时即可用Realvnc Viewer访问该终端,仔细查看后自带的远程桌面是开源组件gnome-remote-desktopGNOME / gnome-remote-desktop GitLabhttps://gitlab.gnome.org/GNOME/gnome-remote-de…

13个ChatGPT类实用AI工具汇总

在ChatGPT爆火后,各种工具如同雨后春笋一般层出不穷。以下汇总了13种ChatGPT类实用工具,可以帮助学习、教学和科研。 01 / ChatGPT for google/ 一个浏览器插件,可搭配现有的搜索引擎来使用 最大化搜索效率,对搜索体验的提升相…

Kindling the Darkness: A Practical Low-light Image Enhancer论文阅读笔记

这是ACMMM2019的一篇有监督暗图增强的论文,KinD其网络结构如下图所示: 首先是一个分解网络分解出R和L分量,然后有Restoration-Net和Adjustment-Net分别去对R分量和L分量进一步处理,最终将处理好的R分量和L分量融合回去。这倒是很常…

【机器学习】Gradient Descent for Logistic Regression

Gradient Descent for Logistic Regression 1. 数据集(多变量)2. 逻辑梯度下降3. 梯度下降的实现及代码描述3.1 计算梯度3.2 梯度下降 4. 数据集(单变量)附录 导入所需的库 import copy, math import numpy as np %matplotlib wi…

备战秋招 | 笔试强训19

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、二分查找的时间复杂度() A. O(N*log(N)) B. O(N) C. O(log(N)) D. O(N^2) 2、有一个单向链表中有一个A、B两个相邻元素,有一个指针p指向元素A,现将…

谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

台式机/工控机通过网线共享笔记本电脑无线网络linux系统下 usb网卡的驱动安装

一、台式机/工控机通过网线共享笔记本电脑无线网络 1、 将台式机通过网线和笔记本连接。 2、 将笔记本的“本地连接”和“无线网络连接”的ipv4均设置为自动获取。 4.修改台式机的IP地址为如下(对应笔记本信息) IP地址为192.168.XXX.12 子网掩码为255.2…

弘扬“两弹一星”精神,勇攀科学技术高峰——道本科技商业大学党日活动圆满落幕

2023年8月2日,道本科技与商业大学携手举办了一场主题为“弘扬‘两弹一星’精神,勇攀科学技术高峰”的党日活动。本次活动旨在了解党领导下的中国核工业发展历程,传承和弘扬“两弹一星”精神,同时展示道本科技创新产品,…

【Linux】在服务器上创建Crontab(定时任务),自动执行shell脚本

业务场景:该文即为上次编写shell脚本的姊妹篇,在上文基础上,将可执行的脚本通过linux的定时任务自动执行,节省人力物力,话不多说,开始操作! 一、打开我们的服务器连接工具 连上服务器后,在任意位置都可以执行:crontab -e 如果没有进入编辑cron任务模式 根据提示查看…

如何使用vue ui创建一个项目?

首先打开cmd 输入vue ui 等待浏览器打开一个窗口,按照下图操作 在"功能页面"中,各个插件代表以下意思: Babel:Babel是一个JavaScript编译器,用于将ES6代码转换为向后兼容的JavaScript版本,以确保…

【计算机网络】数据链路层

文章目录 1. 数据链路层1.1 数据链路层简介1.2 数据链路层做了什么 2. 以太网协议2.1 以太网2.2 以太网帧的格式2.3 MAC地址2.4 MTU 3. 数据跨网络传输的整体过程4. ARP协议4.1 认识ARP协议4.2 ARP协议的格式4.3 ARP协议的工作流程 1. 数据链路层 1.1 数据链路层简介 数据链路…

ELK 企业级日志分析系统

ELK 企业级日志分析系统 一、ELK 概述1.ELK 简介2.日志分析系统 二、为什么要使用 ELK1.原因:2.完整日志系统基本特征3.ELK 的工作原理 三、部署ELK1.ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)2.部署 Elasticsearch 软件&#x…

自然语言处理学习笔记(二)————语料库与开源工具

目录 1.语料库 2.语料库建设 (1)规范制定 (2)人员培训 (3)人工标注 3.中文处理中的常见语料库 (1)中文分词语料库 (2)词性标注语料库 (3…

刷题笔记 day7

力扣 209 长度最小的子数组 解法:滑动指针(对同向双指针区间内的数据处理) 1)先初始化 两个指针 left ,right。 2)右移指针right的同时使用sum记录指针right处的值,并判断sum的值是否满足要求&…

linux下性能分析工具Perf安装与用法

目录 1、Perf介绍 2、火焰图分类 (1)CPU (2)Memory Flame Graphs (3)Off-CPU Flame Graphs (4)Hot/Cold Flame Graphs (5)Differential 3、火焰图安装命令 …

Ubuntu安装harbor(http模式)并随便上传一个

Ubuntu安装harbor(http模式) docker和harbor的介绍就免了,都不知道啥东西,还安装搞毛 先安装docker环境 不要问,软件源之类的配置,挨个梭就行 sudo apt update sudo apt install apt-transport-https ca…

uniapp 路由跳转方式

export function goBack(index, url) {if (index 1) { // 关闭当前页,返回上一页面或多级页面。uni.navigateBack({delta: url,animationType: pop-out,animationDuration: 300});} else if (index 2) { // 保留当前页,跳转到非tabbar页面,…