Skip to content

AlphaYu/adnc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Repository files navigation

ADNC-基于.NET平台的微服务开源框架

GitHub licenseGitHub starsGitHub forksVisitors
代码改变世界,开源推动社区

概述

ADNC是什么?

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

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

ADNC有什么优点?

  • 灵活性:框架采用现代化的架构设计,支持经典三层和DDD架构开发模式。
  • 易用性:框架提供了完善的文档和示例代码,同时也集成了一系列主流的微服务技术栈,使用起来比较容易上手。
  • 高可靠性:框架采用容器化部署、负载均衡、服务发现等技术,可以提高应用程序的可靠性和可伸缩性。
  • 开放性:框架是一个开源项目,采用 MIT 许可证发布,用户可以自由地使用、修改和分享该框架的源代码。
  • 生态圈:框架的社区生态圈正在逐渐壮大,有越来越多的开发人员在使用和贡献该框架,用户可以从社区中获取到更多的资源和支持。

无论您是在构建新的微服务应用还是迁移现有系统,ADNC都提供了工具和模式,使您的开发过程更加高效。

架构设计

目录结构

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

重要文件

路径描述
src/Adnc.sln该解决方案包含adnc所有工程
src/Infrastructures/Adnc.Infra.sln该解决方案仅包含基础架构层相关工程
src/ServiceShared/Adnc.Shared.sln该解决方案仅包含服务通用层相关工程
src/Demo/Adnc.Demo.sln该解决方案仅包含demo相关工程
Directory.Build.props工程文件*.csproj公用配置

总体架构图

adnc_framework

Adnc.Infra.*

NuGet Gallery | Packages matching adnc.infra

adnc-framework-2

Adnc.Shared.*

NuGet Gallery | Packages matching adnc.shared

adnc-framework-3

解决方案截图

adnc-solution

技术栈

名称描述
Ocelot基于 `.NET6 编写的开源网关
Consul配置中心、注册中心组件
Refit一个声明式自动类型安全的RESTful服务调用组件,用于同步调用其他微服务
Grpc.Net.ClientFactory
Grpc.Tools
Grpc通讯框架
SkyAPM.Agent.AspNetCoreSkywalking `.NET6探针,性能链路监测组件
Castle DynamicProxy动态代理,AOP开源实现组件
Pomelo.EntityFrameworkCore.MySqlEFCore ORM组件
Dapper轻量级ORM组件
NLog
Nlog.Mongdb
Nlog.Loki
日志记录组件
AutoMapper模型映射组件
Swashbuckle.AspNetCoreAPIs文档生成工具(swagger)
StackExchange.Redis开源的Redis客户端SDK
CAP实现事件总线及最终一致性(分布式事务)的一个开源的组件
RabbitMq异步消息队列组件
Polly一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略
FluentValidation一个 .NET 验证框架,支持链式操作,易于理解,功能完善,组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言
MaxscaleMariadb开发的一款成熟、高性能、免费开源的数据库中间件
AspNetCore.HealthChecks健康监测组件,搭配consul的健康监测

文档

如何快速跑起来

配置文件详解

如何手动部署到容器

  • 详细介绍如何使用docker安装配置consul集群、Skywalking系列组件、相关项目的dockerfile文件编写与配置以及如何将多个服务部署到服务器。
    请点击链接,查看详细介绍

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

  • 文档尚未完成

如何部署到K8S

  • 文档尚未完成

如何实现读写分离

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

  • 详细介绍如何使用Cache、Redis、分布式锁以及布隆过滤器。如何配置Cache防止雪崩、击穿、穿透以及缓存同步。
    请点击链接,查看详细介绍

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

如何认证与授权

如何使用EFCore仓储

  • 详细介绍EFCore仓储基础功能、工作单元、CodeFirst,执行原生SQL等提供了丰富的演示代码以及演示代码对应的Sql语句。
  1. 如何使用仓储(一)-基础功能
  2. 如何使用仓储(二)-分布式事务/本地事务
  3. 如何使用仓储(三)-CodeFirst
  4. 如何使用仓储(四)-撸SQL
  5. 如何使用仓储(五)-切换数据库类型

如何从零开发业务

  • 文档尚未完成

如何调用微服务

  • 文档尚未完成

如何配置网关

  • 文档尚未完成

如何使用注册/配置中心

  • 文档尚未完成

如何配置链路追踪

  • 文档尚未完成

如何配置健康检测

  • 文档尚未完成

数据库脚本

Demo介绍

Demo提供了五个相互关联的微服务,展示了不同的架构风格,本章节将介绍项目结构,解释每个服务的架构风格。

服务描述架构风格
Admin系统管理(组织、用户、角色、权限、字典、配置)经典三层分离合约
Maint运维管理(日志、审计)经典三层合并合约
Cust客户管理单项目最小结构
Ord订单管理领域驱动设计(DDD)带领域层
Whse仓库管理领域驱动设计(DDD)带领域层

Demo服务展示了如何在保持与整体框架兼容性的同时,以不同方式组织代码。

✅ Shared

Demo公用工程,所有演示服务都使用了Shared目录中的通用组件。

Shared/ ├── Const/ - 用于缓存、实体、权限的常量 ├── Remote.Event/ - 用于跨服务通信事件定义 ├── Remote.Grpc/ - gRPC客户端定义 ├── Remote.Http/ - HTTP客户端定义 ├── protos/ - gRPC的协议文件定义 └── resources/ - 共享配置和资源 
✅ Adnc.Demo.Admin

Admin服务遵循经典的三层模式,项目分离,这种分离提供了层之间的清晰边界,便于维护,剥离了应用服务协议定义文件到Adnc.Demo.Admin.Application.Contracts

Admin/ ├── Admin.Api/ - 控制器和API端点 ├── Admin.Application/ - 业务逻辑实现 ├── Admin.Application.Contracts/ - DTO和服务接口 └── Admin.Repository/ - 数据访问层 

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

✅ Adnc.Demo.Maint

Maint服务使用更紧凑的三层结构,这种方法减少了项目数量,同时仍保持关注点分离,应用服务实现与协议定义都在Adnc.Demo.Maint.Application层。

Maint/ ├── Maint.Api/ - 控制器和端点 ├── Maint.Application/ - 包含合约和实现 └── Maint.Repository/ - 数据访问层 

运维中心服务是系统支撑服务,实现了登录日志、审计日志、异常日志。

✅ Adnc.Demo.Cust

Cust服务展示了一种超紧凑的方法,所有内容都在一个项目中,这种方法适用于小型、专注的微服务,复杂性有限,控制器、应用服务实现与协议定义、仓储都在同一个工程,这种结构适合细粒度服务拆分模式。

Cust/ └── Cust.Api/ - 包含控制器、应用逻辑和存储库 

客户中心微服务。

✅ Adnc.Demo.Ord

Ord服务遵循DDD原则,带专用领域层,这种架构强调业务规则和领域逻辑,将其与应用关注点分离。

Ord/ ├── Ord.Api/ - API端点 ├── Ord.Application/ - 应用服务 ├── Ord.Domain/ - 领域实体、聚合和领域服务 └── Ord.Migrations/ - 数据库迁移 

订单中心微服务。

✅ Adnc.Demo.Whse

项目结构与Ord服务一样,带专用领域层,这种架构强调业务规则和领域逻辑,将其与应用关注点分离。

仓储中心微服务。

Jmeter测试

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

  • ECS服务器配置:4核8G,带宽8M。服务器上装了很多东西,剩余大约50%的CPU资源,50%的内存资源。
  • 因为服务器带宽限制,吞吐率约1000/s左右。
  • 模拟并发线程1200/s
  • 读写比率7:3

前端

项目地址

界面截图

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

其他

项目官网

演示地址

问题交流

  • QQ群号:780634162

  • 都看到这里了,那就点个star吧!

License

MIT
Free Software, Hell Yeah!

Packages

No packages published

Contributors 14

Languages