基于Nacos的注册中心与配置中心

news2024/11/24 9:52:49

基于Nacos的注册中心与配置中心

Nacos简介

  1. 概述

Nacos全称是动态命名和配置服务,Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos主要用于发现、配置和管理微服务。

  1. 什么是Nacos

Nacos支持几乎所有主流类型的服务的发现、配置和管理。Nacos的关键特性包括:

  • 服务发现和服务健康监测

  • 动态配置服务

  • 动态DNS

  • 服务及其元数据管理

概念

  1. 地域

物理的数据中心,资源创建后不能更换。

  1. 可用区

同一个地域内,电力和网络互相独立的物理区域。同一个可用区内,实例的网络延迟较低。

  1. 接入点

地域的某个服务的入口域名。

  1. 命名空间

用来进行租户粒度的配置隔离。不同命名空间下,可以存在相同的Group或Data ID的配置。命名空间可以用来实现不同环境的配置区分隔离,例如开发测试环境和生产环境的资源隔离等。

  1. 配置

在系统开发过程中,通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。

  1. 配置管理

系统配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动。

  1. 配置项

一个具体的可配置的参数与其值域。

  1. 配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。

  1. 配置集ID

Nacos中的某个配置集的ID。配置集ID是组织划分配置的维度之一。Data ID通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID通常采用类似Java包的命名规则保证全局唯一性。

  1. 配置分组

Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串对配置集进行分组,从而区分Data ID相同的配置集。默认分组的名称是DEFAULT_GROUP。

  1. 配置快照

Nacos的客户端SDK会在本地生成配置的快照。当客户端无法连接到Nacos Server时,可以使用配置快照显示系统的整体容灾能力。配置快照类似于Git的本地提交,会在适当的时机更新。

  1. 服务

通过预定义接口网络访问的提供给客户端的软件功能。

  1. 服务名

服务提供的标识,通过该标识可以唯一确定其指代的服务。

  1. 服务注册中心

存储服务实例和服务负载均衡策略的数据库。

  1. 服务发现

在计算机网络上,对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。

  1. 元信息

Nacos数据描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置。

  1. 应用

用于标识服务提供方的服务的属性。

  1. 服务分组

不同的服务可以归类到同一分组。

  1. 虚拟集群

同一个服务下的所有服务实例组成一个默认集群,集群可以被进一步按需求划分,划分的单位可以是虚拟集群。

  1. 实例

提供一个或多个服务的具有可访问网络地址的进程。

  1. 权重

实例级别的配置。权重为浮点数。权重越大,分配给该实例的流量越大。

  1. 健康检查

以指定方式检查服务下挂载的实例的健康度,从而确定该实例能否提供服务。

  1. 健康保护域值

为了防止因过多实例不健康导致流量全部流向实例,继而造成流量压力把健康实例压垮并型号才能雪崩效应,应该健康保护域值定义为一个0到1之间的浮点数。

Nacos架构

1561217892717-1418fb9b-7faa-4324-87b9-f1740329f564

  1. 服务

服务指的是一个或一组软件功能,目的是不同的客户端可以为不同的目的重用。

  1. 服务注册中心

服务注册中心是服务、其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查API来验证它是否能够处理请求。

  1. 服务元数据

服务元数据是指包括服务端点、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。

  1. 服务提供方

提供可复用和可调用服务的应用方。

  1. 服务消费方

发起对某个服务调用的应用方。

  1. 逻辑架构及组件介绍

nacos-stru.drawio2

  • 服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能
  • 配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能
  • 元数据管理:提供元数据CURD 和打标能力
  • 插件机制:实现三个模块可分可合能力,实现扩展点SPI机制
  • 事件机制:实现异步化事件通知,sdk数据变化异步通知等逻辑
  • 日志模块:管理日志分类,日志级别,日志可移植性(尤其避免冲突),日志格式,异常码+帮助文档
  • 回调机制:sdk通知数据,通过统一的模式回调用户处理。接口和数据结构需要具备可扩展性
  • 寻址模式:解决ip,域名,nameserver、广播等多种寻址模式,需要可扩展
  • 推送通道:解决server与存储、server间、server与sdk间推送性能问题
  • 容量管理:管理每个租户,分组下的容量,防止存储被写爆,影响服务可用性
  • 流量管理:按照租户,分组等多个维度对请求频率,长链接个数,报文大小,请求流控进行控制
  • 缓存机制:容灾目录,本地缓存,server缓存机制。容灾目录使用需要工具
  • 启动模式:按照单机模式,配置模式,服务模式,dns模式,或者all模式,启动不同的程序+UI
  • 一致性协议:解决不同数据,不同一致性要求情况下,不同一致性机制
  • 存储模块:解决数据持久化、非持久化存储,解决数据分片问题
  • Nameserver:解决namespace到clusterid的路由问题,解决用户环境与nacos物理环境映射问题
  • CMDB:解决元数据存储,与三方cmdb系统对接问题,解决应用,人,资源关系
  • Metrics:暴露标准metrics数据,方便与三方监控系统打通
  • Trace:暴露标准trace,方便与SLA系统打通,日志白平化,推送轨迹等能力,并且可以和计量计费系统打通
  • 接入管理:相当于阿里云开通服务,分配身份、容量、权限过程
  • 用户管理:解决用户管理,登录,sso等问题
  • 权限管理:解决身份识别,访问控制,角色管理等问题
  • 审计系统:扩展接口方便与不同公司审计系统打通
  • 通知系统:核心数据变更,或者操作,方便通过SMS系统打通,通知到对应人数据变更
  • OpenAPI:暴露标准Rest风格HTTP接口,简单易用,方便多语言集成
  • Console:易用控制台,做服务管理、配置管理等操作
  • SDK:多语言sdk
  • Agent:dns-f类似模式,或者与mesh等方案集成
  • CLI:命令行对产品进行轻量化管理,像git一样好用
  1. 领域模型
  • 数据模型

Nacos数据模型Key由三元组唯一确定,Namespace默认是空串,公共命名空间,分组默认是DEFAULT_GROUP。

  • 服务领域模型

Nacos服务的分级存储模型。

服务:健康检查开关、元数据、路由机制、保护域值;

集群:健康检查模式、元数据、同步机制;

实例:IP、端口、权重、健康状态、下线状态、元数据、响应时间。

  • 配置领域模型

围绕配置主要有两个关联实体,一个是配置变更历史,一个是服务标签,由ID关联。

1561217958896-4465757f-f588-4797-9c90-a76e604fabb4

  • 两种启动模式

Nacos支持将数据中心与配置中心在一个进程合并部署或者将两者分离部署的两种模式。

  • 免费的公有云服务模式

Nacos支持公有云模式。

Nacos快速开始

  1. 安装环境

64位操作系统,JDK1.8+,Maven 3.2.x+,Nacos的运行需要至少2C4g60g*3的机器

  1. 下载源码或安装包
# 从Github上下载源码
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/
cd distribution/target/nacos-server-$version/nacos/bin
# 下载编译后压缩包方式
# 在Github项目地址下载
  1. 启动服务器
# Linux/Unix/Mac
# 启动命令,单机模式运行
sh startup.sh -m standalone 
# Windows
startup.cmd -m standalone
  1. 服务注册发现和配置管理
  • 服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
  • 服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
  • 发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
  • 获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
  1. 关闭服务器
# Linux/Unix/Mac
sh shutdown.sh
# Windows
shutdown.cmd

Nacos Spring Boot实例

  1. 启动配置管理
  • 创建实例工程nacos-spring-boot-config

maven依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-starter</artifactId>
        <version>0.2.1</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-actuator</artifactId>
        <version>0.2.1</version>
    </dependency>
</dependencies>

application.yml配置文件:

nacos:
  config:
    server-addr: 127.0.0.1:8848 #配置Nacos Server地址
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

创建控制器ConfigController.class,提供访问点:

package org.lxx.nacos.spring.boot.config.controller;

import com.alibaba.nacos.api.config.annotation.NacosValue;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("config")
public class ConfigController {

    //设置属性值,默认不会自动更新
    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

创建启动类NacosConfigApplication.java:

package org.lxx.nacos.spring.boot.config;

import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Nacos控制台添加配置
 */
@SpringBootApplication
//加载dataId为test的数据源,并开启自动更新
@NacosPropertySource(dataId = "test", autoRefreshed = true) 
public class NacosConfigApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigApplication.class, args);
    }
}

  • 启动服务调用curl http://localhost:8080/config/get,返回内容是 false。通过调用Nacos Open API向Nacos Server发布配置,再次访问接口,内容被动态更新了。
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=test&group=DEFAULT_GROUP&content=useLocalCache=true"
  1. 启动服务发现
  • 创建实例工程nacos-spring-boot-discovery

maven依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-discovery-spring-boot-starter</artifactId>
        <version>0.2.1</version>
    </dependency>
</dependencies>

application.yml:

nacos:
  discovery:
    server-addr: 127.0.0.1:8848

创建控制器DiscoveryController.class:

import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.pojo.Instance;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("discovery")
public class DiscoveryController {

    //注入Nacos的命名服务
    @NacosInjected
    private NamingService namingService;

    @RequestMapping(value = "/get", method = RequestMethod.GET)
    @ResponseBody
    public List<Instance> get(@RequestParam String serviceName)
        throws NacosException {
        return namingService.getAllInstances(serviceName);
    }
}

创建启动类NacosDiscoveryApplication.class:

package org.lxx.nacos.spring.boot.discovery;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class NacosDiscoveryApplication {
    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryApplication.class, args);
    }
}
  • 启动 NacosDiscoveryApplication,调用 curl http://localhost:8080/discovery/get?serviceName=example,此时返回为空 JSON 数组[]。通过调用 Nacos Open API 向 Nacos server 注册一个名称为 test 服务,再次访问接口返回了接口信息。
curl -X POST "http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=test&ip=127.0.0.1&port=8080"

Nacos Mysql Jpa实例

  1. 创建实例工程``

创建数据表:

CREATE TABLE `user`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci;
INSERT INTO `user` VALUES (1, '张三');

maven依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-config-spring-boot-starter</artifactId>
        <version>0.2.1</version>
    </dependency>
</dependencies>

application.yml:

nacos:
  config:
    server-addr: 127.0.0.1:8848

添加模型类User.class:

package org.lxx.nacos.spring.boot.config.mysql.model;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;
}

添加DAO层接口UserRepository.java:

package org.lxx.nacos.spring.boot.config.mysql.dao;

import org.lxx.nacos.spring.boot.config.mysql.model.User;
import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Integer> {
}

添加Service层实现UserService.java:

package org.lxx.nacos.spring.boot.config.mysql.service;

import org.lxx.nacos.spring.boot.config.mysql.dao.UserRepository;
import org.lxx.nacos.spring.boot.config.mysql.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User findById(Integer id) {
        return userRepository.findById(id).orElse(null);
    }

}

添加控制器UserController.java:

package org.lxx.nacos.spring.boot.config.mysql.controller;

import org.lxx.nacos.spring.boot.config.mysql.model.User;
import org.lxx.nacos.spring.boot.config.mysql.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController("user")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public User get(@RequestParam int id) {
        return userService.findById(id);
    }
}

添加启动类SpringBootMySQLApplication.java:

package org.lxx.nacos.spring.boot.config.mysql;

import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@NacosPropertySource(dataId = "mysql")
public class SpringBootMySQLApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMySQLApplication.class, args);
    }
}

在Nacos控制台配置mysql数据集:

Data ID: mysql, GROUP: DEFAULT_GROUP。

spring.datasource.url=jdbc:mysql://localhost:3306/mytest?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
  • 启动应用后,访问http://127.0.0.1:8080/user?id=1可以读取到数据库中的数据。
    配置项

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同花顺_代码解析_技术指标_A

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 ABI AD ADL ADR ADTM ADVOL AMV ARBR ARMS ASI ATR ABI 绝对幅度指标 算法&#xff1a;上涨家数减去下跌家数所得的差的绝对值。 该指标只适用于大盘日线。 行号 1 aa…

题目7飞机票订票系统

题目7飞机票订票系统问题描述:某公司每天有10航班(航班号、价格)&#xff0c;每个航班的飞机&#xff0c;共有80个座位&#xff0c; 20排&#xff0c;每排4个位子。编号为A&#xff0c;BCD。如座位号:10D表示10排D座。 运行界面如下&#xff1a; 1)能从键盘录入订票信息:乘客的…

[Games 101] Lecture 13-16 Ray Tracing

Ray Tracing Why Ray Tracing 光栅化不能得到很好的全局光照效果 软阴影光线弹射超过一次&#xff08;间接光照&#xff09; 光栅化是一个快速的近似&#xff0c;但是质量较低 光线追踪是准确的&#xff0c;但是较慢 Rasterization: real-time, ray tracing: offline生成一帧…

狗屎一样的面试官,你遇到过几个?

做了几年软件开发&#xff0c;我们都或多或少面试过别人&#xff0c;或者被别人面试过。大家最常吐槽的就是面试造火箭&#xff0c;进厂拧螺丝。今天就来吐槽一下那些奇葩&#xff08;gou&#xff09;一样的面试官 A 那是在我刚工作1年的时候&#xff0c;出去面试前端开发。 那…

分布式开源存储架构Ceph概述

概述 k8s的后端存储中ceph应用较为广泛&#xff0c;当前的存储市场仍然是由一些行业巨头垄断&#xff0c;但在开源市场还是有一些不错的分布式存储&#xff0c;其中包括了Ceph、Swift、sheepdog、glusterfs等 什么是ceph&#xff1f; Ceph需要具有可靠性&#xff08;reliab…

C++11标准模板(STL)- 算法(std::partition_point)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 定位已划分范围的划分点 …

线上崩了?一招教你快速定位问题。

&#x1f44f; 背景 正浏览着下班后去哪家店撸串&#xff0c;结果隔壁组同事囧着脸过来问我&#xff1a;大哥&#xff0c;赶紧过去帮忙看个问题&#xff01;客户反馈很多次了&#xff0c;一直找不出问题出在哪里&#xff01;&#xff01;&#xff01; 我&#xff1a;能不能有…

利用WPS功能破解及本地恢复密码

利用WPS功能破解及本地恢复密码 认识WPS功能 ​ WPS&#xff08;Wi-Fi Protected Setup&#xff09;是Wi-Fi保护设置的英文缩写。WPS是由Wi-Fi联盟组织实施的认证项目&#xff0c;主要致力于简化无线局域网安装及安全性能的配置工作。WPS并不是一项新增的安全性能&#xff0c;它…

数据结构之链表(单链表)

文章目录前言一、链表二、链表的八种结构1.单向或者双向2.带头或者不带头&#xff08;头&#xff1a;哨兵位&#xff09;3.循环或者不循环三、单链表1.接口2.接口的实现1.开辟一个新的节点1.打印单链表2.头插3.尾插4.头删5.尾删6.单链表的查找7.在pos位置之前插入数据8.在pos位…

MySQL8.0概述及新特性

文章目录学习资料常见的数据库管理系统排名&#xff08;DBMS&#xff09;SQL的分类DDL&#xff1a;数据定义语言DML&#xff1a;数据操作语言DCL&#xff1a;数据控制语言MySQL8.0新特性性能优化默认字符集DDL的原子化计算列宽度属性窗口函数公用表表达式索引新特性支持降序索引…

面试了20+前端大厂,整理出的面试题

事件是什么&#xff1f;事件模型&#xff1f; 事件是用户操作网页时发生的交互动作&#xff0c;比如 click/move&#xff0c; 事件除了用户触发的动作外&#xff0c;还可以是文档加载&#xff0c;窗口滚动和大小调整。事件被封装成一个 event 对象&#xff0c;包含了该事件发生…

RabbitMQ Windows 安装、配置、使用 - 小白教程

1、配套文件 下载erlang&#xff1a;http://www.erlang.org/downloads/ 下载RabbitMQ&#xff1a;http://www.rabbitmq.com/download.html 2、RabbitMQ服务端代码是使用并发式语言Erlang编写的&#xff0c;安装Rabbit MQ的前提是安装Erlang&#xff0c;双击otp_win64_21.1.ex…

计算机毕业设计springboot+vue+elementUI汽车车辆充电桩管理系统

项目介绍 随着我国汽车行业的不断发展&#xff0c;电动汽车已经开始逐步的领导整个汽车行业&#xff0c;越来越多的人在追求环保和经济实惠的同时开始使用电动汽车&#xff0c;电动汽车和燃油汽车最大的而不同就是 需要充电&#xff0c;同时我国的基础充电桩也开始遍及了大多数…

Java 异常处理

目录 一、异常的基本概念 二 、为何需要异常处理 三 、异常的处理 四 、异常类的继承架构 五 、抛出异常 5.1、程序中抛出异常 5.2、指定方法抛出异常 六 、自定义异常 不管使用的那种语言进行程序设计&#xff0c;都会产生各种各样的错误。 Java 提供有强大的异常处理…

商业银行普惠金融可持续发展综合能力呈现梯队化,专项领域各有所长

易观分析&#xff1a;普惠金融有别于传统的金融体系&#xff0c;强调构建包容性、公平性的金融服务生态&#xff0c;商业银行提升可持续发展的综合能力需关注五个方面的因素&#xff1a;获客能力上以普惠客群的金融需求为锚点&#xff0c;增强银行服务生态的多样性&#xff0c;…

罗正雄:基于展开交替优化的盲超分算法DAN

SFFAI 90—超分辨率专题《罗正雄&#xff1a;基于展开交替优化的盲超分算法》 退化表达式为&#xff1a; 盲超分就是已知y&#xff0c;求x 这个求解过程可以表示为如下最优化问题&#xff1a;求出使得以下表达式最小的k和x值 盲超分存在的挑战 病态&#xff1a;退化过程会损…

Leetcode 891. 子序列宽度之和

一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。给你一个整数数组 nums &#xff0c;返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大&#xff0c;请返回对 109 7 取余 后的结果。子序列 定义为从一个数组里删除一些&#xff08;或者不删除&#xf…

基于matlab目标雷达横截面建模(附源码)

目录 一、介绍 二、简单点目标 RCS 三、复杂目标RCS 四、四个散射体组成的目标进行建模 五、具有多个散射体的扩展目标的宽带RCS 六、波动目标RCS 七、偏振目标RCS 八、结论 九、程序 此示例演示如何以不断提高的保真度对雷达目标进行建模。该示例介绍了简单点目标的雷…

MYSQL索引详解和优化

索引的定义 我们在看书的时候&#xff0c;都知道有目录&#xff0c;我们可以通过目录快速的找到书中的内容&#xff0c;而书中的目录就是充当书的索引。在数据库中的索引也是一样的。 索引的定义&#xff1a; 索引是帮助存储引擎快速获取数据的一种数据结构&#xff0c;即数据…

flex设置为1后为什么要设置width为0,和布局超出省略号为什么会超出容器,为什么会没有用

前言 最近在做手机端的页面,制作过程出现了flex布局的一些问题,再次记录在解决办法关于在flex:1的情况下设置为width的效果 如果没有设置width,当内部元素的内容大小超过平均分配的剩余空间时,元素的宽度等于内容大小,如果设置了width并且这个width的大小小于平均分配的剩余空…