微服务架构必备技术栈:万变不离其宗的奥义!

· 浏览次数 : 15

小编点评

微服务架构涉及的技术栈广泛,包括服务通信、进程通信、API网关、认证授权、瞬态故障处理、分布式追踪、分布式日志、分布式配置中心、分布式锁、分布式事务、容器化以及容器编排等。以下是这些技术的详细说明: 1. **服务通信**: - WebService - WCF(Windows Communication Foundation) - WebAPI - ASHX(Apache ASP.NET) - ASP.NET Core 2. **进程通信**: - Net Remoting(.NET平台) - gRPC(高性能、开源和通用RPC框架) 3. **API网关**: - Ocelot(.NET Core实现的开源API网关) 4. **认证与授权**: - IdentityServer4(为ASP.NET CORE量身定制的认证授权中间件) 5. **瞬态故障处理**: - Polly(强大的.NET弹性和瞬态故障处理库) 6. **分布式追踪**: - SkyAPM(应用性能管理工具) 7. **分布式日志**: - Exceptionless(开源的实时日志收集框架) - ELK Stack(Elasticsearch、Logstash和Kibana) 8. **分布式配置中心**: - Apollo(携程框架部门研发的配置管理平台) 9. **分布式锁**: - Consul - Redis - Zookeeper - 数据库(如MySQL、PostgreSQL等) 10. **分布式事务**: - 2PC(两阶段提交协议) - 3PC(Try-Confirm-Cancel) - RabbitMQ(推荐用于本地消息表的分布式事务解决方案) - Saga模式(基于消息的一致性) 11. **容器化**: - Docker(开源的应用容器引擎) - Kubernetes(Google开源的容器编排引擎) 12. **容器编排**: - Jenkins(开源的持续集成工具) 这些技术共同构成了微服务架构的基础,使得开发者能够在现代软件开发中实现高内聚、低耦合的系统设计,提高系统的可伸缩性、可靠性和可维护性。

正文

前言

之前我们说过,微服务是一种软件设计、架构思想。当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。

image


当今使用比较多两个技术体系,一个是Java,另外一个就是Net。

废话不多说,今天我就把相关“微服务架构”所用到的技术栈罗列出来。(以下是微软相关技术栈的)

这里也要说明一下,微服务架构里面的很多技术是和开发语言无关的。无论是 .Net 还是 Java 平台都可以使用。我们之前说过,微服务架构的轮廓大同小异,以后,一步一步的针对每项技术在做深入研究。


微服务架构----服务通信

WebService、WCF、WebAPI,甚至可以是 ASHX,ASPX,这都是微软本身的技术体系,没什么可说的。

  1. 主动触发
  2. 数据序列化传递
  3. 跨平台。
  4. 跨语言。
  5. Http 穿透防火墙。

微服务架构----进程通信

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

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

API网关 —— 它是系统的暴露在外部的一个访问入口。这个有点像代理访问的家伙,就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导、等等功能。

image


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

image


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

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

image


现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于IOS、Android的App,基于Windows系统的桌面应用和UWP应用等等。

这么多种类的应用,就给应用的开发带来的挑战,我们除了分别实现各个应用外,我们还要考虑各个应用之间的交互,通用模块的提炼,其中身份的认证和授权就是每个应用必不可少的的一部分。

而现在的互联网,对于信息安全要求又十分苛刻,所以一套统一的身份认证和授权就至关重要。IdentityServer4就是这样一个框架,IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth2.0协议的认证授权中间件。

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

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

image


Polly它一款强大的类库,Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略。

Polly针对 .NET 4.0,.NET 4.5和.NET Standard 1.1以及.NET Core实现,该项目作者现已成为.NET基金会一员,项目一直在不停迭代和更新,你值得拥有。

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

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

image


随着微服务架构的流行,一些微服务架构下的问题也会越来越突出。

比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到 “银弹” 这个词是不存在的,每种架构都有其优缺点。

image


面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这时候 APM(应用性能管理)工具就该闪亮登场了。

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

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

一般我们需要进行日志分析场景:直接在日志文件中grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。

这就需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

  1. Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以应用在 Javascript,Node.js 中。
    image
    Exceptionless 将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置。在以前,我们做日志收集大多使用 Log4net,Nlog 等框架,在应用程序变得复杂并且集群的时候,可能传统的方式已经不是很好的适用了,因为收集各个日志并且分析他们将变得麻烦而且浪费时间。
    现在Exceptionless团队给我们提供了一个更好的框架来做这件事情,我认为这是非常伟大并且有意义的,感谢他们。

     官网:http://exceptionless.com 
     GitHub:https://github.com/exceptionless/Exceptionless
    

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

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

image


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分布式事务—本地消息表—基于消息的一致性。

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

微服务架构---容器化

image


Docker 是一个开源的应用容器引擎,可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 和Windows 机器上,也可以实现虚拟化。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。

客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。如图:
image


微服务架构---容器编排

image


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

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。

Kubernetes 也可以理解为Docker 的编排容器,是管理应用的全生命周期的工具,从创建应用/部署,应用提供服务,扩容缩容,更新,都非常的方便,而且可以做到故障自愈。

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

微服务架构---CI/CD

image


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

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

与微服务架构必备技术栈:万变不离其宗的奥义!相似的内容:

微服务架构必备技术栈:万变不离其宗的奥义!

前言 之前我们说过,微服务是一种软件设计、架构思想。当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。 当今使用比较多两个技术体系,一个是Java,另外一个就是Net。 废话不多说,今天我就把相关“微服务架构”所用到的技术栈罗列出来。(以下是微软相

[转帖]10 张图搞懂服务注册发现机制

http://blog.itpub.net/70024420/viewspace-2926779/ 在微服务架构或分布式环境下,服务注册与发现技术不可或缺,这也是程序员进阶之路必须要掌握的核心技术之一,本文通过图解的方式带领大家轻轻松松掌握。 引入服务注册与发现组件的原因 先来看一个问题,假如现在我

apisix~集成服务发现注册中心

摘要 当业务量发生变化时,需要对上游服务进行扩缩容,或者因服务器硬件故障需要更换服务器。如果网关是通过配置来维护上游服务信息,在微服务架构模式下,其带来的维护成本可想而知。再者因不能及时更新这些信息,也会对业务带来一定的影响,还有人为误操作带来的影响也不可忽视,所以网关非常必要通过服务注册中心动态获

基于Seata探寻分布式事务的实现方案

随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章通过seata框架总结了分布式事务的几种解决方案。

如何在微服务下保证事务的一致性

微服务架构是将单个服务拆分成一系列小服务,且这些小服务都拥有独立的进程,彼此独立,很好地解决了传统单体应用的上述问题,但是在微服务架构下如何保证事务的一致性呢?

2023 年微服务后端开发的 11 个最佳工具

前言 微服务架构以将复杂的应用程序分解为易管理的服务而闻名,然而,管理微服务是一项具有挑战性的任务。为了确保开发工作流程的高效性,需要采用特定的工具。 在本文中,小编将为您介绍2023年最热的11款后端微服务开发工具,并全面介绍它们的基本功能和常见用例。不论您是经验丰富的微服务开发人员,还是初涉微服

更安全、更低耗的微服务架构改造之道

摘要:微服务改造是政企客户云原生演进的重头戏,但如何做到成本低、安全性高、性能不变、方便调用等,却是一门学问。本文讲述华为云Stack的解决之道。 本文分享自华为云社区《【华为云Stack】【大架光临】第17期:更安全、更低耗的微服务架构改造之道》,作者:杨奕 华为云技术规划专家。 在以往的文章《云

混沌演练实践(二)-支付加挂链路演练

当前微服务架构下,各个服务间依赖高,调用关系复杂,业务场景很少可以通过一个系统来实现,常见的业务场景实现基本涉及多个上下游系统,要保证整体链路的稳定性,需要尽量减少系统之间的耦合性,避免因为单点失效引起整个链路的故障。

[转帖]庐山真面目之十五微服务架构的动态分离的设计实现

https://www.cnblogs.com/PatrickLiu/p/16688731.html 一、开场白 我是一名程序员,是基于 NET 框架的跨平台开发的程序员。现在的业务系统,不论大小都开始实现了微服务,不管合不合适,最起码说起来挺牛气的。我做一位程序员,当然也不能落后了。微服务是为了满

[转帖]庐山真面目之十三微服务架构中如何在Docker上使用Redis缓存

https://www.cnblogs.com/PatrickLiu/p/14518160.html 一、介绍 1、开始说明 在微服务器架构中,有一个组件是不能少的,那就是缓存组件。其实来说,缓存组件,这个叫法不是完全正确,因为除了缓存功能,它还能完成其他很多功能。我就不隐瞒了,今天我们要探讨的就是