当前位置: 首页 > news >正文

做网页兼职网站有哪些/北京度seo排名

做网页兼职网站有哪些,北京度seo排名,西安景点网页设计,亚马逊美国官网背景 上篇介绍了文件读写框架设计与实现,同时顺便说明了本地磁盘存储模式的实现模式。 今天来说下基于文件读写框架,如何集成对象存储组件minio,集成之前,需要对minio进行必要的了解,本篇是minio的技术预研。 minio简…

背景

上篇介绍了文件读写框架设计与实现,同时顺便说明了本地磁盘存储模式的实现模式。
今天来说下基于文件读写框架,如何集成对象存储组件minio,集成之前,需要对minio进行必要的了解,本篇是minio的技术预研。

minio简介

minio是一套小而美的开源的对象存储系统(Object Storage System,简称OSS),优点如下:

  • 支持存储海量非结构化数据(单个文件从几十kb到最大5T不等)
  • 性能高,在标准硬件上,读/写速度高达183GB/秒和171GB/秒
  • 完全兼容Amazon S3接口
  • 增配存储资源易于实现,原有存储不变

基本概念

Object:对象,实际就是非结构化的文件,如office文档、图片、音频、视频等。
Bucket:桶,是一个用来管理对象的逻辑空间,称之为对象仓库更合适。其作用相当于磁盘上的一个顶级文件夹,并且桶与桶之间的数据是相互隔离的。桶的意义在于可以更好地分门别类管理存储的对象,避免把整个系统所有的文件一股脑都存放在一个仓库里,可以从租户、业务模块、年度等维度进一步细分。
Drive:磁盘,实际就是底层存储了,对应着磁盘或磁盘上的目录。
Set:阵列,磁盘的集合,这地方我认为很多网上的资料实际都是错的或描述不完整不准确,完整的说法应该是纠删阵列,即在部分磁盘块不可用的情况下通过冗余和算法实现数据恢复,从而能正常读写数据而划分的磁盘阵列。

纠删码机制

minio在可靠性方面做了一个优秀的设计,实现了低冗余与高容错,该方案是通过纠删码(Erasure Code)来实现的,详见官方文档https://min.io/docs/minio/linux/operations/concepts/availability-and-resiliency.html#minio-availability-resiliency。

这部分比较难理解,以下是个人阅读思考后整理处理的,供参考。
大概的原理就是对于一个存储对象,将其分成K块数据碎片,同时增加M块奇偶校验碎片,所有的碎片块所在的磁盘组成一个纠删磁盘阵列。
N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
其中M值默认设置为4,可以调整设置,最小为0,最大为n/2。
M值越小,则用于存储的空间越大,当其为0时,意味着没有附加的奇偶校验碎片,虽然可用于存储的容量最大,但丧失了数据容错,任何一块数据碎片损坏,整个文件不再可读取。
M值越大,则用于存储的空间越小,当其为最大值为n/2时,意味着一个1M的文件实际使用2M的存储空间,其中1M用于数据本身,另外1M用于奇偶校验块,实现容错的目的。
从上面可以推论出来,minio存储文件,最大占用空间是其原始体积的两倍。
若N取16,M取默认值4,则数据块K为12,即12M的文件,实际占用存储空间是16M,多使用了约33%的存储空间,而不是极限情况下多占用100%空间。

关于容错性,对于读数据,在ERASURE SET中,只要无效块总量小于等于M,则都可以恢复数据并读取;对于写数据,分两种情况,如M值小于N/2,则规则同读取,只要无效块总量小于等于M即可以写;若M值刚好为N/2,则要求有效块要大于等于n/2+1。
若N取16,M取默认值4,则数据块K为12,无效块小于等于4,仍然可正常读取和写入数据。
若N取16,M取默认值8,则数据块K为8,无效块小于等于8,仍然可正常读取数据,但有效块至少为9,才能写入数据。

官方给了一张图,说明在1个Set中挂载了16块磁盘的情况下,M取值分别为4、6、8情况下,可用于存储数据的块,存储比率以及多少块处于有效时才可进行读操作和写操作。
image.png
注:存储比率指的是数据占用空间与总占用空间(数据+奇偶校验)的比例,比如8数据块8奇偶校验块,只有50%是用来存储数据的,余下50%用于冗余和恢复的。

minio集群会根据节点和磁盘数自动计算N(ERASURE SET SIZE)的取值,N最大值为16,即最常见的4个minio server节点,每个节点挂载4块磁盘的情况下,刚好组成1个阵列,并且M取值是4。因此一个规模较大的集群中,会存在多个相互独立的阵列。

部署模式

minio的部署模式分为两大类,单节点部署和分布式部署。

其中单节点部署模式下,minio会根据挂载的磁盘的数量,自动决定是否启用纠删码模式。

单节点单磁盘

最简单的情况就是单节点,挂载单个磁盘,此时不会启用纠删码模式,也不存在高可用,磁盘文件损坏无法恢复,官方建议用于开发和测试,不可用于生产环境。个人认为,对于中小型系统,这种部署架构用于生产也是可接受的,简单,实用。一方面从业务角度而言,文件通常是用户上传的附件,重要程度较低,损坏或丢失影响有限;另一方面,磁盘的可靠性相当高,磁盘产生坏道的故障率低到可以忽略。
执行如下命令,创建容器

docker run -p 9000:9000  --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data:/data  minio/minio:RELEASE.2021-04-22T15-44-28Z server /data

使用控制台上传文件,磁盘上存放的实际就是文件本身。
image.png

单节点多磁盘

如想提升文件的可靠性和容错,则仍可以部署单节点,然后挂载多个磁盘,该情况下自动启用纠删码模式。
执行如下命令,只挂两块磁盘

docker run -p 9000:9000  --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data1:/data1 -v E:\dockerVolume\minio\data2:/data2 minio/minio:RELEASE.2021-04-22T15-44-28Z server /data1 /data2

容器启动时报错
image.png
从报错可以看出,磁盘要求至少为4块,更改下命令,挂载4块磁盘,如下:

docker run -p 9000:9000  --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data1:/data1 -v E:\dockerVolume\minio\data2:/data2 -v E:\dockerVolume\minio\data3:/data3 -v E:\dockerVolume\minio\data4:/data4 minio/minio:RELEASE.2021-04-22T15-44-28Z server /data1 /data2 /data3 /data4

容器顺利启动,并显示4块磁盘在线
image.png
同时显示初始化了1个服务池,1个磁盘阵列,每个磁盘阵列中有4块磁盘。
通过控制台上传1张图片,查看文件情况
image.png
每个磁盘下都多了一个以文件名命名的目录,下挂一个xl.meta文件,实际是文件碎片或奇偶校验块,占用空间约为实际文件的一半,进而推断出这四块磁盘,是两块做数据,两块做奇偶校验。

进行破坏性试验,依次删除data2、data3下的xl.meta文件,来模拟磁盘失效,控制台依旧能正常显示和下载文件,继续删除data4下的文件,则控制台中该文件不再显示,与minio的容错机制一致。

多节点多磁盘

分布式部署通常用于中大型系统,是最复杂的一种部署方式。通常至少部署4个minio节点,每个节点挂载4块磁盘,这样组成了一个16块磁盘的启用了纠删码功能的阵列。上文说过,默认设置的奇偶校验块数量是4,即这16块磁盘中有12块用于数据存储,4块用于容错。在分布式部署的场景下,minio是去中心化的,所有节点是对等的,没有主从的概念。而很多集群部署的中间件,是有主从概念的,基于选举算法来产生主节点。因此,minio集群需要通过NGINX来实现负载均衡。

扩展集群

对于分布式部署,如发现原存储资源不够了,增加新的存储资源,很多同类组件往往需要重新均衡各存储节点上数据。均衡意味着要做数据迁移,不仅复杂,而且耗时较长。对于该问题,minio的处理方案则是另辟蹊径,保持原服务池不变,增加新服务池,只有一点要求,新增的服务池需要跟之前规划的磁盘数量一致,这里的一致并不是相等,而是可以是倍数关系。
比如原来得服务池是这样的
minio server http://host{1…8}/export{1…8}
可以通过以下方式扩展
minio server http://host{1…8}/export{1…8} http://host{9…16}/export{1…8}
原来的服务池保持不变,数据不需要重新均衡,新上传的文件会自动找寻负载低的服务池。
minio将复杂的增配资源问题转换成了一个部署问题,非常巧妙。

安装部署

基于虚拟机的部署比较简单,无非是获取安装包,然后运行,这里就不多说了。
接下来说下基于docker的安装部署。
直接通过docker 拉取镜像 docker pull minio/minio:RELEASE.2021-04-22T15-44-28Z
image.png
创建容器

docker run -p 9000:9000  --name minio -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data:/data -v E:\dockerVolume\minio\cofig:/root/.minio minio/minio:RELEASE.2021-04-22T15-44-28Z server /data

启动成功后,访问9000端口
image.png
登录后,界面如下:
image.png
就是一个很简单的页面,新建桶和上传文件都通过右下角按钮实现,相比当前的最新版本的UI和功能,相当的简陋。

新版本的登录页面
image.png
新版本的功能菜单
image.png

集成验证

基于java,验证常用API的使用。

引入依赖

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.7</version>
</dependency>

新建控制器

新建一个控制器用于测试,路径设置为file,为了测试方便,直接在控制器里调用API,不再转调service了。

package miniodemo.controller;import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author wqliu* @date 2023-11-17*/
@RestController
@RequestMapping("/file/")
@Slf4j
public class FileController {}

构建客户端

所有API调用的前提,是构建minioClient客户端,调用MinioClient的建造器方法,传入服务地址和身份认证即可。

/*** 获取客户端* @return*/
private MinioClient getClient(){// 创建客户端MinioClient minioClient =MinioClient.builder()// 服务地址.endpoint("http://127.0.0.1:9000")// 身份认证.credentials("admin", "12345678").build();return minioClient;
}

创建桶

新加方法,通过参数传入桶名,内部简单判断是否存在,不存在则新建。同样为了测试方便,未使用post而是用了get方法。

/*** 新建桶* @param bucketName 桶名*/
@GetMapping("/addBucket")
public void addBucket(String bucketName) {try {MinioClient client = getClient();// 创建桶BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();boolean exists =client.bucketExists(bucketExistsArgs);if (!exists) {// 不存在,创建MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();client.makeBucket(makeBucketArgs);}}catch (Exception ex){log.error(ex.getMessage());}}

浏览器中输入地址http://localhost:8080/file/addBucket?bucketName=abc
使用minio自带控制台,可以看到已经成功创建了桶。
image.png

上传文件

实现如下控制器方法

/*** 上传文件*/
@GetMapping("/upload")
public void upload() {try {MinioClient client = getClient();UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("abc").object("1.png").filename("e:/1.png").build();client.uploadObject(uploadObjectArgs);}catch (Exception ex){log.error(ex.getMessage());}}

执行http://localhost:8080/file/upload
查看minio控制台,文件已上传
image.png
查看docker挂载的磁盘,在单节点单磁盘情况下,实际就是把桶映射成文件夹,把文件放到文件夹下
image.png

下载文件

实现如下控制器方法

/***  下载文件*/
@GetMapping("/download")
public void download() {try {MinioClient client = getClient();DownloadObjectArgs downloadObjectArgs = DownloadObjectArgs.builder().bucket("abc").object("1.png").filename("e:/2.png").build();client.downloadObject(downloadObjectArgs);}catch (Exception ex){log.error(ex.getMessage());}}

浏览器中访问http://localhost:8080/file/download,查看本地磁盘,文件被下载。

获取文件流

上面方法是把文件固定下载到磁盘某个目录下,实际系统使用的时候是问minio要文件流,实现如下控制器方法

/***  获取文件流*/
@GetMapping("/getFileStream")
public InputStream getFileStream() {try {MinioClient client = getClient();GetObjectArgs args = GetObjectArgs.builder().bucket("abc").object("1.png").build();GetObjectResponse response = client.getObject(args);return response;}catch (Exception ex){log.error(ex.getMessage());return null;}
}

浏览器中访问http://localhost:8080/file/getFileStream,通过调试模式,可以看到拿到了文件流。
注意API返回的类型GetObjectResponse,实际是InputStream的子类,因此可以用InputStream来接收。

总结

上文构建了基于java和springboot实现的API测试,完成了创建桶、上传文件、下载文件和获取文件流等常用操作,像删除桶、删除文件等操作也高度类似,未再一一列出。
从测试代码可以看出,minio的api做了高度统一的封装,每个方法对应着一个参数对象,并且该参数对象内置了建造器模式。处理过程也高度类似,先构建一个minio的客户端,然后使用该客户端调用API方法。

坑点:开源协议的变动

MinIO比较特别,初早期版本的开源协议是Apache 2.0,这是一种相对友好的协议,可以商用。后来变更成了AGPL V3.0,虽然仍然可以商用且无需付费,但该协议要求使用该组件的系统必须开源,这就有点……
所以,选用minio时,需要慎重选择版本,如自己本身就是开源软件,那么使用minio的新版本更适合,否则,请选用老版本的minio来规避版权问题。
通过Git库查看修改日志,最后一个基于apache 2.0协议的版本是2021-04-22T15-44-28Z,源码下载地址
https://github.com/minio/minio/tree/RELEASE.2021-04-22T15-44-28Z
因为是源码,不能直接使用,需要编译,而minio是使用go语言开发的,需要go编译环境。

多说一句,MinIO的版本号命名也独具特色(惨不忍睹),没有按照大多数的三段数字如3.1.2,或者用某系列英文来区分(如Spring Cloud),而是大多以发布时间命名的版本,不信你看……
image.png

开源平台资料

平台名称:一二三开发平台
简介: 企业级通用开发平台
设计资料:csdn专栏
开源地址:Gitee
开源协议:MIT
欢迎收藏、点赞、评论,你的支持是我前行的动力。

相关文章:

一二三应用开发平台文件处理设计与实现系列之5——MinIO技术预研

背景 上篇介绍了文件读写框架设计与实现&#xff0c;同时顺便说明了本地磁盘存储模式的实现模式。 今天来说下基于文件读写框架&#xff0c;如何集成对象存储组件minio&#xff0c;集成之前&#xff0c;需要对minio进行必要的了解&#xff0c;本篇是minio的技术预研。 minio简…...

Native.js是什么

Native.js 是一个开源项目&#xff0c;旨在通过 JavaScript 调用原生 Android API。它的目标是让 JavaScript 开发者能够使用 Android 原生 API&#xff0c;从而在不编写原生代码的情况下构建 Android 应用。 使用 Native.js&#xff0c;开发者可以使用 JavaScript 调用 Andro…...

Vant-ui图片懒加载

核心代码 在你的全局顶部引入和初始化 Vue.use(vant.Lazyload, {loading: /StaticFile/img/jiazai.jpg,error: /StaticFile/img/jiazai.jpg,lazyComponent: false, });//图片懒加载 <img v-lazy"https://img-blog.csdnimg.cn/direct/3d2c8a7e2c0040488a8128c3e381d58…...

创建EasyCodeMybatisCodeHelperPro模板文件用于将数据库表生成前端json文件

在intellij idea中&#xff0c;通过插件EasyCodeMybatisCodeHelperPro&#xff0c;从现有的模板文件中选择一个复制粘贴&#xff0c;然后稍为修改&#xff0c;即可得到一个合适的模板文件。 现在的前端&#xff0c;越来越像后端。TypeScript替代了JavaScript&#xff0c;引入了…...

华为端口安全常用3种方法配置案例

安全动态mac地址学习功能 [Huawei]int g0/0/01 interface GigabitEthernet0/0/1 port-security enable //开启安全 port-security max-mac-num 2 //最多为2个mac地址学习 port-security protect-action restrict //丢包带警告 port-security aging-time 1 //mac地址的老化时间…...

RH850P1X芯片学习笔记-Flash Memory

文章目录 FeaturesClock Supply Block DiagramFlash SizeMemory ConfigurationRegistersRegister Base AddressList of RegistersRegister Reset Condition 与Flash Memory相关的操作模式Functional OverviewOption BytesOPBT0 — Option Byte 0OPBT1 — Option Byte 1OPBT2 —…...

利用XSS漏洞打cookie

目录 1、为什么要打cookie&#xff1f; 2、怎样利用XSS来打cookie&#xff1f; 3、利用Bluelotus_xssReceiver平台来打cookie 4、利用beef-xss平台来打cookie 上一篇给大家介绍了xss漏洞的基础知识&#xff0c;在本篇章将会介绍和演示一下利用xss漏洞打cookie的演示&#x…...

用java写个redis工具类

下面是一个简单的Redis工具类的示例&#xff0c;使用Java语言编写&#xff1a; import redis.clients.jedis.Jedis;public class RedisUtils {private static Jedis jedis;public static void connect(String host, int port) {jedis new Jedis(host, port);}public static v…...

实现防抖函数

// 防抖就是&#xff0c;事件触发 delay 秒后再执行&#xff0c;如果有重新的触发&#xff0c;重新计时 function debounce(func, delay) {if(typeof func ! function) {return}let timer 0return function () {if (timer) {clearTimeout(timer)timer null}timer setTimeout…...

MetaGPT task1学习

基础知识学习了解&#xff1a; 安装环境&#xff1a; 获取MetaGPT 使用pip获取MetaGPT pip install -i https://pypi.tuna.tsinghua.edu.cn/simple metagpt0.5.2 配置MetaGPT 完成MetaGPT后&#xff0c;我们还需要完成一些配置才能开始使用这个强力的框架&#xff0c;包括配…...

关于量子计算机的设想

从CPU架构说起 CISCRISCNISCCCSC CISC是复杂指令集计算机&#xff0c;以x86为代表&#xff1b; RISC是精简指令集计算机&#xff0c;以ARM为代表&#xff1b; NISC是无指令集计算机&#xff0c;CCSC是核-电路分离计算机&#xff0c;这两个是本文要讨论的内容。 如果没有指令…...

序列模型(4)—— Scaling Laws

本文介绍 LLM 训练过程中重要的 Scaling Laws&#xff0c;这是一个经验规律&#xff0c;指出了固定训练成本&#xff08;总计算量FLOPs&#xff09; C C C 时&#xff0c;如何调配模型规模&#xff08;参数量&#xff09; N N N 和训练 Token 数据量 D D D&#xff0c;才能实现…...

【软件测试学习笔记1】测试基础

1.软件测试的定义 软件的定义&#xff1a;控制计算机硬件工作的工具 软件的基本组成&#xff1a;页面客户端&#xff0c;代码服务器&#xff0c;数据服务器 软件产生的过程&#xff1a;需求产生&#xff08;产品经理&#xff09;&#xff0c;需求文档&#xff0c;设计效果图…...

pytorch详细探索各种cnn卷积神经网络

目录 torch.nn.functional子模块详解 conv1d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv2d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv3d 用法和用途 使用技巧 适用领域 参数 注意事项 示例代码 conv_transpose1d 用法…...

OpenCV——八邻域断点检测

目录 一、理论基础1、八邻域2、断点检测 二、代码实现三、结果展示四、参考链接 OpenCV——八邻域断点检测由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、理论基础 1、八邻域 图1 八邻域示意图 图…...

leetcode238:除自身以外数组的乘积

文章目录 1.使用除法&#xff08;违背题意&#xff09;2.左右乘积列表3.空间复杂度为O(1)的方法 在leetcode上刷到了这一题&#xff0c;一开始并没有想到好的解题思路&#xff0c;写篇博客再来梳理一下吧。 题目要求&#xff1a; 不使用除法在O(n)时间复杂度内 1.使用除法&am…...

VTK开发调试环境下载(VTK开发环境一步到位直接开发,无需自己配置编译 VS2017+Qt5.12.10+VTK)

一、无与伦比的优势 直接下载代码就可以调试的VTK代码仓库。 二、资源制作原理 这个资源根据VTK源码 编译出动态库文件 pdb lib dll 文件&#xff08; x64 debug &#xff09; 并将这两者同时放在一个代码仓库里&#xff0c;下载就能用。 三、使用方法&#xff08;vtk-so…...

【JAVA】在 Queue 中 poll()和 remove()有什么区别

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 poll() 方法&#xff1a; remove() 方法&#xff1a; 区别总结&#xff1a; 结语 我的其他博客 前言 在Java的Queue接口中&…...

常用Java代码-Java中的Optional类和null安全编程

在Java中&#xff0c;Optional 是一个可以为null的容器对象。如果值存在则isPresent()方法返回true。调用get()方法会返回值&#xff0c;如果值为null则抛出NullPointerException。以下是一个详细的代码详解。 在之前的Java版本中&#xff0c;程序员需要手动检查是否为null&am…...

android.os.NetworkOnMainThreadException

问题 android.os.NetworkOnMainThreadException详细问题 核心代码如下&#xff1a; import android.os.Bundle;import androidx.appcompat.app.AppCompatActivity;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja…...

Java生成四位数随机验证码

引言&#xff1a; 我们生活中登录的时候都要输入验证码&#xff0c;这些验证码是为了增加注册或者登录难度&#xff0c;减少被人用脚本疯狂登录注册导致的一系列危害&#xff0c;减少数据库的一些压力。 毕竟那些用脚本生成的账号都是垃圾账号 本次实践&#xff1a;生成这样的…...

编程探秘:Python深渊之旅-----数据可视化(八)

客户提出了对数据报告和图表的具体要求&#xff0c;这使得团队需要快速掌握数据可视化的技巧。派超决定深入了解 Python 中的数据可视化工具。 派超&#xff08;兴奋地&#xff09;&#xff1a;我们有机会做些真正酷炫的数据报告了&#xff01;我听说 Python 有很棒的图表库。…...

上海亚商投顾:创业板指冲高回落 光伏、航运股逆势走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指1月12日冲高回落&#xff0c;创业板指午后跌近1%。北证50指数跌超6%&#xff0c;倍益康、华信永道、众诚科…...

Python3 中常用字符串函数介绍

介绍 Python 中有几个与 字符串数据类型相关的内置函数。这些函数让我们能够轻松修改和操作字符串。我们可以将函数视为在代码元素上执行的操作。内置函数是在 Python 编程语言中定义的&#xff0c;并且可以随时供我们使用的函数。 在本教程中&#xff0c;我们将介绍在 Pytho…...

Python - 深夜数据结构与算法之 AVL 树 红黑树

目录 一.引言 二.高级树的简介 1.树 2.二叉树 3.二叉搜索树 4.平衡二叉树 三.AVL 树 ◆ 插入节点 ◆ 左旋 ◆ 右旋 ◆ 左右旋 ◆ 右左旋 ◆ 一般形式 ◆ 实际操作 ◆ 总结 四.红黑树 ◆ 概念 ◆ 示例 ◆ 对比 五.总结 一.引言 前面我们介绍了二叉树、二叉…...

Zookeeper使用详解

介绍 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、分布…...

C#属性(Property)

文章目录 一、C#属性&#xff08;Property&#xff09;&#xff1f;二、属性的用法总结 一、C#属性&#xff08;Property&#xff09;&#xff1f; C#属性&#xff08;Property&#xff09;是一种访问器&#xff08;accessor&#xff09;&#xff0c;用于封装一个类的字段&…...

在docker中搭建部署clickhouse

因需要给网关日志拉取并存储供数据分析师分析&#xff0c;由于几十个项目的网关请求数量很大&#xff0c;放在mysql不合适&#xff0c;MongoDB不适合分析&#xff0c;于是准备存放在clickhouse&#xff0c;clickhouse对于读写支持也比较友好&#xff0c;说干就干 1、在服务器中…...

第九部分 使用函数 (三)

目录 一、文件名操作函数 1、dir 2、notdir 3、suffix 4、basename 5、addsuffix 6、addprefix 7、join 一、文件名操作函数 下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是 一系列的文件名来对待。 1、dir $(dir <names..>…...

基础命令继续

1&#xff1a;创建目录命令 mkdir命令 注意&#xff1a;创建文件夹需要修改权限&#xff0c;请确保操作均在HOME目录内&#xff0c;不要在Home外操作&#xff0c;涉及到权限问题&#xff0c;HOME外无法识别 小结&#xff1a; 练习: 2&#xff1a;touch创建文件 2&#xff1a;c…...