MASA Framework - EventBus设计

MASA Framework - EventBus设计

概述

利用发布订阅模式来解耦不同架构层级,亦可用于解决隔离业务之间的交互

优点:

  • 松耦合
  • 横切关注点
  • 可测试性
  • 事件驱动
阅读更多
MASA Framework - 整体设计思路

MASA Framework - 整体设计思路

源起

年初我们在找一款框架,希望它有如下几个特点:

  1. 学习成本低

    只需要学.Net 每年主推的技术栈和业务特性必须支持的中间件,给开发同学减负,只需要专注业务就好

    个人见解:一款好用的框架应该是补充,而不是颠覆或过度创新

  2. 对扩展开放

    可以按照业务需求任意调整依赖实现,而不被捆绑在一个架构思路上

  3. 功能强大却不限制架构,从单体到 SOA 再到微服务都可以适应

    因为一个系统中总有复杂的也有简单的,最好能全面覆盖我们的业务场景

  4. 行业不限

    既能支持传统行业的业务特殊性,又可以支持互联网行业的高并发特性

  5. 稳定性

    有严格的测试标准,用起来更安心

阅读更多
初识MASA Blazor

初识MASA Blazor

MASA Blazor是一个Blazor的 UI 组件库。就像大家写前端熟知的 Bootstrap, Ant Design 一样。

MASA Blazor 官网地址:https://blazor.masastack.com
MASA Blazor Github 地址:https://github.com/BlazorComponent/MASA.Blazor
MASA Blazor Gitee 地址:https://gitee.com/blazorcomponent/MASA.Blazor
MASA Blazor Pro 演示地址:https://blazor-pro.masastack.com/dashboards/ecommerce
MASA Blazor Pro Github 地址:https://github.com/BlazorComponent/MASA.Blazor.Pro

阅读更多
Redis OM .NET Redis对象映射框架

Redis OM .NET Redis对象映射框架

Redis OM

Redis OM 是 Redis 官方推出的对象映射框架,即:Object Mapping。让开发人员更简单、方便的操作 Redis 数据。Redis 存储的数据抽象为对象映射,支持基于对象的 Redis 数据持久化、流式查询操作。

目前只支持 4 种开发语言:

  • Redis OM for Spring
  • Redis OM for .NET
  • Redis OM for Node.js
  • Redis OM for Python
阅读更多
Dotnet Templating 定制自己的项目模板
C#8.0 可空引用类型

C#8.0 可空引用类型

介绍

我们的项目代码运行时最频繁的错误之一就是 System.NullReferenceException 异常,c#8.0 增加的可为空引用类型就是用来帮助开发者降低甚至消除NULL异常。我们需要注意的是可空引用类型是语法级别的功能,也就是代码编写的时候就会受到编程约束,这个与可为空值类型是不一样的。项目支持 c#8.0 请参见C# 语言版本控制

阅读更多
手把手教你学Dapr - 9. 可观测性

手把手教你学Dapr - 9. 可观测性

目录

手把手教你学Dapr - 1. .Net开发者的大时代

手把手教你学Dapr - 2. 必须知道的概念

手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

手把手教你学Dapr - 4. 服务调用

手把手教你学Dapr - 5. 状态管理

手把手教你学Dapr - 6. 发布订阅

手把手教你学Dapr - 7. Actors

手把手教你学Dapr - 8. 绑定

手把手教你学Dapr - 9. 可观测性

介绍

通过Tracing(跟踪)、Metrics(指标)、Logs(日志)和Health(运行状况)监控应用程序。

分布式跟踪

Dapr 使用 Zipkin 协议进行分布式跟踪 和 Metrics 收集。由于 Zipkin 协议的普遍性,许多后端都是开箱即用的,例如 Stackdriver、Zipkin、New Relic 等。结合 OpenTelemetry Collector,Dapr 可以将跟踪导出到许多其他后端,包括但不限于 Azure Monitor、Datadog、Instana、Jaeger 和 SignalFX。

Tracing设计

Dapr 在 Dapr Sidecar 中添加了一个 HTTP/gRPC 中间件。中间件拦截所有 Dapr 和应用程序流量,并自动注入关联 ID 以跟踪分布式事务。这种设计有几个好处:

  • 无需代码检测。使用可配置的跟踪级别自动跟踪所有流量。
  • 跨微服务的一致性跟踪行为。跟踪是在 Dapr Sidecar 上配置和管理的,因此它在由不同团队制作并可能用不同编程语言编写的服务之间保持一致。
  • 可配置和可扩展。利用 Zipkin API 和 OpenTelemetry Collector,Dapr 跟踪可以配置为与流行的跟踪后端一起使用,包括客户可能拥有的自定义后端。
  • 您可以同时定义和启用多个导出器。
阅读更多
手把手教你学Dapr - 8. 绑定

手把手教你学Dapr - 8. 绑定

介绍

使用绑定,您可以使用来自外部系统的事件触发您的应用程序,或与外部系统交互。这个构建块为您和您的代码提供了几个好处:

  • 消除连接和轮询消息系统(如队列和消息总线)的复杂性
  • 关注业务逻辑,而不是如何与系统交互的实现细节
  • 让您的代码不受 SDK 或库的影响
  • 处理重试和故障恢复
  • 运行时在绑定之间切换
  • 构建可移植的应用程序,其中设置了特定于环境的绑定,不需要更改代码
阅读更多

手把手教你学Dapr - 7. Actors

介绍

Actor模式将Actor描述为最低级别的“计算单元”。换句话说,您在一个独立的单元(称为actor)中编写代码,该单元接收消息并一次处理一个消息,没有任何并发或线程。

再换句话说,根据ActorId划分独立计算单元后,相同的ActorId重入要排队,可以理解为lock(ActorId)

:这里有个反例,就是重入性的引入,这个概念目前还是Preview,它允许同一个链内可以重复进入,判断的标准不止是ActorId这么简单,即自己调自己是被允许的。这个默认是关闭的,需要手动开启,即默认不允许自己调自己

当您的代码处理一条消息时,它可以向其他参与者发送一条或多条消息,或者创建新的参与者。底层运行时管理每个参与者运行的方式、时间和地点,并在参与者之间路由消息。

大量的Actor可以同时执行,Actor彼此独立执行。

Dapr 包含一个运行时,它专门实现了 Virtual Actor 模式。 通过 Dapr 的实现,您可以根据 Actor 模型编写 Dapr Actor,而 Dapr 利用底层平台提供的可扩展性和可靠性保证。

什么时候用Actors

Actor 设计模式非常适合许多分布式系统问题和场景,但您首先应该考虑的是该模式的约束。一般来说,如果出现以下情况,请考虑使用Actors模式来为您的问题或场景建模:

  • 您的问题空间涉及大量(数千个或更多)小的、独立且孤立的状态和逻辑单元
  • 您希望使用需要与外部组件进行大量交互的单线程对象,包括跨一组Actors查询状态。
  • 您的 Actor 实例会通过发出 I/O 操作来阻塞具有不可预测延迟的调用者。
阅读更多

手把手教你学Dapr - 6. 发布订阅

介绍

发布/订阅模式允许微服务使用消息相互通信。生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息。这涉及将它们写入输入通道。同样,消费者或订阅者订阅该主题并接收其消息,而不知道是什么服务产生了这些消息。这涉及从输出通道接收消息。中间消息代理负责将每条消息从输入通道复制到所有对该消息感兴趣的订阅者的输出通道。当您需要将微服务彼此分离时,这种模式特别有用。

Dapr 中的发布/订阅 API 提供至少一次(at-least-once)的保证,并与各种消息代理和队列系统集成。 您的服务所使用的特定实现是可插入的,并被配置为运行时的 Dapr Pub/Sub 组件。 这种方法消除了您服务的依赖性,从而使您的服务可以更便携,更灵活地适应更改。

pubsub-overview-pattern.png

Dapr 发布/订阅构建块提供了一个与平台无关的 API 来发送和接收消息。您的服务将消息发布到命名主题,并订阅主题以使用这些消息。

下图显示了一个“shipping”服务和一个“email”服务的例子,它们都订阅了“cart”服务发布的主题。每个服务都会加载指向同一发布/订阅消息总线组件的发布/订阅组件配置文件,例如 Redis Streams、NATS Streaming、Azure Service Bus 或 GCP Pub/Sub。

pubsub-overview-components.png

下图具有相同的服务,但是这次显示的是 Dapr 发布 API,它发送“订单”主题和订阅服务上的订单端点,这些主题消息由 Dapr 发布到。

pubsub-overview-publish-API.png

阅读更多