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

Docker技术入门与实战【3.0】

第15章 构建Docker容器集群对Docker不熟悉的读者在生产环境中使用Docker的过程中往往会碰到构建集群的需求。这里最核心的问题就是让不同主机中的Docker容器可以互相访问。本章将介绍几种解决方案包括利用端口映射实现容器之间的快速互联使用Ambassador容器解决跨主机的容器互联等。最后对现有方案的问题进行探讨。在实际应用中读者可根据自身情况灵活选择或组合几种方案来满足需求。15.1 使用自定义网桥连接跨主机容器Docker默认的网桥是docker0。它只会在本机连接所有的容器。举例来说容器的虚拟网卡在主机上看一般叫做veth*而docker0网桥把所有这些网卡桥接在一起如下所示[rootopnvz ~]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.56847afe9799 no veth0889veth3c7bveth4061在容器中看到的地址一般是像下面这样的地址rootac6474aeb31d:~# ip a1: lo: LOOPBACK UP LOWER_UP mtu 1500 qdisc noqueue state UNKNOWN group defaultlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever11: eth0: BROADCAST UP LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 4a:7d:68:da:09:cf brd ff:ff:ff:ff:ff:ffinet 172.17.0.3/16 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::487d:68ff:feda:9cf/64 scope linkvalid_lft forever preferred_lft forever这样就可以把这个网络看成是一个私有的网络如果要让外网连接到容器中就需要做端口映射即-p参数。例如主机A和主机B的网卡一都连着物理交换机的同一个vlan 101这样网桥一和网桥三就相当于在同一个物理网络中了而容器一、容器三、容器四也在同一物理网络中了它们之间可以相互通信而且可以跟同一vlan中的其他物理机器互联如图15-1所示。下面以ubuntu系统为例创建跨多个主机主机的容器联网。首先创建自己的网桥br0编辑/etc/network/interface文件auto br0iface br0 inet staticaddress 192.168.7.31netmask 255.255.240.0gateway 192.168.7.254bridge_ports em1bridge_stp offdns-nameservers 8.8.8.8 192.168.6.1重启后默认将本地物理网卡em1连接到了br0上。在本地修改/etc/default/docker文件添加最后一行内容# Docker Upstart and SysVinit configuration file# Customize location of Docker binary (especially for development testing).#DOCKER/usr/local/bin/docker# Use DOCKER_OPTS to modify the daemon startup options.#DOCKER_OPTS--dns 8.8.8.8 --dns 8.8.4.4# If you need Docker to use an HTTP proxy it can also be specified here.#export http_proxyhttp://127.0.0.1:3128/# This is also a handy place to tweak where Dockers temporary files go.#export TMPDIR/mnt/bigdrive/docker-tmpDOCKER_OPTS-bbr0在启动Docker的时候使用-b参数可以将容器绑定到指定网桥br0上。重启Docker服务后再进入容器可以看到它已经连接到物理网络上了rootubuntudocker:~# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES58b043aa05eb desk_hz:v1 /startup.sh 5 days ago Up 2 seconds 5900/tcp, 6080/tcp, 22/tcp yanlxrootubuntudocker:~# brctl showbridge name bridge id STP enabled interfacesbr0 8000.7e6e617c8d53 no em1vethe6e5这样的情况下容器端口通过映射直接暴露到物理网络上多台物理主机的容器通过访问外部映射端口即可相互联网了。这样实现的主要问题是需要知道容器所在物理主机的IP地址。15.2 使用Ambassador容器当两个Docker容器在同一主机或虚拟机时可以通过--link命令让两者直接互相访问。如果要跨主机实现容器互联则往往需要容器知道其他物理主机的IP地址。利用Ambassador容器机制可以让互联的容器无需知道所在物理主机的IP地址即可互联。基本场景Ambassador容器也是一种Docker容器它在内部提供了转发服务。如图15-2所示。当客户端容器要访问服务端容器的时候直接访问客户端Ambassador容器这个请求会被客户端Ambassador转发出去到达服务端主机。服务端Ambassador容器监听在对应端口上收到请求后再转发请求给服务端容器。使用Ambassador容器以redis镜像为例。首先在服务端主机上创建一个服务端容器redis-server$ sudo docker run -d -name redis-server crosbymichael/redis创建一个服务端Ambassador容器redis_ambassador连接到服务端容器redis-server并监听本地的6379端口$ sudo docker run -d -link redis-server:redis -name redis_ambassador -p 6379:6379 svendowideit/ambassador在客户端主机上创建客户端Ambassador容器告诉它服务端物理主机的监听地址是tcp://x.x.x.x6379将本地收集到6379端口的流量转发到服务端物理主机$ sudo docker run -d -name redis_ambassador -expose 6379 -e REDIS_PORT_6379_TCPtcp://x.x.x.x:6379 svendowideit/ambassador最后创建一个客户端容器进行测试默认访问6379端口实际上是访问的服务端容器内的redis应用$ sudo docker run -i -t -rm -link redis_ambassador:redis relateiq/redis-cliredis 172.17.0.160:6379 pingPONGAmbassador镜像的DockerfileAmbassador镜像的Dockerfile如下所示。其实现十分简单主要是一行正则表达式从环境变量中找到包含“TCP”字符串的变量然后使用正则表达式.*_PORT([0-9])_TCPtcp:\/\/(.):(.*)从中提取IP和端口号最后利用socat一个socket转发程序将流量转发到指定的地址上FROM docker-utMAINTAINER SvenDowideithome.org.auCMD env | grep _TCP | sed s/.*_PORT_\([0-9]*\)_TCPtcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1, fork, reuseaddr TCP4:\2:\3 \/ | sh top这种情况下需要额外的Ambassador容器并且也仍然需要知道目标容器所在的物理主机的地址。15.3 本章小结本章介绍了实现Docker容器集群的两种基本方式通过端口映射方法实现利用外部物理网络的构建以及通过Ambassador容器来解决容器跨主机情况下通过内网地址访问的问题。实际上要实现容器集群的管理关键要实现两方面的需求一是容器名称的动态管理即容器利用固定的名称可以互相访问即使有容器发生重启另外一方面是需要底层网络提供灵活的跨主机的支持租户隔离的连接。现有的方案在这两方面的解决并没有做到十分完美。一旦容器发生重启容器内分配到的IP发生变化原先的连接就无法使用了。同时底层直接暴露在物理网络上依赖于指定物理地址的访问无法实现灵活的租户隔离等需求。要解决容器名称的动态管理有不同的思路包括添加反向代理的方式、社区内正在讨论的几个补丁以及SkyDNSSkyDock、etcd、consul等工具本质上就是实现一套容器名到地址的访问或者说实现容器的DNS系统。而解决底层网络的灵活连接则需要使用Overlay技术。这方面可以基于VXLAN等网络虚拟化协议实现跨主机甚至跨物理网络的大二层连通。事实上管理虚拟机的OpenStack等项目提供了相对成熟的基于SDN的网络管理方案已经可以很好地支持容器之间的网络管理。现在已经有包括Shipyard、Kubernetes等项目实现一整套的容器集群管理方案笔者将在第三部分中进行介绍。第16章 在公有云上使用DockerDocker目前已经得到了众多的公有云平台的良好支持包括Aliyun、Amazon、Rackspace、Softlayer、腾讯云等。在国内的公有云厂商中阿里云率先对其ECS服务器上安装Docker提供了更友好的支持。本章将以国内的阿里云为例介绍在公有云平台上安装、使用Docker的过程和注意事项。其中第一节介绍了在阿里云的ECS服务器上安装Docker的详细步骤和用法第二节介绍了在阿里云上使用Docker的一些特色服务。16.1 公有云上安装Docker以阿里云提供的CentOS6.5系统和Ubuntu 14.04系统为例介绍安装和使用Docker的过程。16.1.1 CentOS 6.5系统首先在阿里云网站上申请机器选择CentOS 6.5系统。通过ssh登录阿里云的服务器查看系统版本号以及内核版本$ ssh useryour_aliyun_vmWelcome to aliyun Elastic Compute Service!# lsb_release -aLSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarchDistributor ID: CentOSDescription: CentOS release 6.5 (Final)Release: 6.5Codename: Final# uname -aLinux xxxxxxx 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux可以看到内核默认为比较旧的2.6系列版本。1.升级内核Docker推荐使用3.8以上内核所以推荐首先升级内核。导入KEY安装软件源。在YUM的ELRepo源中有mainline3.13.1、long-term3.10.28这2个内核版本考虑到long-term会长期保持支持和更新所以选择这个版本# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org# yum --enablerepoelrepo-kernel install kernel-lt -yLoaded plugins: securitybase | 3.7 kB 00:00base/primary_db | 4.6 MB 00:00elrepo | 2.9 kB 00:00elrepo/primary_db | 709 kB 00:46elrepo-kernel | 2.9 kB 00:00elrepo-kernel/primary_db | 20 kB 00:01epel | 4.4 kB 00:00epel/primary_db | 6.3 MB 00:01extras | 3.4 kB 00:00extras/primary_db | 29 kB 00:00updates | 3.4 kB 00:00updates/primary_db | 181 kB 00:00Setting up Install ProcessResolving Dependencies-- Running transaction check--- Package kernel-lt.x86_64 0:3.10.59-1.el6.elrepo will be installed-- Finished Dependency ResolutionDependencies ResolvedPackage Arch Version Repository SizeInstalling:kernel-lt x86_64 3.10.59-1.el6.elrepo elrepo-kernel 33 MTransaction SummaryInstall 1 Package(s)Total download size: 33 MInstalled size: 153 MDownloading Packages:kernel-lt-3.10.59-1.el6.elrepo.x86_64.rpm | 33 MB 28:58Running rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning TransactionWarning: RPMDB altered outside of yum.Installing : kernel-lt-3.10.59-1.el6.elrepo.x86_64 1/1Verifying : kernel-lt-3.10.59-1.el6.elrepo.x86_64 1/1Installed:kernel-lt.x86_64 0:3.10.59-1.el6.elrepoComplete!安装后检查/etc/grub.conf文件查看默认的启动内核。新安装的内核一般在第一个这里把default1改为default0就好了default1timeout5splashimage(hd0 0)/boot/grub/splash.xpm.gzhiddenmenutitle CentOS (3.10.59-1.el6.elrepo.x86_64)root (hd0 0)kernel /boot/vmlinuz-3.10.59-1.el6.elrepo.x86_64 ro rootUUID94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANGen_US.UTF-8 rd_NO_MD SYSFONTlatarcyrheb-sun16 crashkinitrd /boot/initramfs-3.10.59-1.el6.elrepo.x86_64.imgtitle CentOS (2.6.32-431.23.3.el6.x86_64)root (hd0 0)kernel /boot/vmlinuz-2.6.32-431.23.3.el6.x86_64 ro rootUUID94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANGen_US.UTF-8 rd_NO_MD SYSFONTlatarcyrheb-sun16 crashkeinitrd /boot/initramfs-2.6.32-431.23.3.el6.x86_64.img~ 重启云主机查看内核是否升级成功# uname -aLinux xxxxxxx 3.10.59-1.el6.elrepo.x86_64 #1 SMP Thu Oct 30 23:46:31 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux2.安装Docker添加软件源并安装Docker软件# yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm# yum install docker-io3.启动Docker使用service命令启动Docker发现会提示有问题# service docker startStarting cgconfig service: [ OK ]Starting docker: [ OK ]# docker versionClient version: 1.2.0Client API version: 1.14Go version (client): go1.3.3Git commit (client): fa7b24f/1.2.0OS/Arch (client): linux/amd642014/11/05 21:03:08 Cannot connect to the Docker daemon. Is docker -d running on this host?使用docker-d启动方式来查看详细的启动过程# docker -d2014/11/05 21:10:56 docker daemon: 1.2.0 fa7b24f/1.2.0; execdriver: native; graphdriver:[40a2dcc2] job serveapi(unix:///var/run/docker.sock)[info] Listening for HTTP on unix (/var/run/docker.sock)[40a2dcc2] job init_networkdriver()[40a2dcc2.init_networkdriver()] creating new bridge for docker0Could not find a free IP address range for interface docker0. Please configure its address manually and run docker -b docker0[40a2dcc2] -job init_networkdriver() ERR (1)2014/11/05 21:10:56 Could not find a free IP address range for interface docker0. Please configure its address manually and run docker -b docker0提示没有空余ip分配给docker0了。可以使用--bip参数来手工分配给ip地址。比如# docker --bip192.168.100.1/24 -d [2] 2388[rootiZ23pznlje4Z ~]# 2014/11/05 21:16:55 docker daemon: 1.2.0 fa7b24f/1.2.0; execdriver: native; graphdriver:[dc6906e7] job serveapi(unix:///var/run/docker.sock)[info] Listening for HTTP on unix (/var/run/docker.sock)[dc6906e7] job init_networkdriver()[dc6906e7] -job init_networkdriver() OK (0)2014/11/05 21:16:55 WARNING: Your kernel does not support cgroup swap limit.[info] Loading containers:[info] : done.[dc6906e7] job acceptconnections()[dc6906e7] -job acceptconnections() OK (0)仍然有警告Your kernel does not support cgroup swap limit。使用lxc-checkconfig进行检查# lxc-checkconfigKernel configuration not found at /proc/config.gz; searchinghttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...Kernel configuration found at /boot/config-3.10.59-1.el6.elrepo.x86_64--- Namespaces ---Namespaces: enabledUtsname namespace: enabledIpc namespace: enabledPid namespace: enabledUser namespace: missingNetwork namespace: enabledMultiple /dev/pts instances: enabled--- Control groups ---Cgroup: enabledCgroup clone_children flag: enabledCgroup device: enabledCgroup sched: enabledCgroup cpu account: enabledCgroup memory controller: enabledCgroup cpuset: enabled--- Misc ---Veth pair device: enabledMacvlan: enabledVlan: enabledFile capabilities: enabledNote : Before booting a new kernel you can check its configurationusage : CONFIG/path/to/config /usr/bin/lxc-checkconfig可以看到Control groups项目在内核是支持的所以可以暂时忽略这个告警。4.测试使用首先下载ubuntu镜像。这里使用Dockerpool官方网站的标准ubuntu镜像来进行测试。下载镜像重新标记镜像# docker pull dl.dockerpool.com:5000/ubuntu:14.04# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEdl.dockerpool.com:5000/ubuntu latest 5506de2b643b 12 days ago 197.8 MB# docker tag 550 ubuntu# docker rmi dl.dockerpool.com:5000/ubuntu[dc6906e7] job image_delete(dl.dockerpool.com:5000/ubuntu)[dc6906e7] job log(untag 5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5 )[dc6906e7] -job log(untag 5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5 ) OK (0)[dc6906e7] -job image_delete(dl.dockerpool.com:5000/ubuntu) OK (0)Untagged: dl.dockerpool.com:5000/ubuntu:latest利用刚下载的镜像启动一个容器并测试网络# docker run -ti ubunturoot66ff9a55a4f5:/# ping www.dockerpool.comPING www.dockerpool.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.^C64 bytes from 203.195.193.251: icmp_seq1 ttl47 time31.4 ms

相关文章:

Docker技术入门与实战【3.0】

第15章 构建Docker容器集群对Docker不熟悉的读者在生产环境中使用Docker的过程中,往往会碰到构建集群的需求。这里最核心的问题就是让不同主机中的Docker容器可以互相访问。 本章将介绍几种解决方案,包括利用端口映射实现容器之间的快速互联,…...

终极指南:超级个体时代,如何用Agent实现百倍效率

终极指南:超级个体时代,如何用Agent实现百倍效率1. 引入与连接:从「短剧单月流水破百万的1人团队」说起 1.1 开场故事:那个“10天攒10部短剧,单月变现97万”的博主 你最近在抖音、快手或者YouTube Shorts上刷到过这类“…...

Stencil计算原理与CharmStencil高性能实践

1. Stencil计算基础与挑战Stencil计算(模板计算)是科学计算中的一种核心模式,其本质是通过局部邻域操作来更新网格数据。想象一下Photoshop中的模糊滤镜——每个像素的新值由其周围像素的加权平均决定,这就是典型的Stencil操作。在…...

每天一个小技能——GitHub入门

GitHub简介 什么是GitHub及其核心功能 GitHub 基于 Git 的代码托管 协作开发平台。程序员的 “云端代码网盘 协作工作台 项目社区”。 核心功能 代码托管:把项目代码存在云端版本管理:记录每一次修改,可回滚、可对比团队协作&#xf…...

DeFi交易客户端开发指南:从协议抽象到套利监控实战

1. 项目概述:一个面向加密货币交易的开源客户端如果你在GitHub上搜索过加密货币相关的自动化交易工具,大概率会看到过各式各样的“client”或“bot”。今天要拆解的这个项目——messyvirgo-coin/messyvirgo-openclaw-client,从名字上就透着一…...

【基于 PyQt5 + PaddleOCR 的工业视觉型号检测系统开发】

目录 系统功能 技术栈 系统架构 1.硬件配置 2.软件架构 核心库安装 项目整体逻辑 完整代码逐段解析 模块1:导入所需库 模块2:辅助函数 2.1 定期释放USB摄像头资源 2.2 命令行参数设置 2.3 报警器控制指令 2.4 控制报警器 2.5 筛选列表中出…...

从芯片选型到PCB布局:手把手教你设计基于GS12170的SDI/HDMI转换板(避坑指南)

从芯片选型到PCB布局:手把手教你设计基于GS12170的SDI/HDMI转换板(避坑指南) 在音视频设备开发领域,SDI与HDMI信号转换一直是专业级应用的核心需求。无论是演播室设备、医疗影像系统还是广电级监控解决方案,都需要稳定…...

DenseGRPO:流匹配模型的密集奖励强化学习框架

1. 项目概述DenseGRPO是一种创新的强化学习框架,专门用于优化流匹配模型(如文本到图像生成系统)的对齐过程。传统强化学习方法在训练这类生成模型时面临一个根本性挑战:稀疏奖励问题。具体表现为仅在生成过程结束时提供单一反馈信…...

如何分析对象依赖关系_DBA_DEPENDENCIES防止删表导致视图失效

查DBA_DEPENDENCIES需DBA或SELECT_CATALOG_ROLE权限,否则应使用ALL_DEPENDENCIES并注意OWNER和NAME大小写;删表前重点查REFERENCED_TYPE为VIEW等的依赖,而非双向关系;动态SQL、JOB、APEX等隐式引用不会被捕获。查 DBA_DEPENDENCIE…...

避坑指南:在OpenHarmony上玩转Modbus RTU,RS-485接线和libmodbus配置那些事儿

OpenHarmony工业互联实战:RS-485硬件连接与libmodbus配置避坑手册 当温控器的数据突然跳变,当电表读数出现异常抖动,很多工程师的第一反应往往是检查代码逻辑——但真正的陷阱可能藏在那些被忽略的物理细节中。在工业现场,RS-485总…...

基于Ollama的本地大模型开发:handy-llama工具包详解与应用实践

1. 项目概述:一个让Ollama“听话”的本地AI工具箱如果你最近也在折腾本地大模型,大概率听说过Ollama。它确实是个好东西,一条命令就能把Llama、Qwen、Gemma这些主流模型拉到本地跑起来,对开发者来说门槛降低了不少。但用久了你会发…...

信息看了很多,判断力没有变——这才是真正的问题

最近每天早上我的 AgentOS 都会做一件事:把前一天的信息流,变成一套可以迁移的判断模型。 不是写文章。不是做总结。是让今天的新闻、案例、信号,真正改变我以后面对同类问题时的判断方式。 这件事叫知识合成。 它很重要,但以前几…...

超越点灯:用ESP32的10个触摸引脚和PWM函数做个智能调光台灯(附完整代码)

超越点灯:用ESP32的10个触摸引脚和PWM函数做个智能调光台灯(附完整代码) 引言 还记得小时候第一次按下台灯开关时那种"掌控光明"的兴奋感吗?如今,我们可以用一块比硬币还小的ESP32开发板,重新定义…...

D3KeyHelper终极指南:暗黑3图形化按键助手10分钟快速上手

D3KeyHelper终极指南:暗黑3图形化按键助手10分钟快速上手 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款专为暗黑破坏…...

动态切换标题图片的顶部边距:基于导航栏状态的 CSS 样式控制

本文介绍如何通过 JavaScript 动态检测导航栏是否启用 navbar-fixed 类,并据此为 .title-img 元素添加或移除 margin-top: 20%,实现响应式布局适配。核心在于精准监听类名变化并执行样式切换,避免硬编码与冗余逻辑。 本文介绍如何通过 j…...

《全域数学:华夏术数文明公理升维大系》

《全域数学:华夏术数文明公理升维大系》【全书完整出版级目录|唯一底层公理:全域数学】作者:乖乖数学 体系归属:算法联盟ROOT全域数学公理体系 著作定位:华夏五千年术数第一次彻底公理化、数学化、物理场论…...

告别轮询!用STM32F103的TIM+DMA搞定DHT11,实测代码不到100行

极致精简:STM32F103的TIMDMA驱动DHT11实战指南 在嵌入式开发中,温湿度传感器DHT11的驱动实现常常让开发者头疼——官方提供的驱动代码往往臃肿复杂,不仅占用宝贵的Flash空间,还可能因为频繁的中断处理影响系统实时性。本文将展示如…...

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程

告别‘抓瞎’!用CAPL的RS232函数自动抓取MCU Log保姆级教程 每次测试结束后,面对MCU日志抓取这个重复性工作,你是否也感到疲惫不堪?特别是当遇到低概率复现的问题时,手动抓取日志不仅效率低下,还可能错过关…...

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程

AssetStudio完全实战:Unity资源提取与AssetBundle解包的终极教程 【免费下载链接】AssetStudio AssetStudio - Based on the archived Perfares AssetStudio, I continue Perfares work to keep AssetStudio up-to-date, with support for new Unity versions and a…...

Raspberry Pi Zero 2 W功耗优化与测试指南

1. Raspberry Pi Zero 2 W功耗深度测试:从满载到极致优化的完整指南 作为一名长期使用树莓派进行嵌入式开发的工程师,我一直对低功耗优化有着浓厚的兴趣。最近拿到Raspberry Pi Zero 2 W后,我决定系统地测试它的功耗表现,并探索各…...

Giga-snaP BGA适配器设计:解决高频信号与热膨胀挑战

1. Giga-snaP BGA SMT适配器设计解析在BGA封装测试领域,传统适配器面临三大核心挑战:热膨胀系数(CTE)不匹配导致的焊接失效、高密度互连带来的巨大插拔力、以及高频信号传输的完整性要求。Giga-snaP创新性地采用环氧树脂包覆成型技术,从根本上…...

如何高效管理RimWorld模组:终极模组管理器完全指南

如何高效管理RimWorld模组:终极模组管理器完全指南 【免费下载链接】RimSort RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed…...

AI代理与Jina工具实现智能网页抓取方案

1. 项目概述这个标题描述了一个相当有趣的AI应用场景:AI代理如何利用Jina的URL转Markdown工具,在KaibanJS框架中实现更智能化的网页抓取方案。作为一名长期从事自动化工具开发的工程师,我最近在实际项目中深度应用了这套技术栈,发…...

【末轮截稿、快速发表、SPIE出版】第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMCAIBDEA 2026)

第六届中国膜计算论坛暨2026年人工智能、大数据与电气自动化国际学术会议(CWMC&AIBDE 2026)拟定于2026年5月12-14日在中国重庆举行。本次会议由重庆城市科技学院主办,重庆城市科技学院人工智能与大数据学院、重庆城市科技学院电气工程与智…...

分片 vs 分布式:弹性与高可用性背后的数学原理

分片 vs. 分布式:弹性与高可用性背后的数学原理 Chris Smith July 14, 2025 原文链接 概率论(Probability theory)是数学中研究不确定性的分支。它帮助我们理解不同结果发生的可能性。在本文中,我们将考虑两种水平扩展数据库的替…...

2026年量子计算与人工智能国际学术会议(ICQCAI 2026)

2026 年量子计算与人工智能国际学术会议(ICQCAI 2026)将于 2026 年5月8 - 10日在北京举行。本次会议聚焦量子计算与人工智能的融合发展趋势,为全球学者、研究人员和行业专家搭建交流平台。近年来,量子计算与人工智能的融合成为科技…...

《Python空间数据处理》教材发布了

由我主编的《Python空间数据处理》教材正式上架京东! 书中案例对应的数据、代码和教学中使用的课件可以在GitHub进行下载。 欢迎需要的朋友选购,欢迎批评指正!!!谢谢大家的支持!...

JavaScript窗口大小调整resize事件的适配方案

应节流控制并精准判断尺寸变化:设定100–250ms时间阈值限制resize触发频率,缓存并比对window.innerWidth/innerHeight避免无意义执行;局部变化优先用ResizeObserver;组件卸载时务必清除监听器防内存泄漏。监听窗口大小变化时&…...

设备维护系统功能拆解:它能解决哪些设备维护难题?

在现代工业生产中,高效的设备维护是企业生存的根本,但传统模式常面临响应慢、记录乱的困境,而数字化的设备维护系统正是解决这些难题的利器。以简道云为例,作为国内领先的零代码平台,它允许企业像搭积木一样快速搭建专…...

构建有益AI:价值对齐与工程实践框架

1. 项目概述"Building a Beneficial AI"这个标题背后蕴含着人工智能领域最前沿也最具挑战性的研究方向——如何确保AI系统的发展真正造福人类社会。作为一名在AI安全领域工作多年的从业者,我见证了太多技术突破带来的双刃剑效应。今天我想分享的&#xff…...