微服务是什么

原文链接:What are Microservices and How to Build Microservices in Java? - 原文作者Ramesh Fadatare
本文采用意译的方式

本文,我们将探讨微服务是什么,并且了解怎么使用 Java 去构建微服务(后面再扩展)。

微服务是什么/微服务架构?

嗯~一个微服务架构就是允许一个大团队去构建可扩展的应用程序,这个程序由多个松散的服务组成。

下面是一个典型的微服务架构。比如,我们想象这个微服务架构为一个简单的商城购物车应用服务。它有很多不同的服务,比如 product 服务,inventory 服务和 stock 服务,这些服务在微服务项目中是独立松散的。

每一个服务都有它自己的数据库。比如,product 服务有自己的数据库,inventory 服务有自己的数据库,stock 服务也有自己的数据库。

在微服务项目中,所有的服务都是松散耦合的。嗯,松散耦合意味着微服务项目中的所有服务都是各自独立,可以独立陂开发,每个微服务都可以被独立部署,并且每个服务都可以被独立扩展。

所以,微服务基本上都有以下的特点:

  • 每个微服务有自己的数据库
  • 每个微服务应该被独立开发
  • 每个微服务应该被独立部署
  • 每个微服务应该被独立扩展

在微服务项目中,服务之间可以通信。比如,product 服务可以和 inventory 服务通信,inventory 服务可以和 stock 服务通信。

微服务也可以和多个服务通信。

嗯~有两种通信类型。一种是同步,另一种是异步

在同步场景中,我们可以使用 HTTP 协议从一个微服务向另一个微服务发起 HTTP 请求。

在异步通信场景中,我们必须使用 message broker 在微服务间进行通信。比如,我们可以使用 RabbitMQ 或者 Apache Kafka 作为一个 message broker,为了在多个微服务中发起异步通信,以便微服务项目中每个项目都可以暴露 REST API

微服务架构的关键组件

现在,我们进一步看看一个典型的微服务架构中的关键组件。

嗯~关键组件是 API gateway 网关。不管客户端什么时候发送一个接口到 API 网关,然后 API 网关都会正确地将该请求路由到相关的微服务中。

客户端可以是一个 web 应用,一个手机应用或者 PC 桌面应用,不管这些应用想什么时候消费后端服务的 REST API,这些客户端都必须先发送请求到 API 网关,然后 API 网关将该请求路由到相关的微服务。

另一个关键的组件是 service registry 注册表。嗯~我们微服务项目中所有的微服务都要在 service registry 中注册。然后 API 网关将在 service registry 中发现指定的微服务 hostname 主机名和 port 端口,以便 API 网关可以允许请求到指定的微服务。

另一个关键的组件是 config server 配置服务器。因此,这个配置服务器组件基本上会将微服务的配置外部化。

另一个关键的组件是 distributed tracing 分布式跟踪。嗯~为了维护特定 HTTP 调用的日志或者完整的日志层次结构,我们可以使用 distributed tracing

另一个关键的组件是 Security 安全。我们可以在 API 网关中实现集中式安全性。

嗯,上面是微服务架构中一些关键组件。

总结

请记住,微服务架构是方便大团队去构建可扩展应用程序,该程序由多个松散耦合的服务组成。每个服务都有自己的数据库,每个服务都暴露 REST API,每个服务都是松散耦合的,每个服务都可以被独立开发,每个服务都可以被独立部署,并且每个服务都可以被独立扩展。然后我们也介绍了每个微服务的一些重要特性。

相关推荐
A XMan.36 分钟前
JSON结构快捷转XML结构API集成指南
xml·java·前端·json·php
小林爱43 分钟前
【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题
android·java·前端·kotlin·intellij-idea·compose·多平台
炸鸡配泡面3 小时前
Qt 12.28 day3
java·开发语言
get_money_3 小时前
代码随想录Day37 动态规划:完全背包理论基础,518.零钱兑换II,本周小结动态规划,377. 组合总和 Ⅳ,70. 爬楼梯(进阶版)。
java·笔记·算法·动态规划
get_money_3 小时前
代码随想录38 322. 零钱兑换,279.完全平方数,本周小结动态规划,139.单词拆分,动态规划:关于多重背包,你该了解这些!背包问题总结篇。
java·开发语言·笔记·算法·动态规划
不能放弃治疗4 小时前
第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述
后端·elasticsearch
蜗牛快跑2134 小时前
前端正在被“锈”化
前端·代码规范
憶巷5 小时前
设计模式的分类及作用
java·设计模式
颜淡慕潇6 小时前
【K8S问题系列 | 21 】K8S中如果PV处于Bound状态,如何删除?【已解决】
后端·云原生·容器·kubernetes·pv
SomeB1oody6 小时前
【Rust自学】7.6. 将模块拆分为不同文件
开发语言·后端·rust