当前位置:首页 > 文章列表 > Golang > Go教程 > 详解Go语言微服务开发框架之Go chassis

详解Go语言微服务开发框架之Go chassis

来源:脚本之家 2022-12-27 21:23:50 0浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《详解Go语言微服务开发框架之Go chassis》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

引言

https://github.com/go-chassis/go-chassis是一个微服务开发框架,而微服务开发框架带来的其中一个课题就是:当单体应用向微服务转型后,有大量的配置需要管理,而你并不希望登录到远端机器去更改配置,并重启应用,尤其是现在已经是容器的时代了,也不希望因为一个配置的变更,而发布一个新的软件包。那么分布式系统中每个进程的动态配置管理及运行时热加载就成为了一个亟待解决的问题。https://github.com/go-chassis/go-archaius为gochassis而生,他汲取了netflix的archaius框架经验,并做出来自己的创新特性。

架构

Source:配置源是一种标准接口,可以通过实现一个source来接入不同配置源,它定义配置来自哪个资源,配置可以来自配置中心configcenter,来自本地文件,来自环境变量或是启动命令行。source负责将配置项缓存到本地内存。用户可以选择加载任意的source实现。

Config center source:配置中心源不同于其他source,它包含一个client抽象,可以对接不同的生态系统,目前对接了携程开源的配置中心Apollo。

Config manager:负责整合管理所有source的配置,每个source可以定义优先级,当通过manager获取配置时,如果2个不同的source有相同的配置,那么就会取最大优先级的配置。

Event Dispatcher:用户可以通过Archaius API进行配置变化监听,当source内部的配置项新增,更新,删除配置时,都会通知到监听器。

Source优先级:优先级由大到小依次为Config center,CLI,ENV,file,当有相同配置项的时候仅优先级大的配置生效。在一个分布式系统中,远程的配置中心理应拥有最大优先级,而在本地运行一个独立的进程时,通常的思维是,命令行参数优先级高于环境变量,高于本地文件内容。拥有了这样一套机制后,用户就无需再写代码处理配置项生效逻辑。

Config Factory:封装了event 和 config manager的API

Archaius API:封装底层实现,提供友好的API供开发者使用

获取配置

获取配置有2种不同的手段:

1. 调用archaius API的Get 方法

2. 注册监听器

事件的触发是由soruce的开发者来决定的,每个source的行为会有不同:

命令行与环境变量是不会产生任何事件的,当archaius运行后配置项就已经定下来了,只能使用Get方法获取。而文件source会在启动后拉取一遍本地文件内容并转换为配置项(可自定义转换算法,决定配置项形态),之后持续监听本地文件变化,当有变化发生时会刷新本地配置并通知到监听器。所以2种方法都支持。config center source行为与文件又不同,在启动后,它就会周期拉取配置中心的配置,并且对比每一次配置项的不同,并触发不同类型事件。

配置项形态

假设程序有一个配置文件叫a.yaml,内容如下

registry:

  enabled: true

  interval: 30s复制代码

要考虑该如何去对待这raw data,目前有2种方式

第一种,将配置项拆分为java properties风格的配置:

registry.refresh: true

registry.interval: 30s

go archaius开放了file handler接口,允许你决定如何将文件内容处理为配置项

那么在远程的配置中心中,key value的管理方式就要遵循 file handler的行为,当你想变更registry.refresh时,就要在配置中心种更改这个配置项及值。

类似于开关类的配置项,这种java properties的管理方式还是不错的,当一个配置项改变时触发一次事件。

但是有一类配置项并不适合如此管理,这就是第二种方式,比如go chassis中的路由管理配置文件:

通常都需要大范围的更改配置项,那么如果还使用切分的方式在配置中心中管理将会引起go archaius运行时大量的事件触发,并且,用户在使用体验上大打折扣,到处去找分散的配置项,逐一更改。正确的行为是,将文件名作为配置中心中的key,文件内容作为value。用户需要更改时,去找对应的文件名即可,修改后一次性下发,只会触发一次事件,完成路由的变更。

开发者应根据实际场景判断如何处理配置项形态。也可以自己实现handler来决定配置项形态

配置运行时热加载

在运行时可以随时通过统一的配置中心或者本地文件(不推荐分布式环境登到机器里改文件,但在本地debug时还是推荐使用文件来测试程序的热加载逻辑)更改配置了,那么接下来要解决的问题就是配置在运行时生效。

这里的技巧是使用go语言中的读写锁。我以go chassis中路由配置来说明

go chassis运行时总是会有不断地大并发数据访问router config这块缓存,使用一个读写锁lock中的读锁,每次访问缓存都用读锁,使用后,解开读锁。

向archaius注册监听器,需要自己编写监听器的逻辑,每当事件出发后就会通过archaius中的数据构建一个结构体数据,然后将数据存到本地缓存,首先使用lock的写锁锁住router config,更新后,解开写锁。

在这样的机制下,就可以做到运行时热加载配置项而无需重启服务。

例子

一个本地文件事件监控的例子

https://github.com/go-chassis/go-archaius/tree/master/examples/event

管理本地多文件的例子

https://github.com/go-chassis/go-archaius/tree/master/examples/file

Go chassis介绍

https://juejin.im/post/6844903682362834952

本篇关于《详解Go语言微服务开发框架之Go chassis》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

版本声明
本文转载于:脚本之家 如有侵犯,请联系study_golang@163.com删除
Golang实现AES对称加密的过程详解Golang实现AES对称加密的过程详解
上一篇
Golang实现AES对称加密的过程详解
解析Go的Waitgroup和锁的问题
下一篇
解析Go的Waitgroup和锁的问题
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    307次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    324次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    292次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    472次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    456次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码