Home

Awesome

<div align="center"><img src="https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-github.png" alt="ADNC-基于.NET平台的微服务开源框架" style="zoom:50%;" /></div>

<div align='center'> <a href="https://github.com/AlphaYu/Adnc/blob/master/LICENSE"> <img alt="GitHub license" src="https://img.shields.io/github/license/AlphaYu/Adnc"/> </a> <a href="https://github.com/AlphaYu/Adnc/stargazers"> <img alt="GitHub stars" src="https://img.shields.io/github/stars/AlphaYu/Adnc"/> </a> <a href="https://github.com/AlphaYu/Adnc/network"> <img alt="GitHub forks" src="https://img.shields.io/github/forks/AlphaYu/Adnc"/> </a> <a href=""> <img alt="Visitors" src="https://komarev.com/ghpvc/?username=alphayu&color=red&label=Visitors"/> </a> </div>
<div align="center">代码改变世界,开源推动社区</div>

概述

ADNC是什么?

ADNC 是一个基于 .NET 平台的分布式/微服务开源框架,采用现代化的架构设计和最佳实践,同时也适用于单体架构系统的开发。它提供了一系列的工具和库,帮助开发人员快速构建和部署微服务应用程序,包括服务注册/发现、配置中心、链路跟踪、负载均衡、熔断、容错、分布式事务、分布式缓存、消息队列、RPC调用(http/grpc)、认证授权、读写分离、日志记录等,同时也提供了完善的文档和示例代码,方便开发人员使用和学习。如果您正在考虑使用分布式/微服务或单体架构开发应用程序,ADNC 框架是一个值得尝试的开源框架。

微服务是一种分布式架构模式,通过将应用程序拆分成一组小型、松耦合的服务,可以提高应用程序的可伸缩性、可靠性和灵活性。

ADNC有什么优点?

架构设计

目录结构

adnc 
├── .github
│   └── workflows CICD脚本目录(github-action)
├── doc 技术文档目录
├── src 源代码目录
│   ├── ServerApi 后端代码目录
│   │   ├── Infrastructures 基础架构层代码目录
│   │   ├── ServiceShared 服务通用层代码目录
│   │   ├── Gateways ocelot网关代码目录
│   │   └── Demo 示例代码目录
│   └── ClientApp 前端代码目录
├── test 测试相关目录
├── .gitignore
├── README.MD
└── LICENSE

重要文件

路径描述
src/ServerApi/Adnc.sln该解决方案包含adnc所有工程
src/ServerApi/Infrastructures/Adnc.Infra.sln该解决方案仅包含基础架构层相关工程
src/ServerApi/ServiceShared/Adnc.Shared.sln该解决方案仅包含服务通用层相关工程
src/ServerApi/Demo/Adnc.Demo.sln该解决方案仅包含demo相关工程
scr/ServerApi/common.props工程文件*.csproj公用配置
scr/ServerApi/version_infra.props基础架构层版本号
scr/ServerApi/version_shared.props服务通用层版本号
scr/ServerApi/nuget.propsNuget发布信息配置

总体架构图

<img src="https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc_framework-e1682145003197.png" alt="adnc_framework"/>

Adnc.Infra.*

NuGet Gallery | Packages matching adnc.infra

adnc-framework-2

Adnc.Shared.*

NuGet Gallery | Packages matching adnc.shared

<img src="https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-framework-3.png" alt="adnc-framework-3" style="zoom:80%;" />

解决方案截图

adnc-solution

技术栈

名称描述
<a target="_blank" href="https://github.com/ThreeMammals/Ocelot">Ocelot</a>基于 `.NET6 编写的开源网关
<a target="_blank" href="https://github.com/hashicorp/consul">Consul</a>配置中心、注册中心组件
<a target="_blank" href="https://github.com/reactiveui/refit">Refit</a>一个声明式自动类型安全的RESTful服务调用组件,用于同步调用其他微服务
<a target="_blank" href="https://github.com/grpc/grpc-dotnet">Grpc.Net.ClientFactory</a><br />Grpc.ToolsGrpc通讯框架
<a target="_blank" href="https://github.com/SkyAPM/SkyAPM-dotnet">SkyAPM.Agent.AspNetCore</a>Skywalking `.NET6探针,性能链路监测组件
<a target="_blank" href="https://github.com/castleproject/Core">Castle DynamicProxy</a>动态代理,AOP开源实现组件
<a target="_blank" href="https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql">Pomelo.EntityFrameworkCore.MySql</a>EFCore ORM组件
<a target="_blank" href="https://github.com/StackExchange/Dapper">Dapper</a>轻量级ORM组件
<a target="_blank" href="https://entityframework-plus.net">Z.EntityFramework.Plus.EFCore</a>第三方高性能的EfCore组件
<a target="_blank" href="https://github.com/NLog/NLog">NLog</a><br />Nlog.Mongdb<br />Nlog.Loki日志记录组件
<a target="_blank" href="https://github.com/AutoMapper/AutoMapper">AutoMapper</a>模型映射组件
<a target="_blank" href="https://github.com/domaindrivendev/Swashbuckle.AspNetCore">Swashbuckle.AspNetCore</a>APIs文档生成工具(swagger)
<a target="_blank" href="https://github.com/StackExchange/StackExchange.Redis">StackExchange.Redis</a>开源的Redis客户端SDK
<a target="_blank" href="https://github.com/dotnetcore/CAP">CAP</a>实现事件总线及最终一致性(分布式事务)的一个开源的组件
<a target="_blank" href="https://github.com/rabbitmq/rabbitmq-dotnet-client">RabbitMq</a>异步消息队列组件
<a target="_blank" href="https://github.com/App-vNext/Polly">Polly</a>一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略
<a target="_blank" href="https://github.com/FluentValidation">FluentValidation</a>一个 .NET 验证框架,支持链式操作,易于理解,功能完善,组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言
<a target="_blank" href="https://github.com/mariadb-corporation/MaxScale">Maxscale</a>Mariadb开发的一款成熟、高性能、免费开源的数据库中间件
<a target="_blank" href="https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks">AspNetCore.HealthChecks</a>健康监测组件,搭配consul的健康监测

文档

如何快速跑起来

如何手动部署到容器

如何使用jenkins+shell脚本自动化部署

如何部署到K8S

如何实现读写分离

如何使用Cache Redis 分布式锁 布隆过滤器

如何动态分配雪花算法的WorkerId

如何认证与授权

如何使用EFCore仓储

  1. 如何使用仓储(一)-基础功能<br/>
  2. 如何使用仓储(二)-分布式事务/本地事务<br/>
  3. 如何使用仓储(三)-CodeFirst<br/>
  4. 如何使用仓储(四)-撸SQL<br/>
  5. 如何使用仓储(五)-切换数据库类型<br/>

如何从零开发业务

如何调用微服务

如何配置网关

如何使用注册/配置中心

如何配置链路追踪

如何配置健康检测

Demo介绍

:white_check_mark: Shared

Demo公用工程

:white_check_mark: Adnc.Demo.Usr

经典三层开发模式,剥离了应用服务协议定义文件到Adnc.Demo.Usr.Application.Contracts

用户中心服务是系统支撑服务,实现了用户管理、角色管理、权限管理、菜单管理、组织架构管理。

:white_check_mark: Adnc.Demo.Maint

经典三层开发模式,应用服务实现与协议定义都在Adnc.Demo.Maint.Application

运维中心服务是系统支撑服务,实现了登录日志、审计日志、异常日志、字典管理、配置参数管理。

:white_check_mark: Adnc.Demo.Cus

经典三层开发模式,控制器、应用服务实现与协议定义、仓储都在同一个工程,这种结构适合细粒度服务拆分模式。

客户中心微服务。

:white_check_mark: Adnc.Demo.Ord

DDD开发模式

订单中心微服务。

:white_check_mark: Adnc.Demo.Whse

DDD开发模式

仓储中心微服务。

Jmeter测试

6个测试用例覆盖了网关、服务发现、配置中心、服务间同步调用、数据库CURD、本地事务、分布式事务、缓存、布隆过滤器、SkyApm链路、Nlog日志记录、操作日志记录。

前端

项目地址

界面截图

.NET微服务开源框架-异常日志界面 .NET微服务开源框架-角色管理界面

其他

项目官网

演示地址

问题交流

License

MIT
Free Software, Hell Yeah!