-
近期,华为云发布一则重磅消息:华为云全域Serverless化背后的“基石”——元戎,中稿全球顶尖学术会议ACM SIGCOMM 2024。该会议在计算机科学领域享有崇高声望,2024年共接收投稿366篇,其中62篇被录用,录用率仅为16.9%。论文《YuanRong: A Production General-purpose Serverless System for Distributed Applications in the Cloud》揭示了华为自主创新的业界首个通用Serverless平台,提供通用函数编程模型,高可扩缩、高性能和高效对接后端服务的运行框架,助力华为云构建全域Serverless云服务。01Serverless 从“专用”走向“通用”当前,业界现有的Serverless产品主要限于事件驱动型应用,然而对于有状态微服务、大数据、HPC、AIGC等复杂应用,仍然面临如下四大核心技术挑战:1)函数间无法高效协同:函数间无法直接寻址,需绕走网关,导致互调性能差。函数间不支持共享内存,无法高效协同,难以满足微服务、HPC等场景对低时延的诉求;2)不确定的冷启动时延:冷启动是Serverless性能优化难题之一,尤其在微服务、AIGC等场景,容器启动时加载大镜像(GB级)的开销大,加之复杂的应用初始化过程,整个冷启动耗时分钟级,无法按需弹性; 3)状态外置影响性能:应用程序的状态必须外置到如OBS等远端存储,延迟可达数百毫秒,同时远端存储的带宽有限导致吞吐量低,难以满足大数据等场景多任务之间高效数据流转的诉求;4)用户函数和后端服务间交互复杂:后端服务通常是有状态的,并为每个客户端维护经过身份验证的活动连接,例如JDBC连接,但这些连接状态很难在协作的函数实例之间共享。此外,多个函数的并发操作也会导致分布式事务的问题。02元戎首创通用Serverless平台论文介绍了元戎通用Serverless平台的一系列关键创新。其中,针对挑战1和2,元戎构建了可扩展的函数系统,实现大规模函数调度、亚毫秒函数互调以及函数极速冷启动等关键技术,支持大规模多形态应用的统一管理和高效运行;针对挑战3,元戎内置了多语义数据系统,实现分布式共享内存对象以及流数据对象,提供分布式共享内存池,支持多语义数据的高效流转;针对挑战4,元戎构建了可移植的Bridge系统,提供事件和后端服务的标准抽象接口,解耦架构,同时支持连接复用和共享事务等功能。元戎进一步抽象了面向云原生编程的通用Serverless运行时接口,并实现了主流语言的Runtime。通过这些Runtime,元戎为开发者提供特定领域的简易编程模式,支持Web服务、大数据、AI训练/推理、HPC等全域Serverless应用。Ø 更多技术细节请参见华为云在ACM SIGCOMM 24发表的论文原文:链接:https://dl.acm.org/doi/10.1145/3651890.367221603通用Serverless客户案例 ● 案例1:全球销量领先车企基于Serverless构建千万级车联网平台当前,汽车行业的车联网业务对提升产业竞争力和创新能力方面具有重要意义。为了在未来10年内满足6700万接入车辆的业务需求,某全球销量领先的车企期望构建一个全生命周期车辆管理平台。该平台需要能够承载分钟级的车辆数据上报,每天100T的数据增量,并支撑至少10PB级以上的存量数据。此外,汽车接入具备典型的波峰波谷特征,白天上下班时请求峰值达3w+ QPS,夜间请求量相对白天锐减。如何构建支持千万车辆稳定接入的车联网平台,满足业务端到端秒级时延并降低成本,是企业面临的主要问题。Serverless方案凭借其按需全自动弹性,按请求计费,免运维等优势,最终在与传统虚拟机/容器方案的对比中胜出。华为云FunctionGraph(Powered by元戎)作为核心计算服务,结合APIG、DIS、EG等Serverless中间件,灵活组装数据转码、分发、转储等业务流程,函数级逻辑开发简单,实例多AZ部署保证了高可靠性。 该车联网平台完成Serverless架构升级后,弹性能力显著提升,达到业界领先的分钟级 5000+ 函数实例弹性,业务端到端时延从分钟缩短到秒,加速近20倍,资源利用率提高了50%,这与元戎提供的以下两个“黑科技”密不可分。首先,元戎创新提出了基于进程级快照的函数极速冷启动技术,支持对用户空间指定的进程进行“冻结”(即停止进程,并将该进程运行的所有上下文持久化为快照文件),并在必要时对其进行“解冻”(即通过保存的快照文件来正确恢复进程运行的上下文)。当用户请求触发函数启动时,直接基于函数快照恢复,跳过框架启动、业务初始化等耗时较长的阶段,进一步结合内置数据系统实现快照缓存加速,显著提升应用冷启动性能90%+。其次,元戎构建了分级调度架构,以应对生产系统中传统中心化调度架构的性能瓶颈,支持大规模函数实例的并行调度,并有效利用数据局部性,确保高可扩展性,更好地支撑千万级车辆接入的波峰波谷场景。车联网平台自商用上线以来,已经历春节等节假日的考验,峰值每天十几亿次函数调用无错误。该Serverless方案现已作为华为云标准车联网解决方案进行推广,帮助更多车企构建高可用、低成本的车联网平台。● 案例2:华为MetaERP全面Serverless化架构升级MetaERP是服务于华为公司生产制造、供应、采购、财务业务的SaaS系统,整个系统构成非常复杂,涉及微服务、函数、大数据等多种应用形态。当前架构面临研发成本高、资源成本高等一系列挑战。为了解决这些问题,MetaERP正在进行全面Serverless化架构升级,旨在打造业界首个Serverless ERP系统,实现研发和资源成本的双重下降。1)资产核算业务资产核算业务(MFA) 支持企业资产从获取到处置的全生命周期管理和交易核算,在资产使用寿命内,按照会计准则和税法要求,系统地计提资产折旧费用。该业务的资源池独立,作业时间集中,具有典型的波峰波谷特征。然而,Java微服务的启动时延超过1分钟,弹性响应慢,业务峰值处理性能不足,日常波谷时仍需要保持最低配置在线,平均资源利用率不到2%,导致资源成本高。 MFA业务基于元戎进行Serverless化改造,元戎提供Spring框架兼容能力,支持通过修改少量配置即可实现存量业务Serverless化。进一步,元戎通过函数极速冷启动技术,将业务冷启动时间缩短到5秒,弹性性能提升20倍。结合自动水平和垂直弹性能力,在无请求时支持业务实例缩容至0,月均资源消耗降低70%。2)销售订单业务当前,MetaERP依托平台基础功能(通用逻辑)来支撑上层大量的租户定制业务(扩展逻辑)。以销售订单业务为例,平台通用逻辑动态加载租户扩展逻辑,虽然实现了灵活定制,但两者耦合运行,无法保证安全隔离。元戎支持租户扩展逻辑以Serverless函数方式发布、运行,通过函数物理实例隔离的方式减少风险,保障通用层的稳定。然而,优秀的技术方案往往也难以一步到位,虽然实现了多租户之间的安全隔离,但也引入了两大挑战。首先,分离后的通用逻辑和租户扩展逻辑通过RPC通信,相比原先本地调用,耗时必然增加,且通信次数越多,耗时会越大。元戎提供亚毫秒函数互调能力,通过简化通信链路、亲和性调度、协议优化等关键技术,支撑通用逻辑和租户扩展之间高性能直连互通,实现端到端调用时延1ms。其次,不同的业务逻辑之间访问同一份数据时的事务一致性问题。元戎提供Service Bridge代理后端服务访问,利用路由计算,将同一事务的请求汇聚到同一个Bridge函数实例上,将原来分离的事务逻辑重新聚合成本地事务,解决分布式事务一致性问题。 04总结与展望近年来,华为云持续构筑全域Serverless云服务,推出了一系列竞争力领先的Serverless产品,包括函数工作流FunctionGraph、Serverless容器引擎CCE Autopilot、Serverless应用托管CAE、云数据仓库DWS、事件网格EventGrid等,高效支撑Serverless全面商业化。面向生成式AI浪潮,元戎通用Serverless将持续聚焦技术创新,突破大模型推理服务实例快速弹性、分布式KV Cache池化管理、多模型混部高效协同调度、超大规模分布式训练高可用性等关键技术,构筑大模型推理和训练的高性能、低成本、高可用性关键竞争力。通过这些创新,元戎将助力华为云打造极低成本、极致性能和极优体验的Serverless AI解决方案,实现全域Serverless化的竞争力领先,帮助千行万业的百万开发者缩短交付周期,提升上云效率,抢占市场先机。
-
从一个容器的不足说起容器概念出现时,有个非常重要的理念:容器中极简。即容器里面只保留需要运行的进程就可以,其他一律不要安装。这也是为什么Docker出现的那时,有一篇文章《为什么不需要在Docker容器中运行sshd》经常被提及的原因。但有时候Docker容器中缺少需要的软件。比如 curl,wget,ifconfig,ip,tcpdump 等基础软件包,遇到问题时,什么命令都敲不了,很是让人抓狂。平时定位问题的技术(各种Linux命令行工具),一点都用不上了。自己打的镜像倒还好,大不了重新打镜像把需要的工具也安装后,重新打镜像。但是如果是开源镜像就比较棘手。如何在没有安装软件包的容器里面,执行需要的命令行(二进制工具)进行调试,一直是K8s平台的一个小遗憾。我以前想K8s可以补充的功能之前唐老师写过《跟唐老师学习云网络 - nsenter魔法棒》,我还想着:可以利用Host上面的命令行呀,通过nsenter跳到容器里面,不就可以执行了么原文链接:https://bbs.huaweicloud.com/blogs/402638当年还幻想可以给K8s提点proposal:让exec命令增加 --from-host 参数,当带上这个参数的时候,让kubelet直接从Host执行nsenter运行主机上面的二进制,这样就绕过了容器里面没有命令行的约束。方便管理员调试容器中相关问题。想法似乎挺好,后面转战上层AI平台,并没有继续关注这么底层的了。直到最近看到K8s的新功能:“临时容器” (ephemeral containers)。发现K8s对某个特性的设计还是非常值得点赞的。结果K8s实现的功能K8s为了能在容器里面,执行不存在的命令行,增加了一个 kubectl debug命令。大致流程如下图:其中红色容器,就是一个“临时容器”,它与目标容器共享各种namespace,所以与直接在目标容器中执行命令的效果是一样的。通过指定镜像地址,来控制这个新启动的“临时容器”里面包含自己所需要的各类命令行。这样就可以在任意K8s的容器里面,执行不存在的命令行工具了。比如,对某Pod里面的名为app的容器执行调试:kubectl debug -it -c debugger --target=app --image=busybox {POD_NAME}--target参数,是指定Pod中需要调试的目标Container(有时Pod有多个Container)。果然还是人家的更厉害看完K8s的实现,明显比我早期想的 “借用Host” 方法更好:其仍然保持Host节点的“极简”,而是将需要的工具仍然保持由容器来承载。这样可以借用任意的容器镜像,而不必在Host节点上面安装各种工具包。非常优雅。更“过分”的是,在节点上没有的命令行工具,也不需要给节点安装软件包,也可以通过临时容器来执行。kubectl debug node/mynode -it --image=ubuntu扩展性也很赞,确实考虑的挺周全。So,启动“临时容器”来在目标容器中“整活”走起~本文分享自华为云社区《从K8s的“临时容器”看K8s设计的厉害之处-云社区-华为云》,作者:tsjsdbd
-
1. 背景介绍在社区版MySQL中,使用LIMIT OFFSET的SELECT语句时,存储引擎层返回所有满足WHERE条件的行给SQL层处理,SQL层过滤offset行,返回n行数据。随着offset的增加,查询的时长也会显著增长。当offset达到百万级别的时候,查询耗时往往超出了业务可接受的范畴。SELECT * FROM lineitem LIMIT 10000000,10;或者SELECT * FROM lineitem LIMIT 10 OFFSET 10000000;为提升此类SQL语句的性能,GaussDB(for MySQL)引入了Limit Offset下推优化策略,即将offset的计算任务下推至InnoDB存储引擎,从而避免offset范围内的行被转换和传输到SQL引擎层,并从以下两个场景实现加速:1)节省InnoDB存储引擎和SQL引擎层之间的多次交互;2)当查询语句访问二级索引,需要回表获取其他的列信息时,InnoDB层对offset提前过滤可以消除回表的性能开销。2. 原理介绍GaussDB(for MySQL)推出的两个新特性,通过OP和RCR的结合,将LIMIT OFFSET的SELECT大数据量查询的性能提升一到两个数量级。• Offset Pushdown( offset下推,下文简称OP)• Redundant Condition Removal (冗余条件删除,下文简称 RCR)2.1 Offset PushdownOP赋予GaussDB(for MySQL)存储引擎InnoDB处理offset的能力。当OP启用时,SQL层会评估offset是否可以下推至存储引擎进行处理,并将下推信息传递给存储引擎。SQL层不再对存储引擎返回的行进行offset 处理,取而代之的是存储引擎层直接跳过offset 范围内的行,仅返回后续行,即查询所需要的行。首先,通过启用OP,offset 范围内的行不会再传输到SQL层,从而节省了存储引擎和SQL层之间多次来回交互时间;其次,对于非覆盖索引扫描(non-covering index,即查询访问二级索引之后还必须访问表),直接跳过offset范围内的行,可以节省对这些行回表访问的开销。这种对offset 的提前处理的方式,可以节省数据处理时间,特别是当offset 非常大时。OP是否生效取决于WHERE条件能否完全下推到存储引擎处理。如果WHERE条件能够完全下推到存储引擎,并使其能够基于索引进行筛选,减少需要处理的数据量,那么,OP就能有效地优化查询性能。2.2 Redundant Condition RemovalRCR的优化思路:当进行索引范围扫描时,SQL 层通常会对存储引擎返回的行执行冗余检查,因为它不知道存储引擎已经执行了这些检查,而RCR 就是让 SQL 层了解到这一点。为了使 OP 成为可能,除了要求WHERE条件能够被存储引擎独立且完整地评估,SQL 层还必须了解这点,从而避免冗余检查。OP功能的实现方式与索引条件下推 (Index Condition Pushdown,ICP) 类似。对于某些查询,ICP通过将整个 WHERE 子句下推到存储引擎来启用 OP。而RCR在 ICP 执行之前会先评估查询条件是否冗余,并移除冗余条件,以确保ICP不会处理冗余的条件检查。RCR很好地补充了OP特性的适用范围,允许更多查询使用 OP。3. 场景约束• 只支持单表的SELECT查询,查询使用的表必须是InnoDB表。• SELECT查询语句的WHERE条件可全部下推到引擎层。• 不支持SELECT DISTINCT、HAVING、GROUP BY、ROLLUP、聚集函数、WINDOW FUNCITON以及文件排序。• 不支持涉及多个分区的分区表查询。• RCR支持<,>,=,<=,>=,BETWEEN,IFNULL。4. 流程介绍在SQL层的优化器阶段,判断是否满足Limit Offset下推的条件。如果满足,则设置offset的值为0,并通知InnoDB层需跳过的offset的值,即SQL层对InnoDB层返回的结果不再进行offset的过滤。在InnoDB层,row_search_mvcc函数中根据SQL层传递的下推offset值,判断是否需要跳过当前row。如果判定需要则跳过,继续读取下一行,依次类推。(图1示意了Limit Offset下推查询优化的处理流程) 4.1 RCR生效OP场景GaussDB(for MySQL)做了RCR优化,这使得SQL层能够感知InnoDB层返回的记录都是经过过滤的,这意味着SQL层不需要再次过滤。该优化扩展了Offset Pushdown的生效范围,如图2所示。假设有一个二级索引(a,b,c),WHERE条件中的范围条件如下:• a > x• a = x AND b > y• a = x AND b = y AND c > z相关SQL语句如下:create table t0(a int,b int,c int,index a_b_c(a,b,c));insert into t0 values(1,2,3),(4,5,6),(7,8,9);mysql> explain select * from t0 where a > 1 limit 10000,1;+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| 1 | SIMPLE | t0 | NULL | range | a_b_c | a_b_c | 5 | NULL | 2 | 100.00 | Using offset pushdown; Using index |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+1 row in set, 1 warning (0.00 sec)mysql> explain select * from t0 where a = 1 and b > 1 limit 10000,1;+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| 1 | SIMPLE | t0 | NULL | range | a_b_c | a_b_c | 10 | NULL | 1 | 100.00 | Using offset pushdown; Using index |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+1 row in set, 1 warning (0.01 sec)mysql> explain select * from t0 where a = 1 and b = 1 and c > 1 limit 10000,1;+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+| 1 | SIMPLE | t0 | NULL | range | a_b_c | a_b_c | 15 | NULL | 1 | 100.00 | Using offset pushdown; Using index |+----+-------------+-------+------------+-------+---------------+-------+---------+------+------+----------+------------------------------------+1 row in set, 1 warning (0.00 sec)如上SQL语句的WHERE条件经过RCR,SQL层去除冗余的条件,生效OP,提升性能。4.2 ICP生效OP场景对于ICP生效的SQL语句,SQL层在判断满足OP的约束条件之后,会向InnoDB层获取n条记录,InnoDB层则会跳过满足ICP条件的p条记录,把满足ICP条件的n行记录返回给SQL层,如图3所示。具体步骤如下:a) InnoDB 获取 一个record;b) 如果该record可见,则跳转c),如果不确定,检查ICP是否匹配,如果匹配,则跳转到e), 如果不匹配,则跳转到a);c) 如果记录被标记为已删除,跳转到a), 如果没有被标记为已删除,跳转到d);d) 检查ICP是否匹配,如果不匹配,则跳转到a),如果匹配,跳转到f);e) InnoDB使用聚集索引检查MVCC版本,如果检查record是可见的,则跳转到f),如果不是,则跳转到a);f) 如果跳过的记录个数小于Limit Offset下推的值,则跳转到a)获得下一个record;g) 返回record给SQL层,SQL层发送结果给客户端;举例如下:create table t1(a int, b int, INDEX(b));insert into t1 values(4,4),(5,5),(6,6);set rds_empty_redundant_check_in_range_scan = off;mysql> explain select a,b from t1 where b>2 limit 100 offset 1;+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+| 1 | SIMPLE | t1 | NULL | range | b | b | 5 | NULL | 3 | 100.00 | Using offset pushdown; Using index condition |+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+----------------------------------------------+1 row in set, 1 warning (0.00 sec)5. 使用方法除了使用特性开关来生效或者不生效Limit Offset下推优化,还可以使用hint:OFFSET_PUSHDOWN(table_name):生效Limit Offset下推优化NO_OFFSET_PUSHDOWN(table_name):不生效Limit Offset下推优化示例如下:基于TPCH的Schema进行举例,特性开关打开或者使用hint方式可以生效,执行EXPLAIN SQL查看执行计划时,Extra列会展示为Using offset pushdown。1)特性开关打开:mysql> EXPLAIN SELECT * FROM lineitem LIMIT 10000000,10;+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | 59281262 | 100.00 | Using offset pushdown |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)2) 使用hint:mysql> EXPLAIN SELECT /*+ OFFSET_PUSHDOWN() */ * FROM lineitem LIMIT 10000000,10;+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | 59281262 | 100.00 | Using offset pushdown |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)mysql> EXPLAIN SELECT /*+ NO_OFFSET_PUSHDOWN() */ * FROM lineitem LIMIT 10000000,10;+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------+| 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | 59281262 | 100.00 | NULL |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-------+1 row in set, 1 warning (0.00 sec)6. 性能对比采用TPC-H测试模型,Scale Factor(Gigabytes)为10的数据量,测试如下三种场景,lineitem表结构如下:CREATE TABLE `lineitem` ( `L_ORDERKEY` int NOT NULL, `L_PARTKEY` int NOT NULL, `L_SUPPKEY` int NOT NULL, `L_LINENUMBER` int NOT NULL, `L_QUANTITY` decimal(15,2) NOT NULL, `L_EXTENDEDPRICE` decimal(15,2) NOT NULL, `L_DISCOUNT` decimal(15,2) NOT NULL, `L_TAX` decimal(15,2) NOT NULL, `L_RETURNFLAG` char(1) NOT NULL, `L_LINESTATUS` char(1) NOT NULL, `L_SHIPDATE` date NOT NULL, `L_COMMITDATE` date NOT NULL, `L_RECEIPTDATE` date NOT NULL, `L_SHIPINSTRUCT` char(25) NOT NULL, `L_SHIPMODE` char(10) NOT NULL, `L_COMMENT` varchar(44) NOT NULL, KEY `i_l_partkey` (`L_PARTKEY`), KEY `i_l_partkey_suppkey` (`L_PARTKEY`,`L_SUPPKEY`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1)如下SQL语句为Q1,访问主表且无谓词条件:mysql> EXPLAIN SELECT * FROM lineitem LIMIT 10000000,10;+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+| 1 | SIMPLE | lineitem | NULL | ALL | NULL | NULL | NULL | NULL | 59281262 | 100.00 | Using offset pushdown |+----+-------------+----------+------------+------+---------------+------+---------+------+----------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)2)带有谓词条件的查询,如下SQL语句为Q2,访问二级索引的Range查询,同时需要回表获取其他列的信息。mysql> EXPLAIN SELECT * FROM lineitem WHERE l_partkey > 10 AND l_partkey < 200000 LIMIT 5000000, 10;+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+| 1 | SIMPLE | lineitem | NULL | range | i_l_partkey_suppkey,i_l_partkey | i_l_partkey | 4 | NULL | 10949662 | 100.00 | Using offset pushdown; Using index condition |+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+1 row in set, 1 warning (0.00 sec)3)带有谓词条件的查询,如下SQL语句为Q3, 带有Order by且可以利用索引消除排序。mysql> EXPLAIN SELECT * FROM lineitem WHERE l_partkey > 10 AND l_partkey < 200000 ORDER BY l_partkey LIMIT 5000000, 10;+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+| 1 | SIMPLE | lineitem | NULL | range | i_l_partkey_suppkey,i_l_partkey | i_l_partkey | 4 | NULL | 10949662 | 100.00 | Using offset pushdown; Using index condition |+----+-------------+----------+------------+-------+---------------------------------+-------------+---------+------+----------+----------+----------------------------------------------+1 row in set, 1 warning (0.00 sec)针对上文所述的查询示例Q1、Q2、Q3。图4展示了开启与关闭Limit Offset下推功能的性能对比:基于TPC-H测试模型,Scale Factor(Gigabytes)为10的数据量,Q1提升5.56倍,Q2提升33.07倍,Q3提升33.02倍。7. 总结本文介绍了GaussDB(for MySQL)的Limit Offset下推优化,旨在解决带有Limit Offset查询语句的性能问题。通过将Limit Offset下推到存储引擎层,降低存储引擎和SQL引擎之间交互的数据量,减少二级索引回表的开销,显著提高查询性能。更多推荐
-
本月话题:人工智能AI知识专题随着IT技术的不断发展,知识的不断更新迭代,大家讨论讨论说说看看大家对人工智能AI方面的知识掌握多少,看看大家对目前人工智能AI的了解看看谁是知识小能手
-
AppStage对业务快速迭代的支撑概述AppStage是华为云推出的应用全生命周期管理平台,旨在帮助企业和开发者高效地实现应用的快速迭代和持续优化。通过一系列先进的工具和服务,AppStage在需求收集、开发流程优化、测试自动化以及市场反馈机制等方面提供了强大的支持。需求收集与分析AppStage通过提供一站式的应用生命周期管理,协助企业从需求收集到产品发布的每一个环节。它的需求管理功能可以帮助企业及时捕捉市场和用户的反馈,快速响应市场变化。AppStage的智能分析工具能够帮助开发者理解用户的行为和偏好,为产品的迭代提供数据支持。开发流程优化AppStage的开发流程优化建议涵盖了编码、测试、部署等各个阶段。例如,通过集成华为云CodeArts APITest服务,AppStage支持零代码的关键字驱动测试,简化测试用例的编写,加速自动化测试脚本的生成。此外,AppStage还提供了代码审查和持续集成的功能,确保代码质量的同时,加快开发进度。测试自动化AppStage的自动化测试服务能够大幅度提升测试效率,降低人工成本。它支持多种测试类型,包括性能测试、安全性测试和兼容性测试等,确保应用在不同设备和环境下均能稳定运行。市场反馈机制AppStage集成了用户反馈机制,允许开发者直接与用户沟通,收集用户意见,并根据反馈进行产品优化。这种机制有助于建立用户信任,提升用户满意度,同时也为产品的持续改进提供了宝贵的用户视角。结论综上所述,AppStage为企业的应用快速迭代提供了全面的支撑,无论是在需求收集、开发流程优化、测试自动化还是市场反馈机制方面,都能够帮助企业提升效率,优化产品,更好地满足市场的需求。通过AppStage的平台,企业可以更快地将新产品推向市场,同时确保产品的质量和用户体验。
-
边云协同AI在KubeEdge Sedna中的实现步骤概述KubeEdge是一个开源的边缘计算平台,旨在将云原生能力延伸到边缘节点。Sedna作为KubeEdge的一个子项目,提供了边云协同AI的能力,允许在边缘设备和云端之间进行有效的模型训练和推理。下面将详细介绍在KubeEdge Sedna中实现边云协同AI的具体步骤。边云协同AI的基本原理边云协同AI的核心思想是将复杂的AI模型训练放在云端进行,然后将训练好的模型部署到边缘设备上执行推理任务。这样可以充分发挥云端的计算优势,同时利用边缘设备的实时性和本地性特点,实现快速响应和数据本地化处理。具体实现步骤模型训练:在云端利用丰富的计算资源对AI模型进行训练,这一步通常涉及大量的数据和复杂的计算过程。模型优化与转换:为了便于在边缘设备上部署和使用,需要对训练好的模型进行优化和转换,使其适应边缘环境的计算和存储能力。模型部署:将优化后的模型部署到边缘节点,边缘节点可以是各种类型的设备,如摄像头、传感器等。数据处理与特征工程:在边缘设备上收集和处理数据,并进行必要的特征工程,为AI模型提供输入。模型推理:利用边缘设备上的模型对数据进行推理,得出结果。结果反馈与模型更新:将边缘设备上的推理结果反馈给云端,云端根据这些信息更新和优化模型,必要时重新下发新的模型到边缘设备。持续学习与优化:通过不断的迭代和反馈,模型可以在实际使用中不断学习和优化,提高推理精度和效率。关键技术与组件KubeEdge-Ianvs:作为业界首个分布式协同AI基准测试平台,为算法和服务开发者提供全场景可扩展的分布式协同AI基准测试。终身学习训练模块:用于解决数据漂移问题,通过在新分布的数据上持续训练模型,提高模型的推理准确率。难例样本挖掘:通过挖掘难例样本,大部分简单样本在边缘节点直接得到推理结果,少部分corner case、难例样本上传云端由大模型推理得到更完善的推理结果。云边协同推理:通过云边协同推理,可以有效降低深度学习模型的推理时延,同时提高推理的准确率。结论KubeEdge Sedna通过一系列的技术和流程,实现了边云协同AI的有效落地。这种架构不仅提高了AI应用的效率和准确性,而且还能适应不断变化的边缘环境和数据分布,具有很高的实用价值和广阔的应用前景。
-
简述KubeEdge是一个开源的云原生边缘计算平台,它扩展了Kubernetes的容器编排能力到边缘节点。KubeEdge支持边缘设备的本地自治,这意味着即便在与云端的连接中断的情况下,边缘节点也能够独立运行和做出决策。本文将深入探讨KubeEdge如何实现这一功能,并分析其在网络中断时边缘节点的独立运行能力。KubeEdge的边缘自治能力边缘自治的核心组件KubeEdge的边缘自治能力主要依靠以下几个核心组件:MetaManager:负责在边缘节点上持久化存储元数据,包括Pod、ConfigMap、Secrets等资源的信息。当边缘节点与云端的连接断开时,EdgeD可以从MetaManager中读取这些元数据,以确保服务的连续性。EdgeD:这是KubeEdge中的一个轻量级的kubelet版本,它负责边缘节点的应用生命周期管理。EdgeD可以独立于云端的指令运行和管理Pod,因为它可以访问MetaManager中存储的本地数据。EventBus:负责在边缘节点内部以及边缘节点之间进行消息传递,支持边缘节点间的协同工作。DeviceTwin:用于在边缘节点上管理设备的状态,支持设备状态的同步和恢复。网络中断时的运行能力当网络中断时,KubeEdge确保边缘节点能够独立运行,主要体现在以下几个方面:应用和服务的持续性:由于MetaManager的存在,边缘节点上的应用和服务可以依赖本地存储的数据继续运行,不受云端连接中断的影响。设备管理的自治:DeviceTwin允许边缘节点在没有云端指令的情况下,根据本地存储的设备状态信息独立管理设备。边缘节点的自我恢复:即使在网络中断的情况下,边缘节点也能借助MetaManager中的数据实现故障后的快速恢复。轻量化设计:EdgeD的内存占用极低(约70MB),这使得它能够在资源有限的边缘设备上运行,增强了边缘节点的自治能力。结论综上所述,KubeEdge通过一系列精心设计的组件和机制,实现了边缘设备的本地自治。这些组件不仅支持边缘节点在网络中断时的独立运行,而且还能够确保服务的持续性和设备的有效管理。KubeEdge的这种设计使其成为一个适用于各种边缘计算场景的强大平台。
-
KubeEdge应对边缘设备动态性和不确定性的策略简介KubeEdge是一个开源的云原生边缘计算平台,它通过将Kubernetes的能力扩展到边缘设备,提供了一种有效的手段来应对边缘计算环境的动态性和不确定性。本文将详细讨论KubeEdge如何处理这些问题,并对其核心功能和策略进行深入解析。KubeEdge的核心功能KubeEdge的核心功能包括边缘设备管理、边缘服务、边缘应用管理以及云边通信。这些功能共同构成了KubeEdge应对边缘设备动态性和不确定性的基础。边缘设备管理边缘设备管理是指KubeEdge能够自动发现、配置和下发设备状态监测等功能。这使得用户可以通过Kubernetes的管理能力来扩展至资源受限的边缘设备上。边缘服务边缘服务功能允许用户将服务部署在边缘设备上,这些服务可以执行本地化处理,减轻云计算负担,提高应用程序性能。边缘应用管理边缘应用管理功能使得用户可以在边缘设备上部署和运行应用程序,支持容器技术和轻量级的容器管理,使得应用程序可以在资源受限的环境下高效运行。云边通信KubeEdge支持多种通信协议,如HTTP、MQTT和gRPC等,用户可以根据应用程序的需求选择合适的通信协议。KubeEdge的策略动态性与不确定性应对策略KubeEdge通过其轻量级的组件和事件驱动的架构,即使在资源受限的环境下也能保证应用程序的性能。此外,KubeEdge支持边缘离线自治,即使在与云端的连接不稳定时,依然可以保证应用的正常运行。故障自愈能力KubeEdge允许边缘节点在没有云边连接的情况下自主工作,当网络恢复后,边缘节点可以迅速同步云端的配置和状态,实现故障后的快速恢复。通信协议的选择与优化KubeEdge不仅支持标准的云边通信协议,还允许开发者根据边缘设备的特定需求编写自定义逻辑,以适配不同的设备。总结综上所述,KubeEdge通过其独特的架构和功能,为边缘计算环境提供了一种强有力的解决方案。它不仅能够应对边缘设备的动态性和不确定性,还能在边缘节点发生故障时提供自愈能力,并通过多样的通信协议选择与优化,保证了云边协同的高效性。随着技术的不断发展,KubeEdge将继续在边缘计算领域发挥其重要作用。
-
在KubeEdge中,Mapper是一个关键组件,它负责管理和控制边缘设备。Mapper可以设置/获取设备数据,获取并报告设备状态,并且是KubeEdge和设备之间的管理器。KubeEdge使用Device Controller、Device Twin和Mapper来控制设备,其中Device Controller位于云端,而Device Twin和Mapper位于边缘侧。根据搜索结果,KubeEdge的设计允许通过Mapper来管理边缘设备,这是一种云原生的设备管理方式。用户可以定义设备配置文件,并以Kubernetes自定义资源的方式来云原生化管理边缘物理设备。Mapper通过实现KubeEdge edgecore中的DMI设备管理统一接口完成自身向KubeEdge集群注册、设备数据上报的能力。虽然Mapper是KubeEdge中管理设备的标准方式,但搜索结果中没有明确指出管理边缘设备是否“必须”通过Mapper。然而,考虑到Mapper提供的设备管理能力和KubeEdge的架构设计,使用Mapper来管理边缘设备是推荐的做法,尤其是在需要充分利用KubeEdge提供的设备管理功能时。综上所述,虽然搜索结果中没有直接说明管理边缘设备“必须”通过Mapper,但Mapper是KubeEdge中用于设备管理的核心组件,因此在实际应用中,通过Mapper来管理边缘设备是最佳实践。深入研究KubeEdge的Mapper组件主要承担哪些功能?KubeEdge的Mapper组件是边缘计算框架中的一个关键部分,它主要承担以下功能:协议适配和转换:Mapper负责对接入KubeEdge的终端设备,进行协议的适配和转换,使这些设备能够与边缘设备通信。它支持多种物联网协议,如MQTT、BLE、MOBUS等,并能够将这些协议转换为KubeEdge内部使用的通信协议。设备接入:通过Mapper组件,开发者可以根据需要开发设备所支持的协议的Mapper,从而实现不同通信协议设备的接入到KubeEdge系统中。这有助于解决异构硬件接入的问题,使得多种设备能够统一管理和通信。消息传递:Mapper从消息代理(如MQTT broker)订阅设备状态更新的主题,并将这些更新转换为终端设备所支持的协议,然后发送给相应的终端设备。这样确保了设备状态的正确传递和同步。边缘自治支持:Mapper组件还支持边缘节点在与云端完全断开连接的情况下自主工作,通过本地持久化应用和设备元数据,确保边缘节点能够在离线状态下继续执行任务,并在网络恢复时与云端同步数据。综上所述,KubeEdge的Mapper组件是实现设备接入、协议转换、消息传递以及支持边缘自治的核心功能模块。如何在KubeEdge中定义设备配置文件?在KubeEdge中定义设备配置文件通常涉及到创建和管理设备的边缘计算资源。设备配置文件可以包含设备的各种信息,如设备ID、设备类型、通信协议等,这些信息对于设备的注册、发现和管理至关重要。创建设备配置文件定义设备信息:首先,您需要定义设备的基本信息,这通常包括设备的唯一标识符(如设备ID)、设备类型、通信协议等。创建配置文件:使用YAML或JSON格式创建设备配置文件。配置文件应包含设备的详细信息,并遵循KubeEdge的设备资源定义格式。应用配置文件:将设备配置文件应用到KubeEdge集群中。这通常涉及到使用kubectl命令行工具或通过KubeEdge的边缘管理系统(如EdgeHub)来部署设备资源。管理设备配置文件设备注册:配置文件中的设备信息将被用于设备的注册过程,确保设备能够被边缘计算环境识别和管理。动态更新:设备配置文件可以动态更新,以适应设备状态的变化或环境的调整。监控和维护:KubeEdge提供了监控工具来跟踪设备的状态和性能,以及维护设备配置文件的准确性和时效性。请注意,具体的配置文件格式和管理命令可能会随着KubeEdge版本的更新而变化。因此,建议您参考最新的KubeEdge官方文档或社区指南来获取最新的信息和最佳实践。由于搜索结果中没有提供具体的最新信息,以上步骤是基于KubeEdge的一般操作流程提供的指导。如果需要最新的操作细节,您应该直接查阅KubeEdge的官方文档或参与其社区讨论。KubeEdge支持哪些类型的设备管理?KubeEdge是一个开源的边缘计算平台,它能够将云服务扩展到物理世界的边缘,实现设备、数据和应用的无缝连接。在设备管理方面,KubeEdge支持多种类型的设备,包括但不限于:物联网设备:KubeEdge能够管理各种物联网设备,这些设备可以是传感器、执行器或其他智能设备,它们能够收集数据、执行命令或响应云服务的指令。嵌入式设备:KubeEdge支持嵌入式系统,这些设备通常具有有限的计算资源和电源,但可以通过KubeEdge进行有效管理和控制。工业设备:在工业自动化和制造领域,KubeEdge可以管理各种工业设备,如PLC、机器人等,实现生产过程的优化和监控。移动设备:KubeEdge也支持移动设备的管理,如智能手机和平板电脑,这些设备可以作为边缘计算的一部分,执行特定的应用程序或服务。KubeEdge通过其边缘计算框架,提供了设备的注册、发现、监控和远程控制等功能,确保设备能够在边缘网络中高效运行。此外,KubeEdge还支持设备数据的本地化处理和分析,以及与云服务的安全通信,从而实现边缘计算的优势。
-
AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容的技术。它使用了JavaScript的XMLHttpRequest对象(或在现代浏览器中的Fetch API)来实现异步网络请求。AJAX的优点是可以提高用户体验,因为它允许网页动态加载数据,而无需重新加载页面。AJAX技术广泛应用于各种Web应用程序中,例如Gmail就是早期大规模使用AJAX的例子之一。在使用AJAX时,开发者需要注意浏览器的同源策略,这意味着JavaScript发起的AJAX请求通常只能与当前页面相同的源进行通信。为了实现跨域请求,可以使用CORS(Cross-Origin Resource Sharing)、JSONP或设置代理服务器等方法。最新的信息显示,AJAX的概念和应用仍然是Web开发中的重要组成部分,开发者可以通过学习和应用AJAX来创建更加动态和响应迅速的Web应用程序。AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。AJAX编程步骤?1) 获得 XmlHttpRequest对象2) 使用 XmlHttpRequest向服务器发请求。 a.发送get请求: /* open(请求方式,请求地址,同步/异步) * 请求方式: get/post * 请求地址:如果是get请求,请求参数添加到地址之后。 * 比如 check_user.do?username=zs * 同步/异步:true 表示异步。*/xhr.open('get','check_user.do',true); b. 发送 post 请求:xhr.open('post','check_username.do',true); //#必须添加一个消息头content-type xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");3). 在服务器端,处理请求。4).在监听器当中,处理服务器返回的响应。xhr.onreadystatechange=function(){ //编写相应的处理代码 if(xhr.readyState == 4){ //只有 readyState 等亍 4,xhr 才完整地接收到了服务器返回的数据。 //获得文本数据 var txt = xhr.responseText; //获得一个xml dom对象。 var xml = xhr.responseXML; //dom操作、更新页面 } };5.xhr.send(null)AJAX技术的优点? 1.页面无刷新 2.不打断用户的操作,用户的体验好 3.按需获取数据,浏览器和服务器之间数据的传输量减少 4.是一个标准技术,不需要下载任何的插件 5.可以利用客户端(浏览器)的计算能力
-
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。1.Hibernate是什么,有什么作用和好处? Hibernate是一个数据库访问框架,用于实现对数据库的增删改查操作。使用Hibernate框架可以简化数据库访问操作,要程序员将更多的经历放在业务层编写上。 原有JDBC操作数据库存在一些问题,主要有以下几个方面: a)需要编写大量复杂的SQL语句 b)需要设置大量的SQL参数或者将ResultSet取值封装成实体对象 c)当数据库移值时,需要修改部分SQL语句和操作 使用Hibernate框架可以解决以上问题。2.什么是ORM?ORM(Object Relation Mapping)对象关系映射。意思是将程序中的实体对象和关系数据库表中的一行记录进行映射。这样在程序中使用该工具就可以将一个对象写入数据表,或者将数据表记录自动封装成一个对象返回。(这个也是Hibernate实现的原理)3.Hibernate的几个核心接口? Configuration类:Configuration用于配置并启动Hibernate。SessionFactory接口:一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。它是线程安全的,同一个实例可以被应用中的多个线程共享。Session接口:Session接口是Hibernate应用中使用最广泛的接口了,它是持久化管理器,提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例。Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。Transaction接口:Transaction是Hibernate的数据库事务接口,它对底层的事务接口进行了封装。Query和Criteria接口:这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。4.Hibernate的一级缓存? 是session级别的缓存。 a.当查询某个对象时,Hibernate首先去一级缓存中查找,如果存在将缓存中的对象取出返回。如果不存在才去数据库查询。 b.当查询某个对象时,Hibernate会自动将数据库查询出的对象放入一级缓存。(例如session的load和get方法查出的对象) c.一级缓存默认启用,一般被称为Session级别的缓存。因此一级缓存随着Session对象创建,随着Session对象释放而销毁。 d.每个Session都有自己一个独立的一级缓存空间,不能访问其他Session的缓存空间。 ----------------------一级缓存的好处------------------------- 在使用同一个Session查询同一个对象若干次的时候,只在第一次时查询数据库,后续几次都会从缓存取出。从而减少对数据库的查询次数。 -----------------------**使用建议(重点)**----------------------------为了将一级缓存的优势更好的发挥出来,建议在处理一个请求时,使用一个Session对象处理。可以使用ThreadLocal技术封装Session. 在Hibernate中,可以 <!-- 指定将session与处理线程绑定,实现线程单例 --> <property name="current_session_context_class"> thread </property>5.Hibernate的二级缓存? 二级缓存也称为进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享 ,可以被多个不Session对象访问,二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。6.Hibernate中session的get和load方法区别? 相同点:作用相同,都是按照主键条件查询某个对象。 不同点:1).get方法不使用延迟加载机制,load采用延迟加载机制2).如果没有满足条件的记录,get方法返回null,load则抛出异常3).load方法返回的对象是一个动态代理类(Hibernate框架动态生成的,是实体类的子类型)。4).get方法返回的对象类型就是原实体类型注意:a.在程序中,如果使用上述延迟加载操作,需要避免Session对象过早关闭问题。(could not initialize proxy - no Session)b.为避免上述异常,一般采用OpenSessionInView模式。c.可以将Session关闭采用Filter或Interceptor(Struts2推荐)封装。7.线程单例及其使用线程单例:回到服务器中,只要是服务器,每一个浏览器访问服务器时,服务器会为每个浏览器创建一个线程。假设Some就是Session,如果使用这种机制获取Session,当同一个用户浏览器不论怎么调用session都是同一个(只要在相同的线程中)。这种机制就叫做线程单例。线程单例的实现原理就是如上SomeFactory做的。private static ThreadLocal<Session> tl = new ThreadLocal<Session>0;Session session = tl.get0; if (session == null) { session = factory.openSession(); tl.set(session); }8.HQL和SQL的区别 Hibernate Query Language(Hibernate查询语言) 结构化查询语言(Structured Query Language)简称SQL HQL语句结构与SQL语句相似, SQL语句是面向数据表和字段进行查询,而HQL是面向映射后的对象和属性进行查询。因此HQL被称为面向对象查询语句。 HQL语句与SQL相似点如下: a.HQL语句支持select,from,where,order by ,group by,having子句 b.HQL语句支持分组函数max,min,avg,sum,count c.HQL语句支持运算符和表达式 d.HQL语句支持>,>=,<,<=,in,not in,like,between... and..., <>,!=等查询条件,也支持and,or关键字 e.HQL语句支持inner join,left outer join,full join 等连接 HQL语句与SQL不同点如下:(下面内容为重点) a.HQL区分大小写(大小写敏感),除关键字之外 b.HQL语句使用的类名和属性名(将SQL表名替换成类名,字段名替换成属性名) c.HQL不支持select *写法,但支持select count(*) d.HQL语句不支持表连接的on子句,on关联条件可以通过关联映射自动追加9.Hibernate中操作并发处理?(乐观锁和悲观锁) Hibernate框架可以使用锁的机制来解决操作并发。 a.悲观锁 在数据查询出来时,就给数据加一个锁,锁定。这样其他用户再执行删、改操作时不允许。当占用着事务结束,锁会自动解除。 Hibernate采用的是数据库锁机制实现悲观锁控制。 缺点:将并发用户操作同步开,一个一个处理。当一个用户处理时间比较长时,效率会比较低。 b.乐观锁 允许同时更新提交,但是最快的会成功,慢的失败。 在记录中追加一个字段值,用该字段值当做版本。当最先提交者提交后,会自动将版本字段值提升,这样其他用户提交,会发现版本低于数据库记录目前版本,因此抛出异常提示失败。 特点:允许用户同时处理,但只能有一个成功,其他失败,以异常方式提示。
-
在微服务架构中,确保服务间通信的稳定性和响应性,可以采取以下措施:选择合适的通信方式HTTP/RESTful API:适合快速实现和开放内部端口,适用于简单的同步通信场景。RPC(如gRPC):提供高效和紧密的服务间通信,适用于对性能有较高要求的场景。消息队列:采用异步通信方式,解耦服务之间的直接依赖关系,提供高可靠性和可伸缩性。WebSocket:适用于实时性要求高的场景,如即时聊天、实时通知等。实现服务发现和注册使用工具如Eureka或Consul可以帮助动态发现服务实例,确保服务能够正确通信。使用负载均衡通过负载均衡机制,如NGINX、HAProxy或Spring Cloud LoadBalancer,可以将请求分发到多个服务实例,提高系统的可用性和处理能力。实施熔断机制使用断路器模式(如Hystrix)可以有效地处理服务调用中的异常情况,防止故障扩散。监控与故障处理实施监控和故障处理机制,如Prometheus和Grafana,可以实时监控服务状态,并快速响应故障。数据一致性与事务管理在分布式系统中,使用分布式事务管理工具或补偿机制来确保数据一致性。通过上述措施,可以在微服务架构中实现稳定且响应迅速的服务间通信。
-
大模型微调时,所需数据通常有以下要求:数据质量:数据应具有高质量,确保准确性和全面性,这对于模型在特定领域的表现至关重要。数据相关性:数据应与微调的任务或领域紧密相关,以便模型能够学习到特定的知识和语言用法。数据格式:数据需要按照模型提供商要求的格式进行准备,例如,可能需要将数据转换为特定的对话或消息格式。数据量:虽然少量数据就能带来性能提升,但数据量的增加在初期会显著改善模型性能。然而,当达到一定数据量后,性能提升会趋于饱和,进一步增加数据对提升效果的边际贡献变小。数据平衡性和多样性:数据集中应包含不同类型的回答,并保持平衡,以确保模型能够在各种情境下都能生成适当的响应。数据预处理:通常需要对数据进行预处理,包括清洗、分词、编码等,以便模型能够更好地理解和学习数据。数据安全性:在某些情况下,企业客户可能需要将数据上传到模型提供商的服务器进行微调,因此数据的安全性和隐私保护也是一个重要考虑因素。在进行微调之前,应仔细考虑这些要求,并根据具体任务和模型的需求进行相应的数据准备和格式化。为了保证大模型微调时数据的质量和相关性,可以采取以下措施:数据质量筛选:使用奖励模型对数据进行质量打分,确保问题和答案的质量达标。多样性和必要性筛选:通过算法选择多样性高且对模型来说必要的数据,以填补模型能力的空白。专业知识和数据收集:收集与微调方向相关的专业知识和数据,确保数据的准确性和全面性。数据格式化:整合数据并使其符合模型提供商的格式要求,确保数据的一致性和模型的兼容性。人工审核:对标注数据进行人工审核,确保标签的一致性和准确性。微调策略:在微调过程中使用适当的学习率、正则化技术和数据增强方法,以提高模型的泛化能力和防止过拟合。通过上述措施,可以有效地提高微调数据的质量和相关性,从而提升微调后模型的性能。
-
SD-WAN是软件定义的广域网,通过混合链路,实现企业分支、总部和分支互联,从而简化部署、集中管理和降低成本。SD-WAN(Software Defined Wide Area Network, 软件定义的广域网)将企业的分支、总部和多云之间互联起来,应用在不同混合链路(MPLS,Internet,5G,LTE等)之间选择最优的进行传输,提供优质的上云体验。通过部署SD-WAN可以提高企业分支网络的可靠性、灵活性和运维效率,确保分支网络一直在线,保证业务的连续和稳定。业界标准中的SD-WAN对于SD-WAN的定义,不同SD-WAN的厂商会给你不同的答案,我们来了解一下业界的标准定义。Gartner的定义Gartner明确定义了SD-WAN的基本特性:支持混合链路接入:如MPLS、Internet、LTE等。支持动态调整路径:允许跨WAN连接进行负载分担。管理和业务发放简单:如支持在分支机构的零配置开局,应该与家庭Wi-Fi一样易于设置。支持VPN以及其他增值业务服务:以及其他第三方服务,如WOC(WAN Optimization Controller,广域网优化控制器)、防火墙等。MEF的定义MEF(Metro Ethernet Forum)在MEF-70中给出了第一个SD-WAN的标准化定义。标准中明确定义了SD-WAN组件、能力,并为每个组件的所有接口定义了框架和API的服务规范。华为的SD-WAN华为SD-WAN解决方案,遵循MEF的标准,并满足Gartner对SD-WAN的定义。华为SD-WAN拥有软件、硬件和虚拟计算平台等丰富的软硬件产品组合,丰富的接口类型,基于技术创新带来的差异化优势,在WAN Edge基础设施市场始终保持着强劲的增长势头,在2018~2020年Gartner发布的WAN Edge基础设施魔力象限报告中始终跃居挑战者象限。SD-WAN的好处是什么?针对企业网络当前面临的WAN封闭架构、业务体验难保障、业务部署慢和运维困难的问题,华为SD-WAN解决方案为企业提供分支与分支、分支与数据中心之间提供全场景随需互联,并通过应用级智能选路与智能加速、智能运维,构建更好的业务体验,重塑企业WAN互联全流程的业务体验。华为SD-WAN主要好处如下:5G超宽,随需互联:5G/有线多种上行,随时随地连接到总部和云,大规模灵活组网使能可靠、可扩展的企业分支互联。智能选路,极智体验:通过应用智能选路和优化,保证办公、生产等任意地点分支的本地和云上关键应用的体验。一体管控,智能运维:LAN/WAN统一云管理,简化海量分支业务部署和运维复杂度。SD-WAN的架构,SD-WAN是如何工作的?从逻辑分层及功能角度划分,SD-WAN的逻辑架构主要包括业务呈现层、管理层、控制层以及网络层,每层承担的功能不同,其中又包括若干核心组件,如下图所示。业务呈现层SD-WAN的业务呈现层向下对接网络控制器,对外通过业务Portal界面实现SD-WAN的业务呈现和发放。业务呈现层当前有如下两种形式:自研Portal界面:由SD-WAN解决方案提供商向客户提供SD-WAN端到端的业务配置和处理流程。第三方BSS/OSS:第三方根据业务功能和展示风格需要,借助网络控制器的北向开放API,实现SD-WAN方案的集成和界面的灵活定制。管理层网络控制器是管理层的核心组件,是整个SD-WAN的“智慧大脑”。SD-WAN网络控制器一般有网络编排和管理功能:网络编排:负责SD-WAN面向业务的网络模型抽象、编排和配置自动化发放,主要包括企业WAN组网和各种网络策略相关的业务编排。网络控制器通过对企业WAN进行网络模型的抽象和定义,屏蔽了SD-WAN部署和实现的技术细节,使WAN网络配置和业务发放更加简易、灵活。网络管理:网络控制器的管理组件实现了企业WAN 的网络管理与运维功能,包括但不限于SD-WAN网元的告警和日志等故障信息采集;基于链路、应用、网络的性能数据采集、统计和分析,并对最终客户进行网络拓扑、告警管理、性能等运维信息的多维度统计和呈现。控制层RR(SD-WAN Route Reflector,SD-WAN路由反射器),是控制层的核心组件,主要负责网络控制。RR的功能主要包括:SD-WAN租户VPN路由的分发和过滤,VPN拓扑的创建和修改,站点间Overlay隧道的创建和维护等。相比传统网络完全的分布式控制方式,这种集中式的控制实现了企业WAN控制平面和转发平面的分离,简化了网络运维操作,减少了网络配置错误几率,提升了企业WAN的运维效率。网络层从业务角度讲,企业的分支、总部和数据中心以及在云上部署的IT基础设施等都可以统称为企业的站点。不同企业站点用于WAN互联的网络设备以及中间WAN网络一起构成了SD-WAN网络层。SD-WAN的网络设备,主要包括:Edge和GW两种类型。EdgeEdge,即(SD-WAN Edge)的主要是指企业总部、分支、数据中心或者云站点的出口CPE设备,是SD-WAN隧道的发起和终结点,也可以看做是SD-WAN网络的边界点。Edge之间的Overlay隧道可以构建在任意的有线或者无线的Underlay WAN技术之上,并且通常与某种数据加密技术(如IPSec)结合使用,以确保企业WAN数据传输的安全性。Edge一般可以采用如下设备,在SD-WAN中,CPE可以是硬件形态的传统CPE和uCPE,也可以是软件形态的vCPE。CPE:传统硬件CPE。CPE作为一种网络设备,最早是以硬件盒子的形态部署于站点中。从硬件角度来看,CPE中通常会包含主控板、接口卡、多核CPU以及各种硬件组件。从软件功能角度来看,CPE会提供二层交换和三层路由的功能,可以连接站点的内部网络和外部网络。一般把这种CPE称之为传统CPE(Traditional CPE)。uCPE:随着云计算和NFV技术的发展,云化和虚拟化成为不可阻挡的趋势,传统的专有硬件设备都已经有了软件化的形态,安全、广域加速、负载均衡等功能可以通过VNF(Virtual Network Function,虚拟网络功能)的形式提供。如果能将这些功能都放进CPE里面,既能降低设备成本和能耗,又能实现灵活快速的业务发放。vCPE:如果把传统CPE中的网络功能从硬件盒子中抽离出来,通过纯软件的方式实现,彻底将软件与硬件解耦,这种新的CPE形态就称为vCPE(Virtual CPE)。vCPE可以代替专用的硬件设备,通过软件的方式来实现传统CPE的功能,这样的方式有利于更轻松、更快速的部署业务,同时增强了业务的可伸缩性和可扩展性,并且降低了部署和运营成本。GWGW(SD-WAN GW)是联接企业新的SD-WAN站点和其他传统VPN站点的中间设备。由于老的传统非SD-WAN站点的存在,借助GW实现SD-WAN网络到企业传统分支网络的互通。SD-WAN与MPLS VPN专线有什么关系?在传统的WAN拓扑中,主要通过MPLS专线进行互联。可以有效保证带宽、减少数据包传输的延时。SD-WAN是从MPLS技术演变而来的。SD-WAN支持MPLS、Internet、LTE和5G链路灵活组合进行WAN分支互联。通过如下方面,可以帮助你更好的理解MPLS与SD-WAN之间的关系:成本:MPLS专线费用比较贵。SD-WAN支持MPLS、Internet、LTE和5G链路灵活组合,从而整体降低链路成本。安全:MPLS可以提供安全、可靠的连接,适用于对安全性比较高的应用。在SD-WAN中,优先选用MPLS链路,可以保障连接的安全性。性能:在同等带宽下,Internet的性能比MPLS的性能要低。SD-WAN可以通过将多条Internet链路聚合在一起,形成一条逻辑链路,从而保障性能。稳定性:网络中会存在对时延、丢包率敏感,链路质量比较高的关键业务。MPLS没有提供一个平台来区分优先级,通过SD-WAN提供的策略的管理和智能选路能力,可以实现在发生拥塞时低优先级应用避让高优先级应用,即关键业务的流量通过MPLS进行发送,而其他所有业务的流量则通过高宽带的Internet进行发送。部署效率:传统的MPLS部署可能需要1~6个月,SD-WAN比较短,只需要几个小时。云计算、SaaS等移动应用:MPLS的建网及部署方式很难规模化的应用于云计算及SaaS。为了支持更快地访问在云中运行的应用程序,SD-WAN可以配置流量转向规则,以便为这些应用程序使用Internet连接。因此,云流量从分支机构直接传输到互联网,而不是回程到总部。一些SD-WAN运营商可以从其网关直接访问云数据中心(例如AWS或Microsoft Azure),从而提高托管在这些云上的应用程序的性能和可靠性。SD-WAN使建立混合WAN更加容易,并且可以在成本,可靠性和性能之间找到适当的平衡,以实现各种应用程序流量的混合。如何保障SD-WAN的安全?SD-WAN的安全性可以从系统安全和业务安全两个方面来进行保障。系统安全是SD-WAN解决方案必备的基础安全能力,SD-WAN解决方案系统在初始化之后就应该自动具备这些能力,使其能安全可靠的运转。而业务安全是单独部署的安全功能,要根据企业用户实际的业务安全需求灵活选择合适的安全防护措施。系统安全系统安全涵盖的范围主要包括:SD-WAN解决方案中组件间的通信安全、多租户安全以及组件自身的安全。SD-WAN解决方案系统包含多个组件,组件本身以及组件之间的通信都会受到安全威胁。因此,必须要有安全措施来保证SD-WAN解决方案系统的构建和运转是安全可信的。保证系统安全,即通过身份认证、数据加密、数据验证、权限控制等措施,避免非法接入、信息泄露、数据篡改等安全问题。特别是针对CPE接入的场景,SD-WAN解决方案基于零信任(Zero Trust)的安全理念,严格验证CPE的身份信息,防止身份仿冒,确保只有合法可信的CPE才能接入。业务安全业务安全指的是SD-WAN解决方案所承载业务的安全,部署SD-WAN解决方案的目的是要帮助企业更好地开展业务,根据企业的业务模型,业务安全包括站点间互访业务的安全、站点访问Internet业务的安全、站点入云业务的安全。满足业务安全的需求,就是要针对不同的业务采取相应的安全防护措施。例如,对于站点间互访业务,要加密处理保证其在Internet上传输的安全性;对于站点访问Internet业务,可以使用CPE提供的安全功能,如ACL过滤、防火墙、IPS和URL过滤以及VAS高级安全功能等,防御各类攻击以及入侵行为。需要注意的是,这些安全功能可以基于VPN来配置,即针对同一个租户内的不同部门,实施差异化的业务安全防护措施。另外,SD-WAN解决方案还支持对接第三方云安全网关,利用第三方云安全网关对访问公有云、SaaS的业务流量进行安全防护。SD-WAN与云有什么关系?随着云化时代的到来,越来越多的企业已经将自己的IT系统搬到公有云上。企业WAN也需要能灵活地连接各种云资源,这些云资源主要包括:IaaS 基础云服务以及SaaS云应用。公有云站点的Edge可以部署vCPE软件虚拟CPE设备,并通过VNF(Virtual Network Function,虚拟网络功能)的形式提供软件化的安全、广域加速、负载均衡等功能。将这些功能都放进CPE里面,既能降低设备成本和能耗,又能实现灵活快速的业务发放。为了更高效地访问SaaS 应用,SaaS路径可能存在多种路径选择,通过SD-WAN的智能选路能够实时感知每条可选路径的网络SLA(Service Level Agreements,服务等级协定)
-
技术干货Linux常用命令英文全称与中文解释https://bbs.huaweicloud.com/forum/thread-0286156695961244013-1-1.html上报的信息回传用户集群知识点https://bbs.huaweicloud.com/forum/thread-02127157192962708041-1-1.htmlCloudbursting在混合云架构中的支持方式https://bbs.huaweicloud.com/forum/thread-0220157193056582036-1-1.htmlCloudbursting全量同步对带宽的影响https://bbs.huaweicloud.com/forum/thread-0207157193256196040-1-1.htmlCloudBursting解决方案的故障转移和容错处理https://bbs.huaweicloud.com/forum/thread-02113157193477132029-1-1.htmlspring中生成数据库主键的方式小技巧https://bbs.huaweicloud.com/forum/thread-02127157710201311056-1-1.htmlKubeEdge在边缘AI场景下提升模型推理效率的方法https://bbs.huaweicloud.com/forum/thread-02127157709634884049-1-1.html边缘计算、边缘AI与云计算的区别https://bbs.huaweicloud.com/forum/thread-02119157709359194056-1-1.htmlKubeEdge安装部署要求https://bbs.huaweicloud.com/forum/thread-0207157709148993058-1-1.htmlKubeEdge的安全性与隐私性保障措施https://bbs.huaweicloud.com/forum/thread-02113157360575162045-1-1.html适合Cloud Bursting的工作负载类型https://bbs.huaweicloud.com/forum/thread-02113157194437212030-1-1.html实现华为云的软件仓库(SWR)镜像同步笔记https://bbs.huaweicloud.com/forum/thread-02127157193625407035-1-1.html资讯资讯|首个!华为云弹性云服务器通过信通院云网质量测评标准https://bbs.huaweicloud.com/forum/thread-02127157708962658052-1-1.html资讯|领跑!华为云位居央国企上云服务商领导者https://bbs.huaweicloud.com/forum/thread-02127157706828322051-1-1.html
上滑加载中
推荐直播
-
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中 -
GaussDB应用实战:手把手带你写SQL
2025/01/09 周四 16:00-18:00
Steven 华为云学堂技术讲师
本期直播将围绕数据库中常用的数据类型、数据库对象、系统函数及操作符等内容展开介绍,帮助初学者掌握SQL入门级的基础语法。同时在线手把手教你写好SQL。
回顾中 -
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
2025/01/10 周五 15:30-17:30
MindStudio布道师
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
即将直播
热门标签