当前位置:首页 > 文章列表 > Golang > Go教程 > Go chassis云原生微服务开发框架应用编程实战

Go chassis云原生微服务开发框架应用编程实战

来源:脚本之家 2022-12-29 07:51:02 0浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Go chassis云原生微服务开发框架应用编程实战》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

什么是Go chassis

go chassis是一个go语言微服务开发框架,专注于云原生应用的开发主要的使用场景是云服务开发。go chassis将云服务开发过程中沉淀的能力融入到了开发框架中,以帮助开发团队快速编写云原生应用。

文章目标

本文介绍我们的设计理念和目标,为何go chassis会诞生。后面的系列文章会着重介绍使用方法,项目实战。对于微服务架构模式,云原生要素,为什么选择go语言等将不再赘述。

诞生背景

公司开发云服务,要构建健壮,韧性,安全,高可靠的云服务,必然有大量基础能力需要编写,为了加速开发,我们将这些能力便沉淀在了该框架中。为什么呢?

我们希望加速每一个组件也就是微服务的开发速度。有的人看到的只是冰山一角,真的要达成微服务架构模式的愿景,其实需要繁重的工作量。就像冰山那样,我们要将通用能力沉淀下去,能够复用。如果让各个业务团队同时照顾冰山上下,各自开发各自的,那结果将是灾难性的,企业用人成本极高。

在业务交付的过程中,各个云团队有大量的管理服务需要对接,每个团队都在写重复的代码,通过框架能力,将交付职责分离,减少开发成本:

如何快速开发一个微服务

可以跟随这个文档体验。

github.com/go-chassis/…

统一治理和协议模型

我们使用Invocation概念来统一协议描述,当协议请求到来后,go chassis会把request转换为Invocation进行治理(如负载均衡,限流,熔断,重试,金丝雀发布等),这样就可以允许任意的协议接入到go chassis,并无缝使用go chassis提供的核心功能,当前默认提供原生grpc和http两种协议的接入。

为什么会有这样的设计呢?

  • 每个协议层的优化空间非常大,用户态到内核态的调用速度本来就相对内部代码来说是很慢的,优化这一层代码很重要,RPC怎么也比http来得好。
  • 不同部门可能有私有协议诉求,那么服务治理就交给核心框架完成。协议由业务部门决定自主研发或是集成现有协议。当你发现公司内部不同部门都在开发自己的协议做自己的服务治理时,再向将业务统一一个架构,一个工具链上,将非常困难。

可扩展的处理链条:handler chain as middleware

我们以Java为例,大家在写一个拦截器或者过滤器的时候可以对请求进行处理,处理完,这个拦截器的的执行过程就结束了,那么如何达成以下目标?

1.跟踪业务执行结果指标,比如http状态码,并导出他们让prometheus收集。

2.跟踪关键的业务执行结果,审计这些信息。比如请求返回的一些结果信息

3.分布式调用链追踪,end span必须等到请求返回才能拿到。

  • 客户端调用远程服务时,也需要进行中间处理,比如客户端负载均衡,请求重试,这些不能够耦合在业务代码中

Java的答案很简单,注解。那么go呢?

我们引入了handler chain编程模型,chain中每个handler都可以拿到后面的handler的执行结果,包括业务代码的执行结果。

看下接口定义

type Handler interface {
	Handle(*Chain, *invocation.Invocation, invocation.ResponseCallBack)
	Name() string
}
// ResponseCallBack process invocation response
type ResponseCallBack func(*Response)

ResponseCallBack用于接受后置handler返回的结果,所以每一个handler处理时都可以按需定义自己的ResponseCallBack来获取后面handler甚至是业务逻辑代码的执行结果。帮助通用逻辑(即中间件)和业务逻辑彻底解耦。可以看下现在已经支持的中间件,无论限流,熔断,负载均衡,认证鉴权,审计,我们都用此机制实现:

go-chassis.readthedocs.io/en/latest/m…

将公司全部的工具链,服务治理手段,安全合规等都落入到处理链中,可快速加快研发速度,并统一规范,减少管理负担。

不只是API,通过配置简化开发过程

只举2个例子

监控

减少让开发者自己调用API的过程,将他们简化为配置项

例如可观察:

引入一行代码

import _ github.com/go-chassis/go-chassis/v2/middleware/monitoring

加上配置

handler:
  chain:
    Provider:
      default: monitoring

就可以在服务端进行监控,导出请求数,延迟等指标,大大加速开发人员效率

# HELP request_count 
# TYPE request_count counter
request_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14
# HELP request_process_duration 
# TYPE request_process_duration summary
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.5"} 3
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.9"} 80
request_process_duration{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0",quantile="0.99"} 80
request_process_duration_sum{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 315
request_process_duration_count{app="default",env="",instance="",service="servicecomb-kie",version="0.1.0"} 14

需要自定义指标:

err := metrics.CreateCounter(metrics.CounterOpts{
		Name:   “user_login”,
		Labels: labelsSlice,
	})
metrics.CounterAdd(“user_login”, 1, labelMap)

可信软件

公司对软件质量的高要求,需要我们编写大量的基础代码。我们也将通用的部分都落地到了框架中,通过简单的配置文件启用,不再需要不同团队重复编写代码

servicecomb:
  transport:
    failure:
      rest: http_500,http_502 #统计错误率时,例如只把500和502作为错误
    maxIdleCon:
      rest: 1024
    maxBodyBytes:
      rest: 20 #只需要指定我的服务能接受的body体大小,访问的超时时间即可不再需要各个团队维护代码。
    maxHeaderBytes:
      rest: 1 #限制http header大小
    timeout: #限制客户端超时
      rest: 30s

插件化

为了应对不同业务诉求,我们总是要考虑“可替换性”。而这个的优先级总是大于“可复用性”。这就是go chassis的插件理念。基本所有的重要组件都是插件化的,框架已经定义好标准接口,只需要开发者实现好,注册到框架中,就可以在配置文件中配置并生效了,业务开发者是完全不感知的。可以参考我们对quota组件的扩展过程,他负责资源的配额管理

go-chassis.readthedocs.io/en/latest/d…

后续将详细剖析go chassis的内部设计和特性使用。

在下一篇文章中,我将讲述go chassis如何快速开发出一个微服务。由于是系列文章,随着文章不断更新,如果有期望了解的话题,内容可以留言反馈,我会加入到后续文章中。

项目地址:

github.com/go-chassis/…

目前的用户:

  • 华为
  • 趣头条
  • Shopee
  • KubeEdge
  • ServiceComb

终于介绍完啦!小伙伴们,这篇关于《Go chassis云原生微服务开发框架应用编程实战》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

版本声明
本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
Go通过不变性优化程序详解Go通过不变性优化程序详解
上一篇
Go通过不变性优化程序详解
详解Go 语言如何通过测试保证质量
下一篇
详解Go 语言如何通过测试保证质量
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    14次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    22次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    30次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    40次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码