20年开源老司机手把手教你玩开源——openEuler入门指南

引言

openEuler社区已经建立起来了,也有不少合作伙伴, OSV, ISV等参与进来。整个社区的治理结构也初步建立了起来。但毕竟是一个年轻的社区,因此有一些流程方面还有待优化,很多文档还有待于完善。

鉴于有很多希望参与到社区里的工程师对整个社区的运作流程,开发流程还比较陌生,我总结了一个文档来帮助一个工程师更容易的参与到社区中。

openEuler社区概要

openEuler的主站点是https://openeuler.org/

主站点主要是提供一些入口,对于工程师来说,最重要的应该是下载链接:

https://openeuler.org/zh/releases.html

除了下载以外,对工程师来说,真正的社区开始之旅的起点:

https://openeuler.org/zh/developer.html

这个链接给大家做了一个简要的引导,但是不幸的是,对于一个新人来说,信息量依然非常大,可能有些摸不到头脑。下面,就让我带着大家一步步的化繁为简的做一次openEuler参与之旅吧。

法律合规是第一步,也是最重要的一步

“开源”这两个字眼虽然在很大程度上代表了自由,奔放,随心所欲,符合码农天生追求“自由飞翔”的特质。但是开源并不是法外之地,因此法律合规是一个社区健康发展最重要的前提,没有之一。因此,任何一个人,如果想要参与到openEuler项目中,第一步就是要签署CLA协议。协议的签署网址是:

https://openeuler.org/en/cla.html

虽然协议并不复杂,但是作为一个码农,通常我都对这类法律文书都是免疫的,我们连需要给自己赔钱的保险合同都不会多花上一分钟时间看上一眼,对于这种需要自己奉献的条款又怎会关注呢?还有更关键的是,如果码农看懂了法律文书,那还是码农么? 虽然这很大程度是我们码农的现状,但是我还是建议大家认真阅读一下协议,了解一下权益范围并没有坏处。

我们是开源的

openEuler社区原则上只接受开源协议的软件,哪些开源协议是社区认可的开源协议呢?大家可以参考下面的网址。这个网站上所列举的开源协议都是openEuler社区所能接纳的协议。

https://opensource.org/licenses/alphabetical

对于社区本身,我们默认使用mulan V2协议,https://opensource.org/licenses/MulanPSL-2.0,这是一个非常友好的开源协议,也欢迎大家更多的使用这个协议来开发开源软件。

我能做点什么

在签署完CLA协议,了解我们所认可的开源协议范围以后,需要完成社区的注册。

由于openEuler本身是开放到gitee.com上,因此需要大家在gitee上拥有账号。我们也衷心希望gitee能成长为世界级的代码托管平台。

当大家完成了这些过程以后,就需要考虑在社区里具体能做点什么了。参与社区有很多种方法和形式,如果总结起来,大体有下面的四类:

  1. 提交一些需求,或者bug,简单来说就是发觉哪里用的不爽,直接提要求。 或者在用openEuler的过程中发现了一些问题,然后需要在社区把这个问题提出来。
  2. 为社区修正bug,这是更高一个层面的参与社区了,在这个层面,参与者实质上是以一个开发者的姿态进入到了社区中。一般我们都提倡,除了提出问题,更期待大家能解决问题。
  3. 贡献软件包,发现openEuler缺失了一个软件包,帮openEuler把这个软件包补上。实际上贡献软件包的过程就是帮助openEuler提供更丰富功能的过程。希望随着大家的参与,openEuler能够成为一个“无所不有”的软件生态系统。
  4. 开发新软件,有自己的一些想法,独立开发一个全新的软件,并将这个软件贡献到openEuler社区,成为openEuler发行版本中的一份子。

我们就一个个来看看这4种参与方式如何进行把。

 

网站和社区

在具体讨论这四类参与方法之前,我先给出三个网址链接。

  1. https://openeuler.org/
  2. https://gitee.com/openeuler/
  3. https://gitee.com/src-openeuler

第一个网址是openEuler的门户网站,是供大家获取一些通用信息的地方,前面已经提到过了。而真正我们所谓的“社区”则是体现在2,3这两个网址上。

这两个网址互相有链接,它们分别长这个样子:

长得这么像,为什么要分两个网址呢? 两者有什么分工呢?我们在后续讲解中会慢慢的给大家说清楚。

不论怎么样,这两个网址,以及里面的内容将会是社区工作的主要场所。虽然人机界面并不友好,但我相信对于码农来说这不是一个大问题,因为码农们的世界从来都不曾经友好过。

 

参与方式一:提交需求&bug

最基本参与社区的方式当然是要先用一用社区的物件,看看还有哪些需要改进的地方。提出一些有价值的建议和意见了。这几乎是最简单参与社区的方式了。

在社区中,我们提交问题都是通过“issue”机制来进行。但是在提交之前,提交人得先明确这个issue要提交给谁。在社区里,我们是一个个“repo”来对功能进行分组的。比如我们著名的Linux操作系统的“内核”(kernel)就有一个独立的“repo”(通常我们称之为“仓”)。

如果你发现了一个内核的问题,或者需求,那么就需要找到内核相关的repo地址:https://gitee.com/openeuler/kernel

它的界面这个样子。

其中红圈里大家可以看到Issues这个字样,这就是我们所有问题&bug&需求的入口了。点进去以后可以看到:

红圈位置的按钮就是我们建立一个新的Issue的入口。

进入以后,就可以提交issue了,有分类栏来说明这个issue属于什么类别。

 

在这里,可能会有一些同学们会问:为什么没有一个bugzilla?这是一个拷问灵魂的问题,是呀,为啥没有建立一个工程师们更为熟悉的bugzilla呢?我没有办法给出一个合理的解释,不过目前看越来越多的项目都逐步通过issue,PR等机制来管理项目,如果再独立构建一个bugzilla系统,那么和PR,Merge合入等的工作就需要进行交联,复杂度会增加,因此目前我们还是选择通过issue来管理bug和需求。

这里有一个小问题,我的问题需要提交到哪里去呢?

 

Issue的归宿

总体来说,提交issue分如下几类:

  1. 具体软件的问题直接提交到相关的软件repo中,比如上面所提到的kernel的repo中。
  2. 社区中的一些基础设施用的不爽,比如网页看起来不顺眼等,提交到https://gitee.com/openeuler/infrastructure,基础设施组。
  3. 如果是一些社区治理方面问题,例如技术选型,软件的增加,删除,gnome和KDE哪个更图形界面原教旨主义一些等问题可以提到https://gitee.com/openeuler/community里。
  4. 如果你实在不知道该提到什么地方,就统统提交到https://gitee.com/openeuler/community-issue,这里会为你排忧解难。

更为详细的issue提交流程可以参见如下的专业讲解。

https://gitee.com/openeuler/community/blob/master/zh/contributors/issue-submit.md

 

参与方式二:修复bug

在社区里,通常我们希望提出问题并同时解决问题,如果有一个问题,当然最好的情况是同时提供问题解决的patch补丁。我们以社区的轻量化容器引擎iSulad为例,https://gitee.com/openeuler/iSulad,假定我们需要为iSulad提交一个patch补丁,基本流程如下:

第一步:建立自己的分支

在红圈处先要Fork一个“分支”到自己的账号下。如果大家不清楚fork的含义,建议学习一下git的使用方法。在这里要提一句,无论如何,现代工程师要理解git的开发模式,不了解git在当代几乎会寸步难行。

 

第二步,修改代码并生成Pull Request(简称PR)

当fork完毕以后,大家可以在下图的红圈1中发现,目录已经从openEuler切换成了自己的账户。

接下来,就可以在自己的“分支”上进行代码的修改了。

修改完以后,点击红圈2中的+Pull Request,这可能是提交代码中最关键的一个步骤,这里会正式生成一个patch并送到https://gitee.com/openeuler/iSulad这个原始社区。

比如我修改了一个函数,增加了一行printf(“hello, world”)这行代码。那么PR看起来就是这样的:

你需要为这个PR起一个名字,同时填写一个说明。分别是红圈1和2,最后确定patch没有问题以后,点击红圈3中的“创建”按钮提交。

你会在openEuler/iSulad上看到你所提交的PR,红圈一表明你提交的PR已经进入了iSulad的社区,红圈2中的数字228是这个PR的编号。同时这个PR的URL是:https://gitee.com/openeuler/iSulad/pulls/228

至此,作为一个patch提交者的工作就做完了,你剩下所要做的事情就是耐心的等待iSulad开发组的maintainer来审核你的patch,比如我相信今天晚上他会非常诧异,谁提交了这么一个stupid的patch,而且公然用useless demo这样的PR题目来挑战他脆弱而敏感的maintainer神经。

因此,你的PR可能有三种命运:

  1. 被iSulad社区接受。
  2. 被iSulad社区残忍的拒绝。
  3. 提出修改意见,修改后再提交PR。goto 1

不仅仅是可以提交代码的PR,任何修改,甚至是为readme修正了一个拼写错误,所遵循的流程都一摸一样。

更细致,更专业的介绍请参考:

https://gitee.com/openeuler/community/blob/master/zh/contributors/Gitee-workflow.md

这里有一步步的教程引导大家来提交。

另外,PR的提交也在很大程度上体现了提交者的专业能力和亲和力。Be nice很重要,下面的链接可以帮助大家理解如何更优雅的提交一个PR。

https://gitee.com/openeuler/community/blob/master/zh/contributors/pull-request.md

好了,恭喜您,至此,您的第一次真正意义上的社区开发之旅就画上了一个完美的句号。

让我们进入下一个挑战环节,为openEuler增加一个新的软件包。

参与方式三:贡献软件包

在能够为openEuler贡献一个软件包之前,需要我们的开发者理解两个基本的概念:

  1. 什么是Linux的软件包。或者说Linux操作系统是怎么组织的。
  2. 如何制作一个软件包。

 

OS是怎么组织的

显然这是一个非常巨大的话题,可能需要写一本书来讲OS是怎么组织,怎么构建出来的。在这里我只能简要的给大家介绍一下。

实际上,一个OS系统的组成既复杂,也简单。

何所谓简单呢,其实OS本质上就是一堆安装包的大杂烩,就类似我们不论使用Windows也好,使用Android也罢,或者使用Linux,我们都经历过“安装”这个概念,就是从网上,或者是从“仓库”中下载一个安装包,然后安装到系统上,所以大家可以看到安装的“进度条”。实际上,一个OS的安装过程和在andorid上安装微信的道理一摸一样。只不过所谓的安装OS是需要一次性的要把几千个软件包按照一定的顺序安装到机器中。

那么OS所谓的组织很复杂呢,大家可以想象以下,几千个软件,他们之间会有很多的交联关系,通常我们叫做“依赖关系”,就好比,如果你想用微信小程序,那么前提是必须先得有微信,那么安装微信小程序的前提就是必须要先安装微信。因此,即使我们考虑一个OS的安装过程,其实也是非常复杂的,必须要精确的计算哪些软件需要先安装,哪些需要后安装。随着系统的膨胀,那么这些软件包之间就形成了复杂的网状关系。即使我们这些行业内的人都为此头痛不已。

讲了这么多,和我们的openEuler社区开发有啥关系呢?其实,上面的讲解是要让大家理解,任何OS的基本零件就是软件包,就类似组成人体的基本零件是细胞一样。这一个个软件包就是构成OS的一个个基本零件。

在Linux的世界,有两种基本的安装包格式:

RPM

这个格式是redhat, suse, WindRiver, openEuler等所选用,目前在企业市场,基本是以这些厂家为主,因此rpm格式在商用企业市场用的比较多。

Deb

这个格式是debian, Ubuntu, android使用的,目前在desktop,终端侧用的比较广泛。

这两种格式本身没有什么优劣之分,只是不用厂商的选择而已。当然,对于客户,开发者来说,世界被割裂成为两个互不兼容的部分总归是一种不必要的残忍。对于这个问题社区也有不同的尝试,但目前为止还没有出现某个大一统的软件包格式能够终结这个分裂的世界。

不过幸好我们有容器,很大程度上,容器的出现缓解了这个问题。那未来能不能找到一条优雅的技术道路将这些不兼容,将这些复杂的软件包的依赖带来的诸多痛苦一并解决掉呢?我把这个问题留给本文的爱好者吧,也许在你们中间就会出现这样的“历史终结者”。

所以,一个软件从源代码到能进入到我们的OS安装光盘中,要经历三个步骤。

 

第一步:

源代码开发阶段,也就是写程序的阶段。这个阶段可以在任何地方,可以在github,gitlab, gitee等代码托管平台上,也可以是自己的笔记本电脑上。

第二步:

将代码编译,生成二进制可执行程序。并且制作RPM软件包,其中“制作RPM”的过程实际上也是一种“编程”,只不过使用的是一种定义好的脚本语言,“程序”是一种叫做spec的文件。讲真,spec的编写是非常不符合老派程序员思维的,那种分段式的,跳跃式的,宏式的写法绝对挑战老派程序员的神经。所以,我们有很多很好的程序员,但是却很少有程序员能将一个程序真正制作成一个rpm包(或者deb包)。希望大家能挑战一下自己,成为一个RPMer。真的,不难,但是够你手忙脚乱一阵的。

我们有一个rpm的编写规范,可以供大家参考。

https://gitee.com/openeuler/community/blob/master/zh/contributors/packaging.md

第三步

将这些rpm包放在iso中,做成安装光盘。这一步一般的工程师不用感知,后台有自动化的系统来完整整个工作,而且相关的工具我们也会开源到openEuler中。也就是说,后续任何人都可以简单的为自己构建一个My Linux。

那就让我们看看如果你有一个项目在github上,我们如何将它最终转变成为安装光盘上的一个软件包吧。

 

首先,你得有一个组织

人生活在社会中,无时无刻不属于某个组织,并受到一些人的领导,比如白天,你需要属于某一个公司组织,晚上,你需要属于一个家庭组织。

社区也一样,在你想要把一个软件做成软件包放到openEuler系统中之前,你需要明确两件事情:

  1. 你自己属于哪个组织?
  2. 你要加入的这个软件包属于哪个组织?

在openEuler社区中,它的基本“组织”单元是SIG组,也就是special interest group,我至今没有弄明白为什么“兴趣”要加上“特殊”这个极易产生歧义和联想的前缀。不过anyway,如果你想有归属感,你有两种选择:

  1. 寻找到和你具有同样“特殊爱好”的小组,然后申请加入。
  2. 你的爱好太“特殊”以至于目前还没有志同道合的人,自己申请建一个。

openEuler所有的SIG组都在https://gitee.com/openeuler/community/tree/master/sig列出来,大家可以参考。

如果你有意愿,同时也展示了对某些“特殊爱好”有着深厚的积累或者惊人的天赋,那么欢迎你参照https://gitee.com/openeuler/community/blob/master/zh/technical-committee/governance/README.md完成一个新的SIG组的申请。我不得不说,这个流程不光看起来有一些复杂,也不友好,实际操作起来也是这样的。但我相信这难不倒码农,我们不就是为了制造这些复杂和不友好而生的吗!

最后一步,当创建完SIG的PR申请以后,需要到技术委员会(TC)的例行会议上进行评审,在https://gitee.com/openeuler/community/tree/master/zh/technical-committee可以找到TC委员会的基本信息,还有联系方式,大家可以订阅TC的邮件列表来获取一些动态,特别是例会的信息。

既然说到了TC(技术委员会),我们就简要讲一下openEuler的组织结构吧。

 

组织结构

openEuler是一个完全开放的组织架构,而且非常简单,https://gitee.com/openeuler/community这里可以看到基本的情况。

我想这副图已经说的很清楚了。

 

开始干活,先要弄明白干什么

当然,即使你完全不属于任何一个SIG组,理论上也能提交一个软件包到openEuler中,只是被接受的概率相对较低而已。其主要原因是很难来评估相关提交的质量,SIG组很大的意义就在于一些专业方面的人能够为每次提交做出质量的保证。

软件包本身必须是要属于某一个SIG的。以我自己常用的一个软件包为例,我每次写完程序以后,都总会执行一下cloc这个命令,看一下今天又新增了多少行代码,以期获得一下码农与生俱来的成就感,并中和一下写PPT带来的空虚和乏力感。

显然cloc是一个开发类的工具,帮助码农统计代码行,幸运的是,拥有同样“特殊爱好”的人并不在少数,他们建立了一个dev-utils的SIG组,https://gitee.com/openeuler/community/tree/master/sig/dev-utils,我们可以将cloc这个软件归属于这个SIG组。

 

如何把大象放到冰箱里

一般来说,增加一个软件包到openEuler中,需要如下的几个大步骤

  1. 让系统为你的cloc软件包建立一个“仓”,也就是git仓。
  2. 上传制作cloc软件包所需要的“零件”
  3. 将这个软件系统加入到openEuler的自动化编译系统中,由系统自动化构建出软件。

建仓

建仓其实就是提交一个PR,一般来说需要修改三个文件。

  1. https://gitee.com/openeuler/community/blob/master/sig/dev-utils/README.md
  2. https://gitee.com/openeuler/community/blob/master/sig/sigs.yaml
  3. https://gitee.com/openeuler/community/blob/master/repository/src-openeuler.yaml

修改第一个文件README.md将你要加入的cloc软件的名字和地址放上去。

修改sigs.yaml文件,将cloc软件增加到dev-utils这个SIG分组下面。

修改src-openeuler.yaml将cloc增加到src-openeuler里。

你要做的就是照猫画虎的把这三个文件修改了,然后提交PR就可以了。剩下的就是等待“命运的裁决”。

当申请的结果被批准以后,你所需要的“仓”就会被系统自动建立起来,对于cloc来说,它的代码仓的位置在https://gitee.com/src-openeuler/cloc,这是PR被批准以后由系统自动为我建立的。

剩下的时间,你就可以开始真正上传制作cloc软件的原材料了。

上传软件包

一般来说,一个软件只需要上传两个“原材料”就足够制作一个软件包了。如下图所示:

第一个材料:首先要上传这个软件包的spec文件,也就是告诉构建系统如何编译,制作cloc这个软件包。

第二个材料:cloc的源代码压缩包。

其它零件:如果spec中需要有patch,那么也需要把相关的patch文件上传到仓中。

上传完毕一个软件包所需要的原材料,下一步就是要把这些原材料加入到构建系统中,使之能够被真正编译,生成一个实际的软件包。

加入构建系统

openEuler现在使用obs作为构建工具系统,大家可以参考下面的这个链接把自己的软件加入到obs中

https://gitee.com/openeuler/community/blob/master/zh/contributors/create-obs-package.md

加入到构建系统中,就意味着你的软件可以被系统自动编译,自动生成rpm包,继而在后续的openEuler发行版本中出现。

 

TIPS

在整个过程中有几点需要开发者要注意:

  1. 能够本地构建:提交的软件包首先要在自己的笔记本,或者服务器上能够编译通过。也就是如果你的软件包在本地无法构建成功,那么上传到openEuler社区也不会构建成功。因此。我们建议最好能下载最新的openEuler版本,安装以后通过rpmbuild等命令来进行构建验证。
  2. 保证软件包可用:软件除了能够被编译和生成软件包,还要能正确运行,因此,在本地环境要保证制作出来的软件包能够:
    1. 正确的安装
    2. 正确的卸载
    3. 正确的升级
    4. 软件的功能是正常的。
  3. 保证多体系架构支持:openEuler目前支持x86_64和ARM64两种指令集,因此在构建过程中需要能够保证软件包在这两种环境下都能被正确编译和运行。虽然ARM64环境可能并不那么容易获取,但幸运的是,一般性软件在这两个系统上没有那么大的差异。
  4. 保证正确的依赖关系:一个软件通常都需要依赖其它的一些软件才能运行,比如所有软件都需要依赖glibc这个库来执行,一些复杂的软件可能会依赖很多软件包来提供功能。这些软件包可能已经在openEuler社区中有了,也可能没有。如果没有,那么就需要同时在openEuler社区中将这这些软件包补齐才行。比如cloc这样一个小软件,缺需要依赖如下的几个perl的软件包:

也就是说在提交cloc软件包的同时,也需要同时提交这几个软件包,这样才能保证cloc能够被系统正确的编译和构建出来。

  1. 保证spec文件的规范性:要保证spec文件是“规范”的,避免将外部的spec直接引入到openEuler中,因为如前所述,因为选择包的范围,依赖关系,版本等都不相同,同时保证所有软件包spec是一致的,请依照前面的rpm制作规范中的内容来书写spec文件。

因此,制作一个软件包,有的时候远比想象中的要复杂一些。但好在这并不是一个难度很大的事情,只需要提交一个软件包,走一遍流程,后续就会轻车熟路了。

 

参与方式四:开发新软件

上面讲的过程都是怎么给“别人”的软件提意见,怎么把“别人”做的软件添加到openEuler社区。但是每一个真正做软件的人内心都希望能拥有属于自己的作品,那么如何建立自己的作品,如何将自己的作品融入到openEuler社区呢?

将自己的作品融入到openEuler社区有如下两种方法:

 

方法一:在其它社区开发,集成到openEuler中

假定你已经在github,gitlab或者gitee上拥有了自己的项目,那么只需要按照参与方式三那样,将软件加入到src-openeuler这个repo仓就可以了。

 

方法二:在openEuler社区中开发,在openEuler中集成

另外一种方法是,直接在https://gitee.com/openeuler中建立项目,类似将项目“托管”到openEuler社区。比如现在社区中的iSula和A-Tune这样的项目就是这样的模式。

至此,我相信所有人都能明白了为什么openEuler会建立两个仓:

https://gitee.com/openeuler

https://gitee.com/src-openeuler

openeuler这个仓是存储所有“原生态”的软件,也就是为原创性的软件提供一个展示的舞台,或者是一个孵化器平台。

而src-openeuler则是为openEuler的release发行版提供生成rpm包等构建信息等的地方。

因此,当一个很有梦想,很有情怀的工程师突然有一天有了一个很棒的idea,那么他可以依照下面的过程来深度参与到openEuler中。

  1. 在TC委员会的例会meeting中申请一个开源项目,比如项目名称叫做“broken_dream”。
  2. 如果TC委员会认为这是一个很好的idea,并且认为值得为破碎的梦想提供一个机会,那么我们会在https://gitee.com/openeuler中建立一个repo,网址就是https://gitee.com/openeuler/broken_dream
  3. 这个项目在openeuler中持续开发和孵化,直到有一天,大家认为broken_dream已经足以成熟到为所有人提供破碎的梦想服务了,那么就可以在src-openeuler中建立一个仓,为broken_dream提供相关的spec文件,制作成为一个rpm。
  4. 最终broken_dream.rpm会随着openEuler的发布版本走遍全世界,为世界人民提供broken_dream功能。

我始终认为,一个工程师,在他的职业生涯中,至少要有一个,哪怕只有一个项目和他自己的名字是息息相关的。只有这样,才能在孙子,孙女骑在我们背上,问我们这辈子做的最棒的事情是什么的时候,我们可以让他们爬下来,然后直起身,看着他们天真无邪,对未来充满憧憬的大眼睛,认真的问他们:你知道broken_dream的作者是谁吗?

最后,我要感谢openEuler社区中每一个贡献者,特别是文档的撰写者们,文档对于码农们来说永远是痛苦的源泉,但正是各位文档的撰写者的辛勤工作,才使得本文能够有一个机会为大家呈现一个完整的openEuler参与之旅。

 

作者:openEuler技术委员会委员 熊伟

相关推荐

鸿蒙案例上新啦 | 购物、听歌、健身:15个模板带你一键激活社交娱乐

页面层级如何组织、跨页共享状态如何同步、列表与详情及个人中心如何形成稳定闭环。鸿蒙开发实践中心将这些高频消费与互动场景沉淀为可参考的标准模板,提供从业务架构到界面实现的快捷实践入口。更多实战案例欢迎前往鸿蒙开发实践中心案例中心查看并开启云端体验。

华为云官方博客 345

鸿蒙案例上新啦 | 出门打车、到家上课:25个模板带你一屏打通日常生活

如何合理拆分页面组件、如何建立单一可信的状态源、如何让用户在每一步操作中都获得明确反馈。鸿蒙开发实践中心以标准化的应用与元服务模板为入口,将清晰的业务架构与可复用的代码结构直观呈现。不妨立即挑选一个感兴趣的方向进入云端环境,从页面布局、组件封装、状态管理到路由组织,亲手跑通你的鸿蒙实战项目。

华为云官方博客 331

LakeAgent:DWS数据仓库的第二大脑,告别 “翻译式运维”,迈入智能自治时代

和普通 SQL 改写工具不同,LakeAgent 自动做多方案代价对比,主动规避负优化陷阱:补充分区键过滤实现剪枝,扫描分区由 37 收敛至 1,执行代价从 758.28 降至 113.74;未来的数据仓库,将不止能算、能存,更能看懂自己、诊断自己、理解自己。长久以来,数仓的智能都依附于人:信号需要人解读,瓶颈需要人研判,经验困在个体里,无法随底座永续生长。CPU 高、CPU 告警、CPU 诊断、CPU 使用率过高、CPU 满。语法、错误码、计费、性能调优、最佳实践、故障处置等全场景内容。

华为云官方博客 559

如何使用RDS Supabase后端BaaS能力:文件存储(File Storage)

• product-images(公开桶,允许公共读取):策略名称"Public read for product-images",允许SELECT,目标角色anon,策略定义bucket_id = 'product-images'。上传/删除需另配INSERT/DELETE策略,详见SQL。• product-specs(私有桶,仅认证用户访问自己的文件夹):建议拆为上传、读取、删除三条策略,策略定义均为 bucket_id = 'product-specs' 且仅限本人文件夹(详见下文 SQL)。

华为云官方博客 480

如何使用RDS Supabase后端BaaS能力:实时订阅与推送(Realtime)

Realtime 把数据库的每次变更同步到客户端:表里增、删、改一行,订阅者无需刷新页面或主动请求即可秒级收到。三大能力各司其职:• Postgres Changes — 监听表的 INSERT/UPDATE/DELETE,变化即通知• Broadcast — 客户端之间直接互发,适合瞬时通知、协同编辑• Presence — 跟踪频道里“谁在线”典型场景有实时数据展示(订单、库存、监控指标即时刷新)、即时通讯(消息收发、在线名单、“对方正在输入”)、协同编辑与实时通知。

华为云官方博客 470

AI Agent如何通过MCP连接到华为云RDS Supabase应用平台

Schema元数据列出所有可访问的表(按schema分组)。Schema元数据列出表的列及元数据(类型/默认值/约束)。Schema元数据列出所有约束(PK/FK/UNIQUE/CHECK/EXCLUDE)。可按schema/表/类型过滤。Schema元数据列出所有外键关系。可按schema/表过滤。Schema元数据列出所有索引及定义和大小。可按schema/表过滤。Schema元数据列出已应用的数据库迁移记录。Schema元数据列出已安装的PostgreSQL扩展。

华为云官方博客 477

华为大数据Flink让每一 CU 算力,跑出开源 5.74 倍的性能

1. 开源Apache Flink 已成为业界流计算事实标准,但在极端重负载场景下存在性能瓶颈。2. 华为大数据Flink通过多项自研深度优化,在执行计划、算子执行、状态存储三个层面构建协同的优化体系。3. Nexmark Benchmark 测试结果:整体性能提升 5.74 倍,极端重负载场景性能领先最高 18.3 倍。4. 100% 兼容 Apache Flink 1.20,业务代码零改造,无缝迁移。

华为云官方博客 382

LakeAgent实战 | 业务分析篇从一句提问到业务分析

本文以“订单金额变化”分析为例,展示LakeAgent如何通过自然语言提问,结合DataArtsStudio的数据资产与专业技能,帮助业务人员快速定位数据、生成SQL、追踪血缘、生成报告。从问题出发,逐步实现数据发现、变化洞察、原因追溯与团队协作,最终形成可复用的分析流程与企业规则,显著提升数据分析效率与一致性。

华为云官方博客 392

华为云RDS Supabase AI应用已开放公测 :30分钟搭建AI应用后端

认证、存储、实时推送、数据库API——4个后端模块,传统开发需要数周。今天,你只需要30分钟。AI创业公司的全栈开发工程师。上周老板说"下周要上线的AI对话应用,后端你来搞"——认证鉴权、数据库接口、文件存储、实时推送,每一个模块都需要数周搭建,而市场不会等你。小张打开华为云RDS Supabase,30分钟搭好认证、数据库API、对象存储,剩下的时间全用来打磨AI交互体验。基于开源Supabase+华为云RDS PostgreSQL全托管能力,为开发者提供。

华为云官方博客 399

如何使用RDS Supabase后端BaaS能力:数据库函数(Database Function)

上一篇介绍了 Database Data API——建表即自动生成增删改查接口,解决单表读写,但聚合统计、跨表事务、字段自动维护等逻辑已超出其能力边界。本篇推进到数据库函数(Database Function):把业务逻辑封装进数据库,前端通过 .rpc() 调用,由触发器自动响应数据变更。上一篇中,小张基于 Data API 完成了产品目录的建表与基础读写。但新需求随之而来:按分类统计产品数与价格区间、上架新品同时写产品表与定价表、产品修改后自动刷新更新时间。

华为云官方博客 465

如何使用RDS Supabase后端BaaS能力:创表即生成API(Database Data API)

认证、存储、实时推送、数据库API——4个后端模块,传统开发要数周。本系列逐个拆解,首篇聚焦数据库API(Database Data API):建表即得 API,无需手写后端。小张,AI创业公司的全栈工程师。老板让他做个产品目录页,展示产品与价格、支持上下架。传统做法要搭后端、写接口、配权限,工期少说1-2周;而在华为云RDS Supabase,建两张表、应用 SDK 直连,几分钟增删改查全跑通。

华为云官方博客 479

从一句话到一个能出去的链接,AI开发者空间做了什么

自行搭建的 Agent、正在使用的开源项目、团队既有的工具,都可以接入,可以通过AI创建或者手动搭建环境;华为云 AI开发者空间——面向开发者的云端一站式开发平台,做的就是把这段路接上:环境免安装,浏览器打开即为完整的 Linux 运行环境,预置的 AI 智能体开箱即用。第一个任务建议选能出结果的:做一个游戏、生成一个页面、创建一台实例,从需求走到可访问的链接,一次就能看清这个环境在做什么。沙箱是一个完整的 Linux 环境,依赖、服务、端口都是真实的,不是模拟。环境释放后,权限随之失效。

华为云官方博客 426

华为云码道配置自定义大模型,四种方式完整实操

案例介绍。

华为云官方博客 628

图数据库:实现穿透式监管的数据基座

穿透式监管标志着国企监管从“管企业”向“管资本”转型过程中的关键一跃。而图数据库正是这一跃的技术支点。从股权穿透到资金链穿透,从供应链穿透到数据穿透,华为GES图数据库正在将“穿透式监管”从理念变为可落地、可操作的实践。无论是天眼查式的全量链路查询,还是某集团财经的税务规则判断,抑或是芯片供应链式的部件风险分析,乃至通过Palantir构建决策知识图谱,其底层逻辑都是一致的——用图的力量,穿透一切形式的“隔离层”,直抵风险本质与责任核心。

华为云官方博客 665

《公共云三十问》正式收官,奔赴企业AI百场景新征程

今年6月底,公共云产业联盟重点推出《公共云三十问》专栏,以每周三问的节奏,连载十周,解读《先进公共云》白皮书,分享国计民生系列案例,旨在凝聚共识、推动落地实践。同时,专栏分析公共云在产业升级、民生福祉、科技创新、全球发展等方面的作用,梳理中国特色公共云发展路径:以普惠云拓展用云广度,以智算云提升用云深度,以自主云夯实用云厚度,以全球云打开用云跨度。这十问从专属云、行业云切入,深入政务、金融、交通、电力、钢铁、化工、油气、制造等国计民生场景,回答公共云“怎么用”。

华为云官方博客 473

开发者小技巧|IAM配置,让码道代码智能体连续30天免登录

案例介绍。

华为云官方博客 646

码道深度对接CodeArts,让需求自动落地为代码

案例介绍。

华为云官方博客 720

【公共云三十问 之三十】拥抱AI,企业如何建设面向智能体的专属云?

企业可分阶段建设覆盖开发、运行、运营及安全的一体化智能体平台——从构建一站式、高低码协同的智能体开发平台,到打造高性能、极致弹性的运行时环境,再到搭建AgentOps驱动的持续运营与运维体系,同时构建端到端、多层次的全链路安全防护体系。在数据湖建设方面,遵循“存量复用、平滑演进、AI导向、分步迭代”原则,分三阶段推进——打造AI多模数据湖核心能力、完成存算分离与统一元数据管理、实现闭环赋能全面支撑智能体规模化落地,在保护既有投资的前提下将传统数据平台转型为AI数据专属供给平台。

华为云官方博客 823

【公共云三十问 之二十九】国计民生之制造:制造云如何重塑数智时代的新质生产力?

平台打通软件交付的完整路径,覆盖需求管理、代码托管、代码检查、编译构建、制品仓库、部署、测试等关键环节,支持大模型能力融入研发全流程,实现从需求到交付的端到端管理。通过构建“研发一朵云”,方案打破地域与组织壁垒,实现跨团队协同开发,有效缩短软件交付周期,助力工业制造企业从“传统研发”走向“敏捷研发”,加速数智化转型进程。当制造云真正成为数据流通的平台、AI创新的底座,公共云的社会价值将从基础设施层向生产场景层持续延伸,为新型工业化建设和制造强国战略注入源源不断的动力,重塑数智时代的中国制造新质生产力。

华为云官方博客 789

告别重复手工迁仓,码道MCP+Skill实现仓库批量迁移

案例介绍。

华为云官方博客 790

【公共云三十问 之二十八】国计民生之油气:智算云如何叩响数智时代的“地心蓝金”?

西南油气田以“向地球深部要资源”为战略方向,联合以华为云Stack为代表的公共云服务商共同打造统一算力底座,建设西南区域数据湖与通用技术平台,构建“勘探开发工程技术、天然气生产过程管控、天然气产运储销”等三个一体化协同应用场景,支撑油气勘探、开发生产、管输储运等全业务链的数智化转型。当智算云真正成为数据流通的平台、AI创新的底座,油气田得以将算力效能、数据价值与智能技术深度融入勘探开发全链条,将“看不见的算力”转化为“摸得着的储量”,以智能化手段持续降低勘探风险、缩短发现周期、提高采收效率,确保生产安全。

华为云官方博客 613

【公共云三十问 之二十七】国计民生之化工:数智云如何重塑传统化工新范式?

在架构方面,方案构建云边协同的统一体系,涵盖AI协同、数据协同与运营协同三大维度——总部集中训练大模型,边缘节点负责推理执行,云边持续迭代,实现“边用边学”的智能闭环,模型平均精度提升20%以上。此外,方案提供一站式企业级工业物联网平台、数据湖与数据治理平台,覆盖工业数据分析“采、存、算、管、用”全流程,打通生产现场与管理系统间的数据壁垒,有效消除数据孤岛。层面,方案充分发挥软硬协同优势,实现计算、存储、网络与云平台的深度协同,训练线性度超95%,为大模型训练推理提供强劲算力支撑。▲化工“数智”新模式。

华为云官方博客 663

【公共云三十问 之二十六】国计民生之钢铁:数智云如何淬炼中国钢铁新力量?

同时,构建云边端协同的统一架构,支撑集团总部与各生产基地两级协同发展——总部集中训练大模型,边缘节点负责推理执行,云边持续迭代,实现训推一体化的资源调度与高效协同,为钢铁行业的数智化转型构建了坚实的算力底座。层面,方案构建覆盖“工业数采→边缘IT/OT融合→统一数据湖→数据治理平台→数据应用”全链路的一站式数据治理与流通平台,打通生产现场与管理系统间的数据壁垒,让数据“采得到、流得动、用得好”,加速数据价值从生产现场向经营决策层流动释放。湘潭钢铁集团的钢铁数智云,是钢铁工业智能云建设的标杆案例。

华为云官方博客 526

LakeWatch——MRS 智能运维Agent

从资源池、队列、作业等多个维度,对集群CPU与内存资源进行精细化分析与对比,直观呈现不同时间段的空闲、满载等使用状态,识别资源浪费,指导治理优化,为扩缩容决策提供数据支撑。对HDFS存储进行多维度深度分析(目录、用户、用户组等),涵盖使用量、增量、文件大小分布及数据热度等指标,帮助快速识别增长较快的目录、长期未访问的文件,统计目录文件数量与小文件占比,评估HDFS总存储量与扩缩容需求,为存储治理与资源规划提供全面数据支撑。Agent主动巡检,识别异常趋势并提前预警,让运维从"事后处理"转向"事前预防"。

华为云官方博客 515

华为云专题文档发布:丰富的AI案例、选型指导和概念解读

发布 “云服务选型”、“云计算概念”专题,提供云服务选型指导,助您选择匹配业务的云服务,解读云计算相关概念,开启云上学习之路。开发者工具和文档专区上线,提供从学习、实践到反馈的全链路支持。帮助中心新增100余篇AI案例。

华为云官方博客 286

一个人,也能用AI做点“星东西”

华为云星耀创想者大赛-2026华为云OPC创意大赛等你来~

华为云官方博客 290

从需求到可执行工作项:MCP+Skill 让智能体规划真正落地

回顾整个体验,以前让智能体帮我拆需求,它是洋洋洒洒给我列了一大篇 Markdown,看着挺像那么回事,但最后还是得我一条条往 CodeArts Req 里搬,搬完再手动挂父子关系、排日期,拆需求五分钟,搬运两小时。现在好了,MCP 给智能体接上了"手",Skill 给它装上了"项目经理的脑子",一句话下去,34 个工作项连带排期、层级关系全给我建好了,甘特图一拉,齐刷刷都在两周内,节省了多少工作量啊,美滋滋。本次实操在码道代码智能体基础上,构建了一套"需求→可执行工作项"的自动化规划方案。

华为云官方博客 576

华为云码道「码力续航计划」更新!

✅上新GLM‑5.3‑Flash,高速响应,代码生成、工程解析、Agent调试高效输出。新增GLM‑5.3‑Flash福利模型,每日解锁1000万免费Tokens。● 本次活动共发放总量价值100万元Tokens,发完即止!把耗算力的编码重活,交给华为云码道代码智能体🚀🚀。● 每日额度准时刷新,当日清零、次日满血重置。✅复杂算法、大项目解析、批量代码生成随便跑。✅不用抠额度、不用算消耗,放开调试大胆迭代。✅无需额外操作,登录即送,直接切换模型使用。● 把算力交给码道,让撸码不再内耗👏🏻。

华为云官方博客 687

【公共云三十问 之二十四】国计民生之交通:交通云如何铺就数智通衢新坦途?

交通行业作为支撑实体经济的关键基础设施,涵盖公路、铁路、机场、港口、地铁等众多子领域,其中,公路网络作为综合交通运输体系的基础骨架,承担着全国超过70%的客货运量,其数字化、智能化转型的需求尤为迫切。方面,提供Agent开发框架、知识库管理、RAG工程、意图识别、静态应用编排及模型评测等能力,支持客户将行业知识、业务流程与AI能力深度融合,快速构建面向收费稽核、路网调度、应急处置等场景的智能应用。开发并实现落地应用,全面覆盖建设、管理、养护、运营、服务、安全、办公七大业务领域。

华为云官方博客 463

【公共云三十问 之二十五】国计民生之电力:电力云如何点亮数智电力新引擎?

方案构建了覆盖数据获取、质量评估到标准化处理的全链路能力。基于公共云服务商智算底座及气象大模型,通过时空图神经网络重新建模产流机制,中国华电建成超50TB多源融合数据集,突破时空建模与机理融合等五大关键技术,短期径流预测精度较传统机理模型提升5个百分点以上,实现15天中期径流预测精度超85%,推理效率达秒级。基于气象大模型的基础架构与预训练能力,客户可直接在大模型之上开展增量训练与微调,充分利用场站所在区域的高精度历史数据(如3公里、1公里分辨率),针对不同场站和区域的地形地貌与气候特征进行模型调优。

华为云官方博客 381
上一篇: python读写配置文件使用总结与避坑指南
下一篇: 【华为云技术分享】软件工程师的AI模型训练起步
华为云开发者联盟
华为云开发者联盟 企业官方账号 企业官方账号
博客等级 码龄10年 72万+粉丝 5985原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值