标签: microservices

类型“typeof globalThis”没有索引签名

每当我尝试在 TypeScript 环境中向全局 Nodejs 全局 namspace 添加函数时,都会收到此错误。

元素隐式具有“any”类型,因为类型“typeof globalThis”没有索引签名

声明全局命名空间

declare global {
  namespace NodeJS {
    interface Global {
      signin(): string[]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以如果我尝试这个

global.signin = () => {}
Run Code Online (Sandbox Code Playgroud)

它返回一个

元素隐式具有“any”类型,因为类型“typeof globalThis”没有索引签名

node.js typescript microservices

62
推荐指数
6
解决办法
5万
查看次数

微服务:如何处理外键关系

微服务架构表明每个服务都应该处理它自己的数据.因此,依赖于其他服务(服务B)所拥有的数据的任何服务(服务A)应该不是通过直接DB调用而是通过第二服务(服务B)提供的api来访问这些数据.

那么微服务最佳实践对检查外键约束的建议是什么.

示例:我正在为产品开发交付功能(微服务1),某些产品只能交付给产品表中提到的某些位置,只能访问产品微服务(mircoservice 2).

如何确保微服务1(即交付功能)不接受订单到未服务的位置.我有这个问题,因为交付功能无法直接访问产品数据库,因此当交货订单放入交货数据库时,没有适用于数据库级别的限制(不检查是否可以查看产品数据库中是否存在外键匹配)或表).

database microservices

58
推荐指数
5
解决办法
2万
查看次数

角和微前端

我正在研究如何将巨大的单页整体分解为微前端架构.

想法:

  • 该页面由几个可自主运行的组件组成
  • 每个组件由一个开发团队管理
  • 每个团队都可以更改,更新和部署他们的组件,而不会破坏其他团队的组件
  • 每个团队都选择自己的工具堆栈

原因

要有效地开发大型应用程序,您需要让很多人参与其中.但是,每个应用程序/团队的开发人员数量不能很好地扩展.然而,独立团队并行开发多个独立应用程序可以任意缩放

考虑到这一点,团队必须选择自己的工具堆栈,特别是执行第三方库的独立版本升级(如角度,反应,jquery).如果不是这种情况,框架更新需要与每个组件兼容,然后才能将其部署到生产环境中.

这适用于Angular吗?

虽然需要进行独立的版本升级,但将团队限制在一些支持的框架(Angular,React,Vue,Polymer ......)是合理的,现在我尝试构建一个纯粹由Angular-Apps组成的演示.

然而,即使Angular 5被认为是支持大型多模块应用程序的平台框架,但在同一浏览器窗口中运行几个独立的角度应用程序几乎是不可能的.

我设法通过利用HTML-Imports在单个webapp上引导几个Angular-Apps(不同的版本,每个版本都在自己的服务器上托管).但是,有几个global依赖项需要在应用程序之间共享

  • zone.js只能启动一次
  • 路由需要URL更改
  • 浏览器 - 像cookies,sessionstorage等...

网上有几篇关于如何引导多个角度模块的文章,但它们都引用同一个核心应用程序中的多个模块,这反过来意味着它们都在相同的框架版本上运行,并且更新意味着你必须重建和部署整个巨石.

除了" iframes" 之外是否有任何解决方案可以在同一个页面上运行多个Angular(5)应用程序?

html javascript microservices angular

58
推荐指数
2
解决办法
1万
查看次数

在微服务之间共享代码和模式

如果您在组织中使用微服务架构,他们可以通过zookeeper或其等价物共享配置.但是,各种服务应该如何共享公共数据库模式?常见的常数?和普通公用事业?

一种方法是将所有微服务放在同一个代码库中,但这与微服务带来的解耦相矛盾......

另一种方法是让每个微服务完全独立,但这会导致每个微服务必须保持的单独数据库中的代码重复和数据重复.

另一种方法是实现没有context\state的功能微服务,但这通常是不现实的,并且会推动架构有一个中心集线器来维护上下文\状态和来自\的大量流量.

在微服务之间共享代码和模式的可扩展,高效实用且有希望的美妙方式是什么?

architecture microservices

47
推荐指数
3
解决办法
1万
查看次数

微服务架构中的单点登录

我正在尝试设计一个绿色领域项目,该项目将包含多个服务(服务数据)和Web应用程序(提供HTML).我读过微服务,看起来很合适.

我还有的问题是如何实现SSO.我希望用户进行一次身份验证,并可以访问所有不同的服务和应用程序.

我可以想到几种方法:

  1. 添加身份服务和应用程序.任何具有受保护资源的服务都将与Identity服务通信,以确保其拥有的凭据有效.如果不是,它将重定向用户进行身份验证.

  2. 使用诸如OpenID之类的Web标准,并让每个服务处理它自己的身份.这意味着用户必须单独授权每个服务/应用程序,但之后它将是SSO.

我很乐意听到其他想法.如果特定PaaS(例如Heroku)具有也可接受的专有解决方案.

cloud security paas single-sign-on microservices

44
推荐指数
2
解决办法
2万
查看次数

两个微服务之间的通信

我正在创建一个具有微服务架构的项目.我创建了两个微服务.

其中一个是产品实体,另一个是票据实体.它们有自己的端点,它们通过网关连接在一起(我使用的是jhipster微服务架构).

bill-ms应该访问产品列表.我想知道如何在这两个ms之间进行通信.我脑子里有三种方法:

  1. 从bill-ms发送请求到队列 - 就像rabbitMQ一样,从product-ms获取带有这些id的这些产品(我不知道这是什么瓶颈)

  2. 向网关发送请求以获取产品服务并从那里获取产品(由于它们之间的数据大小而我担心延迟,因此我不直接接触数据库所以我总是依赖于网关)

  3. 我可以在bill-ms中复制存储库,服务和实体(这是一种丑陋的方式,我认为它打破了ms架构的规则并且维护非常困难)

如果您有任何其他方法,我感谢您与我分享.

编辑

  1. 现在我知道瓶颈是什么:说有3个bill-ms实例,rabbitMQ如何决定响应哪个实例?或者我应该怎么说功能" 给我一个bill-ms的免费实例来订阅来自rabbitMQ的请求 "以进行负载平衡.

java spring spring-boot jhipster microservices

43
推荐指数
1
解决办法
2万
查看次数

Kafka 消息 VS REST 调用

如今在微服务世界中,我在我的工作场所看到很多使用 kafka 消息传递的设计,当您可以使用微服务之间的 rest api 调用获得类似的结果时。从技术上讲,您可以完全停止使用 rest api 调用,而是使用 kafka 消息传递。我真的很想知道最佳实践,优缺点,微服务之间何时使用 api 调用,何时使用 kafka 消息传递。

让我们举一个现实生活中的例子:

我有库存服务和供应商服务。日常供应商服务调用供应商 API 来获取新项目,这些需要转移到库存服务中。项目数最多可达 10,000 个对象。

对于这个用例,最好是:

  1. 从供应商 API 获取新数据后,调用库存服务的 REST API 来存储新项目。

  2. 从供应商 API 获取新数据后,将它们作为消息发送到 kafka 主题,供库存服务使用

您会选择哪种方式以及考虑什么

rest apache-kafka microservices kafka-consumer-api spring-kafka

41
推荐指数
2
解决办法
1万
查看次数

我应该在(Docker)容器中永远使用/ pm2吗?

我正在重构一些node.js服务.所有这些都曾经forever在虚拟服务器上开始,如果进程崩溃,他们只是重新启动.

现在,转向容器化和无状态应用程序结构,我认为该进程应该退出,容器应该在失败时重新启动.

那是对的吗?有利有弊吗?

node.js docker coreos microservices

40
推荐指数
2
解决办法
1万
查看次数

服务发现与负载平衡

我试图了解在哪种情况下我应该通过负载均衡器选择服务注册表.

根据我的理解,两种解决方案都涵盖相同的功能.

例如,如果我们将consul.io视为功能列表,我们有:

  • 服务发现
  • 健康检查
  • 键/值存储
  • 多数据中心

例如Amazon ELB等负载均衡器有:

  • 可配置为仅接受来自负载均衡器的流量
  • 使用以下协议接受流量:HTTP,HTTPS(安全HTTP),TCP和SSL(安全TCP)
  • 将请求分发到多个可用区中的EC2实例
  • 连接数与负载均衡器接收的并发请求数成比例
  • 配置Elastic Load Balancing用于监视使用负载均衡器注册的EC2实例的运行状况的运行状况检查,以便它可以仅向健康实例发送请求
  • 您可以在使用安全(HTTPS/SSL)连接的网络上使用端到端流量加密
  • [EC2-VPC]您可以创建面向Internet的负载均衡器,它通过Internet接收来自客户端的请求并将它们路由到您的EC2实例,或者面向内部的负载均衡器,它接收来自VPC中客户端的请求并路由它们到您的私有子网中的EC2实例.EC2-Classic中的负载平衡器始终面向Internet.
  • [EC2-Classic] EC2-Classic的负载平衡器支持IPv4和IPv6地址.VPC的负载平衡器不支持IPv6地址.
  • 您可以使用CloudWatch指标,访问日志和AWS CloudTrail监控负载均衡器.
  • 您可以将面向Internet的负载均衡器与您的域名相关联.
  • 等等

因此,在这种情况下,我无法理解为什么我会选择类似consul.ionetflix eureka以上Amazon ELB的服务发现.

我有一种预感,这可能是由于实现客户端服务发现服务器端服务发现,但我不太确定.

cloud web-services distributed-computing amazon-web-services microservices

38
推荐指数
3
解决办法
1万
查看次数

微服务:如何存储许多微服务的源代码?

目前,我有一个项目的20个微服务.并且每个微服务都存储在单独的GIT reposotiry中.随后,服务数量将增加到200(或更多).

每项服务都有单元测试和集成测试.每个服务都在TeamCity(持续集成服务器)中构建.

问题:如何为一个项目存储200个微服务的源代码?在一个存储库中还是在单独的存储库中?

git microservices

37
推荐指数
3
解决办法
8440
查看次数