首页 文章 精选 留言 我的

精选列表

搜索[容灾],共5837篇文章
优秀的个人博客,低调大师

OmniRoute 支持 Token 压缩、自动容灾,解锁 90 余个免费模型

OmniRoute,一个接口可以连接到290个模型上 我认为这是本周最有价值的一件事。 现在使用AI工具的人或多或少都会感到痛苦——Claude可以写文章但是价格昂贵,GPT便宜但是啰嗦,Gemini有上下文但是会突然出现一些奇怪的情况,国内的DeepSeek、Kimi、GLM也都各自有着自己的优势。为了解决这个问题,你需要创建很多个账户,并且管理好各种密钥和API格式。 OmniRoute 干的就是把所有的东西都整合到一起。 290家服务提供商、500个模型、Kimi、Claude、GPT、Gemini、GLM、DeepSeek、MiniMax都在里面。其中有九十多处是不需要收费的。只需要更换一个模型的名字就可以,其他的不用改动。当额度用完之后会自动切换到下一条,而token还可以被压缩在15%-95%之间。 ![](https://developer.qcloudimg.com/http-save/yehe-10642612/2ea83ffb428b7799142c417981de2e58.png) 原来的五张账号要分开使用,现在已经可以只用一个账号了,想用哪个就用哪个,并且还有免费的功能可以利用。 适合的人群为:开发者、使用AI的应用者、被API账单吓到的人、想要尝试其他模型但是又不想费时间去研究的人。 --- github地址:DiegosouzaPw/omniroute ![OmniRoute Dashboard](https://developer.qcloudimg.com/http-save/yehe-10642612/c59fb6cf410cc6d79b2afdf811b03844.png) 手动拼凑各家免费额度十分煎熬:要对接数十套开发工具包、应对各不相同的调用限流,还无法清晰掌握实际可用余量。OmniRoute 汇总 43 个服务商资源池、共计 516 个模型已公开的免费调用额度,统一核算出真实可用总量,并在控制面板实时展示(路径:`/dashboard/free-tiers`)。 ![](https://developer.qcloudimg.com/http-save/yehe-10642612/49045c1e46ae57da6497604af64a96a2.png) 这是后台 `/dashboard/free-tiers` 实时页面的动画演示摘要。完整计算规则(资源池去重、额度分级、服务商协议约束)详见文档路径:`docs/reference/FREE_TIERS.md`。 相关数据每两周对照线上模型目录重新核验,数值会双向变动:服务商下线免费套餐,总量随之下降;新增免费资源,总量相应上涨。我们直接输出目录实时运算得出的真实数值,绝不采用向上取整的乐观预估数据。 ![](https://developer.qcloudimg.com/http-save/yehe-10642612/ff3277e8b85b1d41143579eeff626eaa.png)

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

远洋邮轮灾后排风系统防火风闸控制逻辑与失电工况可靠性分析

### 邮轮通风系统的安全使命 邮轮舱室多、人员密度大、逃生路线长,火灾烟气的蔓延增加了疏散的难度,控制火灾烟气是降低邮轮火灾危害的重要手段之一。通风系统不仅承担常规的空气调节功能,更在火灾等紧急情况下承担排烟、排毒的关键安全任务。根据国际海上人命安全公约的要求,载客超过36人的船舶,其动力通风系统需满足严格的消防安全规范。 ### 控制装置的设置要求 在机器处所,动力通风的控制装置应集中布置,使其可从两个位置操作,其中一个应位于该处所外部。控制装置应位于所服务的处所外部,以便在发生火灾时不会被切断。在客船上,这些控制装置还应尽可能集中布置在少数几个位置,并确保从开敞甲板有安全通道。 ### 失电状态下的可靠性要求与实现逻辑 对于通风情况复杂的客船和邮轮,无论住舱还是机舱,都存在特殊区域和特殊要求。以机舱区域的发电机室为例,当船舶失电时,与燃烧风机连接的关闭风闸和防火风闸串联在通风管路中,须保证即使船舶失电状态下,防火风闸仍然保持打开状态。 从技术实现来看,一种典型的控制系统包括防火风闸、风机风闸控制柜、应急停止板、继电器和UPS电源。风机风闸控制柜分别与防火风闸、应急停止板和继电器电连接,防火风闸与继电器的常闭触点串联后与应急停止板串联。在用于向防火风闸供电的常规供电电源断电后,防火风闸在UPS电源的供电下继续供电,处于打开状态,除非发生火灾应急停止关闭防火风闸。 在系统冗余设计方面,有方案提出了船舶机舱通风气动防火风闸控制系统,包括两个冗余电源控制模块和两路气动防火风闸控制回路,每个冗余电源控制模块分别控制一路气动防火风闸控制回路。冗余电源控制模块用于实现双路电源供给、单路电源输出;当任意一路气动防火风闸控制回路的一路电源故障时,冗余电源控制模块自动切换至另一路电源供电,实现当船上失电或系统单点故障时的冗余可靠运行。 ### 智能化技术应用 现代事故风机系统正在向智能化方向演进。在系统架构层面,矩阵式变频器相比传统变频器具有体积小、效率高且输入电流谐波小的优势,适合在船舶有限空间内应用。在监测层面,智能监测系统包含振动、温度、湿度、电流等多参数传感器,采用工业以太网和5G混合组网确保实时性和可靠性。故障诊断方面,结合深度学习算法可实现故障的早期预警和精准定位,通过分析振动信号的时频特征提前预测轴承故障,智能维护系统相比传统定期维护可减少约30%的维护工作量。 ### 工程实践参考 在第二艘国产大型邮轮的建造过程中,调试团队完成了通风系统紧急连锁控制有效性验证、各类泵组安全切断功能实操测试、二氧化碳灭火系统联动逻辑校验等139项切断逻辑试验,聚焦机舱49项试验重点突破。这些实践表明,事故风机控制系统在邮轮安全体系中具有不可替代的地位。 从技术趋势来看,邮轮通风系统的智能化管理正在加速推进。排风支管的气体流速实时监测、主控模块根据流速自动调节通风百叶窗开度等技术手段,可在保证安全的前提下实现节能运行,避免无效排风。系统实现集中通风的智能化自动化管理后,无需人工监控,有助于降低人工维护成本。

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

K8s资源对象的基本管理之使用YAML文件的方式(升级、回滚、扩容、缩容)

由于K8s技术的火爆,导致现在大大小小的企业都在使用,虽然没有普及,但本人相信时迟早的事情,所以抓紧时间多学习一下吧! 在K8s中创建资源的方式有两种:命令行和YAML文件,本次博文主要介绍使用YAML文件的方式,如需使用命令行创建资源请参考K8s资源对象的基本管理 Kubernetes中的YAML文件与配置清单是一样的,根据个人习惯。本次博文统称为YAML文件! 一、YAML文件基础 YAML是专门用来配置文件的语言,非常简洁和强大。与了解的properties、XML、json等数据格式,习惯之后就会发现越来越好用。其实YAML就是结合了大部分的标记语言的特性,整合新开发的。 YAML文件的特点: 层次分明、结构清晰; 使用简单、上手容易; 功能强大、语义丰富;需要特别注意的是: 大小写敏感; 严格要求缩进; 二、YAML文件使用 1)YAML文件的组成 Kubernetes中的YAML文件主要由五个一级字段组成,分别是: apiVersion:api版本信息; kind:指定创建资源对象的类型; metadata:元数据内部的嵌套字段,定义了资源对象的名称、名称空间等; spec:规范定义资源应该拥有什么样的特性,依靠控制器确保性能可以满足,满足用户期望的状态。 status:显示资源的当前状态,K8s就是确保当前状态向目标状态无限靠近从而满足用户期望。代表资源当前的状态; 2)获取编写YAML文件的帮助 虽然知道了YAML文件中的一级字段都是什么,但是还是不知道应该怎么写。可以借助以下命令来获取一些帮助信息。 [root@master ~]# kubectl api-versions //获取当前集群支持的 apiserver版本 [root@master ~]# kubectl api-resources //获取全部的api资源对象 [root@master ~]# kubectl explain deployment //查看k8s某个对象的配置清单格式,应该包含哪些字段及使用方法 [root@master ~]# kubectl explain deployment.spec //这个命令是非常重要的,它可以一级一级来获取帮助 3)YAML文件的基本格式 [root@master ~]# cat web.yaml kind: Deployment //指定要创建的资源对象 apiVersion: extensions/v1beta1 //指定deployment所对应的API版本信息 metadata: name: web //定义deployment的名称 spec: replicas: 2 //指定副本数量 template: metadata: labels: //指定pod的标签 app: web_server spec: containers: - name: nginx //指定pod运行的容器的名称 image: nginx //指定运行容器所需的镜像 4)apply创建或更新 [root@master ~]# kubectl apply -f web.yaml //使用“-f”来指定yaml文件,根据yaml文件中定义的内容生成所需的资源 apply可以指定多次,如果发现文件不同,则更新 5)delete删除 [root@master ~]# kubectl delete -f web.yaml //删除yaml文件中定义的资源 6)验证 [root@master ~]# kubectl get deployments. web //查看web控制器所产生的pod NAME READY UP-TO-DATE AVAILABLE AGE web 2/2 2 2 5m50s [root@master ~]# kubectl describe deployments. web //查看web控制器的详细信息 返回的结果如下: 这样一来,Kubernetes已经根据YAML文件生成了我们所需的pod资源! [root@master ~]# kubectl get pod -o wide //查看pod的详细信息 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES web-d6ff6c799-7jtvd 1/1 Running 0 17m 10.244.2.2 node02 <none> <none> web-d6ff6c799-7tpdc 1/1 Running 0 17m 10.244.1.2 node01 <none> <none> K8s集群内部测试访问: 三、创建YAML文件使K8s中pod的服务能够被外部访问 [root@master ~]# cat web-svc.yaml kind: Service apiVersion: v1 metadata: name: web-svc spec: type: NodePort //指定类型为NodePort,可以让外部访问,否则默认情况下是cluster IP,仅限集群内部访问 selector: app: web_server //必须与deployment资源对象的标签进行关联 ports: - protocol: TCP port: 80 //指定要映射到的Cluster IP的端口 targetPort: 80 //指定的是要映射pod中的端口 nodePort: 31000 //指定映射到宿主机的端口,范围是30000~32767 [root@master ~]# kubectl apply -f web-svc.yaml //生成service的控制文件(yaml中已经定义其名称为web-svc) [root@master ~]# kubectl get svc web-svc //查看service控制器 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web-svc NodePort 10.99.32.22 <none> 80:31000/TCP 12m //TYPE:为NodePort,可以使外部访问; //PORT:映射出的端口与我们定义的一样 测试访问: 注意:是访问群集中任意节点都可以访问k8s集群中pod所提供的服务! 四、底层负载均衡实现原理 [root@master ~]# kubectl describe svc web-svc //查看service的详细信息 返回的信息如下:既然说到,Endpoints指定的是后端pod的IP地址,那么下面进行验证: [root@master ~]# kubectl get pod -o wide | awk '{print $6}' //提取后端pod的IP地址 IP 10.244.2.2 10.244.1.2 //与上述查询的结果一样! 我们知道service是有负载均衡的能力,那么是怎么实现的? 其实,背后的原理并没有那么高大上,kube-proxy通过iptables的转发机制来实现负载均衡的效果的,先定义目标IP是service提供的群集IP,然后使用“-j”选项转发到其他iptables规则,接下来验证一下: [root@master ~]# kubectl get svc web-svc | awk '{print $3}' //首先查看service的群集IP地址 CLUSTER-IP 10.99.32.22 [root@master ~]# iptables-save | grep 10.99.32.22 //查看iptables规则中与群集IP地址相关的内容 -A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ -A KUBE-SERVICES -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7 从上述结果中可以看出,当目标地址是群集IP时,就会转发到KUBE-SVC-3RBUQ3B6P3MTQ3S7规则中 [root@master ~]# iptables-save | grep KUBE-SVC-3RBUQ3B6P3MTQ3S7 :KUBE-SVC-3RBUQ3B6P3MTQ3S7 - [0:0] -A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-svc:" -m tcp --dport 31000 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7 -A KUBE-SERVICES -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7 -A KUBE-SVC-3RBUQ3B6P3MTQ3S7 -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-E3SP5QDRAUFB55IC -A KUBE-SVC-3RBUQ3B6P3MTQ3S7 -j KUBE-SEP-3T3LUFAKMOTS5BKN //从查询结果中可以看出其负载均衡的效果,因为后端只创建了两个pod,所以其概率为0.5 由此可以看出service实现负载均衡的效果:默认情况下使用iptables规则,当然还可以使用其他的方法,这里就不介绍了! 查看负载均衡的详细信息需根据cluster ip为切入口! 实现负载均衡最根本的原理就是:iptables规则根据random(随机数)实现的负载均衡! 五、服务回滚到指定的版本 通过K8s资源对象的基本管理之使用命令行的方式可以了解到kubernetes版本升级、回滚的操作与docker swarm几乎是一样的。回滚操作只能回滚到上一个版本。 搭建私有仓库,使用镜像制作自定义镜像(三个版本),根据主页内容进行区分,将自定义镜像上传到私有仓库中,由于过于简单,过程略…… kubernetes还可以回滚到指定的版本,方法如下: [root@master yaml]# cat httpd01.deployment.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: httpd spec: revisionHistoryLimit: 10 //记录历史版本信息为10个 replicas: 3 template: metadata: labels: app: httpd-server spec: containers: - name: httpd image: 192.168.1.1:5000/httpd:v1 //三个版本根据镜像进行区分 ports: //这个只是一个声名没有任何作用 - containerPort: 80 [root@master yaml]# cat httpd02.deployment.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: httpd spec: revisionHistoryLimit: 10 replicas: 3 template: metadata: labels: app: httpd-server spec: containers: - name: httpd image: 192.168.1.1:5000/httpd:v2 //三个版本根据镜像进行区分 ports: - containerPort: 80 [root@master yaml]# cat httpd03.deployment.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: httpd spec: revisionHistoryLimit: 10 replicas: 3 template: metadata: labels: app: httpd-server spec: containers: - name: httpd image: 192.168.1.1:5000/httpd:v3 //三个版本根据镜像进行区分 ports: - containerPort: 80 [root@master yaml]# kubectl apply -f httpd01.deployment.yaml --record //--record的作用就是记录历史版本信息 [root@master yaml]# kubectl rollout history deployment httpd //查看历史的版本信息 deployment.extensions/httpd REVISION CHANGE-CAUSE 1 kubectl apply --filename=httpd01.deployment.yaml --record=true //1,表示版本对应的编号,也可以看出其对应的yaml [root@master yaml]# kubectl apply -f httpd02.deployment.yaml --record [root@master yaml]# kubectl apply -f httpd03.deployment.yaml --record //根据yaml文件进行两次升级 [root@master yaml]# kubectl rollout history deployment httpd deployment.extensions/httpd REVISION CHANGE-CAUSE 1 kubectl apply --filename=httpd01.deployment.yaml --record=true 2 kubectl apply --filename=httpd02.deployment.yaml --record=true 3 kubectl apply --filename=httpd03.deployment.yaml --record=true //确认升级的版本信息已经记录 [root@master yaml]# vim httpd-svc.yaml kind: Service apiVersion: v1 metadata: name: httpd-svc spec: type: NodePort selector: app: httpd-server ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 31000 [root@master yaml]# kubectl apply -f httpd-svc.yaml //创建一个svc便于访问测试 [root@master yaml]# curl 127.0.0.1:31000 <h1>hello lvzhenjiang:v3</h1> //访问测试页面效果 [root@master yaml]# kubectl rollout undo deployment httpd --to-revision=1 //回滚到版本1,使用--to-revision=1表示,1表示查看历史版本的第一列编号 [root@master yaml]# curl 127.0.0.1:31000 //测试访问 <h1>hello lvzhenjiang:v1</h1> 六、用label控制pod的位置 如果不指定pod的位置的话,默认情况下,是由K8s中scheduler这个组件来完成的,不能人为的干预。如果是业务需要手动指定的话,那么就需要以下方法: [root@master yaml]# kubectl label nodes node02 disk=ssd //手动给node02打上一个 disk=ssd的标签 [root@master yaml]# kubectl get nodes --show-labels | grep disk=ssd //查看集群中各个节点的标签(包含disk=ssd) node02 Ready <none> 5d22h v1.15.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node02,kubernetes.io/os=linux //从结果中可以可看出只有node02包含这个标签 [root@master yaml]# vim httpd.yaml kind: Deployment apiVersion: extensions/v1beta1 metadata: name: httpd spec: revisionHistoryLimit: 10 replicas: 3 template: metadata: labels: app: httpd-server spec: containers: - name: httpd image: 192.168.1.1:5000/httpd:v1 ports: - containerPort: 80 nodeSelector: //指定标签选择器 disk: ssd [root@master yaml]# kubectl apply -f httpd.yaml //根据yaml文件生成所需的pod资源 [root@master yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES httpd-5895f5548b-6lb97 1/1 Running 0 12s 10.244.2.8 node02 <none> <none> httpd-5895f5548b-gh8br 1/1 Running 0 10s 10.244.2.10 node02 <none> <none> httpd-5895f5548b-llxh7 1/1 Running 0 12s 10.244.2.9 node02 <none> <none> //从查询结果中可以看出三个pod资源都运行在node02节点上 上述需求已经实现,但是只要有人为干预的地方就会错误的产生,不得不考虑以下这种情况!倘若将node02的标签进行删除的话,看一下会发生什么情况! [root@master yaml]# kubectl label nodes node02 disk- //将node02的disk=ssd的标签进行删除 [root@master yaml]# kubectl get nodes --show-labels | grep disk=ssd //验证,标签已经被删除 [root@master yaml]# kubectl delete -f httpd.yaml //将原本的pod资源进行删除 [root@master yaml]# kubectl apply -f httpd.yaml //重新生成pod资源(yaml文件中依然指定了标签) [root@master yaml]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES httpd-5895f5548b-7w26q 0/1 Pending 0 65s <none> <none> <none> <none> httpd-5895f5548b-c6p6s 0/1 Pending 0 65s <none> <none> <none> <none> httpd-5895f5548b-v4s5c 0/1 Pending 0 65s <none> <none> <none> <none> //但是查看pod的状态为Pending,显然这种状态的pod是不正常的 即使标签的不存在的,yaml文件中也指定了标签,创建pod资源时,不会出现错误,但是pod的状态为Pending(等待的状态),解决方法如下: [root@master yaml]# kubectl describe pod httpd-5895f5548b-7w26q //查看pod的详细信息 返回的结果如下: 从结果中就已经看出了是因为标签选择器与集群中node的标签不匹配导致的! 如果以上没有发现错误的信息,还需进行以下操作: [root@master yaml]# kubectl logs -n kube-system kube-scheduler-master //查看你scheduler组件所产生的日志信息 [root@master yaml]# less /var/log/messages | grep kubelet //查看系统日志中包含kubelet组件的信息 //因为kubelet是负责管理pod的 有关K8s的详细介绍还是建议参考K8s中文文档 ————————本文到此为止,感谢阅读————————

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

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

用户登录
用户注册