首页 文章 精选 留言 我的

精选列表

搜索[内核任意读写],共10000篇文章
优秀的个人博客,低调大师

为Kubernetes中任意应用添加基于oauth2的认证保护 (上)

企业随着业务的发展,必然会部署各种各样的IT系统。出于安全性的考虑,一些系统仅可企业内部使用,甚至仅开放给企业部分部门员工使用。 这些IT系统大致可分为两类, 系统本身不支持任何认证机制,例如资讯或文档类系统。需要增加认证保护,能够限制非企业员工访问即可。系统运维通常的做法是,为站点设置HTTP Basic认证保护。由于HTTP Basic认证是通过预设的用户、密码认证,认证信息比较容易泄露。即使定期更换密码,但需要额外的机制通知用户密码的变更,用户体验也不好。 系统自身支持认证,甚至支持多种认证机制。比如最常用的开源CI/CD工具,Jenkins内置支持本地数据库认证、通过插件支持多种第三方系统集成认证。如果大量的IT系统都有一套独立的用户管理,随着企业的员工的变更,用户的增删等操作对系统管理员来说是不小的工作量。同时,也很容易由于人为疏忽,造成资产、数据的安全隐患。 假设企业自身已经有了一套OA系统包含员工、组织结构管理,例如,国内目前最为普及流行的钉钉或企业微信。我们完全可以提供一套基于oauth 2.0协议的认证方式,让以上两类IT系统使用企业已有的OA系统(钉钉或企业微信)来实现登录认证。做到这一点后,企业无论有多少IT系统都不再需要额外管理用户的成本,并且也避免了数据安全隐患。 钉钉通过钉钉开放平台提供的API开放了许多钉钉内部的能力,例如,身份验证、通讯录管理等等。然而钉钉的三方网站登录接口并不是标准的oauth 2.0协议实现,我们需要通过一个oauth2 proxy代理工具实现将钉钉的三方网站登录兼容oauth2协议。同理,使用这个oauth2代理工具,可以使用Google、Facebook等三方网站作为统一认证方式。 有了基于钉钉的oauth2代理作为企业统一登录方式,对于上面两大类系统的认证需求解决方案分别如下, 部署在Kubernetes中无内置认证机制的Web应用,通过nginx-ingress的外部OAUTH认证实现基于oauth2的安全认证。 Jenkins可以通过反向代理插件实现使用oauth2认证登录。 在下篇中,我们将图文详解如何一步步实现为一个无认证的企业文档Web应用添加基于钉钉的统一认证。

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

c语言:输入任意10个正整数,按照升序排序输出:(冒泡算法)

C语言永远不会过时 其实学编程关键是学习其思想,如果你精通了一门,再去学其他的时候也很容易上手。C不会过时的,尤其是在unix、linux操作平台上,学好C是必须的。 C跟C++在很多方面也是兼容的,c是c++的基础。 再者c能从很大的程度上帮你了解计算机的发展史,数据结构等方面的知识,很多软件、甚至操作系统中的很大部分是用c来实现的。 还有一些电器芯片的程序,比如电冰箱内制冷系统……可以说用c可以解决一切可能遇到的问题,关键是你要能精通它。 所以放开手脚去大胆的学吧,c永远不会过时 小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程 源代码: #include<stdio.h> void main() { int a[10]; int i,m,n; printf("请输入10个正整数:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(m=0;m<9;m++) /*进行9次循环 实现9趟比较*/ for(i=0;i<9-m;i++) /*在每一趟中进行9-m次比较*/ if(a[i]>a[i+1]) /*相邻两个数比较*/ { n=a[i]; a[i]=a[i+1]; a[i+1]=n; } printf("升序排列结果为:\n"); for(i=0;i<10;i++) printf(" %d",a[i]); printf("\n"); }

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

小米手机藏后门可远程安装任意APP?真相如此惊悚吗?

这个乡村爱情故事可能和今天要说的事情有点关系。 你可能已经习惯了这个场景——新手机会预装一些APP,怎么删都删不掉。但是,手机制造商将这些APP和服务安装在你手机上是否会有特别的目的?这些预装的应用又是否会威胁到机主的安全和隐私? 荷兰的一位小伙对此就颇有疑问。 他是小米4的用户。小伙有一天发现,手机预装了一个叫 AnalyticsCore.apk(com.miui.analytics)的应用,会自动在后台运行。 小伙很生气,他不喜欢未经许可收集用户信息的应用,因此对它进行了逆向工程,发现该应用每24小时会访问小米官方服务器检查更新,在发送请求时它会同时发送设备的识别信息,包括手机的IMEI、型号、MAC地址、Nonce、包名字和签名。如果服务器上有名叫Analytics.apk的更新应用,它会自动下载和安装,整个过程无需用户

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

Android下拖动任意View代码(使用属性动画,眼前一亮)

mLocalFrameLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLocalX = mLocalFrameLayout.getX() - event.getRawX(); mLocalY = mLocalFrameLayout.getY() - event.getRawY(); break; case MotionEvent.ACTION_MOVE: mLocalFrameLayout.animate() .x(event.getRawX() + mLocalX) .y(event.getRawY() + mLocalY) .setDuration(0) .start(); break; default: return false; } return true; } });

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

腾讯云Agent Memory技术内核剖析

Gartner于2024年10月发布的2025年顶级战略技术趋势报告,将"代理型AI(Agentic AI)"列为首要趋势,指出其融合记忆、规划、环境感知、工具使用与安全准则等功能,能够自主执行任务并达成目标。Gartner预测,到2028年至少15%的日常工作决策将通过自主智能代理完成,而2024年该比例仅为0%。与此同时,Markets and Markets预测全球AI Agent市场规模将从2024年的51亿美元增至2030年的471亿美元,年复合增长率达44.8%。爱分析测算进一步显示,中国智能体记忆市场规模将从2025年的14.4亿元激增至2030年的642.5亿元,复合增长率超过110%。

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

深入工作流调度的内核

在大数据时代,工作流任务调度系统成为了数据处理和业务流程管理的核心组件,在大数据平台的构建和开发过程中尤为重要。随着数据量的激增和业务需求的多样化,合理的任务调度不仅能够提高资源利用率,还能保证业务流程的稳定和高效运行。本文将结合实际场景,探讨目前市面上常见的工作流任务调度及其关键特性。 一、工作流任务调度的定义 工作流任务调度是什么?简单来说,它是指在特定的时间点或条件下,根据预设的规则和依赖关系,自动触发并执行一系列任务的过程。它通常涉及多个任务之间的依赖关系,需要确保这些任务按照正确的顺序和时机执行。 工作流调度主要涉及两个关键概念:作业计划(Job Plan)和任务实例(Task Instance) 。 作业计划 是指预定的任务执行策略,包括何时执行、依赖关系以及执行条件等。而任务实例则是指在具体时间点上执行的任务。在工作流调度中,任务实例的生成通常基于作业计划,通过对作业的依赖关系进行解析,确保作业按照预期顺序和时间执行。 二、常见的工作流任务调度系统 市面上常见的工作流调度可以分为两个大类:定时分片类作业调度系统 和DAG工作流类作业调度系统。 1. 定时分片类调度系统 这种调度系统通常用于定时任务的分片执行。其代表系统如TBSchedule、SchedulerX和Elastic-job等。主要特性包括: 任务分片:将大任务拆分为多个小任务,分配到不同的服务器上并发执行。这不仅提高了处理效率,也能实现负载均衡。 精确定时:要求任务在指定时间点精确触发,以确保业务流程的及时性。例如,定时清理日志文件、定时生成报表等。 在工作流任务调度系统的架构设计中,负载均衡、弹性扩容、状态同步和失效转移是重点考虑的特性。由于支持分片逻辑和失效转移,调度系统对任务通常有侵入性要求,用户作业需要依赖客户端库函数,并实现接口以满足服务端管理需求。为了确保精确定时触发,大部分系统的触发逻辑由执行节点本地处理,减少服务端负载,并提高触发的精度与效率。部分系统如SchedulerX则采用服务端触发逻辑,这要求服务端具备高可用性和良好性能,通常需要集群方案以支持触发队列的维护。 2. DAG工作流类调度系统 DAG全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。 这种系统主要关注任务之间的依赖关系,代表系统有Apache DolphinScheduler、Oozie、Azkaban和Zeus等。其核心特性包括: 依赖管理:支持复杂的任务依赖关系,确保任务在满足前置条件时自动触发。例如,数据清洗任务在数据采集成功后才能执行。 灵活的触发机制:支持时间触发、依赖触发等多种方式,满足不同业务场景的需求。 根据具体任务的执行方式,DAG工作流调度系统可分为两种类型:静态执行列表和动态执行列表。 总的来说,静态执行列表通过提前计算生成任务执行实例,适合处理已知的、周期性任务变更,便于进行临时修改和管理。 而动态执行列表则在任务执行时实时计算实例,更适应于复杂的依赖关系和临时变更,但对计划和实例间的同步管理要求较高。静态方案架构简单,适合任务依赖清晰的场景;动态方案覆盖面广,响应变更及时,但实现复杂。在实际应用中,两者可结合使用,以解决各自的局限性。 三、工作流任务调度的关键特性 1. 任务依赖管理 在实际应用中,任务之间往往存在复杂的依赖关系。有效的任务调度系统能够动态管理这些依赖,确保任务按照预定顺序执行,避免因依赖关系不正确导致的执行失败。 2. 高可用性 高可用性是保证系统稳定运行的关键特性。调度系统需要具备故障自动恢复能力,确保在节点崩溃或网络故障时,任务能够自动迁移并继续执行。 3. 监控与报警 有效的监控机制能够及时反馈任务的执行状态。一旦出现故障或超时,系统应能够及时发出警报,以便运维人员快速响应和处理。 4. 灵活的任务配置 用户在定义工作流时,需提供灵活的任务配置选项,包括任务的执行频率、执行条件和执行参数等。便捷的配置方式可以降低用户的操作成本,提高工作效率。 四、工作流任务调度的应用场景 数据处理:在数据采集、清洗和分析过程中,任务调度系统可以确保各个环节有序进行,确保数据的准确性和及时性。 报告生成:定期生成报表的任务可以通过调度系统自动化执行,减少人工干预,提高效率。 监控与维护:定时检查系统状态、清理无用数据等维护任务也可通过调度系统来实现。 在实际应用中,定时分片类调度系统适合执行简单的、周期性任务,例如定时数据备份、报告生成等。这些任务通常具有明确的执行时间和较低的复杂性。 相对而言,DAG工作流类调度系统则更适合处理复杂的数据流水线。 例如,在大数据分析平台中,从数据采集到最终报告生成,往往需要多个作业相互依赖执行。这类系统能够灵活应对任务变更和调度策略调整,提高数据处理的效率和可靠性。 五、常见的工作流调度工具 市场上有多种开源和商业化的工作流调度工具,每种工具都有其独特的优势和适用场景。以下是一些常见的工作流调度系统: Apache DolphinScheduler:专注于提供灵活的任务调度和管理,支持复杂的任务依赖关系,能够高效处理大规模数据处理工作流。DolphinScheduler的可视化界面和丰富的插件机制,使得用户可以方便地定义、调度和监控工作流。此外,DolphinScheduler的分布式架构保证了高可用性和扩展性,适合企业在多种场景下的应用,如数据ETL、报表生成和定期任务调度等。 Apache Oozie:基于Hadoop的工作流调度系统,支持复杂的依赖关系和多种作业类型(如MapReduce、Pig、Hive等)。Oozie使用XML定义工作流,适合需要处理大规模数据的环境。 <!-- --> Azkaban:由LinkedIn开发,专注于简化复杂工作流的管理。Azkaban使用.job文件描述作业的依赖关系,提供了用户友好的Web界面。 Chronos:一个分布式的任务调度器,支持Cron语法的定时任务和依赖关系。Chronos更适合对实时性要求较高的任务调度。 Airflow:由Airbnb开发,强调动态工作流的定义和可视化管理,支持Python作为定义语言,适合需要灵活调度的场景。 六、技术选型怎么做? 市面上的作业调度系统这么多,那么在对工作流任务调度系统进行技术选型时,企业主要需要考虑到哪些因素呢? 通过对众多企业在进行作业调度系统选型的观察,我们了解到企业一般会比较在意调度系统的以下问题: 可扩展性:系统能否随着数据量和任务复杂度的增加而水平扩展。 可靠性:系统的容错能力和高可用性,确保任务执行的稳定性。 性能:任务调度和执行的效率,包括延迟和吞吐量。 易用性:用户界面友好程度、配置和管理的便利性。 集成能力:与现有系统和工具(如数据源、消息队列等)的兼容性和集成能力。 监控与告警:是否提供实时监控、日志记录和告警机制,便于运维管理。 社区与支持:是否有活跃的社区和专业支持,确保问题能够及时解决。 安全性:数据加密、用户权限管理等安全措施的有效性。 成本:总体拥有成本,包括软件许可、基础设施和维护费用。 灵活性:支持多种调度策略、工作流定义和任务类型的能力。 以上这些方面做得比较好的话,企业在进行技术选型时基本上就不会有什么悬念。当然,除了以上因素,企业还应该结合自己的具体应用场景,选择适合自己的调度产品。 这里是目前市面上主流的调度系统优劣势对比图: 结论 随着业务流程的复杂化和数据规模的不断扩大,工作流任务调度系统的重要性愈发突出。选择合适的调度系统不仅能够提升任务处理效率,还能为企业带来更大的灵活性和竞争力。在实际应用中,企业应根据自身的业务需求和场景特点,选择合适的任务调度方案,以实现高效的工作流管理。 本文由 白鲸开源科技 提供发布支持!

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

range内核端口数据转发模块

NGINX 向云原生演进,All inOpenNJet range 端口转发模块 1.1 需求 在很多时候,比如流量劫持、ftp被动模式代理等功能需要能够支持流量端口转发。比如需要将10000到11000端口范围的所有流量都统一转到12000端口上,然后在12000端口上接收所有的报文进行后续处理。 1.2 依赖 该功能的实现依赖于iptables,如果通过rpm包安装,则自动为privilege进程为root启动 如果是普通用户启动,需要对opennjet设置setuid权限 setcap cap_setuid=eip /home/njet/sbin/njet 1.3 指令设计 Syntax range type={tcp|udp} src_ports={port1:port2} dst_port={dst_port}; 如果默认iptables path为/usr/sbin/iptables, 如果系统iptables路径不是这个,需要指定使用如下指令 range iptables_path={iptables_path}; Default - Context Core, 支持配置多条 参数说明: 参数 类型 必填 默认值 说明 type string 否 tcp [tcp|udp], 指明是tcp还是udp数据,默认tcp src_ports string 是 - 支持单端口或者端口范围,格式如下: 端口范围(冒号分隔): 11000:12000 一个端口: 11000 dst_port int 是 - 目标端口 iptables_path string 否 /usr/sbin/iptables 这个根据系统而定,调用system执行的时候可能会出现找不到iptables错误,这个时候需要看看对应系统的iptables path,然后设置一下这个参数 如果配置多条range指令,则以最后一个明确指定的iptables_path为准 配置示例(tcp为例): 将发往本机端口为11000到12000范围的数据,转发到13000端口: range type=tcp src_ports=11000:12000 dst_port=13000 将发往本机端口为11000,转发到13000端口: range type=tcp src_ports=11000 dst_port=13000 设置iptables path为/usr/sbin/iptables range iptables_path=/usr/sbin/iptables; 1.4 实现方案 本功能的实现借助于iptables规则,通过range指令解析参数,然后生成对应的iptables规则下发。 range指令支持配置多条规则 模块init的时候会根据规则生成iptables规则 模块exit的时候会将规则进行删除 所有的规则都会放到自定义iptables链 OPENNJET上 1.5 测试 1.5.1 配置示例 njet.conf 配置里配置两条range指令 ... load_module modules/njt_range_module.so; #加载range模块... user nobody; events { worker_connections 1024; } error_log logs/error_privilege.log info;#配置两条range指令range type=tcp src_ports=11000:12000 dst_port=13000;range type=tcp src_ports=10000 dst_port=14000;#默认路径为/usr/sbin/iptables, 如果系统路径不一致需要调用该指令设置下路径range iptables_path=/usr/sbin/iptables;http { access_log logs/access_privilege.log combined; include mime.types; server { ... } } cluster_name helper; node_name node1; 1.5.2 测试结果 启动OpenNJet前 查询系统iptables 规则: 启动OpenNJet后 重新查询iptables规则,发现两条规则生效 reload重启后 重新查询,发现两条规则还在 停止OpenNJet后 重新查询,两条规则删除 2. 命令式 API动态配置端口转发规则 2.1 需求: 能够通过api接口查询全量的range 配置规则 能够通过api增加或者删除一条range配置规则 根据type、src_ports、dst_port三个字段来确定一条规则 2.2 配置 ctrl控制面配置: ...load_module modules/njt_http_range_api_module.so; #load range api module ... server { listen 8081; location /range { dyn_range_api; #配置range api开关 } } ... 2.3 动态API 查询: GET http://192.168.40.136:8081/range { "ranges": [ { "type": "tcp", "src_ports": "11000:12000", "dst_port": 10001 }, { "type": "tcp", "src_ports": "10000", "dst_port": 14000 } ] } PUT http://192.168.40.136:8081/range #添加一条规则 { "action": "add", "type": "tcp", "src_ports": "11000:13000", "dst_port": 10001 } #删除一条规则 { "action": "del", "type": "tcp", "src_ports": "11000:13000", "dst_port": 10001 } 参数 类型 必填 默认值 说明 action string 是 - [add|del] type string 是 - [tcp|udp], 指明是tcp还是udp数据 src_ports string 是 - 支持单端口或者端口范围,格式如下: 端口范围(冒号分隔): 11000:12000 一个端口: 11000 dst_port int 是 - 目标端口 return: { "code": 0, #0 表示成功, 非0 表示失败 "msg": "success" } 错误码 code msg 描述 0 success 成功 2 - 内存分配失败相关的一些错误信息 4 rule is not found 删除一个不存在的规则 4 rule has exist 添加一个已经存在的规则 4 其他错误 2.4 swagger访问 可以通过doc模块提供的swagger界面操作 http://192.168.40.136:8081/doc/swagger/ 2.5 测试 通过swagger页面进行api测试 初始状态get 查询配置 查询iptables 通过swagger页面添加一个规则 再次 查询配置和iptables reload后再次查询,动态添加的配置和iptables都存在刚才动态添加的配置 Stop OpenNJet后,iptables规则消失 OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。邮件组官网

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

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文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册