首页 文章 精选 留言 我的

精选列表

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

吃透 DolphinScheduler 负载均衡:3 大核心算法 + 底层逻辑全解析

本文将介绍 Apache DolphinScheduler 的 Worker 负载均衡,含加权随机、平滑轮询、线性负载(默认)三种算法,及配置修改、Worker 权重与预热机制,并细述各算法原理。详情可参考文末源文档地址。 负载均衡是什么? 负载均衡即通过路由算法(通常是集群环境),合理地分摊服务器压力,达到服务器性能的最大优化。 DolphinScheduler-Worker 负载均衡算法 DolphinScheduler-Master 分配任务至 worker,默认提供了三种算法: 加权随机(random) 平滑轮询(roundrobin) 线性负载(lowerweight) 默认配置为线性加权负载。 由于路由是在客户端做的,即 master 服务,因此你可以更改 master.properties 中的 master.host.selector 来配置你所想要的算法。 eg:master.host.selector=random(不区分大小写) Worker 负载均衡配置 配置文件 worker.properties 权重 上述所有的负载算法都是基于权重来进行加权分配的,权重影响分流结果。你可以在 修改 worker.weight 的值来给不同的机器设置不同的权重。 预热 考虑到 JIT 优化,我们会让 worker 在启动后低功率的运行一段时间,使其逐渐达到最佳状态,这段过程我们称之为预热。感兴趣的同学可以去阅读 JIT 相关的文章。 因此 worker 在启动后,他的权重会随着时间逐渐达到最大(默认十分钟,我们没有提供配置项,如果需要,你可以修改并提交相关的 PR)。 负载均衡算法细述 随机(加权) 该算法比较简单,即在符合的 worker 中随机选取一台(权重会影响他的比重)。 平滑轮询(加权) 加权轮询算法一个明显的缺陷。即在某些特殊的权重下,加权轮询调度会生成不均匀的实例序列,这种不平滑的负载可能会使某些实例出现瞬时高负载的现象,导致系统存在宕机的风险。为了解决这个调度缺陷,我们提供了平滑加权轮询算法。 每台 worker 都有两个权重,即 weight(预热完成后保持不变),current_weight(动态变化),每次路由。都会遍历所有的 worker,使其 current_weight+weight,同时累加所有 worker 的 weight,计为 total_weight,然后挑选 current_weight 最大的作为本次执行任务的 worker,与此同时,将这台 worker 的 current_weight-total_weight。 线性加权(默认算法) 该算法每隔一段时间会向注册中心上报自己的负载信息。我们主要根据CPU使用率、内存使用率以及 worker slot 使用情况来进行判断。 如果任何一个低于配置项,那么这台 worker 将不参与负载。(即不分配流量) 文档链接:https://dolphinscheduler.apache.org/zh-cn/docs/3.3.1/architecture/load-balance

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

🍃 layui-vue 2.22.0 发布,一个 Vue 3 UI 框架

更新日志: [新增] table 组件 page 插槽,分页右侧区域。详情 [新增] table 组件 page.change 回调,在未来版本中将删除 @change事件。详情 [新增] table 组件 checkbox 与 checkbox-all emit,用于触发点击 单行checkbox 与 全选。详情 [新增] table 组件 default-toolbar 可自定义配置图标(icon)。详情 [新增] table 组件 column.ellipsisTooltipProps 可自定义 tooltip 样式。详情 [新增] tree 和 tree-select 组件 data 属性 checked spread leaf slot icon 配置项。详情 [新增] tree 和 tree-select 组件 replaceField 属性 disabled checked expanded leaf 配置项。详情 [新增] tree 和 tree-select 组件 cacheData 属性,支持传入节点缓存数据。详情 [新增] tree 组件 accordion 属性开启手风琴模式。详情 [新增] tree 组件 loadOnCheck 属性,在点击 checkbox 时,触发懒加载。详情 [新增] tree 组件 node-double 节点双击、node-contextmenu 节点右键事件。详情 [修复] table 组件 多级表头与fixed属性结合,表头滑动偏移位置错误。issue [修复] input-number 组件自定义宽度,indicator显示异常。详情 [修复] popper 组件多层级点击外部隐藏失效。详情 [修复] descriptionsItem umd中使用labelStyle/labelClass未生效。详情 [修复] splitPanel 组件 splitPanelItem 无法设置style/class。详情 [优化] select 组件当下拉弹窗隐藏,用户输入自动显示下拉弹窗。详情 [优化] upload 组件 slots.preview 为空时,不渲染相关元素。详情 核心贡献: @Jevin (jevin98) - Gitee.com @SpikeMeow (colisys) - Gitee.com

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

如何解决团队访问数据库的 3 个致命问题?

开发人员在开发过程中避免不了需要访问数据库数据,尤其在团队协作中,对于数据库数据的访问会更加频繁。 通常团队成员在管理员或者 DBA 准备好数据源之后,就可以凭借数据库的账号和密码访问数据库中的数据了。也正是从这一刻开始,这个团队访问数据库中的数据时就会面临诸多问题,本文枚举其中三个比较典型且棘手的问题: 团队成员在设计数据库表结构容易带有随意性,导致数据库结构规范不统一。 容易忽略账号和权限的管控,导致数据库访问缺失权限控制。 数据库的变更的发布需要多个团队成员通过流程化的方式相互协作,如果协作过程不顺畅则会降低团队效率。 问题的严重性 如果这些问题没有被妥善处理好,会产生哪些影响呢?接下来我们举几个案例。 数据库结构规范不统一 表结构不规范会导致多种后果,包括数据分析困难、执行速度下降、以及数据可视化困难。‌这些问题普遍带有 滞后性、隐蔽性 特点,当解决这些问题时又容易产生更多连带风险。 数据分析困难‌:表结构不规范可能导致数据分析师在处理数据时遇到困难。例如,相同含义字段名称不统一,又缺乏相应的元信息备注,导致后续分析数据时还需要消耗大量时间精力对数据关系进行梳理。 执行速度下降‌:不合理的表结构设计可能导致数据库查询执行速度下降。例如,某些查询语句的执行计划看似相同,但由于表结构的不合理设计,实际执行效果相差很大,导致查询速度变慢。而这个问题往往在数据量变大之后才会凸显出来。 数据可视化困难‌:原本不为空的字段列由于表结构约束缺失导致脏数据被意外录入,进而在数据可视化结果呈现上产生误导,甚至还会影响用户对数据的准确理解。最直观的问题就是 "空字符串" 和 "空值" 之间的差别难以被有效界定。 综上所述,表结构不规范产生的不仅会增加数据分析的难度,降低数据库查询的执行速度,还会影响数据可视化的效果和质量。因此,规范化的表结构设计对于业务演进至关重要。 数据库访问缺失权限控制 数据库访问缺失权限控制的危害会比较严重,主要体现在以下几个方面: 敏感数据泄露更显:数据库访问权限的缺失容易让未经授权的用户访问到敏感数据,如用户个人信息、财务数据等。当这些具有高度敏感性的数据被泄漏出去后,会造成更大的灾害。例如,被不法分子用于诈骗,以及错失优质商业机会等。 数据篡改风险:攻击者可能通过越权访问修改数据库中的数据,通过篡改数据谋取私利或者对整个业务运行造成严重影响,如修改账户余额,删库跑路等。 法律责任与声誉损害:由于缺乏权限控制导致用户敏感数据被泄露,进而个人隐私被侵犯。企业可能临法律责任,同时企业的声誉也将受损。 综上所述,数据库访问缺失权限控制会带来更加严重的安全风险和法律后果。所以团队中对于数据库数据的访问必须实施严格的访问控制和权限管理‌,以避免法律风险以及声誉影响。 协作过程不顺畅 协作过程不顺畅最主要的影响是团队效率,主要包括: 系统稳定性受损‌:协作不畅可能导致数据库变更过程中出现错误或遗漏,进而影响系统的稳定性和可靠性,增加系统崩溃的风险。 数据安全性问题‌:协作不顺畅还可能引发数据安全性问题,如数据丢失或泄露,对组织造成重大损失。 团队资源浪费‌:不顺畅的协作可能导致不必要的重复工作或错误操作,浪费人力和时间资源。 综上所述,数据库变更协作不顺畅会对系统稳定性、‌数据安全性、团队资源利用等多方面造成不良影响,进而使团队的效率变得更加低下。 解决问题的手段 这些问题在业内通常有着比较明确的解决思路,核心思想是通过团队化的工具将数据库的访问集中到统一平台上进行,并通过统一平台达成如下几个关键控制手段: 通过 SQL 规则校验,拒绝不合理的数据库结构变更,从而保证数据库规范。 集中权限控制,方便一目了然地管理和控制。 避免直接连接数据库,保护数据库账号。 对查询结果进行脱敏保护,从而避免数据隐私泄漏及法律风险。 通过工单流程提升团队协作效率。 通过企业统一认证,让团队的账号管理变得更加轻松和简单。 目前能够提供上述问题解决方案的产品有很多,这里就不再展开。 CloudDM Team 作为全新的企业级数据库数据访问工具,在团队使用场景中做了更加细致和深入的思考,自然也包含上述问题的解决方案。 规则校验 使用脚本化方式实现 SQL 规则校验是一个比较常见的方法,常见的方案中有两种技术路线。 使用已有语言 ava、JavaScript、Lua、Groovy 作为规则引擎。 使用具有较高限制的自研 DSL 作为规则引擎。 使用已有语言通常会面临两个问题: 程序如何接入? 安全如何控制? 在采用通用编程语言作为规则引擎后,安全控制是最难以解决的。这是由于通用编程语言通常是面向更加广泛而又复杂的场景,需要提供更加灵活和底层的 API 作为保障,比如不受限制的访问网络、文件等资源。 如果采用通用编程语言作为引擎,虽然可以快速满足需求并节省开发成本,但需要在安全控制上做更加深入的控制,本文列出一些用于思考: 网络:通常 SQL 规则脚本中是用来承担逻辑判断,并不需要网络通信,因此网络能力通常是不必要的。 文件:理由同上 CPU/内存:这两类资源具有高度相似性,都是难以被控制。例如:规则脚本出现一个死循环,通常作为脚本宿主程序是无法主动干预的。 调动外部程序:这和网络、文件、比较相像。原则上规则脚本的执行是不能调用外部程序的。 其它技术组件导致的安全漏洞:常见的如 OGNL 表达式的越权访问。 如果采用使用场景更加明确的自研 DSL 作为规则引擎,通常不会出现上述问题。因此普遍情况下只要技术投入成本可以接受,都会选择此类技术方案,其主要优点是可控性较高。 CloudDM Team 采用了全新的 自研 Rule Script 引擎,并通过 Rule Script 强大的编程能力使得 CloudDM Team 的所有内置规则实现了全部脚本化。这包括 SQL 规则和脱敏规则。下面这张图向大家展示了 Rule Script 在 CloudDM Team 中的样貌。 SQL 查询规则展示 查询规则展示 权限控制 使用团队化的工具将数据库的访问集中到统一平台,天然的好处是可以避免直接连接数据库,以保护数据库账号。而在权限控制方面,一个团队化的数据库访问工具必然会面临来自两个新维度上的要求: 功能上的权限控制 资源上的权限控制 在工程实践过程中,权限系统的设计会受到诸多因素的影响,比较常见的权限控制模型和特点有: IBAC/ACL ,基于身份的访问控制。核心思想是为资源制定一个 策略列表,当访问资源时通过策略列表来保护资源的访问。 RBAC ,基于角色的访问控制。模型核心定义了 用户、角色、权限 三个元素,在软件产品的功能控制中具有较为普遍的应用,它是一个静态模型。 PBAC,基于策略的访问控制,相比较 RBAC 模型而言,PBAC 基于规则和策略动态确定访问权限。它属于动态模型。 ABAC,基于属性的访问控制,模型重点在于对属性的策略化运用。角色、策略、身份 在 ABAC 模型中都是属性中的一种,ABAC 和 PBAC 某种程度上来看比较相似。而 ABAC 最大的弊端就是在于它的复杂性,在落地 ABAC 时某些情况下甚至需要借助 XACML 语言脚本来实现权限控制。 为了方便理解,我们以 "资源是否具备某个权限的访问权限" 为典型内在需求,以 用户、角色、策略 为支点,对已知的权限模型进行梳理,并总结如下: 当选择 策略、权限、用户 三角关系作为权限访问控制三要素时,便是 ACL/IBAC 模型。 当某个资源被访问,只需要执行一遍策略规则即可得到权限,这便是最简单的 ACL(Access Control Lists)。 将用户/资源进行 标识符 归类,在利用 ACL 对 标识 的用户资源进行访问控制,这便是 IBAC(Identity-Based Access Control)。 使用 角色、用户、权限 三角关系作为权限访问控制三要素,便是最常见的 RBAC 模型。 RBAC(Role-Based Access Control)是一种基于静态状态下的权限控制模型,同时也是用途最为广泛的权限控制模型。 RBAC 的运用非常考验角色的设计者,角色的粒度过细容易造成特权泛滥,粒度过粗又会导致拆分角色而造成角色爆炸。 使用 策略、权限 关系时便是 PBAC 模型,该模型的最大特点是着重基于策略的访问控制。 PBAC(Policy-Based Access Control)通过定义策略来管理访问控制,这些策略可以根据需要定制。 动态的访问控制是 PBAC 模型的核心关键,在实施 PBAC 时往往需要附带 审计 记录以方便事后查阅。 ABAC(Attribute-Based Access Control) 基于属性进行访问控制。在模型中访问决策不仅基于用户角色。 ABAC 访问控制机制根据主体属性、对象属性、环境参数、操作、策略对该请求进行授权验证,具有更高的灵活性。 ABAC 在一定程度上和 PBAC 具有相似性。 在 ABAC 看来 RBAC 中的角色、IBAC 中的标识符都是一种属性。 在 ABAC 模型体系中有很多实现或者标准,比如:XACML、NGAC、LBAC。 在实际工程实践中可以选用的权限控制模型可能还会更多。具体如何选择需要基于客观因素来决定,不能一概而论那种模型更好。而在具体落地过程中往往参考上述标准模型也会产生更多的变种和新特性。 CloudDM Team 在实践权限控制的过程中采用了多种模型结合的方式: 通过 RBAC 模型作为功能权限的访问控制。因此 CloudDM Team 可以定义角色、用户,并且可以为不同角色绑定权限。 通过 IBAC 对具体数据库资源进行访问控制。目前支持对实例级资源进行细粒度 ACL 控制。 工单流程 在使用团队化数据库访问工具时,工单流程是一个比较常见的场景,一个典型的用户场景是: 开发递交了 SQL 发布流程。 DBA/管理员或各层级管理人员会执行流程审批。 在流程通过后完成最终 SQL 的执行。 在专业的领域中,一般由 OA 系统可以完成上述动作。而在 OA 出现之前,办公室解决流程化问题往往是填写各种申请表,然后在各级领导/负责人、部门之间流转这些申请单。对于数据库变更的审核往往更加难以管理,通常由更加专业的 DBA 负责数据库的变更操作。 一个 OA 系统面临的主要问题是如何方便地定义表单以及流转表单。所以在技术上 OA 系统通常包括如下核心技术: 表单设计器 工作流引擎 用户/组织管理 表单系统主要解决的问题是表单的设计以及表单数据的存储/提取。在早年一个很好的可视化 HTML 设计器可以解决大部分问题,而如今已经有更多可用的方案可供选择。 表单系统的最大难度在于提供可供交互的类 HTML 设计器,并允许终端用户自由地设计表单的样式。这些用户往往对于计算机原理了解并不深入。 早年比较常见的方案是基于 Eclipse 开发一个工作流设计平台,其核心原理是对 Eclipse Web Developer Tools 的二次开发提供表单设计器。 OA 系统将表单设计器产生的数据进行存储,在需要时按照设计器设计的样式重新展现并填充具体数据。 流程引擎,解决的主要问题是提供一个统一的模式,让企业可以设计自己的流程。 在流程设计中比较典型的场景有:加签、会签、顺序流程、子流程、并行流程等。 在工作流领域也存在很多成熟的解决方案,如:Activiti、Flowable、jBPM。 本文不再详细展开。 CloudDM Team 在工单流程的设计上简化了技术负担,其核心只关注审批的 发起 和 审批结果, 让外部 OA 系统以更加专业的角度来负责工单流转工作,这样做有以下好处: 专业的事情专业系统来负责,减轻技术负担,提升整个系统的稳定性。 可以接入用户已有 OA 系统,从而和用户的 IT 系统结合更加紧密。 总结 本文提出了团队使用数据库面临的问题以及问题的后果,介绍了行业中解决问题的常用手段,及 CloudDM Team 在众多产品中的独特优势。如果您感觉本文有所收获,欢迎前来试用。 下载地址:https://www.clougence.com/clouddm/ 在线文档:https://www.clougence.com/dm-doc/intro/product_intro 快速上手:https://www.clougence.com/dm-doc/quick/quick_star 联系我们(加入交流群):https://www.clougence.com/dm-doc/intro/contact_us

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

3分钟理清QPS、TPS、RT 以及它们之间的关系

在评估系统性能的时候,我们经常会听到 QPS、TPS、RT、吞吐量等等一些概念,包括在一些面试场景下可能也会遇到这些概念,我们来稍微梳理一下。 做一个简单的概念扫盲。 一 QPS QPS(Queries Per Second) 是每秒的查询率,它表示一台服务每秒响应的查询的次数。 具体来说,QPS 反映了系统在高并发环境下处理请求的能力。一个高 QPS 的系统能够在单位时间内处理更多的请求,从而提供更好的用户体验和更高的吞吐量。相反,QPS 较低的系统可能在面对大量请求时会出现响应延迟或请求失败的情况。 举个栗子: 假设服务器 1 秒响应 500 次请求,那么此时 QPS 就是 500。 二 TPS TPS(Transactions Per Second) 表示每秒事务处理的数量,一个事务表示客户端向服务器发送请求,然后响应的过程。 举个栗子 比如用户在 jd 上下单的时候,每当用户下单请求被服务器接受到之后,服务需要保存订单、扣减商品库存、确认支付等等这一些列的操作,所有过程都完成后,将结果响应给客户端。这个完整的过程就是一次事务,TPS 则表示每秒内可以完成多少次这样的请求。 整体上来说,一个 TPS 包括了三个部分: 用户请求服务器 服务器自己的内部处理 服务器返回给用户 这样一个完整的过程就是一个 TPS。 有的小伙伴分不清 TPS 和 QPS,简单来说是这样: 如果是对一个查询接口压测,且这个接口内部不会再去请求其它接口,那么 TPS = QPS,否则,TPS ≠ QPS。 如果是容量场景,假设 N 个接口都是查询接口,且这个接口内部不会再去请求其它接口,QPS = N * TPS。 第一点好理解,针对第二点我举一个简单的案例:假设请求一个页面,这就是一个 TPS,这个页面中又发送了 5 次请求向服务器加载数据,那么 QPS=TPS*5。 三 RT RT(Response-time)响应时间,这个表示执行一个请求从开始到最后收到响应数据所花费的总时间,即从客户端发起请求到收到服务器响应结果的时间。 如果忽略网络传输时间,响应时间是处理时间和等待时间的总和,其中: 处理时间是完成请求要求的工作所需的时间 等待时间是请求在被处理之前必须在队列中等待的时间 RT 是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。 举个栗子 这里,RT = T2 - T1。 四 并发数 系统并发数是指在某一时刻,系统中能够同时处理的请求数量。这个指标通常用来衡量系统在高负载情况下的性能和处理能力。 五 几个概念之间的关系 除了前面第二小节和大家介绍的 TPS 和 QPS 之间的公式之外,再给小伙伴们两个公式: RT = 并发数/QPS QPS = 并发数/RT 好啦,几个常见的概念,小伙伴搞懂了吧~

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

基于 Tailwind CSS + Shadcn 的 Vue3 后台管理模版 2024.0.6 发布

推荐一套为 Java 开发人员提供方便易用的 SDK 来与目前提供服务的的 Open AI 进行交互组件:https://github.com/devlive-community/openai-java-sdk 推荐一套功能强大的开源数据中台系统:https://github.com/devlive-community/datacap Shadcn UI Vue Admin 是一个使用 Shadcn UI (基于 Tailwind CSS) 和 Vite 和 Vue 制作的管理面板。在构建时考虑了响应能力和可访问性。 本次版本为公开版本,支持了Tree和Timeline模版功能。以下是该模版的目前支持的功能截图。 移除 Shadcn UI 原始代码优化启动编译方式 树形组件 树形组件自定义 Slot + 右键菜单 时间线组件 时间线组件 Milestone 时间线组件 Progress 时间线组件 Discussion 该模版的使用方式比较简单只要传递相应的数据即可,也支持多个 slot 用户自定义,欢迎大家使用。 推荐一套全平台数据库管理工具,建议下载使用:https://github.com/devlive-community/dbm 我们即将推出一套开源新系统。InfoSphere 是一款面向企业和个人的开源 Wiki 系统,旨在提供简单而强大的知识管理解决方案。建议尝试使用:https://github.com/devlive-community/incubator-infosphere 欢迎大家前往测试站点使用并提出宝贵的建议,如果您有需要实现的布局,可以提交 issues 我们会在最快的时间内实现。 我们的示例地址为:https://shadcn.vue.devlive.org/ive.org/

资源下载

更多资源
Mario

Mario

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

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应用均可从中受益。

Rocky Linux

Rocky Linux

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

用户登录
用户注册