微服务基础

概述

微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。

单体应用的痛点:

  • 部署效率低下
  • 团队协作开发成本高
  • 系统高可用性差
  • 线上发布变慢

想要解决上面这些问题,服务化的思想也就应运而生。

用通俗的话来讲,服务化就是把传统的单机应用中通过 JAR 包依赖产生的本地方法调用,改造成通过 RPC 接口产生的远程方法调用

微服务的优势:

  • 服务拆分粒度更细
  • 服务独立部署
  • 服务独立维护
  • 服务治理能力要求高

总结一下,微服务架构下,主要功能模块:

  • 服务间通信:包括服务治理、负载均衡、服务间调用;
  • 服务容错和异常排查:包括流量整形、降级熔断、调用链追踪;
  • 分布式能力建设:包括微服务网关、分布式事务、消息驱动、分布式配置中心。

服务的发布引用

最常见的服务发布和引用的方式有三种:

  • RESTful API:主要被用作 HTTP 或者 HTTPS 协议的接口定义,即使在非微服务架构体系下,也被广泛采用。
  • XML 配置:一般是私有 RPC 框架会选择 XML 配置这种方式来描述接口,因为私有 RPC 协议的性能要比 HTTP 协议高,所以在对性能要求比较高的场景下,采用 XML 配置的方式比较合适。
  • IDL 文件:IDL 主要是用作跨语言平台的服务之间的调用,有两种最常用的 IDL:一个是 Facebook 开源的Thrift 协议,另一个是 Google 开源的gRPC 协议

总结:

通常情况下,如果只是企业内部之间的服务调用,并且都是 Java 语言的话,选择 XML 配置方式是最简单的。如果企业内部存在多个服务,并且服务采用的是不同语言平台,建议使用 IDL 文件方式进行描述服务。如果还存在对外开放服务调用的情形的话,使用 RESTful API 方式则更加通用。

image-20230915151055862