0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为云的Go语言编程的众多干货

华为开发者社区 来源:华为开发者社区 作者:华为云云原生 2020-12-17 17:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

近日,国内较权威的Go大会——Gopher China召开,众多一线互联网公司的大神们汇聚一堂,深入探讨了Go语言并产生了诸多干货。其中,华为云微服务首席架构师田晓亮老师也受邀参与本次大会,以《华为云的Go语言云原生实战经验》为题进行了分享,今天小编整理汇总了田晓亮老师分享中的技术干货

有理论、有实操、有深度、需细品!

2016年华为成立Cloud BU以来,就引入了Go语言编写的Kubernetes,Prometheus等CNCF项目,华为云研发团队也开始用Go语言来构建云服务。不过,当时Go的生态并不完善,所以要自己从头到尾编写基础能力模块。那么,如何用Go构建云服务并将基础能力慢慢建立起来,有哪些经验和方法?且听我们慢慢道来……

从一个简单云应用看如何构筑一个云服务

和Eureka一样,一个简单的注册发现服务Service Center可以通过多种手段来增强。

1.静态与动态信息定义

减少数据信息量,抽出公共部分统一管理,通过静态信息来划分实例组。这样微服务与微服务实例为1对n的映射,将微服务名、版本、数据中心等信息都抽到了公共部分,通过降低冗余度,来减少网络的开销,同时也规范化了微服务模型。

2.契约化微服务

上一张图我们看到微服务静态信息里面包含了多个Schemas,里面关联了微服务所关联的契约文档,同样是1对n的映射关系。通过手动上传或者代码自动生成文档上传,可以在注册中心中查看微服务文档,且文档与微服务版本绑定,不允许更改。

对比客户端开发团队等待后端的服务编写完成后,才开始进行集成开发的方式。高效方式是以文档为基准,客户端与服务端同时开发,客户端通过Mock去除对服务端的依赖。

为何要保证文档先行?如果文档不及时审视,那么将会出现非常糟糕的情况。比如不一致的命名规范,定义相似的API,扩展能力差,任何一点都会大大增加研发成本。及早审视并规避十分重要,这就是为何注册中心加入文档上传与查询能力。

3.服务间依赖管理

调用层级过高将引起定位困难、性能下降的问题,合理的层级是3个服务:a->b->c的调用就可以完成一次调用。彼此互相依赖的两个服务在功能升级或者变更时要花费更多时间来分析影响,比如ab互相依赖,一个新功能涉及2个都要更改,那怎么一起上线?

简单的依赖有助于系统测试和分析,这给架构师一个很好的审视方式,可以及时看到微服务间的依赖关系,以及时对架构调整。

4.缓存机制

由于Service Center内部本身是不存数据的,一旦etcd出现网络故障的时候,就会导致Service Center不可用。所以Service Center引入了异步缓存机制,启动之初,Service Center会与etcd建立一个长连接,也就是watch。为了防止建立watch时间窗发生变化,又做了一层保护,在watch之前做全量的查询。运行过程中查询所得到的资源变化会缓存到Service Center本地,然后进行异步的循环。

总的来说,我们通过了多种手段来提升微服务研发效率,减少网络开销,并通过异步缓存提升性能。这是华为云积累的能力,但交付一个云服务远远不止交付业务功能这么简单,还要考虑微服务的安全、韧性、隐私、可运维等能力。

我们刚才看到的只是水面之上的冰山,水面之下还隐藏着大量的基础能力需要编写。真的要达成微服务架构模式的愿景,需要繁重的工作量。就像冰山那样,我们要将通用能力沉淀下去,能够复用。如果让各个业务团队同时照顾冰山上下,各自开发各自的,那结果将是灾难性的,企业用人成本极高,下面让我们展开Service Center的架构看看。

立足Service Center架构,

“冰山下”的基础能力库编写很重要

下面这个组件主要负责微服务的注册发现,提供Restful API。

它有四个主要的模块:

服务注册发现:通过注册发现完成服务拓扑的感知;

契约发现:每个服务具备一个契约记录,支持多种格式如Open API,gRPC proto;

RBAC:基于角色的访问控制,管理员可以管理账号,将账号分发给微服务或者不同人员;

服务治理:针对微服务下发治理规则,比如重试,限流,熔断,路由策略等。

交付一个云服务远远不止交付业务功能,而是要去全方面的考虑安全,韧性,隐私,可运维等能力,当然我们将部分的能力可以交给一些中间件来完成,比如网关。然而仍有大量功能需要自己编写,且可以复用在每个微服务中,这就是基础能力库编写的初衷。

配额管理:云资源按照租户进行配额管理,租户所能使用的资源受到严格限制

告警:当微服务发生关键问题时要直接上报告警系统,而非通过云服务设置阈值等告警策略

安全:加解密证书,密码

ID生成:ID的生成算法,用于生成微服务ID,实例ID等

多种中间件:调用过程需要被审计,调用链追踪,生成指标监控等

该项目已经开源并捐献给Apache,项目地址:

https://github.com/apache/servicecomb-service-center

对于这些能力,抽取普通的库函数也是完全不够用的,所以要做到如下能力:

可插拔:也就是按需在编译期引入(受限于Go语言能力),例如配额系统的具体实现在社区是不需要的。

异构系统:也就是一个功能要有多种具体实现,比如审计,公有云存在一套审计系统需要对接,而社区则是本地日志打印。

不同的算法:解密工具、ID生成器……面对不同的交付场景或安全要求,都要通过不同实现来替换算法。比如ID生成可以是snowflake、UUID;加解密算法使用AES或者其他公开算法。

如何通过Go Chassis加速云服务开发?

为了满足上面提到的需求多样性,并且让所有新规划的组件受益、快速进行开发,我们需要统一的框架和标准来加速开发,这就是华为云用Go语言编写的开发框架Go Chassis诞生的原因。所以大家看可以看到go chassis的源码和设计有着service center代码的影子。

责任编辑:xj

原文标题:掀开华为云的Go语言编程底座!有深度、有点难、需细品

文章出处:【微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    90

    文章

    3707

    浏览量

    96735
  • 华为云
    +关注

    关注

    3

    文章

    2804

    浏览量

    19078

原文标题:掀开华为云的Go语言编程底座!有深度、有点难、需细品

文章出处:【微信号:Huawei_Developer,微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    猪事都上?温氏+华为,把AI送进养殖场

    华为
    脑极体
    发布于 :2025年11月14日 15:20:35

    Linux 编程语言盘点:从内核到AI的全栈选择

    在工控圈和嵌入式圈里,有一个常年被讨论的问题:  “在 Linux 上,到底该用什么语言编程?” 有人坚信:C 才是真正的工业语言。有人反驳:Python 才是效率王者。还有人推崇 Go
    的头像 发表于 11-06 17:05 423次阅读

    平台连接(SC171开发套件V3)

    平台连接(SC171开发套件V3) 序列 课程名称 视频课程时长 视频课程链接 课件链接 工程源码 1 SC171连接华为案例Part1 7分55秒 https://t.elecfans.com
    发表于 04-27 14:23

    润和的Hi3861开发版如何连接华为

    刚入手了一套润和的Hi3861开发套件,下载的是3.2Release版本的源码,想连接华为但是润和那边的代码仓中没有相关的demo,,求大佬指点
    发表于 04-11 20:32

    润和的Hi3861开发板如何连接华为

    刚入手了一套润和的Hi3861开发套件,想连接华为但是润和那边的代码仓中没有相关的demo,求大佬指点
    发表于 04-11 20:30

    华为技术资料合集(硬件开发/C语言/PCB设计/天线通信)

    本帖最后由 yuu_cool 于 2025-3-17 09:54 编辑 本资料内容介绍:包含 华为硬件工程师手册_全(159页), 华为C语言编程规范,
    发表于 03-17 09:54

    华为发布DeepSeek本地部署方案

    华为正式推出基于华为Stack混合的DeepSeek本地部署方案。
    的头像 发表于 02-18 10:05 1417次阅读

    华为电脑怎么下载,怎么下载并安装华为电脑呢?

        在数字化时代,华为电脑作为一种便捷、高效的云端解决方案,备受用户青睐。那么,如何下载并安装华为电脑呢?别担心,下面我们就来为大家详细介绍,保证让你轻松上手!  
    的头像 发表于 02-11 10:09 1797次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b>电脑怎么下载,怎么下载并安装<b class='flag-5'>华为</b><b class='flag-5'>云</b>电脑呢?

    华为电脑怎么联网,华为电脑怎么实现联网?

    在数字化办公和娱乐日益普及的当下,华为电脑凭借其便捷的云端服务,为用户提供了随时随地办公、娱乐的新体验。而联网作为使用华为电脑的基础,掌握其方法至关重要。    不同设备联网步骤
    的头像 发表于 02-10 09:56 1943次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b>电脑怎么联网,<b class='flag-5'>华为</b><b class='flag-5'>云</b>电脑怎么实现联网?

    数字电路编程语言介绍

    数字电路编程语言是专门为描述和模拟数字电路而设计的编程语言。它们通常具有以下特点: 硬件描述语言(HDL) :大多数数字电路
    的头像 发表于 01-24 09:39 1385次阅读

    华为 Flexus X 加速 Redis 案例实践与详解

    前言       华为作为业界领先的服务提供商,不断推出创新解决方案以满足这些需求。其中,Flexus X 实例凭借其高性能和卓越的用户体验,成为了众多企业和个人的首选。特别是其自
    的头像 发表于 01-23 17:52 598次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b> Flexus X 加速 Redis 案例实践与详解

    华为 Flexus X 实例:一键助力中小企业,快速部署个性化网站!

    前言  在计算盛行的时代,众多企业与开发者纷纷倾向于将应用程序迁移至云端。华为,作为国内服务行业的佼佼者,提供了
    的头像 发表于 01-06 18:27 580次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b> Flexus X 实例:一键助力中小企业,快速部署个性化网站!

    gitee 支持的编程语言有哪些

    Gitee(码)是一个基于 Git 的代码托管和研发协作平台,类似于 GitHub 和 GitLab。它支持多种编程语言,允许开发者托管和管理代码,进行版本控制,以及协作开发。以下是一些
    的头像 发表于 01-06 09:50 1103次阅读

    三菱PLC编程语言解析

    三菱电机(Mitsubishi Electric)是全球知名的自动化和制造解决方案供应商,其PLC(可编程逻辑控制器)产品广泛应用于工业自动化领域。三菱PLC编程语言主要基于国际标准IEC
    的头像 发表于 12-26 17:36 2213次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言
    的头像 发表于 12-24 17:33 1444次阅读