如何在微服务之间共享和同步代码

微服务架构非常适合构建可扩展的代码库,具有更少的耦合,更好的关注点分离,更高的弹性,结合不同的技术,最重要的是,更好的模块化和构建它的组件的可重用性。

但是,模块化和重用可能经常导致高耦合或代码重复。将不同的服务绑定到同一个共享库会破坏我们首先使用服务的原因。

使用Bit等新的开源技术,在我们的微服务之间共享和重用公共代码变得比以往更容易,更有效。让我们看看为什么以及如何。

在微服务之间共享代码

在解释Bit如何帮助解决这个问题之前,让我们设定一下我们想要实现的主要目标。

  1. 在我们的微服务之间共享公共代码,同时保持我们的代码DRY。
  2. 避免通过共享库进行耦合,这消除了分离开发过程的优势。
  3. 启用简单更改并同步到我们在微服务之间共享的代码。

微服务被用于代码重复。例如,其他服务使用的任何服务都将导致所有这些其他服务复制所需的代码,以便使用该服务的API。

为任何这样的代码创建一个NPM包(带有一个新的repo)是非常不切实际的,并且会在更难以对代码进行更改时产生大量开销。

没有共享的Libs,没有耦合

Bit 是一个开源项目,它为我们在微服务架构中共享和重用代码提供了一种全新的方法。使用Bit,您不必创建新的存储库或配置包来共享代码而不是复制它。

相反,您可以简单地定义任何现有存储库的可重用部分并共享到其他存储库 - 作为包或跟踪的源代码。这样,您可以在不更改代码库中的单行代码,创建更多存储库或将微服务耦合在一起的情况下,使任何服务的部分可以从其他服务重用。

最好的部分是,Bit还允许您更改与任何其他服务共享的代码 - 因此您可以从基本上任何存储库开发和修改该代码。

示例工作流程

您可以使用Bit在项目之间隔离和跟踪源代码的能力,简单地隔离和同步任何可重用的代码,而不是通过公共库将您的微服务耦合在一起。您甚至可以在不同的存储库中使用NPM安装此代码,并且仍然可以从任何目的进行更改。

让我们在以下项目的目录结构中使用Bit来隔离和共享可重用的组件left-padsome-logichello-world

$ tree
.
├── App.js
├── App.test.js
├── favicon.ico
├── index.js
└── src
    └── common
        ├── left-pad
        ├── some-logic
        └── hello-world

首先,让我们安装Bit

$ npm install bit-bin -g

让我们为项目初始化Bit

$ cd project-directory
$ bit init

让我们添加Bit要跟踪的组件

$ bit add src/common/* # use a glob pattern to track multiple components in the same path or a single path to track a single component.

让我们添加构建测试环境。

现在让我们锁定一个版本并将组件与项目隔离开来。

$ bit tag --all 1.0.0
3 components tagged | 3 added, 0 changed, 0 auto-tagged

现在让我们 将组件共享到远程Scope

$ bit export username.scopename  # Share components to this Scope
exported 3 components to scope username.scopename

请注意,使用--eject 标志还可以从源代码中删除导出的组件,并将其作为包依赖项添加到项目的 package.json 文件中。

就是这样。现在,您可以用你喜欢的包管理器安装组件,或使用bit import将他们的源代码导入到任何资料库,进行更改,并在您的代码库同步处理。

结论

微服务为您的开发过程提供了更高的模块化和分离。许多服务将使用相同的代码,因此在它们之间共享代码对于您的开发和维护工作至关重要。

但是,通过共享库耦合服务可能会破坏拥有多个不同服务的重要性。创建不同的repos以将每个代码行作为包发布到NPM是不实际的。

使用像Bit 这样的新技术,我们可以两全其美:轻松地在我们的微服务之间共享公共代码,从任何一端创建和同步更改,并避免通过添加第三方共享库创建的耦合。

希望能帮到你!

原文标题《How to Share and Sync Code Between Microservices》

作者:Joni Sar

译者:February

不代表云加社区观点,更多详情请查看原文链接

原文链接:https://dzone.com/articles/how-to-share-and-sync-code-between-microservices

原文作者:Joni Sar

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏zhisheng

听说你要做网站

现代 Web 后端技术超入门 引言 现在房价这么高,作为一个程序员只能靠做个网站看能不能卖出 100 万这样搏一手了。这里尝试介绍一下现代 Web 后端并解释一...

3828
来自专栏Youngxj

[教程]超简单搭建WEB服务器

1.5K5
来自专栏测试驿栈

Jmeter(二十)_Mock接口

Mock通常是指,在测试一个对象时,我们构造一些假的对象来模拟与其交互。而这些Mock对象的行为是我们事先设定且符合预期。通过这些Mock对象来测试对象在正常逻...

3352
来自专栏java沉淀

provisional headers are shown 原因分析

5236
来自专栏北京马哥教育

【图文并茂】一步步带你了解Web站点架构

1.1 http反向代理服务器 在web站点前端,我们需要搭建一个反向代理服务器,用于负责接受用户的请求,请求包括动态和静态的内容请求。一般反向代理服务器的部署...

4908
来自专栏云市场·精选汇

如何巧妙解决小程序缓存问题,这5点你都知道吗?

清除缓存是我们开发者经常做的一个操作,我们需要在判断客户端在缺少缓存数据的情况下做出相应的处理

2.1K4
来自专栏机器学习算法与Python学习

VMware tools详细安装过程

在VMware下安装完Ubuntu的虚拟机后,界面总是很小,使用起来非常的不方便而且不美观,但是该工作对于小白而言有事比较困难的事情(ps:真的挺费劲的),进过...

4576
来自专栏程序猿DD

Spring Cloud Config采用Git存储时两种常用的配置策略

这种模式下不同的项目会对应到 https://github.com/dyc87112/config-repo.git仓库下的不同目录,如果项目中 spring....

1102
来自专栏linux驱动个人学习

静态库和动态库的区别

什么是库? 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 所谓静态...

4289
来自专栏.Net移动开发

.Net语言 APP开发平台——Smobiler学习日志:基于Access数据库的Demo

说明:该demo是基于Access数据库进行客户信息的新增、查看、编辑 新增客户信息和客户列表

1572

扫码关注云+社区

领取腾讯云代金券