【问题标题】:How exactly are microservices implemented?微服务究竟是如何实现的?
【发布时间】:2021-01-06 13:47:20
【问题描述】:

我正在使用 Docker 并将微服务部署到 EC2 实例。我正在阅读几个教程,但每个教程都只部署一个微服务,仅此而已。例如,很多教程都实现了一些简单的控制器,例如

@RestController
public class LogicOneController {

    @GetMapping
    @RequestMapping("/logic_one")
    public String entry() {
        return "LogicOneController stuff";
    }
}

在 Spring Boot 应用程序中。我可以从 ec2 访问这个 api,例如 www.my-ec2-instance/logic_one。但是使用微服务的目的是拥有许多其他服务,那么我该如何添加另一个服务呢?假设我有另一组apiLogicTwoController

我应该将它部署到另一个 Spring Boot 应用程序吗?如果是这种情况,那么我想我们只是在同一个 ec2 实例上运行多个容器并通过www.my-ec2-instance/logic_twowww.my-ec2-instance/logic_three 等访问它。这是正确的想法吗?

【问题讨论】:

  • 如果您打算在一台机器上运行许多服务/容器,您将需要某种容器/任务/服务编排。有一些行业领先的 docker 解决方案,例如 Kubernetes 和 nomad(我是 nomad 的忠实粉丝),它们将管理集群上 100 到 1000 个 docker 容器/服务的编排和部署

标签: spring-boot docker spring-mvc amazon-ec2


【解决方案1】:

微服务不应按逻辑一/二/三拆分。它由可能独立工作的业务领域分开,业务领域中有很多逻辑。 回到电子商务设计。假设有几种域(登录/身份验证、用户、订单、运输)。 因此,每个域可以视为 1 个模块/域

  • Lo​​gin/auth => 服务有责任管理登录令牌、授权
  • 用户 => 服务管理所有用户配置文件
  • 订单 => 用户可以在其中创建/执行/取消...订单的服务
  • 运输 => 可以更新/管理与第 3 方的运输状态的服务...

所以,如果您只有 logic_1、logic_2、... 它是 1 个服务/1 个模块。上面只是一个例子,一个实际的微服务系统被分割成非常小的域。

  • 微服务系统的不同之处在于,客户端(移动/网络...)仅与服务调用 API-GateWay 进行通信,而不是直接接触核心服务(登录/验证、用户、订单、运输...) .这就像一站式服务哈哈

注意:不使用/应用微服务模式的应用程序并不意味着这不是一个好的设计。

【讨论】:

  • 也许我的 api 示例没有精心设计,但不同的 api 不会包含非常不同的业务目的吗?例如,处理消费者信息的控制器与处理产品信息的控制器需要单独的容器,对吗?
猜你喜欢
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2023-03-06
相关资源
最近更新 更多