自6月底以来,Spring Cloud Cloud Tencent Micro -Service开发框架吸引了许多开发人员的热烈关注。在不到一个月的时间里,GitHub Star的数量超过了2,000,超过1,000名开发人员加入了我们的社区,超过20开发人员已经参与了贡献项目代码。在初始文章中验证我们的观点:Spring Boot + Spring Cloud仍然是一个广泛使用的开发框架。
在这个月,最关注的是Spring Cloud Tencent的追随者是春季云腾讯的后续计划是什么?
在一段时间内,我们的主要能量集中于微服务领域中最基本的服务治理原子能,例如服务发现,动态配置,当前限制熔化,路线等。SpringCloud的其他套件基本上仅限于这些基本的基本套件能力。但是,在练习弹簧云过程的过程中,企业发现这些原子能力并未直接为其特定业务方案提供解决方案,并且通常需要进行次要开发和自定义。,增强假装并支持各种复杂的服务路由方案等。因此,用于打开框的通用解决方案对于企业更有价值。
总之,春季云腾腾的重要计划之一是不断巩固服务治理原子能,为开箱即用的通用解决方案,从工具的升级到计划。
为此,弹簧云的腾讯添加了Spring-Cloud-tencent-Plugin-starts模块,以实现该模块中不同业务场景的解决方案。在此阶段,我们主要关注精制流治理能力的场景方案,并分割分裂根据开发过程分为三个阶段:
在本期中,我们主要讨论了开发和测试阶段中多测试环境场景的实际战斗,并详细介绍了弹簧云腾腾的解决方案。
在实际开发过程中,微服务体系结构系统下的不同微服务可能由多个团队开发和维护。每个团队只需要注意一个或多个属于的微服务,每个团队的微服务都可以保持服务之间的相互调用。如果团队开发其微服务,则有必要在调试时验证完整的微服务调用链接。这次,我们需要依靠其他团队的微服务。如何部署联合转移环境的开发将遇到以下问题:
目前,测试环境的体系结构可用于帮助部署一组简单的操作和低成本开发联合环境。测试环境路线是基于服务路由的环境治理策略。核心是将稳定的基线环境作为基本环境。测试环境只需要部署需要更改的微服务。多两个测试环境的两个基本概念,如下所示:
部署多测试环境后,开发人员可以通过特定路由规则将测试请求点击到不同的测试环境。如果测试环境没有相应的微服务处理链接请求,则将降级到基线环境处理。因此,开发人员需要将新的测试微服务部署到相应的测试环境而无需更新或不属于为了完成基本环境的开发以完成测试环境测试。
尽管测试环境路由是一种相对成熟的开发测试环境解决方案,但并不多的生产和开发框架可以立即使用,并且经常开发人员为二级开发开发相应的功能。因此,需要一个相对完整的解决方案来帮助实现实现测试环境,简化开发难度并提高发展效率。
服务路由模型
服务路由的最简化模型如下图所示,该图解决了“将请求转发到哪些实例”的问题。根据详细信息,它包含三个问题:
(图:服务路由模型的服务)
在流量的微世界中,标签(属性)统一确定了一个实体,例如带有源呼叫服务,目标环境标签等的请求。服务示例包括版本号,实例分组,环境分组和其他标签。服务路由是将满足标签匹配条件的请求转发到满足匹配条件的服务实例。因此,服务路由模型可以拆卸以下专业条款:
如何将服务实例标签传递给呼叫者
当服务注册到注册中心时,将带有标签信息。服务呼叫方从注册中心获取服务实例信息,并包含实例标签信息。
标签完整链接透明度
有一种请求标签数据需要在业务响应链接上传递,例如完整链接跟踪中的TraceID,测试环境路由的特征标签等。
服务路由和负载平衡之间的区别
服务路由和负载平衡都解决了选择服务实例的问题。区别在于,服务路由是选择符合完整服务示例路由规则的一批服务实例,而负载平衡是选择一个实例适用于路由匹配后从服务示例列表中处理请求。
测试环境的样本作为示例。有两个测试环境和一个基线环境。从头到端流将传递以下组件:app->商人 - >用户中心 - >积分中心 - >活动中心。
(图:测试环境路由示意图)
根据服务路由章节的上一部分,为了实现测试环境的能力,开发工作需要三件事:
以下三个部分将详细介绍这三个部分。
在多检验环境的场景中,每个测试环境部署的示例需要
方法1:配置文件
在application.yml配置文件中配置以下内容,以实现染色:
应用弹簧云腾腾时,请阅读配置文件并分析IDC =上海和Env = F1标签信息。
如果上述配置文件放置在项目源代码中,则不同的实例需要具有不同的标签值,并且需要使用不同的包装。
方法两个:环境变量
在容器方案中,环境变量非常方便。Spring Cloud Tencent同意,前缀的环境变量信息是sct_metadacontent作为实例标签信息,例如:
当应用弹簧云腾腾时,它会自动读取环境变量并分析IDC =上海和Env = F1标签信息。
方法3:定制实施SPI
前两种方法是弹簧云腾腾的构建方法,但不一定符合每个生产项目的规格。因此,弹簧云腾腾还提供了一种允许开发人员自定义标签提供商的方法。例如,以下两个实用方案:
在这种情况下,只要实现Instancemetadataprovider SPI扩展。
流染色是为了使目标测试环境标记每个请求。当路线转发时,根据请求标签将目标服务实例匹配。交通染色可以分为以下方法:
方法1:静态染色
2.2本节介绍了一系列用于服务实例的标签信息,例如IDC =上海,Env = F1等。在某些情况下,所有传递当前实例的请求将带来当前实例的标签信息。例如传递Env = F1的请求随附Env = F1的标签信息。
有三种染色服务的方法。相应的定义有三种方法可以向链接请求标签传输。核心想法是定义需要完整链接的标签键值对的密钥列表。
方法两个:动态染色
静态染色是将服务实例的某些标签用作请求标签。服务实例标签是相对静态的。启动应用程序后,初始化后不会更改它。但是,在实际的应用程序方案中,不同的请求通常需要设置不同的标签信息。这次,在动态动态染色的能力上。
通过这种方式,可以在链接上以请求标签在链接上传输temanuRenv = f1。
方法3:网关流染色
大门通常用作交通的入口或运输站。网关请求后,可以根据某些染色规则将标签信息添加到请求中。例如,如果您符合请求参数uid = 1000 uid = 1000请求以达到featurenv= F1标签。
Gatery Flow染色是一种非常实用的能力。它已经在弹簧云腾腾中实现了非常灵活的弹簧云网关染色插头 - 例如,以下染色规则可以实现farteurenv = f1的请求,并且uid = 1001 with uid = 1000请求。对于更详细的染色规则,您可以参考文档。
同时,Spring Cloud Tencent还保留了可以实现自定义的交通染色插件的交通星式SPI。
北极星提供了非常完整的服务治理能力。上层服务框架可以基于北极星本地SDK迅速获得强大的服务治理能力。SpringCloud Tencent以北极星的基础实现了服务路线功能。
北极星服务路线原理
北极星服务路由的原理并不复杂。如下图所示,所有实例信息均可从注册中心获得,然后一系列的RouterFilter插头来滤除条件的实例集合。
(图:北极星服务路由执行链)
在多测试环境方案中,主要使用元数据。此插头的核心能力是基于请求标签的服务实例的标签。
例如,有两个标签key1 = value1 and key2 = value2,元数据制度将筛选所有实例,包括满足key1 = value1 = value1 and key2 = value2的服务实例。标签和屏幕服务实例通过featurenv标签属于同一测试环境。
弹簧云腾讯服务路线原理
弹簧云腾讯实现了分为两个部分的路由核心:
逻辑的扩展部分更为复杂。有兴趣的读者可以参考Spring-Cloud-Starter-Polaris-Polaris-Router模块源代码。
在上一节中,详细描述了测试环境路由的实施原则。
通过弹簧云腾腾的交通测试环境非常简单。核心包括三个步骤:
完成以上三个步骤。
Spring-Cloud-tencent-featureenv-Plugin模块在弹簧云的腾讯中关闭了测试环境,路由所有功能。所有服务都需要添加到测试环境中。
Spring-Cloud-tencent-featureenv-Plugin默认值将使用farteurenv标签作为匹配标签。用户还可以使用系统内置的系统 - feature-en-rabel = custom_feature_env_key标签按钮指定测试环境路由。以下三种方式以默认功能为示例。
方法1:配置文件
在服务实例的配置文件中添加配置。如果添加以下内容如Bootstrap.yml中所示:
方法两个:环境变量
在服务实例所在的操作系统中添加环境变量。
方法3:SPI方法
自定义InstanceMetAdatapRovider#getMetadata()方法包含featureenv的返回值。
基线环境标签值
请注意,基线环境部署的服务示例无需设置特征标签,表明它不属于任何测试环境,因此当请求不匹配相应的测试环境时,请求可以匹配基线环境。
方法1:客户染色(推荐)
如下图所示,在客户端发出的HTTP请求中,可以对X-Polaris-metadata-transive-featureEnv = f1请求标头进行染色。此方法允许开发人员在请求创建时根据业务逻辑染色流量。
(图:客户染色的性图)
方法2:网关动态动态动态(推荐)
动态染色是配置一定染色规则的开发人员,当流量通过网关时,可以自动染色流量,这很方便使用。例如,UID = 1用户的请求转发到F1环境,UID = 0用户的请求已转发到F2环境。您只需要配置染料规则即可实现。
(图:动态动态染色图)
Spring Cloud Tencent通过实现Spring Cloud Gateway的GlobalFilter实现流染色器插件。
方法3:网关的静态染色
如下图所示,将固定的标头添加到该请求是网关的最常见插头。featureenv = f1请求标头。此方法需要一个网关来部署每个环境,并且成本很高,因此使用频率相对较低。
(图:网关静态染色的签名驱动器)
完成上述操作步骤以实现测试环境。读者可以在春季云腾腾下的Polaris-Rououter-featureEnv-example下运行Polaris-Router-featureEnv-示例完整的经验。
在微服务体系结构系统的开发阶段,测试环境路由是一个非常实用的功能。它可以大大降低测试环境的维护成本和资源成本,同时大大提高了研发效率。可以通过操作指南的章节看到,通过弹簧云实施测试环境路线非常简单腾讯。仅需要部署服务示例才能增加相应的环境标签并将标签添加到请求标题中。
行业中常见的测试环境路由实施方案通常需要将路由规则服务到链接上的服务以实现路由功能。但是,通过北极星的元数据路由功能,无需发送任何路由规则在整个计划中。您只需要在实例中设置相应的标签信息,并且运营成本非常低。
如果该项目仅将Spring Cloud Gateway用作网关,则网关染色插头 - 集成的Spring Cloud Tencent可以进一步降低交通染色的成本。客户无需做任何事情。您只需要配置网关染色规则即可实现交通染色。
目前,Spring Cloud Tencent主要实现调用微服务之间流量的测试环境路由功能,这不涉及消息队列和任务计划的测试环境路由功能。
如果您的项目正在使用弹簧云框架,并且
非常欢迎您与我们一起抛光更实用和普遍的能力,并为各种实际生产场景建立微型服务开发框架。您的建议,发行,拉动请求甚至是小星星,都是对春季的很好的支持云腾讯社区。
github地址:https://github.com/tence/spring-cloud-tencent
作者信息
Zhang LE:开源社区Spring Cloud Tencent PMC,Apollo PMC,开源社区,腾讯技术专家,重点关注微服务的开发,包括:注册中心,配置中心,服务治理中心等。
Zhang Haotian:腾讯云高级研发工程师的开源社区Spring Cloud Tencent PMC专注于微服务领域,深入培养服务治理能力和其他相关的中间件研究和开发。
