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

    文章

    3723

    浏览量

    97441
  • 华为云
    +关注

    关注

    3

    文章

    2836

    浏览量

    19372

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    为什么单片机还在用C语言编程

    说起单片机我们就会想到C语言,单片机为什么还在用C语言编程?现在有很多很好用的高级语言,如VC、PYTHON、PHP等等,为什么这些语言不能
    发表于 11-28 07:37

    C语言编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

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

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

    一文了解Mojo编程语言

    Mojo 是一种由 Modular AI 公司开发的编程语言,旨在将 Python 的易用性与 C 语言的高性能相结合,特别适合人工智能(AI)、高性能计算(HPC)和系统级编程场景。
    发表于 11-07 05:59

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

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

    中软国际荣获华为两项大奖

    近日,在华为全联接大会2025“华为之夜”中,中软国际荣获华为“聚力共赢成长奖”,充分彰显了中软国际在
    的头像 发表于 09-28 14:04 1383次阅读

    【HZ-T536开发板免费体验】2 - 交叉编译仓颉编程语言程序到开发板运行

    感谢电子发烧友和合众恒跃提供的试用机会。 引言 上一篇介绍了开箱的结果,接下来测试一下华为仓颉编程语言在开发板上运行的效果。最近对华为仓颉编程
    发表于 07-16 21:27

    梯形图语言补充编程说明书

    电子发烧友网站提供《梯形图语言补充编程说明书.pdf》资料免费下载
    发表于 07-09 14:14 3次下载

    软通动力携手华为发布AI应用创新领航计划

    华为开发者大会 2025期间,作为华为全球战略合作伙伴,软通动力受邀出席华为多场重要活动和会议。双方联合与伙伴一同发起“
    的头像 发表于 06-26 10:31 1475次阅读

    华为开发者大会2025(HDC 2025)亮点:华为发布盘古大模型5.5 宣布新一代昇腾AI服务上线

    HarmonyOS、昇腾AI服务、盘古大模型等最新科技创新成果。 在主题演讲中,华为常务董事、华为计算CEO张平安宣布基于CloudMatrix384 超节点的新一代昇腾AI
    的头像 发表于 06-20 20:19 4671次阅读
    <b class='flag-5'>华为</b>开发者大会2025(HDC 2025)亮点:<b class='flag-5'>华为</b><b class='flag-5'>云</b>发布盘古大模型5.5 宣布新一代昇腾AI<b class='flag-5'>云</b>服务上线

    HarmonyOS5服务技术分享--函数预加载文章整理

    ​​嗨,亲爱的开发者朋友们!​​? 今天咱们来聊聊如何使用​​端一体化方式开发函数​​,尤其针对华为的预加载服务。整个过程会手把手带你从零开始,涵盖创建工程、编写代码、调试到部署,帮你轻松掌握
    发表于 05-22 20:33

    HarmonyOS5服务技术分享--ArkTS调用函数

    ✨【HarmonyOS实战指南】手把手教你用ArkTS玩转函数文件获取✨ 大家好呀今天我们来聊聊如何通过HarmonyOS的ArkTS语言实现函数文件获取功能。整个过程就像搭积木一样有趣,保证
    发表于 05-22 18:22

    HarmonyOS5服务技术分享--函数创建配置指南

    大家好!今天咱们来一起探索如何在华为HarmonyOS的AGC函数服务中创建和配置函数,手把手教你用HTTP触发器玩转函数。无论你是刚入门还是想优化现有功能,这篇指南都会给你清晰的指引,咱们直接
    发表于 05-22 17:08

    博泰车联网斩获华为“2024年上海创新标杆奖”

    近日,在华为生态大会上,博泰车联网凭借与华为合作的车联网平台项目,成功斩获“上海创新标杆
    的头像 发表于 05-08 10:17 1031次阅读

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 7次下载