Ceph 架构以及部署
Ceph架构
Ceph是什么?为什么用到Ceph?
存储类型
集中式存储
- NAS (网络附加存储 / 网络区域存储)
- SAN (存储区域网络)
- DAS (直连附加存储)
集中式存储的优点:
管理简单,因为所有数据都存放在同一个节点上,所以数据的管理与维护相对简单
安全性高,集中式存储中只有一个数据中心,因此更容易实现安全控制
数据统一管理
常见的的集中式存储有:
分布式存储
分布式存储是一种数据存储技术。在分布式存储架构中,信息被存储于多个独立且互不干扰的设备中。不同于传统的集中式存储,分布式存储采用可扩展的存储结构,这在一定程度上提高了存储系统的可靠性,可用性和访问效率。
为什么用到Ceph?
1. NFS
现在常用的存储服务有NFS,那么为什么不采用NFS呢?
我们不妨这样设想一下,NFS如果节点挂掉了,那么我们把这个节点上的硬盘拔出来,换到其他节点上,在其他节点上起一个NFS,那么数据依旧是存在的,但是,如果坏的不是节点而是硬盘呢?可能你想到了给硬盘做RAID,好,保留这个问题,继续往后看。
2. MooseFS
Moosefs就是一个分布式存储,他的技术架构就是提供一个Mater节点,来管理整个集群,client只需要通过挂载Master节点就可以往集群内存储文件
大家都知道,一个文件是由文件元数据以及文件数据组成的,文件元数据保存的就是一些简单的概要,比如这个文件多大,文件的拥有人,所属组以及访问权限这些东西,元数据一般都不大,所以会直接保存在Master节点上,而文件本身的数据则会保存在存储节点上,并且是有多副本机制的。完全不怕某个节点挂掉而导致数据丢失。
MooseFS瓶颈
虽然文件的元数据占用的空间并不大,但是在现在这个时代,也奈何不了他多啊,当元数据过多时,Master就成了Moosefs的瓶颈,因为所有的请求都是需要经过Master的,并且Moosefs(到写这篇文章的时间)是没办法做Master高可用的,想给他做高可用的方式就是2个Master,使用Keepalive提供一个VIP(虚拟IP),访问这个VIP就可以访问到2个Master节点,但是,在同一时间内,只有一个Master在工作,所以瓶颈依旧存在
3. GlusterFS
看到了MooseFS的瓶颈之后,GlusterFS采取了去Master,即不需要Master节点,每个存储节点上都内嵌一个可以代替Master工作的组件,这样操作下来,所有的元数据并不是都放在同一个节点上,每个节点都只需要保存部分元数据,好像这个架构没什么问题了哈,但是我们回想一下MooseFS是如何使用的?是不是客户端挂载Master就可以使用集群了?但是现在没有Master了,或者说每个节点都是Master,那怎么办呢?
GlusterFS就要求使用GlusterFS的客户端安装一个软件,Gluster-client,并且给这个软件写一个配置文件,把所有的存储节点IP地址写进去,这样操作。但是如果后期节点需要更换,改动起来就比较麻烦。我们再来看看Ceph是怎么做的
4. Ceph
Ceph的做法就跟前两者不同了,Moose FS不是说Master上的元数据会成为瓶颈吗?GlusterFS不是说客户端操作不易吗?那我来折中一下呢?Ceph他保留了Master节点,但是,这个Master保存的不是文件的元数据,是集群的元数据,也就是保存的集群的信息,那么既然Master保存的是集群元数据,那么文件元数据保存到哪了呢?他有专门的文件元数据节点,所有的文件元数据都保存在这个节点上,记住,这个节点只保存元数据,其他一概不管。这样说来,既解决了客户端配置维护困难,也解决了Master节点的瓶颈。
这就是Ceph的架构,他兼顾了 易维护、性能,这就是他流行的原因
现在再回头去想NFS的问题,为什么不做RAID呢?因为做RAID成本就比用Ceph的成本高了
Ceph的版本命名跟OpenStack一样,采取英文字母命令A-Z,目前最新版是R版
Ceph的组件
- mon:集群监视器(就是master)
- osd:集群存储节点
- mgr:集群管理器
以上三个节点必装,缺一不可 - mds:文件元数据节点
- rgw:对象存储网关
- nfs-genasha:为ceph对外提供NFS协议的文件存储服务
- rbd-mirror:块设备镜像服务
Ceph部署
ceph的部署方式有:
- Cephadm(官方推荐)
- ceph-ansible
- ceph-deploy(N版本之前使用)
- DeepSea
- 手工部署(极其复杂,不推荐)
主机名 | IP | 系统 |
---|---|---|
ceph01 | 192.168.101.10 | 欧拉 22.03 |
ceph02 | 192.168.101.20 | 欧拉 22.03 |
ceph03 | 192.168.101.30 | 欧拉 22.03 |
前期准备
每个节点都要做
1.1 修改主机名
[root@localhost ~]# hostnamectl set-hostname ceph01
1.2 关闭防火墙以及selinux
[root@ceph01 ~]# systemctl disable --now firewalld
[root@ceph01 ~]# setenforce 0
[root@ceph01 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
1.3 配置hosts
[root@ceph01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ceph01
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.101.10 ceph01
192.168.101.20 ceph02
192.168.101.30 ceph03
1.4 配置时间同步
[root@ceph01 ~]# yum install chrony -y
[root@ceph01 ~]# systemctl enable --now chronyd
2. 安装cephadm
2.1 安装git
安装git是因为需要拉取cephadm,因为欧拉操作系统暂时用不了官方的cephadm,需要下载另一个版本
[root@ceph01 ~]# yum install git -y
[root@ceph01 ~]# git clone https://gitee.com/yftyxa/openeuler-cephadm.git
[root@ceph01 ~]# cd openeuler-cephadm/
[root@ceph01 openeuler-cephadm]# ls
cephadm
[root@ceph01 openeuler-cephadm]# mv cephadm /usr/sbin/
2.2 安装podman3.3
[root@ceph01 ~]# wget-O /etc/yum.repos.d/huawei.repo https://repo.huaweicloud.com/repository/conf/CentOS-8-reg.repo
# 一定要指定版本安装
[root@ceph01 ~]# yum install podman-3.3.1*
2.3 配置ceph源
不要使用cephadm add-repo 因为在欧拉上是不支持的
[root@ceph01 ~]# cephadm version
ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)
[root@ceph01 ~]# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.huaweicloud.com/ceph/rpm-pacific/el8/x86_64/
gpgcheck=0
enabled=1
2.4 将repo文件传到各个节点
[root@ceph01 ~]# scp /etc/yum.repos.d/ceph.repo ceph02:/etc/yum.repos.d/
Authorized users only. All activities may be monitored and reported.
ceph.repo 100% 107 209.4KB/s 00:00
[root@ceph01 ~]# scp /etc/yum.repos.d/ceph.repo ceph03:/etc/yum.repos.d/
Authorized users only. All activities may be monitored and reported.
ceph.repo 100% 107 203.1KB/s 00:00
3. 安装ceph
[root@ceph01 ~]# cephadm bootstrap --mon-ip 192.168.101.10 --initial-dashboard-user admin --initial-dashboard-password 123 --dashboard-password-noupdate
--mon-ip指定monitor,指定一个就行,后期可以添加
--initial-dashboard-user admin 指定dashboard的用户名是admin,不指定也行
--initial-dashboard-password 123 指定dashboard的用户名是123,不指定也行
--dashboard-password-noupdate 第一次登录dashboard无需修改密码
安装完之后会有一个回显
Ceph Dashboard is now available at:
URL: https://localhost.localdomain:8443/
User: admin
Password: 123
Enabling client.admin keyring and conf on hosts with "admin" label
You can access the Ceph CLI with:
sudo /usr/sbin/cephadm shell --fsid dc6d1544-17ef-11ef-9393-000c297dea16 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Please consider enabling telemetry to help improve Ceph:
ceph telemetry on
For more information see:
https://docs.ceph.com/docs/pacific/mgr/telemetry/
Bootstrap complete.
3.1 登录dashboard
3.2 安装ceph-common
[root@ceph01 ~]# yum install ceph-common --nobest
如果不加上nobest的话,他会报错,因为我们的版本是16.2.13,而仓库里的是common是16.2.15,不是最佳匹配
加上nobest的话他就不会报错了
装完之后我们可以使用ceph -s 来查看集群状态
[root@ceph01 ~]# ceph -s
cluster:
id: dc6d1544-17ef-11ef-9393-000c297dea16
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum ceph01 (age 30m)
mgr: ceph01.luyssm(active, since 27m)
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
3.2.1 群健康的3种状态
1. health: HEALTH_OK 这个代表集群是OK的
2. health: HEALTH_WARN 这个代表的是有警告
3. health: HEALTH_ERR 这个代表集群出现错误,无法提供服务
3.2.2 services
mon: 1 daemons, quorum ceph01 (age 30m)
mgr: ceph01.luyssm(active, since 27m)
osd: 0 osds: 0 up, 0 in
这里可以看到有一个mon,没有osd,没有osd是up
osd的状态:
up且in: 代表osd运行正常且至少承载了一个PG
up且out:代表osd运行正常,但是没有承载PG,新加入集群的osd为这个状态
down且in:表示osd运行异常,但承载了一个PG
down且out:表示osd运行异常,且没有承载PG
3.2.3 健康详细情况
[root@ceph01 ~]# ceph health detail
HEALTH_WARN OSD count 0 < osd_pool_default_size 3
[WRN] TOO_FEW_OSDS: OSD count 0 < osd_pool_default_size 3
这里会详细的说明为什么不健康
4. 添加节点
有一个命令 ceph orch 他是用来管理节点以及 orch 信息的c
[root@ceph01 ~]# ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
alertmanager ?:9093,9094 1/1 2m ago 45m count:1
crash 1/1 2m ago 45m *
grafana ?:3000 1/1 2m ago 45m count:1
mgr 1/2 2m ago 45m count:2
mon 1/5 2m ago 45m count:5
node-exporter ?:9100 1/1 2m ago 45m *
prometheus ?:9095 1/1 2m ago 45m count:1
[root@ceph01 ~]# ceph orch ps
NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID
alertmanager.ceph01 ceph01 *:9093,9094 running (52m) 48s ago 53m 23.8M - 0.23.0 ba2b418f427c 922cc9da5d93
crash.ceph01 ceph01 running (53m) 48s ago 53m 6665k - 16.2.13 e08a45948779 beb27dd23017
grafana.ceph01 ceph01 *:3000 running (51m) 48s ago 52m 52.8M - 8.3.5 dad864ee21e9 8040b45413ea
mgr.ceph01.luyssm ceph01 *:9283 running (54m) 48s ago 54m 430M - 16.2.13 e08a45948779 46795e2d6fd4
mon.ceph01 ceph01 running (54m) 48s ago 55m 127M 2048M 16.2.13 e08a45948779 40063aa2ec52
node-exporter.ceph01 ceph01 *:9100 running (52m) 48s ago 52m 20.3M - 1.3.1 1dbe0e931976 526975c5960b
prometheus.ceph01 ceph01 *:9095 running (52m) 48s ago 52m 68.7M - 2.33.4 514e6a882f6e 7c8ef8a42751
通过ps可以看到ceph具体的进程,运行在哪个机器上,内存占用是多少,允许最大占用内存是多少,这里的image id就是容器使用的镜像ID,cephadm部署出来的集群就是基于容器的
4.1 开始添加节点
需要将/etc/ceph/ceph.pub这个公钥传到被添加的节点上
4.1.1 发放公钥
[root@ceph01 ceph]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph02
[root@ceph01 ceph]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph03
4.1.2 被添加节点安装容器引擎
# 先移除本来就存在的podman1版本
[root@ceph02 ~]# yum remove podman* -y
# 安装podman3
[root@ceph02 ~]# yum install podman-3* -y
[root@ceph03 ~]# yum install podman-3* -y
4.1.3 添加节点
[root@ceph01 ceph]# ceph orch host add ceph02 192.168.101.20
Added host 'ceph02' with addr '192.168.101.20'
[root@ceph01 ceph]# ceph orch host add ceph03 192.168.101.30
Added host 'ceph03' with addr '192.168.101.30'
[root@ceph01 ceph]# ceph orch host ls
HOST ADDR LABELS STATUS
ceph01 192.168.101.10 _admin
ceph02 192.168.101.20
ceph03 192.168.101.30
3 hosts in cluster
Lables 就是标签,当某个节点拥有_admin标签时,集群就会把连接客户端连接ceph集群的认证文件发放到该节点上
4.1.4 标签修改
添加标签
目前是只有ceph01拥有admin标签,在/etc/ceph 下有一些其他节点没有的文件
[root@ceph01 ceph]# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf ceph.pub rbdmap
# ceph03查看
[root@ceph03 ~]# ls /etc/ceph/
rbdmap
# 给ceph03打标签
[root@ceph01 ceph]# ceph orch host label add ceph03 _admin
Added label _admin to host ceph0
# 重新查看ceph03
[root@ceph03 ~]# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap
[root@ceph01 ceph]# ceph orch host ls
HOST ADDR LABELS STATUS
ceph01 192.168.101.10 _admin
ceph02 192.168.101.20
ceph03 192.168.101.30 _admin
这个时候,ceph03就可以使用ceph客户端来操作ceph集群了
删除标签
[root@ceph01 ceph]# ceph orch host label rm ceph03 _admin
Removed label _admin from host ceph03
[root@ceph01 ceph]# ceph orch host ls
HOST ADDR LABELS STATUS
ceph01 192.168.101.10 _admin
ceph02 192.168.101.20
ceph03 192.168.101.30
4.2 关闭mon自动扩展
[root@ceph01 ~]# ceph orch apply mon --unmanaged
Scheduled mon update...
[root@ceph01 ~]# ceph orch apply mon 3
Scheduled mon update...
[root@ceph01 ~]# ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
alertmanager ?:9093,9094 1/1 97s ago 100m count:1
crash 3/3 99s ago 100m *
grafana ?:3000 1/1 97s ago 100m count:1
mgr 2/2 99s ago 100m count:2
mon 3/3 99s ago 52s count:3
node-exporter ?:9100 3/3 99s ago 100m *
prometheus ?:9095 1/1 97s ago 100m count:1
4.3 将mon服务固定在某几个节点
如果有一个mon节点挂掉了,而此时又添加了一台新的节点,那么按照ceph集群的控制,可能会在新的节点上启动一个mon,但我们并不想他更换mon节点,此时可以这么做
# 1. 先给节点打标签
[root@ceph01 ~]# ceph orch host label add ceph01 mon
Added label mon to host ceph01
[root@ceph01 ~]# ceph orch host label add ceph02 mon
Added label mon to host ceph02
[root@ceph01 ~]# ceph orch host label add ceph03 mon
Added label mon to host ceph03
# 2. 开启标签匹配
[root@ceph01 ~]# ceph orch apply mon label:mon
Scheduled mon update...
这样操作之后,mon就只会在有mon标签的节点上去启动
5. 添加OSD
首先需要ceph节点上有空闲的盘,然后将空闲的盘添加进来,必须是一块裸盘,在一千的版本是允许是一个目录的
[root@ceph01 ~]# ceph orch daemon add osd ceph01:/dev/sdb
Created osd(s) 0 on host 'ceph01'
[root@ceph01 ~]# ceph orch daemon add osd ceph01:/dev/sdc
Created osd(s) 1 on host 'ceph01'
[root@ceph01 ~]# ceph orch daemon add osd ceph01:/dev/sdd
Created osd(s) 2 on host 'ceph01'
在添加节点之后ceph会将这块盘做成一个lvm,可以使用lvs去查看
[root@ceph01 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
osd-block-92842562-ddd9-4703-a406-0c5608943e67 ceph-4b36ac72-7807-4e01-97d6-a47974ff5819 -wi-ao---- <50.00g
osd-block-ca2d6b54-650f-41bc-9519-08eeb5d405fb ceph-615825c2-3c13-4367-98e3-7b9197eda340 -wi-ao---- <50.00g
osd-block-2e02f3ac-9768-48d7-8d7b-591d1f5badd5 ceph-bc484b43-f83f-43b2-b49e-a838c8d07e75 -wi-ao---- <50.00g
home openeuler -wi-ao---- <29.90g
root openeuler -wi-ao---- <61.24g
swap openeuler -wi-ao---- <7.86g
添加完之后我们使用命令来查看
[root@ceph01 ~]# ceph -s
cluster:
id: dc6d1544-17ef-11ef-9393-000c297dea16
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph01,ceph02,ceph03 (age 18m)
mgr: ceph02.oxmsfu(active, since 19m), standbys: ceph01.luyssm
osd: 9 osds: 9 up (since 4m), 9 in (since 4m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 53 MiB used, 450 GiB / 450 GiB avail
pgs: 1 active+clean
这里显示有9个osd,并且状态是up且in,说明没问题
ceph df
# ceph df命令
[root@ceph01 ~]# ceph df
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 450 GiB 450 GiB 53 MiB 53 MiB 0.01
TOTAL 450 GiB 450 GiB 53 MiB 53 MiB 0.01
--- POOLS ---
POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL
device_health_metrics 1 1 0 B 0 0 B 0 142 GiB
ceph osd df
# ceph osd df
[root@ceph01 ~]# ceph osd df
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
0 hdd 0.04880 1.00000 50 GiB 6.0 MiB 552 KiB 0 B 5.5 MiB 50 GiB 0.01 1.02 0 up
1 hdd 0.04880 1.00000 50 GiB 6.0 MiB 552 KiB 0 B 5.5 MiB 50 GiB 0.01 1.02 0 up
2 hdd 0.04880 1.00000 50 GiB 6.0 MiB 552 KiB 0 B 5.4 MiB 50 GiB 0.01 1.01 1 up
3 hdd 0.04880 1.00000 50 GiB 6.0 MiB 552 KiB 0 B 5.4 MiB 50 GiB 0.01 1.01 1 up
4 hdd 0.04880 1.00000 50 GiB 5.9 MiB 552 KiB 0 B 5.3 MiB 50 GiB 0.01 0.99 0 up
5 hdd 0.04880 1.00000 50 GiB 6.1 MiB 552 KiB 0 B 5.6 MiB 50 GiB 0.01 1.03 0 up
6 hdd 0.04880 1.00000 50 GiB 5.9 MiB 552 KiB 0 B 5.3 MiB 50 GiB 0.01 0.99 0 up
7 hdd 0.04880 1.00000 50 GiB 5.7 MiB 552 KiB 0 B 5.2 MiB 50 GiB 0.01 0.97 1 up
8 hdd 0.04880 1.00000 50 GiB 5.7 MiB 552 KiB 0 B 5.2 MiB 50 GiB 0.01 0.97 0 up
TOTAL 450 GiB 53 MiB 4.9 MiB 0 B 48 MiB 450 GiB 0.01
MIN/MAX VAR: 0.97/1.03 STDDEV: 0
ceph osd tree
[root@ceph01 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.43918 root default
-3 0.14639 host ceph01
0 hdd 0.04880 osd.0 up 1.00000 1.00000
1 hdd 0.04880 osd.1 up 1.00000 1.00000
2 hdd 0.04880 osd.2 up 1.00000 1.00000
-5 0.14639 host ceph02
3 hdd 0.04880 osd.3 up 1.00000 1.00000
4 hdd 0.04880 osd.4 up 1.00000 1.00000
5 hdd 0.04880 osd.5 up 1.00000 1.00000
-7 0.14639 host ceph03
6 hdd 0.04880 osd.6 up 1.00000 1.00000
7 hdd 0.04880 osd.7 up 1.00000 1.00000
8 hdd 0.04880 osd.8 up 1.00000 1.00000
到这里ceph的部署就结束了
Ceph 架构以及部署的更多相关文章
- Ceph 架构以及原理分析
一.架构 Ceph在一个统一的系统中独特地提供对象,块和文件存储. Ceph高度可靠,易于管理且免费. Ceph的强大功能可以改变您公司的IT基础架构以及管理大量数据的能力. Ceph提供了非凡的可扩 ...
- 分布式存储系统之Ceph集群部署
前文我们了解了Ceph的基础架构和相关组件的介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16720234.html:今天我们来部署一个ceph集群: 部 ...
- .NET Core 微服务架构-Docker部署
本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...
- Ceph学习之路(三)Ceph luminous版本部署
1.配置ceph.repo并安装批量管理工具ceph-deploy [root@ceph-node1 ~]# vim /etc/yum.repos.d/ceph.repo [ceph] name=Ce ...
- 大型Java Web项目的架构和部署问题
一位ID是jackson1225的网友在javaeye询问了一个大型Web系统的架构和部署选型问题,希望能提高现有的基于Java的Web应用的服务能力.由于架构模式和部署调优一直是Java社区的热门话 ...
- ceph架构简介
ceph架构简介 在测试OpenStack的后端存储时,看到了ceph作为后端存储时的各种优势 ,于是查询资料,总结了这篇ceph架构的博客,介绍了ceph的架构和ceph的核心组件.ceph整体十分 ...
- Ceph集群部署(基于Luminous版)
环境 两个节点:ceph0.ceph1 ceph0: mon.a.mds.mgr.osd.0.osd.1 ceph1: mon.b.osd.2.osd.3 操作系统:ubuntu14.04 网络配置: ...
- ceph集群部署(基于jewel版)
环境 两个节点:ceph1.ceph2 ceph1: mon.mds.osd.0.osd.1 ceph2: osd.2.osd.3 网络配置: ceph1: 管理网络,eth0,10.0.0.20 存 ...
- OpenStack与ZStack深度对比:架构、部署、计算、运维监控等
摘要 OpenStack从2010年开源至今,已经走过9个年头,其正在进入主流企业市场,但该项目依然面临较难部署和管理的老问题.有一点是毫无疑问的,那就是OpenStack保持着高速增长的态势,超过5 ...
- ceph集群部署
最近在学习 kubernetes 过程中,想实现 pod 数据的持久化.在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业.在选型方面,个人更加倾向于社区火热的项目,Gluste ...
随机推荐
- [易语言软件开源] [分享源码] 易语言D2D实现彩虹跑马灯
注意使用了D2D1.1,部分win7用户可能用不了(win7以下也用不了) 不是单纯的一个彩虹条,是可以变幻的 其实也可以封装成GDI+的,但是GDI+占用比较大,就没有用 点击下载点击下载
- 6. Eigenvalues and Eigenvectors
Keys: What are Eigenvalues and Eigenvectors? How to find Eigenvalues and Eigenvectors? Applications ...
- java延迟队列DelayQueue及底层优先队列PriorityQueue实现原理源码详解
DelayQueue是基于java中一个非常牛逼的队列PriorityQueue(优先队列),PriorityQueue是java1.5新加入的,当我看到Doug Lea大神的署名之后,我就知道这个队 ...
- redis 简单整理——Lua[十一]
前言 简单介绍一下Lua. 正文 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集 成Lua脚本来解决这个问题. 前面提及到pipline,也提及到pipline 并不是原子性的,如 ...
- nginx 如何代理websocket
前言 下面是配置nginx websocket 的代码. # HTTPS server map $http_upgrade $connection_upgrade { default upgrade; ...
- Web Audio API 第5章 音频的分析与可视化
到目前为止,我们仅讨论了音频的合成与处理,但这仅是 Web Audio API 提供的一半功能.另一半功能则是音频的分析,它播放起来应该是什么样子的.它最典型的例子就是音频可视化,但其实有更多的其它应 ...
- TairSearch:加速多列索引查询
简介: 互联网及传统行业应用服务的关键数据一般存储在MySQL这类的关系型数据库中.如需缓解数据库访问压力,可引入Redis等缓存系统承担热数据的查询,以此提升查询效能.然而业务场景如果是在数据库上做 ...
- 深入浅出eBPF|你要了解的7个核心问题
简介: 过去一年,ARMS基于eBPF技术打造了Kubernetes监控,提供多语言无侵入的应用性能,系统性能,网络性能观测能力,验证了eBPF技术的有效性.eBPF技术和生态发展很好,未来前景广大, ...
- KubeVela 1.3 发布:开箱即用的可视化应用交付平台,引入插件生态、权限认证、版本化等企业级新特性
简介:得益于 KubeVela 社区上百位开发者的参与和 30 多位核心贡献者的 500 多次代码提交, KubeVela 1.3 版本正式发布.相较于三个月前发布的 v1.2 版本[1],新版本在 ...
- 从MVC到云原生:CBU研发体系演进之路
简介: 本文对过去十年 CBU 在研发方式和技术架构上的探索做一个简要的回顾总结,以及对未来的展望. 前言 CBU作为集团内最早成立的几个BU之一,有着多年丰富的业务沉淀,而CBU的技术也伴随着业务一 ...