首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

ES7学习笔记(一)Elasticsearch的安装与启动

Elasticsearch是一个非常好用的搜索引擎,和Solr一样,他们都是基于倒排索引的。今天我们就看一看Elasticsearch如何进行安装。 下载和安装 今天我们的目的是搭建一个有3个节点的Elasticsearch集群,所以我们找了3台虚拟机,ip分别是: 192.168.73.130 192.168.73.131 192.168.73.132 然后我们要下载ES,这里我们采用的版本是7.6.0。我们进入到/opt目录下,下载elasticsearch7.6.0 curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz 下载的过程比较慢。下载完成后,我们解压: tar -zxvf elasticsearch-7.6.0-linux-x86_64.tar.gz 在启动elasticsearch之前,这里有一个重点:ES在启动的时候是不允许使用root账户的,所以我们要新建一个elasticsearch用户: useradd elasticsearch 然后把elasticsearch-7.6.0这个目录和目录下所有的文件的拥有者都改成elasticsearch: chown elasticsearch:elasticsearch -R elasticsearch-7.6.0 然后,我们切换到elasticsearch用户: su - elasticsearch 我们将ES安装在/opt目录下,先进入到/opt目录, cd /opt/elasticsearch-7.6.0 我们启动一下,看看单机版能不能启动成功。 ./bin/elasticsearch 可以启动成功。但是我们通过浏览器访问这个ip的9200端口时,是不成功的。我们需要对elasticsearch进行配置,才可以在别的机器上访问成功。 ES的配置 es的所有配置文件都在${ES_HOME}/config这个目录下,首先我们设置一下jvm参数,打开jvm.options文件, vim jvm.options ################################################################ ## IMPORTANT: JVM heap size ################################################################ ## ## You should always set the min and max JVM heap ## size to the same value. For example, to set ## the heap to 4 GB, set: ## ## -Xms4g ## -Xmx4g ## ## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html ## for more information ## ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms256m -Xmx256m 我们改一下堆内存的大小,我这里使用的虚拟机,只分配了1g的内存,所以,我这里统一调整为256m内存,大家可以根据自己机器的内存情况进行调整。 然后,我们再打开elasticsearch.yml文件,配置一下这里边的参数。 # ======================== Elasticsearch Configuration ========================= # # NOTE: Elasticsearch comes with reasonable defaults for most settings. # Before you set out to tweak and tune the configuration, make sure you # understand what are you trying to accomplish and the consequences. # # The primary way of configuring a node is via this file. This template lists # the most important settings you may want to configure for a production cluster. # # Please consult the documentation for further information on configuration options: # https://www.elastic.co/guide/en/elasticsearch/reference/index.html # # ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: cluster-a # # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: node-130 # # Add custom attributes to the node: # #node.attr.rack: r1 # # ----------------------------------- Paths ------------------------------------ # 我们先配置一下集群的名字,也就是cluster.name,在这里,我们叫做cluster-a。在另外两台机器上,集群的名字也要叫做cluster-a,这样才能够组成一个集群。在ES中,集群名字相同的节点,会组成ES集群。 然后,我们再修改node.name节点名称,这个名称是每一个节点的,所以,每个节点的名称都不能相同。这里我们以ip命名,130这台机器,节点名称就叫node-130,另外两台叫做node-131和node-132。 我们再接着看后面的配置, # ----------------------------------- Paths ------------------------------------ # # Path to directory where to store the data (separate multiple locations by comma): # #path.data: /path/to/data # # Path to log files: # #path.logs: /path/to/logs # # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # #bootstrap.memory_lock: true # # Make sure that the heap size is set to about half the memory available # on the system and that the owner of the process is allowed to use this # limit. # # Elasticsearch performs poorly when the system is swapping the memory. # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 192.168.73.130 # # Set a custom port for HTTP: # #http.port: 9200 路径和内存,咱们使用默认的就好,咱们重点看一下网络。我们需要指定一下ES绑定的地址,如果不设置,那么默认绑定的就是localhost,也就是127.0.0.1,这样就只有本机能够访问了,其他机器是访问不了的。所以这里我们要绑定每台机器的地址,分别是192.168.73.130,192.168.73.131,192.168.73.132。 接下来,我们看一下集群的相关配置, # --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when this node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # discovery.seed_hosts: ["192.168.73.130", "192.168.73.131","192.168.73.132"] # # Bootstrap the cluster using an initial set of master-eligible nodes: # cluster.initial_master_nodes: ["node-130", "node-131", "node-132"] # # For more information, consult the discovery and cluster formation module documentation. # 也就是Discovery这一段的配置,我们先设置一下集群中节点的地址,也就是discovery.seed_hosts这一段,我们把3台机器的ip写在这里。然后再把3台机器的节点名称写在cluster.initial_master_nodes,好了,集群的配置到这里就告一段落了。 系统配置 接下来我们再看看重要的系统配置。在ES的官网上,有这样一句话, Ideally, Elasticsearch should run alone on a server and use all of the resources available to it. 翻译过来是,合理的做法是,ES应该在一个服务中单独运行,并且可以使用这个机器中所有的可用资源。 只要你在配置文件中配置了network.host,ES就认为你将发布生产环境,如果你的一些配置不正确,那么ES就不会启动成功。在这里,ES也要求我们对系统的一些配置做出修改。 ulimit调整 首先,我们要修改Linux系统的文件打开数,将其调到65535。 su - ulimit -n 65535 exit 然后再修改limits.conf文件,我们同样切换到root用户,打开limits.conf文件, vim /etc/security/limits.conf 在文件的最后添加elasticsearch - nofile 65535,然后保存退出。 关闭swapping 其次,在ES的官方文档上,要求Disabled Swapping ,我们要关掉它。执行以下命令: sudo swapoff -a 这只是临时的关闭swapping,重启linux后,会失效。如果要永久的关闭swapping,需要编辑/etc/fstab文件,将包含swap的行的注释掉。 /dev/mapper/centos-root / xfs defaults 0 0 UUID=6a38540f-2ba9-437b-ac8b-8757f5754fff /boot xfs defaults 0 0 # /dev/mapper/centos-swap swap swap defaults 0 0 调整mmapfs的数值 由于ES是使用mmapfs存储索引,但是系统的默认值太低了,我们调高一点。 sysctl -w vm.max_map_count=262144 线程的数量 确保elasticsearch用户最少可创建4096个线程。我们还是要以root用户去设置。 su - ulimit -u 4096 同样,这知识临时的方案,linux重启后会失效,我们需要修改配置文件/etc/security/limits.conf,将nproc设置为4096。 elasticsearch - nproc 4096 好,到这里我们所有的配置就完成了,现在依次启动3个节点的ES。启动完成后,我们在浏览器中检查以下集群的状态,http://192.168.73.130:9200/_cluster/health, {"cluster_name":"cluster-a","status":"green","timed_out":false,"number_of_nodes":3,"number_of_data_nodes":3,"active_primary_shards":0,"active_shards":0,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0} 我们看到status是green。说明我们的ES集群搭建成功了。

优秀的个人博客,低调大师

物联网学习:算术移位和逻辑移位实现分析

算术移位和逻辑移位实现分析 先来看下面这道题: unsigned int i = 8;int main(){i = i<<3;//输出结果i = 64}上面的变量i是采用逻辑移位还是算术移位呢? 逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变 但我们好奇的是“i<<3”和“i>>3”到底采用的是算术还是逻辑移位呢?其实单从C语言本身来看可能没有太多突破,因为C最终会被编译器编译成目标平台的汇编代码,所以必须要结合编译器和汇编程序来分析以上代码,下面主要从反汇编入手分析,对ARM平台下有关移位的指令有: LSL(逻辑左移) LSR(逻辑右移) ROR(循环右移) ASL(算术左移) ASR(算术右移) RRX(带扩展的循环右移) 下面我们来看看上面那段C程序的反汇编结果: 结论:说明无符号数采用的是逻辑左移。 那么经过测试我们发现以下几份代码反汇编结果和上面的情况是一样的,都是逻辑左移: 再来看一下: signed int i = 8;int main(){i = i<<3;//输出结果i = 64}signed int i = -8;int main(){i = i<<3;//输出结果i = -64}结论:说明不管是否有无符号类型,也不管值的正负,均采用的是逻辑左移。 接下来看看右移: unsigned int i = 8;int main(){i = i>>3;//输出结果i = 1}反汇编结果: 结论:说明无符号数采用的是逻辑右移。 再看看有符号数的右移操作: signed int i = 8;int main(){i = i>>3;//输出结果i = 1}反汇编结果: 结论:说明有符号数采用的是算术右移。 经过测试发现以下代码反汇编结果和上面的情况也是一样的: signed int i = -8;int main(){i = i>>3;//输出结果i = -1}结论:说明只要是有符号数,不管值是正还是负,右移时采用的都是算术右移。 疑问:按照移位补0的原则,为何左移都是逻辑移位呢? 答疑:先看看“-8”和“8”在计算机内存中的值分别是: 0xfffffff80x8由于计算机均按补码保存数值,所以不管符号正负,左移对于符号位并不产生影响,而右移则就不同了,无符号数怎么右移都不影响符号位,但是有符号数逻辑右移时高位补0将改变符号位,所以只能采用算术右移。 总结:只有有符号数右移才采用算术右移,否则其它情况都采用逻辑移位操作(逻辑左移或逻辑右移)。原来只要明白计算机是以补码方式保存数值的,就一切都清楚了。

优秀的个人博客,低调大师

前端学习笔记(5) - JavaScript中this 关键字的机制

JavaScript中有几种函数 1.使用function定义的函数 function foo(){ } 2.使用箭头函数定义的函数 const foo=()=>{ } 3.在class中定义的函数 class A{ foo(){ } } 4.生成器函数 function* foo(){ } 5.class定义的类,实际上也是函数 class Foo { constructor(){ } } 6、7、8异步函数 async function foo(){ } const foo = async () => { } async function foo*(){ } 不同函数this关键字的行为 function showThis(){ console.log(this); } var o = { showThis: showThis } showThis(); // global o.showThis(); // o 普通函数的 this 值由“调用它所使用的引用”决定,其中奥秘就在于:我们获取函数的表达式,它实际上返回的并非函数本身,而是一个 Reference 类型。Reference 类型由两部分组成:一个对象和一个属性值。 不难理解 o.showThis 产生的 Reference 类型,即由对象 o 和属性“showThis”构成。 当做一些算术运算(或者其他运算时),Reference 类型会被解引用,即获取真正的值(被引用的内容)来参与运算,而类似函数调用、delete 等操作,都需要用到 Reference 类型中的对象。在这个例子中,Reference 类型中的对象被当作 this 值,传入了执行函数时的上下文当中。 调用函数时使用的引用,决定了函数执行时刻的 this 值。 const showThis = () => { console.log(this); } var o = { showThis: showThis } showThis(); // global o.showThis(); // global 我们看到,改为箭头函数后,不论用什么引用来调用它,都不影响它的 this 值。 class C { showThis() { console.log(this); } } var o = new C(); var showThis = o.showThis; showThis(); // undefined o.showThis(); // o 创建一个类并实例化以后再次调用获得的结果又是不同的 this关键字的机制 JavaScript 标准定义了 [[thisMode]] 私有属性。[[thisMode]] 私有属性有三个取值。 lexical:表示从上下文中找 this,这对应了箭头函数。 global:表示当 this 为 undefined 时,取全局对象,对应了普通函数。 strict:当严格模式时使用,this 严格按照调用时传入的值,可能为 null 或者 undefined。 class中的函数this行为与其他函数不一样正是因为class设计成了默认为strict模式执行。在strict模式下普通函数与class中的函数行为一致。 "use strict" function showThis(){ console.log(this); } var o = { showThis: showThis } showThis(); // undefined o.showThis(); // o 而箭头函数中this的指向当前上下文中的this,所以下例中foo函数内部潜逃的剪头函数this与foo相同,o.foo()中this为对象o所以内部剪头函数的this均为o。 var o = {} o.foo = function foo(){ console.log(this); return () => { console.log(this); return () => console.log(this); } } o.foo()()(); // o, o, o 操作this的内置函数 JavaScript中提供了apply call bind三个方法来改变函数中this的指向(不清楚用法自行百度)。三个方法只针对普通函数有效,箭头函数、class均不会报错,但是无法改变this,可以传参。

优秀的个人博客,低调大师

初学Docker容器网络不得不看的学习笔记

一、关于Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 因为对比传统虚拟机有启动快、性能提升、运维成本等等绝对优势,越来越受开发运维童鞋的青睐。 二、关于Docker网络模式分类 1、bridge模式,--net=bridge(默认) 2、host模式,--net=host 3、container模式 使用–net =container:指定容器名 4、none模式,--net=none 5、用户自定义模式 三、关于Docker网络模式详解 3.1 bridge模式 Docker网络的默认模式,在docker run启动容器的时候,如果不加--net参数,就默认采用这种网络模式。安装完docker,系统会自动添加一个供docker使用的网桥docker0。容器通过DHCP获取一个与docker0同网段的IP地址,并默认连接到docker0网桥,并将docker0的IP地址作为网关实现容器与宿主机的网络互通,另外,同一个宿主机下同样使用bridge模式的容器可以直接通讯。 实验部分 环境:VMware 安装Centos7虚拟机。 首先在Centos虚拟机中安装容器 yum -y install docker-io ####安装docker 启动容器服务并检查启动状态systemctl start docker 启动docker服务后会发现主机多了一个docker0网卡(PS:目前本机是通过192.168.32.129这个地址可以直接上网的)。 我们启动一个Centos的容器并进入bash,由于我们没有本地没有centos的镜像文件,默认就直接从Docker的官网镜像仓库下载。 [root@cesrc ~]# docker run -itd centos /bin/bash 查看启动的容器 [root@cesrc ~]# docker ps –a 进入容器里面,查看IP配置。 [root@cesrc ~]# docker attach b670 默认没有ifconfig命令,yum安装下net-tools yum install net-tools 查看容器的ip和路由配置,容器分到了与docker0同段地址并将默认路由指向docker0 此容器可以直接上网 iptables -t nat –vnL,查看docker生成的iptables,可以看出相当于docker0对容器做了SNAT, 再启动一个容器 docker run -itd --name centos2 centos /bin/bash 此主机上的容器间可以直接通讯 此模式的网络工作模式如下图所示 3.2 host模式 容器将不会虚拟出自己的网卡,配置自己的IP等,而是直接使用宿主机的IP和端口,但是文件系统是和宿主机隔离的 docker run -itd --net=host --name host-rq centos /bin/bash 进入容器 容器的进程如下,是和宿主机独立。 3.3 Container模式 此模式指定新创建的容器和已经存在的一个容器共享一个 Network,和已有指定的容器出了网络方面其他都是独立的。 创建原始的一个容器s-centos [root@cesrc ~]# docker run -itd --name s-centos centos /bin/bash be7425c3fac6845c9d8d150f9b8c710f9268611fa3a6d86d59444ea1e4bfe415 创建新容器d-centos并使用原有容器的网络 [root@cesrc ~]# docker run -itd --net=container:s-centos --name d-centos centos /bin/bash d576e3009391111688004f57c1549572fd534d33d0e7ee7cc1e02a785f6c8c14 分别进入容器内部,查看IP配置和文件系统是否独立 S-centos D-centos 3.4 None模式 此模式下创建的不会创建网络,容器里面就不会有ip容器中只有lo,用户可以在此基础上,对容器网络做定制,若想使用pipework手工配置指定docker容器的ip地址,必须要在none模式下才可以 docker run -itd --net=none --name n-centos centos /bin/bash None模式下生成的容器必须经过手工配置后才可以上网。 3.5 用户自定义模式 用户自定义模式主要可选的有三种网络驱动:bridge、overlay、macvlan。bridge驱动用于创建类似于前面提到的bridge网络;overlay和macvlan驱动用于创建跨主机的网络,本例中我们使用Flannel和etcd使用overlay技术实现docker跨物理机通信。 Flannel实现的容器的跨主机通信通过如下过程实现: 在etcd中规划配置所有主机的docker0子网范围;每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP),将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;由于目的IP是宿主机IP,因此路由是可达的,VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。 (图片摘自网络) 实验规划 Node1节点安装etcd步骤如下 1、安装etcd程序 yum install -y etcd 2、修改etcd配置文件,配置文件在/etc/etcd/etcd.conf,本实验etcd单机部署,群集配置部分没有做严格更改。配置如下: #[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/host129.etcd" #etcd数据保存目录 #ETCD_WAL_DIR="" #ETCD_LISTEN_PEER_URLS=http://192.168.32.129:2380 #集群内部通信使用的URL ETCD_LISTEN_CLIENT_URLS=http://127.0.0.1:2379,http://192.168.32.129:2379 #供外部客户端使用的URL #ETCD_MAX_SNAPSHOTS="5" #ETCD_MAX_WALS="5" ETCD_NAME="host129" #etcd实例名称 3、设置后期分给docker容器的网段 etcdctl mk /network/config '{"Network":"172.18.0.0/16", "SubnetMin": "172.18.1.0", "SubnetMax": "172.18.254.0"}' 4、设置开机启动etcd服务并启动该服务 systemctl enable etcd systemctl start etcd Node2节点安装etcd步骤如下 1、安装Docker和Flannel服务 yum install -y docker flannel 2、修改Flannel配置文件如下 Flanneld configuration options # etcd url location. Point this to the server where etcd runs FLANNEL_ETCD_ENDPOINTS="http://192.168.32.129:2379" ##设置etcd地址和端口信息 # etcd config key. This is the configuration key that flannel queries # For address range assignment FLANNEL_ETCD_PREFIX="/network" # Any additional options that you want to pass FLANNEL_OPTIONS="-iface=ens33" ##设置Flannel与etcd通讯网卡 3、设置启动参数 cd /usr/libexec/flannel/ ./mk-docker-opts.sh –i 4、启动Docker和Flannel服务 systemctl enable docker flanneld systemctl start docker flannel 5、开启宿主机转发功能{一定要打开,很多网上教程都没有提这个,造成无法联通} iptables -PFORWARD ACCEPT 6、创建容器并进入容器,查看IP docker run -itd centos /bin/bash docker ps –a docker attach 6c 在Node2节点上的操作同样在Node3执行一遍,最终看到Node3的获取的IP如图: 测试容器 Node2和node3上的容器是可以互相访问 宿主机上生成了到各个node的路由条目 上述方式可以实现跨主机的docker通讯,除此之外还有其他两种方式: 在宿主机上添加到其他主机容器的静态路由方式 桥接方式 这两种方式都比较好理解,参考网络摘抄的两张图片 原文链接:https://www.cnblogs.com/yy-cxd/p/6553624.html 静态路由方法: 桥接方法: 四、关于Docker的常用概念和命令总结 4.1 Docker 镜像 我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件系统。 4.2 Docker 容器 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 4.3 Docker Registry 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。 有公有,有私有。 镜像管理命令 1) 获取镜像 从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 命令参考 docker pull ubuntu:16.04 不指定tag默认就是下载最新的 docker pull mirrors.aliyun.com:ubuntu 从阿里云仓库 2) 列出镜像 docker image ls 列表包含了 仓库名、标签、镜像 ID、创建时间 以及 所占用的空间。 3) 删除镜像 docker rmi 镜像Id 删除镜像文件 docker rmi -f 镜像ID强制删除镜像 4) 容器管理 docker create 创建不启动 docker start启动容器 docker stop 容器名称 终止容器 docker restart 容器名称重启容器 docker rm id 删除容器 docker run -it centos /bin/sh 创建并启动容器 exit后容器自动退出,若想以守护进程方式继续运行,需要改为docker run -itd centos /bin/sh docker ps 查看运行中的容器 docker ps –a 查看所有容器,包含停止的容器。 5) 进入容器 docker attch 名字进入容器 docker exec -it``` 容器```id command | docker exec -it 7813e41ec005 /bin/sh 6) 导出容器至文件 docker export -o test_for_run_tar 容器ID 或 docker export 容器ID >test_for_stop_tar 7) 导入文件变成镜像 docker import test_for_run_tar - test/ubuntu:v1.0 8) 数据管理 a)数据卷是一个可供容器使用的特殊目录,将操作系统的目录映射到容器 docker run -d -P --name web -v /src/webapp:/opt/webapp centos /bin/sh 挂载主机的/src/webapp到容器的/opt/webapp目录,默认可读写 docker run -d -P --name web -v /src/webapp:/opt/webapp:ro centos /bin/sh 只读模式 b)数据卷容器,可供其他容器共享使用的容器 先建立一个数据卷容器 root@localhost /]# docker run -it -v /cunchu --name chuchurongqi centos [root@90bd63b06074 /]# ls bin cunchu dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@90bd63b06074 /]# cd cunchu/ [root@90bd63b06074 cunchu]# vi qiang.txt 新建一个其他容器,使用--volumes-from 数据卷容器名字实现挂载容器卷里面的数据卷。 [root@localhost /]# docker run -it --volumes-from chuchurongqi --name db2 centos 作者:宜信网络安全-王志强

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册