问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

从API网关到Kubernetes:微服务架构核心组件详解

创作时间:
2025-01-21 23:10:55
作者:
@小白创作中心

从API网关到Kubernetes:微服务架构核心组件详解

微服务架构是一种将应用程序设计为一套小型服务的方法,每个服务运行在自己的进程中,通常采用轻量级通信机制(如HTTP资源API)相互通信。这些服务围绕业务功能构建,可以通过全自动部署机制独立部署。

当今使用比较多的技术体系有两个:一个是Java,另一个是.NET。下面将详细介绍微服务架构中常用的技术栈:

微服务架构——服务通信

  • WebService、WCF、WebAPI,甚至ASHX、ASPX,这些都是微软本身的技术体系。
  • 主动触发
  • 数据序列化传递
  • 跨平台
  • 跨语言
  • Http穿透防火墙

微服务架构——进程通信

  • Net Remoting:仅支持.NET平台,不支持跨平台。
  • gRPC:高性能、开源和通用RPC框架,面向服务端和移动端,基于HTTP/2设计,推荐使用。

微服务架构——API网关服务(Ocelot)

API网关是系统暴露在外部的访问入口,类似于公司的门卫,承担着寻址、限制进入、安全检查、位置引导等功能。

Ocelot是一个用.NET Core实现的开源API网关,功能强大,包括路由、请求聚合、服务发现、认证、鉴权、限流熔断,并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。这些功能只需简单配置即可完成。

官网https://ocelot.readthedocs.io/en/latest/index.html

微服务架构——认证&授权

在现代应用开发中,身份认证和授权是每个应用必不可少的一部分。IdentityServer4是一个为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth2.0协议的认证授权中间件。

项目地址https://github.com/IdentityServer/IdentityServer4

微服务架构——瞬态故障处理

Polly是一个.NET弹性和瞬态故障处理库,允许以非常顺畅和线程安全的方式来执行重试、断路、超时、故障恢复等策略。Polly针对.NET 4.0、.NET 4.5和.NET Standard 1.1以及.NET Core实现,项目作者现已成为.NET基金会成员,项目一直在持续迭代和更新。

项目地址https://github.com/App-vNext/Polly

微服务架构——分布式追踪

随着微服务架构的流行,一些问题也会越来越突出。例如,一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链。在调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。因此,需要APM(应用性能管理)工具来帮助理解系统行为、分析性能问题,以便在发生故障时能够快速定位和解决问题。

项目地址https://github.com/SkyAPM/SkyAPM-dotnet

微服务架构——分布式日志

在规模较大、日志量多而复杂的场景中,直接在日志文件中使用grep、awk等命令进行搜索效率低下,面临的问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。因此,需要建立集中式日志收集系统,将所有节点上的日志统一收集、管理、访问。

  • Exceptionless是一个开源的实时日志收集框架,可以应用于基于ASP.NET、ASP.NET Core、Web Api、Web Forms、WPF、Console、MVC等技术栈的应用程序,并提供了REST接口可以应用于JavaScript、Node.js中。Exceptionless将日志收集变得简单易用,不需要了解太多相关技术细节及配置。

    官网http://exceptionless.com
    GitHubhttps://github.com/exceptionless/Exceptionless

  • ELK是三个开源软件的缩写,分别为Elasticsearch、Logstash以及Kibana,现在还新增了Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,目前由于原本的ELK Stack成员中加入了Beats工具所以已改名为Elastic Stack。推荐使用

微服务架构——分布式配置中心

Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring环境也有较好的支持。.Net客户端不依赖任何框架,能够运行于所有.NET运行时环境。

项目地址https://github.com/ctripcorp/apollo/

微服务架构——分布式锁

分布式锁的解决方案有很多,包括:

  • Consul可以实现分布式锁
  • Redis可以实现分布式锁,推荐使用
  • Zookeeper可以实现分布式锁
  • 数据库可以实现分布式锁

微服务架构——分布式事务

分布式事务的实现方式包括:

  • 2PC(two-phase commit protocol,强一致性,没有可用性)
  • 3PC
  • TCC(Try-Confirm-Cancel)
  • 本地消息表,推荐RabbitMQ。
  • Saga模式

本地消息表:MQ分布式事务—本地消息表—基于消息的一致性。

  • 上游投递消息
  • 下游获取消息
  • 上游投递稳定性
  • 下游接受稳定性

微服务架构——容器化

Docker是一个开源的应用容器引擎,可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux和Windows机器上,也可以实现虚拟化。Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用C/S架构,Docker daemon作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。客户端和服务端既可以运行在一个机器上,也可通过socket或者RESTful API来进行通信。Docker daemon一般在宿主主机后台运行,等待接收来自客户端的消息。Docker客户端则为用户提供一系列可执行命令,用户用这些命令实现跟Docker daemon交互。

微服务架构——容器编排

Kubernetes是Google开源的一个容器编排引擎,支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。Kubernetes也可以理解为Docker的编排容器,是管理应用的全生命周期的工具,从创建应用/部署,应用提供服务,扩容缩容,更新,都非常的方便,而且可以做到故障自愈。

中文社区http://docs.kubernetes.org.cn/
官网https://kubernetes.io/docs/home/

微服务架构——CI/CD

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。

官网http://www.jenkins.org.cn/

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号