我有几个与微服务架构相关的问题。
微服务的粒度应该是多少?我们在关系数据库和 NoSQL 数据库中都有表。每张 table 应该有一项服务吗?我认为每个数据源的服务更有意义,但它会是 SOA。
如果我们创建一堆微服务,我们是否也应该提供客户端库来促进服务的使用?或者让调用者使用任何 REST 库进行调用。不管怎样,这听起来工作量很大。
对于每个微服务,三个应该是一个 GIT 存储库吗?
可以在同一个 EC2 实例中部署多个微服务吗?
我认为在 AWS Lambda 上部署微服务是完美的,但整个应用程序将只是一堆 Lambda 函数。更不用说与 AWS Lambdas 的紧密耦合了。有人在 Lambdas 上实现过微服务吗?如果对此有任何反馈,我将不胜感激。
微服务的实现通常因系统或开发人员而异。然而,微服务的一些基本特征是,
- 小焦点(做一件事并做好那件事)
- 松散耦合(彼此独立运作)
- 中性语言
- 限界上下文(不需要知道其他微服务的实现)
我们可以利用 AWS lambda 来实现上述特性。但是维护和管理 Lambda 端点可能很棘手,而且通常很麻烦。您可以使用 Serverless Framework轻松管理 lambda 函数。您可以用简单的 YAML 格式定义服务配置,框架会创建一个 CloudFromation 堆栈并进行部署。
使用无服务器框架,您可以定义多个服务。每个服务都可以是小焦点、松散耦合、语言中立和有界上下文。例如:用户 CRUD、电子邮件通知、预定作业等...当您使用无服务器框架部署服务时,它会创建与各自的 lambda 链接的不同 API 网关。您可以使用 API 网关端点与每个服务进行交互。
正如您所提到的,lambda 可以与其他 AWS 服务相关联。但我认为,只要它不依赖于其他微服务并且具有明确定义的服务集成点,例如 Dynamodb 表或 S3 存储桶,我们就可以使用 Lambda 来开发微服务。