【微服务】微服务常用组件汇总

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【微服务】微服务常用组件汇总

1.1、Nginx

Nginx 是一个高性能的HTTP和反向代理服务器。Nginx一方面可以做反向代理,另外一方面可以做静态资源服务器,接口使用Lua动态语言可以完成灵活的定制功能。

Nginx 在启动后,会有一个 Master 进程和多个 Worker 进程,Master 进程和 Worker 进程之间是通过进程间通信进行交互的。Nginx 采用了异步非阻塞的方式来处理请求,也就是说,Nginx 是可以同时处理成千上万个请求的。

Nginx 官网

Zuul 是 Netflix 开源的一个API网关组件,它可以和 Eureka、Ribbon、Hystrix 等组件配合使用。社区活跃,融合于 SpringCloud 完整生态,是构建微服务体系前置网关服务的最佳选型之一。

Zuul 目前有两个大的版本:Zuul1 和 Zuul2

Zuul1 是基于 Servlet 框架构建,它采用的是阻塞和多线程方式,即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。

Netflix 发布的 Zuul2 有重大的更新,它运行在异步和无阻塞框架上,每个 CPU 核一个线程,处理所有的请求和响应,请求和响应的生命周期是通过事件和回调来处理的,这种方式减少了线程数量,因此开销较小。

Zuul 官网

Zuul 源码托管

1.3、SpringCloud Gateway

Spring Cloud Gateway 是Spring Cloud 的一个全新的API网关项目,目的是为了替换掉Zuul1,它基于Spring5.0 + SpringBoot2.0 + WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,Spring Cloud GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

Spring Cloud Gateway可以与Spring Cloud Discovery Client(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发、负载均衡、熔断、鉴权、路径重写、⽇志监控等,并且Gateway还内置了限流过滤器,实现了限流的功能。

Spring Cloud Gateway 官网

Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong主要有三个组件:

  • Kong Server :基于Nginx的服务器,用来接收API请求。
  • Apache Cassandra/PostgreSQL :用来存储操作数据。
  • Kong dashboard:官方推荐UI管理工具,也可以使用 restfull 方式管理admin api。

Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

Kong 官网

Kong 源码托管

1.5、Traefik

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

Traefik 官网

Traefik 中文官网

1.6、OpenResty

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 中文官网

OpenResty 源码托管

二、常见的注册中心

Spring Cloud支持的多种注册中心Eureka、Consul、Zookeeper、以及阿里巴巴推出Nacos。这些注册中心在本质上都是用来管理服务的注册和发现以及服务状态的检查的

2.1、Eureka

原生,2.0遇到性能瓶颈,停止维护。

Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。

Eureka 源码托管

2.2、Zookeeper

支持,专业的独立产品。例如:dubbo。

ZooKeeper是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。分布式应用程序以某种形式使用所有这些类型的服务。每次实现它们时,都需要做大量工作来修复不可避免的bug和竞争条件。由于实现这些类型的服务很困难,应用程序最初通常会忽略它们,这使得它们在发生变化时变得脆弱,难以管理。即使做得正确,这些服务的不同实现也会导致应用程序部署时的管理复杂性。

Zookeeper 官网

2.3、Consul

原生,GO语言开发。

Consul是一个服务网络解决方案,使团队能够管理服务之间以及跨多云环境和运行时的安全网络连接。Consul提供服务发现、基于身份的授权、L7流量管理和服务对服务加密。

Consul 官网

2.4、Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

Nacos 官网

Nacos 源码托管

三、常见的RPC框架

3.1、Dubbo

国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 Java 语言。后来贡献给了Apache软件基金会。

Apache Dubbo 是一款微服务框架,为大规模微服务实践提供高性能 RPC 通信、流量治理、可观测性等解决方案,涵盖 Java、Golang 等多种语言 SDK 实现。最新版本升级到Dubbo3了。

Dubbo 官网

3.2、Motan

微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言。Motan是一个跨语言远程过程调用(RPC)框架,用于快速开发高性能分布式服务。

Motan生态系统相关项目:

  • Motan go是golang实现。
  • MotanPHP是PHP客户端可以直接或通过Motan go代理与Motan服务器交互。
  • Motan openresty是基于openresty的Lua(Luajit)实现。

Motan 源码托管

3.3、Tars

腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言。

TARS是一个Linux基金会项目。它是一个基于名称服务和Tars协议的高性能RPC框架,也是一个集成的管理平台,并通过灵活的调度实现了托管服务。

Tars,又名TAF(Total Application Framework),自2008年以来一直在腾讯使用。目前它支持C++、Java、Nodejs和PHP。该框架为开发、维护和测试提供了一套解决方案,使开发、部署和测试服务更加高效。它集成了可扩展的编码/解码协议、高性能RPC通信框架、名称服务、监视器、统计和配置。您可以使用它快速开发基于微服务的可靠分布式应用程序,并实现完全高效的服务管理。

Tars 源码托管

3.4、Spring Cloud

国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言。Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

Spring Cloud 官网

Spring Cloud 中文官网

3.5、gRPC

Google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言。

gRPC是一个现代的开源高性能远程过程调用(RPC)框架,可以在任何环境中运行。它可以通过可插拔的负载平衡、跟踪、健康检查和身份验证支持,有效地连接数据中心内和数据中心之间的服务。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

gRPC 官网

3.6、Thrift

最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。

Thrift 是一个软件框架(远程过程调用框架),用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

thrift 最初由 facebook 开发,07 年四月开放源码,08 年 5 月进入 apache 孵化器,现在是 Apache 基金会的顶级项目。

thrift 允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成 RPC 客户端和服务器通信的无缝跨编程语言。。

著名的 Key-Value 存储服务器 Cassandra 就是使用 Thrift 作为其客户端 API 的。

Thrift 官网

完结!


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7月前
|
监控 负载均衡 算法
构建高效微服务架构的五大核心组件
【4月更文挑战第6天】随着现代业务需求的多样化和复杂性增加,传统的单体应用已无法满足快速迭代与灵活部署的需求。微服务架构应运而生,以其高度模块化、独立部署和可伸缩性成为企业转型的关键。本文聚焦于构建高效微服务架构的核心组件,从服务发现、配置管理、负载均衡、容错处理到服务监控五个方面进行深入剖析,旨在提供一套全面的技术指南以支持后端开发的最佳实践。
|
7月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
Go 数据中心 微服务
Golang 语言微服务的服务发现组件 Consul 的系统架构介绍
Golang 语言微服务的服务发现组件 Consul 的系统架构介绍
111 0
|
Java 中间件 微服务
微服务 链路追踪组件
微服务 链路追踪组件
176 0
|
存储 安全 Go
Golang 语言微服务的服务注册与发现组件 Consul
Golang 语言微服务的服务注册与发现组件 Consul
127 0
|
3月前
|
XML Java 数据库
在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂
【9月更文挑战第8天】在微服务架构中,请求常跨越多个服务,涉及多组件交互,问题定位因此变得复杂。日志作为系统行为的第一手资料,传统记录方式因缺乏全局视角而难以满足跨服务追踪需求。本文通过一个电商系统的案例,介绍如何在Spring Boot应用中手动实现日志链路追踪,提升调试效率。我们生成并传递唯一追踪ID,确保日志记录包含该ID,即使日志分散也能串联。示例代码展示了使用过滤器设置追踪ID,并在日志记录及配置中自动包含该ID。这种方法不仅简化了问题定位,还具有良好的扩展性,适用于各种基于Spring Boot的微服务架构。
57 3
|
4月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
4月前
|
监控 负载均衡 Java
(九)漫谈分布式之微服务组件篇:探索分布式环境下各核心组件的必要性!
本文将深入探讨微服务中各个组件的必要性,以此帮助各位更好地加深对分布式系统的掌握度。
158 1
|
4月前
|
消息中间件 监控 API
微服务的主要组件
【8月更文挑战第22天】
248 0
|
4月前
|
存储 缓存 Java
Eureka原理与实践:深入探索微服务架构的核心组件
在微服务架构日益盛行的今天,服务之间的注册与发现成为了保证系统高可用性和灵活性的关键。Eureka,作为Netflix开源的服务注册与发现框架,凭借其简单、健壮的特性,在微服务领域占据了举足轻重的地位。本文将深入剖析Eureka的原理,并通过实践案例展示其在实际项目中的应用,以期为开发者提供一个高端、深入的视角。