C#微服务必学清单

Posted DinAction

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#微服务必学清单相关的知识,希望对你有一定的参考价值。

在 C# 领域,有一些不错的微服务书籍和开源框架,对于学习微服务相关知识非常有帮助。以下是一些建议您阅读的微服务书目和开源框架。

微服务书目:

1. 《Building Microservices》(Sam Newman):这本书详细介绍了微服务的基本概念、实践方法和优缺点,并通过实际案例分析来展示如何构建微服务系统。

2. 《.NET Microservices: Architecture for Containerized .NET Applications》(Cesar de la Torre, Bill Wagner, Mike Rousos):这本书专注于使用 .NET 技术栈构建微服务,提供了许多关于设计、开发和部署微服务的指导和实践经验。

3. 《Microservices in .NET Core》(Christian Horsdal Gammelgaard):本书重点介绍了如何在 .NET Core 中构建微服务应用程序,以及如何将其组织和部署到 Docker 容器中。

微服务开源框架:

1. Ocelot:Ocelot 是一个基于 .NET Core 的 API 网关,可用于构建微服务架构。它支持路由、身份验证、授权、负载均衡等功能。

GitHub: https://github.com/ThreeMammals/Ocelot

2. Steeltoe:Steeltoe 是一套专为 .NET 开发者设计的微服务工具集,提供了诸如配置管理、服务发现、断路器等功能。

GitHub: https://github.com/SteeltoeOSS/Steeltoe

3. MassTransit:MassTransit 是一个基于 .NET 的开源消息总线,可用于构建分布式应用程序和微服务。它支持多种传输协议和队列系统,例如 RabbitMQ 和 Azure Service Bus。

GitHub: https://github.com/MassTransit/MassTransit

4. NServiceBus:NServiceBus 是一个基于 .NET 的企业级服务总线框架,用于构建高性能、可伸缩的微服务和 SOA 应用程序。

官网: https://particular.net/nservicebus

结合这些书籍和开源框架,您可以更好地学习和掌握 C# 领域的微服务知识,并将其应用到实际项目中。

当然可以。微服务作为一种较新的软件架构模式,有很多经典书籍和开源框架可以供你参考学习。以下是一些建议:

经典书籍:
1. 《微服务设计》(Sam Newman 著)
2. 《微服务实战》(Morgan Bruce、Paulo A. Pereira 著)
3. 《微服务:从设计到部署》(Joshua Bloch 著)
4. 《Spring微服务实战》(John Carnell 著)
5. 《微服务架构与实践》(马晓星 著)

开源框架:
1. Spring Cloud
Spring Cloud 是一个基于 Java 的微服务开发框架,提供了一系列组件和工具,帮助开发者快速搭建和部署微服务。

2. Netflix OSS
Netflix 开源软件套件(Netflix OSS)包含了一系列用于构建微服务应用的库和工具,如 Eureka(服务发现)、Ribbon(负载均衡)等。许多 Netflix OSS 组件已经被整合到 Spring Cloud 中。

3. Istio
Istio 是一个开源的服务网格(Service Mesh)解决方案,让开发者能够更容易地在分布式微服务体系中管理流量、控制访问策略和监控服务之间的通信。

4. Kubernetes
Kubernetes 是一个优秀的容器编排工具,可以自动化部署、扩展和管理容器化应用程序。虽然它不是专门为微服务设计的,但在微服务架构中使用 Kubernetes 可以简化部署和管理过程。

5. Dubbo
Dubbo 是阿里巴巴开源的一款高性能、轻量级的 RPC 框架,它提供了服务注册与发现、负载均衡等功能,非常适合用于构建基于 Java 的微服务系统。

这些书籍和框架对于初学者和有经验的开发者都非常有价值,希望能帮助你更好地理解和掌握微服务技术。

了解,我为你整理了一些目前比较新颖且受关注的微服务开源框架。请注意,这些框架可能相对较新,社区资源和成熟度可能没有上述提到的框架丰富。以下是一些建议:

1. Dapr(Distributed Application Runtime)
Dapr 是一个事件驱动、可扩展的运行时环境,用于构建微服务和其他分布式应用程序。它提供了一组通用构建块,如状态管理、发布/订阅消息、触发器等。Dapr 可以在任何编程语言中使用,并支持多种基础设施。

2. Envoy
Envoy 是一个开源的高性能代理服务器,具有强大的网络层抽象功能,适用于现代化的微服务体系结构。它可以作为通用数据平面,与像 Istio 这样的控制平面搭配使用。

3. Tars
Tars 是腾讯开源的一款高性能 RPC 框架,支持多种编程语言。它提供了完整的微服务治理方案,包括服务注册与发现、负载均衡、故障容错,以及全链路监控等功能。

4. Kuma
Kuma 是一个通用的服务网格控制平面,旨在简化微服务的连接、安全和观察。Kuma 支持 Envoy 作为数据平面,并提供了一个易于使用的界面,以便在任何环境中管理服务网格。

5. Temporal
Temporal 是一个高度可扩展的微服务编排引擎,用于构建复杂的工作流程。它分离了应用程序逻辑和基础设施层,使开发人员能够专注于实现业务逻辑,而无需处理分布式系统的复杂性。

虽然这些框架相对较新,但它们在特定领域已收到广泛关注。如果你正在寻求探索更新颖的技术,可以尝试学习这些框架并评估它们是否满足你的需求。

分布式/微服务必配APM系统,SkyWalking让你不迷路

前言

如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节点,从而针对性的处理问题。比较主流的APM(Application Performance Management)系统有SkyWalking、Zipkin、PinPoint、Cat等,这里就先说说SkyWalking,其他的后续再补上。

APM系统当然不仅仅只是链路追踪,还可以根据各种性能指标分析应用程序及其运行环境,以便在发生故障的时候能快速定位及解决问题。

正文

1. SkyWalking简介

SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施(如数据库)的数据,它还提供了优秀的可视化界面。SkyWalking 也是一种现代 APM,专为云原生、基于容器的分布式系统而设计

1.1 常用术语

在SkyWalking中会经常提到服务、服务实例和端点,这里就先来了解一下:

  • 服务:通俗一点理解就是一个应用程序;比如订单服务API。

  • 服务实例:服务组中每个单独运行的节点称为一个实例,一个服务可以对应多个服务实例(集群); 如:一个订单服务可以集群部署好几个节点,这些节点就称为服务实例;

  • 端点:请求服务的路径,如:Http Url地址或是gRPC请求地址(gRPC定义的服务类+方法名);

通俗理解,如下图:

1.2 理解架构

SkyWalking 主要分为四个部分:探针、平台后端、存储和 UI,如下图:

img
  • 探针:专门用于收集数据,并按照SkyWalking的要求格式化对应的数据。

  • 平台后端:对收集来的数据进行聚合、分析及流处理

  • 存储:就是数据库,将收集的数据存储起来,方便随时查看和分析;主流的数据库有 ElasticSearch、H2、MySQL、TiDB、InfluxDB等。一般我们会使用ElasticSearch,查询速度杠杠滴。

  • UI:就是提供一个Web界面,可以很方便的查看和分析数据,各种图表形式展示。

理论暂时了解这么多,实操一下更容易理解。

2. 安装

这里就采用Docker的方式进行安装,方便快捷,如果还有小伙伴对Docker不是很了解的,可以看看我整理的Docker系列分享

2.1 安装ElasticSearch

这里用到的存储是ElasticSearch,需要提前安装,执行如下命令:

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --restart always -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx521m" elasticsearch:6.7.2

命令解析:

  • -p 9200:9200 -p 9300:9300 分别让主机端口9200、9300和启动容器的端口做映射;

  • -e "discovery.type=single-node" 单节点运行;

  • -e ES_JAVA_OPTS="-Xms64m -Xmx521m" 由于我云服务器的内存比较小,所以设置了一个环境变量ES_JAVA_OPTS来配置使用的内存:最小64m,最大521m,否则内存不够用,启动不起来。

2.2 安装SkyWalking的后台服务端(skywalking-oap),执行如下命令:
docker run --name skywalking-oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.3.0-es6

命令解析:

  • -p 1234:1234 -p 11800:11800 -p 12800:12800 分别让主机端口1234、11800、12800和启动容器的端口做映射;11800是对接应用程序的;12800是用来对接SkyWalking的UI数据的。

  • --link elasticsearch:elasticsearch 代表和上一步启动elasticsearch网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;

  • -e SW_STORAGE=elasticsearch 设置SkyWalking的存储方式为elasticsearch;

  • -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 配置连接elasticsearch的地址;

2.3 安装SkyWalking的UI界面(skywalking-ui),执行如下命令
docker run --name skywalking-ui --restart always -p 8080:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:6.6.0

命令解析:

  • -p 8080:8080 代表主机端口8080和容器端口8080做映射;

  • --link skywalking-oap:skywalking-oap 代表和上一步启动skywalking-oap网络链接起来,可以通过容器名访问对应服务,注意容器名和上一步一致;

  • -e SW_OAP_ADDRESS=skywalking:12800 设置UI调用的API地址,就是上一步启动动SkyWalking后端地址,端口为12800;

接下来如果能访问暴露的端口就代表环境安装好了,如下:

到这环境就搞好了,剩下就是项目集成了,以下还是搞两个API来测试一把。

注:在搭建环境时要注意elasticsearch、skywalking-oap-server、skywalking-ui版本问题,否则很容易掉坑;就比如 skywalking-oap-server 设置环境变量SW_STORAGE=elasticsearch 时,只能连接elasticsearch6 等等这种细节。

3. 项目集成SkyWalking

3.1 先安装一个SkyWalking命令行工具

这个命令行工具会快速生成配置文件,执行如下命令安装:

# 全局安装这个工具,后续直接用就行
 dotnet tool install -g SkyAPM.DotNet.CLI

安装一次就行,如果已经安装,就可以跳过此步骤。

3.2 创建项目,并引入SkyAPM.Agent.AspNetCore包

这个包是专门为.NetCore开发的探针。

3.3 注册服务,配置环境变量
  • 在Startup文件中注册服务

    image-20211017235044948
  • 配置环境变量

    这里方便测试,直接在项目中的launchSettings.json中配置就行,但如果是发布生产环境,一定要在对应环境配置环境变量。

    image-20211017234925741
3.4 执行SkyWalking命令生成配置文件

在项目根目录下执行如下命令

dotnet skyapm config MySkyWalkingDemoTest 192.168.xxx.xxx:11800
  • MySkyWalkingDemoTest 是服务名;

  • 192.168.xxx.xxx:11800 是SkyWalking后台服务的地址,就是我们2.2步骤搭建的地址。根据真实需要配置IP就行。

命令执行完成后,会在项目根目录下生成skyapm.json文件,可以适当根据需要更改配置内容;

默认情况下skyapm.json文件只要更新都会复制到打包目录下,保险起见,可以右键->属性,将这个文件设置其为始终复制或如果较新则复制。

3.5 启动项目看效果

SkyWalking几乎不嵌入任何代码,直接运行代码,现在就可以将API服务进行跟踪和监控了。如下图:

看看SkyWalking界面展示:

可以进入追踪界面看具体请求信息:

注:条件时间注意时区,往前设置时间;其实这里可以在启动搭建环境的时候设置时区。

点击树形的请求可以看详情:

3.6 多加一个API服务,测测调用链

新建一个项目SkyWalkingDemoTest22222,端口以5100启动,其他不变;这里没有集成SkyWalking,如果需要往下监控,同以上步骤集成即可;

然后简单修改一下SkyWalkingDemoTest项目的接口,如下:

先运行SkyWalkingDemoTest22222,再运行SkyWalkingDemoTest,执行完成之后,可以去SkyWalking界面中看看追踪信息,如下:

也可以通过拓扑图看到效果:

点击对应的节点还能显示对应的指标数据。

参考地址:

  • 官网:https://skywalking.apache.org/

  • 开源地址:https://github.com/apache/skywalking

  • .Net探针:https://github.com/SkyAPM/SkyAPM-dotnet

代码案例地址:https://gitee.com/CodeZoe/microservies-demo/tree/main/SkyWalkingDemo

总结

关于SkyWalking的初体验先说这么多,对于服务间通信复杂的系统,有了这个是不是就清晰多了,定位也就容易很多。下一篇再来看看数据库的指标及如何配置告警,关注“Code综艺圈”,和我一起学习吧;

以上是关于C#微服务必学清单的主要内容,如果未能解决你的问题,请参考以下文章

微服务必学习容器技术Docker系列九~生命周期管理命令

分布式/微服务必配APM系统,SkyWalking让你不迷路

服务治理:Spring Cloud Eureka

服务治理:Spring Cloud Eureka

C#怎么使用反射获取事件的响应方法

如何将多个清单文件嵌入/合并到 C# 应用程序中?