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语言编程底座!有深度、有点难、需细品

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

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

    关注

    88

    文章

    3587

    浏览量

    93580
  • 华为云
    +关注

    关注

    3

    文章

    2423

    浏览量

    17294

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

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

收藏 人收藏

    评论

    相关推荐

    编程语言的误区与常见问题

    误区一:编程语言的选择 常见问题: 初学者在选择编程语言时,往往会被市场上的热门语言所吸引,而忽视了自己的实际需求和兴趣。 一些开发者认为某
    的头像 发表于 11-15 09:35 159次阅读

    在学习go语言的过程踩过的坑

    作为一个5年的phper,这两年公司和个人都在顺应技术趋势,新项目慢慢从php转向了go语言,从2021年到现在,笔者手上也先后开发了两个go项目。在学习go
    的头像 发表于 11-11 09:22 98次阅读

    MCU编程语言和开发环境介绍

    微控制器单元(Microcontroller Unit,简称MCU)是嵌入式系统的核心,广泛应用于各种电子产品中。随着技术的发展,MCU编程语言和开发环境也在不断进步,以适应不同的应用需求。 1.
    的头像 发表于 11-01 11:51 459次阅读

    go语言如何解决并发问题

    作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比
    的头像 发表于 10-23 13:38 105次阅读
    <b class='flag-5'>go</b><b class='flag-5'>语言</b>如何解决并发问题

    plc编程语言编程相关技巧有哪些

    PLC(可编程逻辑控制器)编程语言及相关编程技巧是工业自动化领域中不可或缺的知识。 一、PLC编程语言
    的头像 发表于 10-21 16:56 211次阅读

    干货分享:Air780E怎么连接华为

    ​众所周知,市面上有很多云平台,阿里、腾讯、中移OneNET、华为、百度、涂鸦、TLi
    的头像 发表于 10-15 07:30 241次阅读
    <b class='flag-5'>干货</b>分享:Air780E怎么连接<b class='flag-5'>华为</b><b class='flag-5'>云</b>?

    三十分钟入门基础Go Java小子版

    与Java功能上的对比来阐述Go语言 的基础语法、面向对象编程、并发与错误四个方面。 一、基础语法 Go语言的基础语法与常规的
    的头像 发表于 08-12 14:32 669次阅读
    三十分钟入门基础<b class='flag-5'>Go</b> Java小子版

    PLC的编程方式及编程语言

    在工业自动化领域,PLC(Programmable Logic Controller,可编程逻辑控制器)因其强大的控制功能和灵活的编程方式而得到了广泛应用。PLC的编程方式和编程
    的头像 发表于 06-27 14:08 609次阅读

    华为自研仓颉编程语言首次对外亮相

    在科技界的星辰大海中,华为再次展现了其深邃的探索精神和不懈的创新追求。在近日举行的华为开发者大会2024上,华为正式发布其自研的仓颉编程语言
    的头像 发表于 06-24 15:11 785次阅读

    华为自研仓颉编程语言引领全场景智能编程新纪元

    在科技飞速发展的今天,编程语言作为软件开发的基石,其创新与突破一直备受瞩目。近日,华为开发者大会论坛上传来了一则振奋人心的消息:华为自研的仓颉编程
    的头像 发表于 06-22 11:30 921次阅读

    PLC编程语言和C语言的区别

    在工业自动化和计算机编程领域中,PLC(可编程逻辑控制器)编程语言和C语言各自扮演着重要的角色。尽管两者都是
    的头像 发表于 06-14 17:11 2471次阅读

    华为开发者桌面全新发布 CodeArts IDE for Python,极致优雅云原生开发体验

    近日,华为正式发布 CodeArts IDE for Python,这是一款内置华为自研 Python 语言服务,提供智能编程、灵活调试能
    的头像 发表于 05-10 00:27 1199次阅读
    <b class='flag-5'>华为</b><b class='flag-5'>云</b>开发者桌面全新发布 CodeArts IDE for Python,极致优雅云原生开发体验

    华为正式发布CodeArts IDE for Python

    近日,华为正式发布CodeArts IDE for Python,这是一款内置华为自主创新的Python语言服务,提供智能编程、灵活调试能
    的头像 发表于 05-08 14:58 453次阅读

    fpga用的是什么编程语言 fpga用什么语言开发

    fpga用的是什么编程语言 FPGA(现场可编程逻辑门阵列)主要使用的编程语言是硬件描述语言(H
    的头像 发表于 03-14 17:09 3299次阅读

    Go编程语言-你应该知道的一切

    Go 编程语言的故事始于 Google,当时三位工程师 Robert Griesemer、Rob Pike 和 Ken Thompson 对 C++ 的复杂性以及缺乏提供高效编译和执行的简单
    的头像 发表于 12-11 17:37 608次阅读