微服务在实践中是如何工作的?

Posted

技术标签:

【中文标题】微服务在实践中是如何工作的?【英文标题】:How does Microservices in practice work? 【发布时间】:2017-12-12 03:22:44 【问题描述】:

从理论上讲,我了解微服务的工作原理以及为什么它们在各种情况下都有帮助,但我仍然不明白它在实践中是如何工作的。

假设有一个基于 CMS 作为整体应用程序的在线商店。

现在需要在微服务架构中运行在线商店。

这种微服务架构在技术上与当前的单体架构有何不同?

例如,我选择了 productsearch.php。如果我想扩展此功能,通常我必须设置一个新服务器并将整个 CMS ressources 文件夹复制到它以进行负载平衡。

如果使用微服务,我猜 productsearch.php 将是一个单一的微服务,我只需要复制这个 php 文件来扩展而不需要复制其他资源?

【问题讨论】:

基本上,您将拥有许多小型应用程序实例,而不是一个大型应用程序实例,每个实例都执行一项特定的工作。因此,假设在一个大型应用程序中,您发现操作 A 是一个瓶颈,并且占用了大部分 CPU 时间。仅针对一项操作扩展整个应用程序是一种浪费。如果操作 A 本身是一个小型应用程序实例,则您可以仅横向扩展该应用程序。将其放在具有单个端点的负载平衡器后面,将系统的其余部分指向该端点,您就可以更便宜、更轻松地解决问题。 拥有微服务确实会带来令人头疼的问题,例如如果出现问题,将故障点转移给基础设施/网络工程师,微服务实际上取决于软件以单体架构方式设计的规模/复杂程度.它适用于某些人,对其他人来说可能效果不佳。在您提到 php 脚本的示例中,这是一个非常复杂的示例,它远不止于此,网络、虚拟机、带宽、网络架构等 【参考方案1】:

从技术和概念上讲,微服务独立于其他服务(在单体应用中,您将拥有相互依赖的模块)。

从技术上讲,建立在现代微服务平台(如 Node.JS、Spring Boot 或 .NetCore)上的微服务将更容易利用容器化系统(如 Docker),这可能得到服务注册和配置管理的支持技术(如 Kubernetes、ZooKeeper、Eureka 等)。

容器化的优势在于更容易横向扩展(添加更多容器)。更进一步,整个微服务/容器化概念和相关技术也有助于实现 CI/CD 等功能。

【讨论】:

【参考方案2】:

我试图用这个虚构的 CMS 图表来解释它。借助微服务架构,我们可以独立扩展每个微服务。每个微服务可能由不同的团队开发,甚至可能使用不同的技术开发。但是我们极大的灵活性带来了巨大的维护开销,我相信这是值得的,因为其中大部分都可以自动化。 简而言之,一个整体应用程序中的每个模块都是微服务的潜在候选者。然而,微服务可以比传统模块更细化。

这很好地解释了如何分解您的单体应用程序。 http://microservices.io/patterns/decomposition/decompose-by-business-capability.html

【讨论】:

以上是关于微服务在实践中是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记微服务架构与实践

云原生架构下微服务最佳实践-如何拆分微服务架构

业务系统如何微服务化

技术京东京麦:微服务架构下的高可用网关与容错实践

1.微服务管理-11.缓存-3.实践-缓存使用

架构师实践课微服务如何拆分?大型微服务项目从何下手?