微服务是什么

原文链接: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,每个服务都是松散耦合的,每个服务都可以被独立开发,每个服务都可以被独立部署,并且每个服务都可以被独立扩展。然后我们也介绍了每个微服务的一些重要特性。

相关推荐
星离~1 小时前
Vue响应式原理详解:从零实现一个迷你Vue
前端·javascript·vue.js
-Xie-1 小时前
Redis(八)——多线程与单线程
java·数据库·redis
Kuo-Teng1 小时前
LeetCode 279: Perfect Squares
java·数据结构·算法·leetcode·职场和发展
Filotimo_2 小时前
SpringBoot3整合Druid数据源
java·spring boot
G探险者2 小时前
为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异
数据库·后端·mysql
百锦再2 小时前
第18章 高级特征
android·java·开发语言·后端·python·rust·django
梦6502 小时前
React 简介
前端·react.js·前端框架
一只小阿乐2 小时前
react 中的判断显示
前端·javascript·vue.js·react.js·react
光影少年2 小时前
useMemo 和 React.memo区别
前端·react.js·前端框架
小沐°2 小时前
React-页码组件
前端·javascript·react.js