目录

  • 一、Nova计算服务概念
    • Nova系统架构
  • 二、Nova组件介绍
    • 1、API
    • 2、Scheduler调度器
      • Nova调度器的类型
      • 过滤器
      • 权重(weight)
    • 3、Compute组件
      • Compute组件功能
    • 4、Conductor组件
  • 三、OpenStack-NOVA组件部署
    • 1、在CT控制节点上配置 Nova 服务
      • 创建nova数据库,并执行授权操作
      • 创建用户、修改配置文件
    • 2、在C1、C2计算节点上配置 Nova 服务
      • 安装nova-compute组件修改配置文件
    • 3、CT节点后续操作

一、Nova计算服务概念

  • 计算服务是openstack最核心的服务之一,负责维护和管理云环境的计算资源,它在openstack项目中代号是nova。
  • Nova自身并没有提供任何虚拟化能力,它提供计算服务,使用不同的虚拟化驱动来与底层支持的Hypervisor(虚拟机管理器)进行交互。所有的计算实例虚拟服务器)由Nova进行生命周期的调度管理(启动、挂起、停止、删除等)
  • Nova需要keystone、glance、neutron、cinder和swift等其他服务的支持,能与这些服务集成,实现如加密磁盘、裸金属计算实例等。

Nova系统架构

  • DB:用于数据存储的sql数据库。
  • API:用于接收HTTP请求、转换命令、通过消息队列或HTiP与其他组件通信的nova组件。
  • Scheduler:用于决定哪台计算节点承载计算实例的nova调度器。
  • Network:管理IP转发、网桥或虚拟局域网的nova网络组件。
  • Compute:管理虚拟机管理器与虚拟机之间通信的nova计算组件。
  • Conductor:处理需要协调(构建虚拟机或调整虚拟机大小)的请求,或者处理对象转换

二、Nova组件介绍

1、API

  • API是客户访问nova的http接口,它由nova-api服务实现,nova-api服务接收和响应来自最终用户的计算api请求。作为openstack对外服务的最主要接口, nova-api提供了一个集中的可以查询所有api的端点。
  • 所有对nova的请求都首先由nova-api处理。API提供REST标准调用服务,便于与第三方系统集成。
  • 最终用户不会直接改送RESTful API请求,而是通过openstack命令行、dashbord和其他需要跟nova交换的组件来使用这些API。
  • 只要跟虚拟机生命周期相关的操作,nova-api都可以响应。

nova-api对接收到的HTTP API请求做以下处理:
1)检查客户端传入的参数是否合法有效
2)调用nova其他服务来处理客户端HTTP请求
3)格式化nova其他子服务返回结果并返回给客户端
nova-api是外部访问并使用nova提供的各种服务的唯一途径,也是客户端和nova之间的中间层

2、Scheduler调度器

  • Scheduler可译为调度器,由nova-scheduler服务实现,主要解决的是如何选择在哪个计算节点上启动实例的问题。它可以应用多种规则,如果考虑内存使用率、cpu负载率、cpu构架( intel/amd)等多种因素,根据一定的算法,确定虚拟机实例能够运行在哪一台计算服务器上。Nova-scheduler服务会从队列中接收一个虚拟机实例的请求,通过读取数据库的内容,从可用资源池中选择最合适的计算节点来创建新的虚拟机实例。
  • 创建虚拟机实例时,用户会提出资源需求,如cpu、内存、磁盘各需要多少,openstack讲这些需求定义在实例类型中,用户只需指定使用哪个实例类型就可以了

Nova调度器的类型

  • 随机调度器(chance scheduler) :从所有正常运行nova-compute服务的节点中随机选择。
  • 过滤器调度器(filter scheduler):根据指定的过滤条件以及权重选择最佳的计算节点,Filter又称为筛选器
    • 调度器调度过程:主要分两个阶段
    • 通过指定的过滤器选择满足条件的计算节点,比如内存使用率小于50%,可以使用多个过滤器依次进行过滤。
    • 对过滤之后的主机列表进行权重计算并排序,选择最优的计算节点来创建虚拟机实例。
  • 缓存调度器(caching scheduler):可看作随机调度器的一种特殊类型,在随机调度的基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务定时从数据库中获取最新的主机资源信息。

过滤器

  • 当过滤调度器需要执行调度操作时,会让过滤器对计算节点进行判断,返回True或False。
    在配置文件/etc/nova/nova.conf中
  • scheduler_available_filters选项用于配置可用过滤器,默认是所有nova自带的过滤器都可以用于过滤作用
  • 另外还有一个选项scheduler_ default_ filters用于指定,nova-scheduler服务真正使用的过滤器

过滤调度器将按照下列顺序依次过滤

RetryFilter(再审过滤器)
主要作用是过滤掉之前已经调度过的节点。如A、B、C都通过了过滤,A权重最大被选中执行操作,由于某种原因,操作在A上失败了。Nova-filter将重新执行过滤操作,那么此时A就被会RetryFilter直接排除,以免再次失败

AvailabilityZoneFilter(可用区域过滤器)
为提高容灾性并提供隔离服务,可以将计算节点划分到不同的可用区域中。Openstack默认有一个命名为nova的可用区域,所有的计算节点初始是放在nova区域中的。用户可以根据需要创建自己的一个可用区域。创建实例时,需要指定将实例部署在哪个可用区域中。Nova-scheduler执行过滤操作时,会使用AvailabilityZoneFilter不属于指定可用区域计算节点过滤掉

RamFilter(内存过滤器)
根据可用内存来调度虚拟机创建,将不能满足实例类型内存需求的计算节点过滤掉,但为了提高系统资源利用率,Openstack在计算节点的可用内存时允许超过实际内存大小超过的程度是通过nova.conf配置文件中
ram_allocation_ratio参数来控制的,默认值是1.5。
Vi letc/nova/nova.conf
Ram_allocation_ratio=1.5

DiskFilter(硬盘调度器)
根据磁盘空间来调度虚拟机创建,将不能满足类型磁盘需求的计算节点过滤掉。破盘同样允许超量超量值可修改nova.conf中disk_allocation_ratio参数控制,默认值是1.0
Vi letc/nova/nova.conf
disk_allocation_ratio=1.0

CoreFilter(核心过滤器)
根据可用CPU核心来调度虚拟机创建,将不能满足实例类型vCPU需求的计算节点过滤掉。vCPU也允许超量,超量值是通过修改nova.conf中
cpu_allocation_ratio参数控制,默认值是16。
Vi letc/nova/nova.conf
cpu_allocation_ratio=16.0

ComputeFilter(计算过滤器)
保证只有nova-compute服务正常工作的计算节点才能被nova-scheduler调度,它是必选的过滤器。

ComputeCapablilitiesFilter (计算能力过滤器)
根据计算节点的特性来过滤,如x86_ 64和ARM架构的不同节点,将实例分别进行过滤

ImagePropertiesFilter(镜像属性过滤器)
根据所选镜像的属性来筛选匹配的计算节点。通过元数据来指定其属性。如希望镜像只运行在KVM的Hypervisor上,可以通过Hypervisor Type属性来指定。

ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器)
要求尽量将实例分散部署到不同的节点上。例如有3个实例s1、s2、s3, 3个计算节点A、B、C。具体操作如下:
创建一个anti-affinit策略的服务器组
openstack server group create -policy antiaffinity group-1
创建三个实例,将它们放入group-1服务器组
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s1
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s2
openstack server create -flavor m1.tiny -image cirros -hint group=group-1 s3
ServerGroupAffinityFilter(服务器组亲和性过滤器)
与反亲和性过滤器相反,此过滤器尽量将实例部署到同-个计算节点上

权重(weight)

  • nova-scheduler服务可以使用多个过滤器依次进行过滤,过滤之后的节点再通过计算权重选出能够部署实例的节点。
  • 注意:
    • 所有权重位于novalschedulerlweights目录下。目前默认实现是RAMweighter,根据计算节点空闲的内存量计算权重值,空闲越多,权重越大,实例将被部署到当前空闲内存最多的计算节点上

3、Compute组件

  • Nova-compute在计算节点上运行,负责管理节点上的实例。通常一个主机运行一个Nova-compute服务,一个实例部署在哪个可用的主机上取决于调度算法。OpenStack对实例的操作,最后都是提交给Nova-compute来完成。
  • Nova-compute可分为两类,一类是定向openstack报告计算节点的状态,另一类是实现实例生命周期的管理。

通过Driver (驱动)架构支持多种Hypervisor虚拟机管理器

  • 面对多种Hypervisor(虚拟层),nova-compute为这些Hypervisor定义统一的接口。
  • Hypervisor只需要实现这些接口,就可以Driver的形式即插即用到OpenStack系统中

Compute组件功能

  • 定期向OpenStack 报告计算节点的状态

    • 每隔一段时间,nova-compute就会报告当前计算节点的资源使用情况和nova-compute服务状态。
    • nova-compute是通过Hypervisor的驱动获取这些信息的。
  • 实现虚拟机实例生命周期的管理
    • OpenStack对虚拟机实例最主要的操作都是通过nova-compute实现的。
      创建、关闭、重启、挂起、恢复、中止、调整大小迁移、快照
    • 以实例创建为例来说明nova-compute的实现过程。
      (1)为实例准备资源。
      (2)创建实例的镜像文件。
      (3)创建实例的XML定义文件。
      (4)创建虚拟网络并启动虚拟机。

4、Conductor组件

  • 由nova-conductor模块实现,旨在为数据库的访问提供一层安全保障。
    Nova-conductor作为nova-compute服务与数据库之间交互的中介,避免了直接访问由nova-compute服务创建对接数据库。
  • Nova-compute访问数据库的全部操作都改到nova-conductor中,nova-conductor作为对数据库操作的一个代理,而且nova-conductor是部署在控制节点上的
  • Nova-conductor 有助于提高数据库的访问性能,nova-compute可以创建多个线程使用远程过程调用(RPC)访问nova-conductor。
  • 在一个大规模的openstack部署环境里,管理员可以通过增加nova-conductor的数量来应付月益增长的计算节点对数据库的访问量

三、OpenStack-NOVA组件部署

配置接:OpenStack的部署T版(四)——Placement组件
Nova 计算服务为 OpenStack 云环境提供了计算能力,相关环境需要在控制节点和计算节点分别进行部署。

CT VM:192.168.100.10 NAT:192.168.172.70
​nova-api(nova主服务)
​nova-scheduler(nova调度服务)
​nova-condutor(nova数据库服务,提供数据库访问)
​nova-novncproxy(nova的vnc服务,提供实例的控制台)

C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90
nova-compute(nova计算服务)

1、在CT控制节点上配置 Nova 服务

CT VM:192.168.100.10 NAT:192.168.172.70

创建nova数据库,并执行授权操作

mysql -uroot -pCREATE DATABASE nova_api;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
flush privileges;
exit

创建用户、修改配置文件

创建nova用户
openstack user create --domain default --password NOVA_PASS nova把nova用户添加到service项目,拥有admin权限
openstack role add --project service --user nova admin创建nova服务
openstack service create --name nova --description "OpenStack Compute" compute

给Nova服务关联endpoint(端点)

openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1

安装nova组件(nova-api、nova-conductor、nova-novncproxy、nova-scheduler)

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

修改nova配置文件(nova.conf)

cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

添加/etc/nova/nova.conf配置

openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.10
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS


初始化数据库

初始化nova_api数据库
su -s /bin/sh -c "nova-manage api_db sync" nova注册cell0数据库;nova服务内部把资源划分到不同的cell中,把计算节点划分到不同的cell中;openstack内部基于cell把计算节点进行逻辑上的分组
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova创建cell1单元格
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova初始化nova数据库;可以通过 /var/log/nova/nova-manage.log 日志判断是否初始化成功
su -s /bin/sh -c "nova-manage db sync" nova

验证cell0和cell1是否注册成功

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

启动Nova服务

systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxysystemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

检查nova服务是否启动

netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

2、在C1、C2计算节点上配置 Nova 服务

C1 VM:192.168.100.20 NAT:192.168.172.80
C2 VM:192.168.100.30 NAT:192.168.172.90

安装nova-compute组件修改配置文件

yum -y install openstack-nova-compute
cp -a /etc/nova/nova.conf{,.bak}
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

注意:下列命令中第三行需要修改当前节点的IP地址(C1:192.168.100.20 C2:192.168.100.30)

openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.100.30
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://ct:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu

开启 Nova 计算服务并配置开机启动

systemcontrollerl start libvirtd.service openstack-nova-compute.service
systemcontrollerl enable libvirtd.service openstack-nova-compute.service

3、CT节点后续操作

CT VM:192.168.100.10 NAT:192.168.172.70

查看compute节点是否注册到controller上,通过消息队列;需要在controller节点执行

openstack compute service list --service nova-compute

发现计算节点

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

默认每次添加个计算节点,在控制端就需要执行一次扫描,这样会很麻烦,所以可以修改控制端nova的主配置文件

vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300systemctl restart openstack-nova-api.service


验证计算节点服务

检查 nova 的各个服务是否都是正常,以及 compute 服务是否注册成功
openstack compute service list

查看各个组件的 api 是否正常
openstack catalog list

查看是否能够拿到镜像
openstack image list

查看cell的api和placement的api是否正常,只要其中一个有误,后期无法创建虚拟机
nova-status upgrade check

OpenStack的部署T版(五)——Nova组件相关推荐

  1. OpenStack的部署T版(六)——Neutron组件

    OpenStack的部署(六)--Neutron组件 一.CT控制节点 1.创建数据库neutron,并进行授权 2.创建用户.服务并赋权 3.注册API到neutron服务,给neutron服务关联 ...

  2. OpenStack的部署T版(八)——Dashboard

    OpenStack的部署T版(八)--Dashboard OpenStack-Dashboard组件部署 重启服务(c1节点) 重启 ct 节点的 memcache 服务 验证操作 OpenStack ...

  3. OpenStack的部署T版(七)——cinder模块

    OpenStack的部署T版(七)--cinder模块 一.创建数据库实例和角色 二.创建用户.修改配置文件 三.在计算节点c2配置Cinder(存储节点) 四.ct节点查看卷列表 一.创建数据库实例 ...

  4. OpenStack的部署T版(四)——Placement组件

    OpenStack的部署(四)--Placement项目 OpenStack-Placement组件部署 1.创建数据库实例和数据库用户 2.创建Placement服务用户和API的endpoint ...

  5. OpenStack 的部署T版(二)——Keystone组件

    目录 一.OpenStack安装Keystore组件 Keystone认证流程 1.OpenStack组件安装的顺序 2.创建数据库实例和数据库用户 3.安装.配置keystone.数据库.Apach ...

  6. OpenStack 的部署T版(三)——Glance组件

    目录 一.glance概述 1.镜像服务 2.images API的版本 3.镜像格式 4.镜像文件容器格式 5.镜像状态 6.访问权限 7.Glance架构图 8.Glance 工作流程 二.Ope ...

  7. OpenStack的部署T版(六)——Neutron组件(概念)

    目录 相关概念 一.Neutron网络项目 二.Linux虚拟网络 三.openstack网络基础服务 1.Neutron网络结构 2.网络子网和端口 3.网络拓扑类型 4.网络基本架构 5.Neut ...

  8. OpenStack的部署T版(九)——控制台部署

    传统公司部署OpenStack(t版)简易介绍(九)--控制台部署 一.创建flat外部网络.创建内部交换网络.创建项目路由 二.上传cirros镜像 三.创建实例类型 四.创建实例.打通内外网 一. ...

  9. OpenStack 的部署T版(一)——基础环境配置

    目录 一.资源规划 二.基础环境配置 1.修改添加NAT网卡配置 2.防火墙.核心防护.主机名 3.配置在线源 4.基础环境依赖包 5.VMnet1网卡配置参数 6.配置映射 7.免交互 8.时间同步 ...

最新文章

  1. python里的体格是啥r_numpy.数组形状(R,1)和(R,)之间的差异
  2. Service Mesh — Istio
  3. android webview 内存溢出,android
  4. 国产微服务网关Apache APISIX安装
  5. R中rJava包载入时报错的问题
  6. 新疆大学OJ(ACM) 1099: 数列有序!
  7. IP层:尽力交付,可能丢包,可能重包,可能无序
  8. jzoj6286,P4442-走格子(Portal)【BFS,SPFA】
  9. java中的map是什么_转载java中Map的详解
  10. go语言net包rpc远程调用的使用
  11. 游戏美术设计干货分享:制造“冲突”,提高画面张力
  12. Mysql之各种各样的函数啦
  13. 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)
  14. 2023河海大学计算机考研信息汇总
  15. Mac安装JDK1.8及环境变量配置
  16. 万能地图下载器的不同授权在矢量地图下载功能上有哪些区别?
  17. 青橙N1云OS系统刷机
  18. LigaAI X 猴子无限 | AIGC 火了,专业设计者的福音来了!
  19. MySQL的常用操作
  20. 交流中交易:金融业的专业社交

热门文章

  1. 实战~阿里神器 Seata 实现 TCC模式 解决分布式事务,真香
  2. 音视频技术开发周刊 | 199
  3. 【视频编解码:新标准 新应用】未来可期
  4. 数据结构与算法之完全二叉树的节点个数
  5. 江湖急诏令:腾讯数据库王者挑战赛赏金万两募英豪!
  6. uimsbf和 bslbf的含义
  7. 疫情之下的求职姿势:视频面试,电话面试这样做,你就已经赢一半了!
  8. Spark2.3.0的DataFrame去哪了,DataSet是哪位?
  9. leetcode 437. Path Sum III | 437. 路径总和 III(DFS,前缀和)
  10. leetcode 1047. Remove All Adjacent Duplicates In String | 1047. 删除字符串中的所有相邻重复项(Java)