基于K8s技术构建通用的区块链方案

网站建设3年前发布
36 0 0

2023030601370961a9f7326cdb7719c89284097d1696bbd992dd435,译者 | 陈峻,审校 | 云昭,本文简要展示了如何使用Kubernetes和微服务架构,来构建一个具有复杂功能的加密支付应用的示例。  Kubernetes已在当前各类Web应用中得到了广泛使用。那么,开发者想过它是否可以被应用到加密支付类型的应用开发之中呢?下面,我将向开发者展示如何使用Kubernetes技术,构建通用的区块链应用解决方案的过程。通过调整,该方案也可以被用于其他行业的应用场景中。,该项目在初期虽然预算有限,但是在被客户认可后,为了定期向投资人演示新功能的开发进展,我们进行了持续迭代。下面便是我们使用到的技术:,在第一阶段,我们的主要目的是将待开发的应用,拆分并创建为如下六个微服务:1.管理微服务2.核心微服务3.支付微服务4.邮件和通知服务5.Cron任务服务6.Webhooks微服务,值得一提的是,这六个微服务是专为本区块链应用示例而创建的。如果开发者的应用在本质上不尽相同,则可以使用相同的技术,按需设计出不同的微服务。,接着,让我们来看看如何在NestJS上构建这些微服务。由于我们需要针对Kafka消息的代理,来配置相关的选项,因此我们为所有微服务的公共模块和配置,创建了一个共享的资源文件夹。,左右滑动查看完整代码,让我们通过consumer模式,将管理面板的微服务连接到Kafka上。它将允许我们去捕捉和处理来自各个主题的事件。,然后,我们通过如下代码,使应用程序能够在微服务的模式下消费(使用)事件:,app.connectMicroservice(CONSUMER_CONFIG(ConsumerGroups.ADMIN)); await app.startAllMicroservices();,开发者可能已注意到,consumer的配置中包含了groupId。它会允许来自同一组的consumer从主题中获取事件,并将它们分发给彼此,以更快地对其进行处理。假设我们的微服务能够接收到事件的速度,快于它处理事件的速度,那么我们便可以通过自动扩展以生成额外的pod的方式,来共享它们之间的负载,并且让该过程的速度翻倍。为此,consumer应该被置于组中,并将由扩展生成的pod也放在同一组中。在此基础上,它们将能够共享加载,而不必处理来自不同Kafka分区的相同主题事件。下面,让我们来看看如何在NestJS中捕捉和处理Kafka事件:,左右滑动查看完整代码,通常,consumer可以在两种模式下工作:,由于EventPattern不需要额外地包含任何源代码层,便可提供请求/响应功能,因此如果可能的话,它应该被作为首选项。,为了连接Producer,我们需要为负责发送事件的模块,提供Producer的相关配置。,左右滑动查看完整代码,左右滑动查看完整代码,左右滑动查看完整代码,每个微服务既可以工作在Producer或Consumer模式下,也可以同时工作在两种混合模式中。通常,微服务使用混合模式来实现负载平衡,为主题生成事件,并均匀地使用它们,以及共享各种负载。,下图是针对每个微服务的实现,而进行的基于Helm图表模板的Kubernetes配置。,20230306013709d552288875cd326136b749052b68b725ef0ec5101,用Helm图表表示的admin-API微服务的组件及其结构,该模板由如下配置文件所组成:,下面,让我们来看看每个配置文件(并不涉及到Helm模板)。,左右滑动查看完整代码,在真实的项目部署中,我们可能还需要包含诸如:资源限制、运行状况检查配置、更新策略等更多细节配置。在此,我们仅提供了一个基本的配置示例。开发者可以根据手头项目的实际情况,按需进行扩展。,左右滑动查看完整代码,显然,我们需要对外公开其服务,才能使用它。让我们通过一个负载平衡器,来公开该应用程序,并提供SSL的相关配置,以方便使用安全的HTTPS连接。在此,我们选用时下最流行的解决方案:AWS负载平衡控制器,并安装到集群上。,接着,我们需要使用以下配置,来创建入口控制器:,左右滑动查看完整代码,在应用了上述配置以后,我们将能够创建一个新的ALB负载平衡器。同时,我们需要使用在'host'参数中提供的名称,来创建一个域,进而将流量从该host,路由到负载平衡器上。,左右滑动查看完整代码,在我们需要降低K8s基础设施的复杂性时,Helm是一个非常实用的工具。没有它,我们则需要在集群运行之前,编写多个yml文件。此外,Helm也能够协助我们记住应用程序、标签、以及名称等之间的关系。它的工作原理与包管理器比较类似,允许我们创建应用程序的模板,并可使用简单的命令来准备和运行它。下面,让我们来使用helm制作自己的模板:,左右滑动查看完整代码,左右滑动查看完整代码,左右滑动查看完整代码,不同模板的值分别位于“Values.yml”、“Values-dev.yml”和“Values stage.yml”文件中。具体它们中的哪一个将被使用到,则完全取决于真实的应用环境。下面,让我们来查看针对dev env(开发环境)的一些示例值。,左右滑动查看完整代码,为了在集群上应用相关的配置,我们需要升级charts,并重新启动部署。,下面,让我们在来看看负责此项操作的GitHub的相关操作步骤。,综上所述,我们深入研究了如何在一个特定的加密支付的案例中,使用Kubernetes来构建微服务,并最终将代码示例转换为一个成熟的区块链应用的过程。虽然我们跳过了一些其它步骤和组件,但是前面的源代码足以向开发者展示和诠释Kubernetes微服务是如何构建的。,原文链接:https://dzone.com/articles/blockchain-case-using-kubernetes,陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验。

© 版权声明

相关文章