{"id":19990765,"url":"https://github.com/AlphaYu/adnc","last_synced_at":"2025-05-04T10:30:46.196Z","repository":{"id":37631077,"uuid":"284476880","full_name":"AlphaYu/adnc","owner":"AlphaYu","description":".NET微服务/分布式开发框架，同时也适用于单体架构系统的开发。","archived":false,"fork":false,"pushed_at":"2025-04-08T04:22:05.000Z","size":7744,"stargazers_count":1433,"open_issues_count":0,"forks_count":381,"subscribers_count":39,"default_branch":"develop","last_synced_at":"2025-04-11T04:57:13.810Z","etag":null,"topics":["adnc","consul","dapr","ddd","dotnet6","efcore","fluentvalidation","grpc","microservices","rabbitmq","redis","refit","restful","skywalking"],"latest_commit_sha":null,"homepage":"https://aspdotnetcore.net","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlphaYu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-08-02T14:23:34.000Z","updated_at":"2025-04-07T11:49:36.000Z","dependencies_parsed_at":"2025-04-11T04:37:55.239Z","dependency_job_id":null,"html_url":"https://github.com/AlphaYu/adnc","commit_stats":{"total_commits":1081,"total_committers":10,"mean_commits":108.1,"dds":"0.022201665124884418","last_synced_commit":"b97f9a470e6a17c2b10d305fcb61f9fb3ee2c18d"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlphaYu%2Fadnc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlphaYu%2Fadnc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlphaYu%2Fadnc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlphaYu%2Fadnc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlphaYu","download_url":"https://codeload.github.com/AlphaYu/adnc/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252319958,"owners_count":21729039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adnc","consul","dapr","ddd","dotnet6","efcore","fluentvalidation","grpc","microservices","rabbitmq","redis","refit","restful","skywalking"],"created_at":"2024-11-13T04:51:27.759Z","updated_at":"2025-05-04T10:30:46.188Z","avatar_url":"https://github.com/AlphaYu.png","language":"C#","readme":"# \u003cdiv align=\"center\"\u003e\u003cimg src=\"https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-github.png\" alt=\"ADNC-基于.NET平台的微服务开源框架\" style=\"zoom:50%;\" /\u003e\u003c/div\u003e\n\u003cdiv align='center'\u003e\n\u003ca href=\"https://github.com/AlphaYu/Adnc/blob/master/LICENSE\"\u003e\n\u003cimg alt=\"GitHub license\" src=\"https://img.shields.io/github/license/AlphaYu/Adnc\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/AlphaYu/Adnc/stargazers\"\u003e\n\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/AlphaYu/Adnc\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/AlphaYu/Adnc/network\"\u003e\n\u003cimg alt=\"GitHub forks\" src=\"https://img.shields.io/github/forks/AlphaYu/Adnc\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"\"\u003e\n\u003cimg alt=\"Visitors\" src=\"https://komarev.com/ghpvc/?username=alphayu\u0026color=red\u0026label=Visitors\"/\u003e\n\u003c/a\u003e\n\u003c/div\u003e\n\n###### \u003cdiv align=\"center\"\u003e代码改变世界，开源推动社区\u003c/div\u003e\n\n## 概述\n### ADNC是什么？\n\n`ADNC` 是一个基于 `.NET` 平台的分布式/微服务开源框架，采用现代化的架构设计和最佳实践，同时也适用于单体架构系统的开发。它提供了一系列的工具和库，帮助开发人员快速构建和部署微服务应用程序，包括服务注册/发现、配置中心、链路跟踪、负载均衡、熔断、容错、分布式事务、分布式缓存、消息队列、`RPC`调用(`http`/`grpc`)、认证授权、读写分离、日志记录等，同时也提供了完善的文档和示例代码，方便开发人员使用和学习。如果您正在考虑使用分布式/微服务或单体架构开发应用程序，`ADNC`  框架是一个值得尝试的开源框架。\n\n\u003e 微服务是一种分布式架构模式，通过将应用程序拆分成一组小型、松耦合的服务，可以提高应用程序的可伸缩性、可靠性和灵活性。\n\n### ADNC有什么优点?\n\n- 灵活性：框架采用现代化的架构设计，支持经典三层和`DDD`架构开发模式。\n- 易用性：框架提供了完善的文档和示例代码，同时也集成了一系列主流的微服务技术栈，使用起来比较容易上手。\n- 高可靠性：框架采用容器化部署、负载均衡、服务发现等技术，可以提高应用程序的可靠性和可伸缩性。\n- 开放性：框架是一个开源项目，采用 `MIT` 许可证发布，用户可以自由地使用、修改和分享该框架的源代码。\n- 生态圈：框架的社区生态圈正在逐渐壮大，有越来越多的开发人员在使用和贡献该框架，用户可以从社区中获取到更多的资源和支持。\n\n## 架构设计\n\n### 目录结构\n\n```\nadnc \n├── .github\n│   └── workflows CICD脚本目录(github-action)\n├── doc 技术文档目录\n├── src 源代码目录\n│   ├── Infrastructures 基础架构层代码目录\n│   ├── ServiceShared 服务通用层代码目录\n│   ├── Gateways ocelot网关代码目录\n│   └── Demo 示例代码目录\n├── test 测试相关目录\n├── .gitignore\n├── README.MD\n└── LICENSE\n```\n### 重要文件\n| 路径                                 | 描述                               |\n| -------------------------------------| ---------------------------------- |\n| `src/Adnc.sln`                       | 该解决方案包含`adnc`所有工程       |\n| `src/Infrastructures/Adnc.Infra.sln` | 该解决方案仅包含基础架构层相关工程 |\n| `src/ServiceShared/Adnc.Shared.sln`  | 该解决方案仅包含服务通用层相关工程 |\n| `src/Demo/Adnc.Demo.sln`             | 该解决方案仅包含`demo`相关工程     |\n| `Directory.Build.props`                   | 工程文件`*.csproj`公用配置  |\n\n### 总体架构图\n\n\u003cimg src=\"https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc_framework-e1682145003197.png\" alt=\"adnc_framework\"/\u003e\n\n#### Adnc.Infra.*\n\n[NuGet Gallery | Packages matching adnc.infra](https://www.nuget.org/packages?q=adnc.infra)\n\n![adnc-framework-2](https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-framework-2.png)\n\n#### Adnc.Shared.*\n\n[NuGet Gallery | Packages matching adnc.shared](https://www.nuget.org/packages?q=adnc.shared)\n\n\u003cimg src=\"https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-framework-3.png\" alt=\"adnc-framework-3\" style=\"zoom:80%;\" /\u003e\n\n### 解决方案截图\n\n![adnc-solution](https://aspdotnetcore.net/wp-content/uploads/2023/04/adnc-solution.png)\n\n### 技术栈\n\n| 名称                                                         | 描述                                                         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| \u003ca target=\"_blank\" href=\"https://github.com/ThreeMammals/Ocelot\"\u003eOcelot\u003c/a\u003e | 基于 `.NET6 编写的开源网关                                   |\n| \u003ca target=\"_blank\" href=\"https://github.com/hashicorp/consul\"\u003eConsul\u003c/a\u003e | 配置中心、注册中心组件                                       |\n| \u003ca target=\"_blank\" href=\"https://github.com/reactiveui/refit\"\u003eRefit\u003c/a\u003e | 一个声明式自动类型安全的RESTful服务调用组件，用于同步调用其他微服务 |\n| \u003ca target=\"_blank\" href=\"https://github.com/grpc/grpc-dotnet\"\u003eGrpc.Net.ClientFactory\u003c/a\u003e\u003cbr /\u003eGrpc.Tools | Grpc通讯框架                                                 |\n| \u003ca target=\"_blank\" href=\"https://github.com/SkyAPM/SkyAPM-dotnet\"\u003eSkyAPM.Agent.AspNetCore\u003c/a\u003e | Skywalking `.NET6探针，性能链路监测组件                      |\n| \u003ca target=\"_blank\" href=\"https://github.com/castleproject/Core\"\u003eCastle DynamicProxy\u003c/a\u003e | 动态代理，AOP开源实现组件                                    |\n| \u003ca target=\"_blank\" href=\"https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql\"\u003ePomelo.EntityFrameworkCore.MySql\u003c/a\u003e | EFCore ORM组件                                               |\n| \u003ca target=\"_blank\" href=\"https://github.com/StackExchange/Dapper\"\u003eDapper\u003c/a\u003e | 轻量级ORM组件                                                |\n| \u003ca target=\"_blank\" href=\"https://github.com/NLog/NLog\"\u003eNLog\u003c/a\u003e\u003cbr /\u003eNlog.Mongdb\u003cbr /\u003eNlog.Loki | 日志记录组件                                                 |\n| \u003ca target=\"_blank\" href=\"https://github.com/AutoMapper/AutoMapper\"\u003eAutoMapper\u003c/a\u003e | 模型映射组件                                                 |\n| \u003ca target=\"_blank\" href=\"https://github.com/domaindrivendev/Swashbuckle.AspNetCore\"\u003eSwashbuckle.AspNetCore\u003c/a\u003e | APIs文档生成工具(swagger)                                    |\n| \u003ca target=\"_blank\" href=\"https://github.com/StackExchange/StackExchange.Redis\"\u003eStackExchange.Redis\u003c/a\u003e | 开源的Redis客户端SDK                                         |\n| \u003ca target=\"_blank\" href=\"https://github.com/dotnetcore/CAP\"\u003eCAP\u003c/a\u003e | 实现事件总线及最终一致性（分布式事务）的一个开源的组件       |\n| \u003ca target=\"_blank\" href=\"https://github.com/rabbitmq/rabbitmq-dotnet-client\"\u003eRabbitMq\u003c/a\u003e | 异步消息队列组件                                             |\n| \u003ca target=\"_blank\" href=\"https://github.com/App-vNext/Polly\"\u003ePolly\u003c/a\u003e | 一个 .NET 弹性和瞬态故障处理库，允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略 |\n| \u003ca target=\"_blank\" href=\"https://github.com/FluentValidation\"\u003eFluentValidation\u003c/a\u003e | 一个 .NET 验证框架，支持链式操作，易于理解，功能完善，组件内提供十几种常用验证器，可扩展性好，支持自定义验证器，支持本地化多语言 |\n| \u003ca target=\"_blank\" href=\"https://github.com/mariadb-corporation/MaxScale\"\u003eMaxscale\u003c/a\u003e | Mariadb开发的一款成熟、高性能、免费开源的数据库中间件        |\n| \u003ca target=\"_blank\" href=\"https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks\"\u003eAspNetCore.HealthChecks\u003c/a\u003e | 健康监测组件,搭配consul的健康监测                            |\n\n## 文档\n\n#### 如何快速跑起来\n- 详细介绍如何使用docker安装redis、mysql、rabbitmq、mongodb，以及如何在本地配置ClientApp、ServerApi。\u003cbr/\u003e\n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/quickstart/)\n\n#### 配置文件详解\n- 详细介绍各个配置节点。\u003cbr/\u003e\n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/appsettings/)\n\n#### 如何手动部署到容器\n- 详细介绍如何使用docker安装配置consul集群、Skywalking系列组件、相关项目的dockerfile文件编写与配置以及如何将多个服务部署到服务器。\u003cbr/\u003e\n  [请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/deploy-docker/)\n\n#### 如何使用jenkins+shell脚本自动化部署\n- 文档尚未完成\n\n#### 如何部署到K8S\n- 文档尚未完成\n\n#### 如何实现读写分离\n- 详细介绍为什么要通过中间件实现读写分离以及EFCore基于中间件如何写代码。\u003cbr/\u003e\n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/maxsale-readwritesplit/)\n\n#### 如何使用Cache Redis 分布式锁 布隆过滤器\n- 详细介绍如何使用Cache、Redis、分布式锁以及布隆过滤器。如何配置Cache防止雪崩、击穿、穿透以及缓存同步。\u003cbr/\u003e\n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/cache-redis-distributedlock-bloomfilter/)\n\n#### 如何动态分配雪花算法的WorkerId\n- 详细介绍Yitter雪花算法的特点、配置以及如何动态获取WorkerId。\u003cbr/\u003e\n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/snowflake-max_value-wokerid/)\n\n#### 如何认证与授权\n- 详细介绍为什么要采用JwtBearer+Basic混合认证模式以及它们的实现逻辑，如何灵活配置与应用。  \n[请点击链接，查看详细介绍](https://aspdotnetcore.net/docs/claims-based-authentication/)\n#### 如何使用EFCore仓储\n- 详细介绍EFCore仓储基础功能、工作单元、CodeFirst，执行原生SQL等提供了丰富的演示代码以及演示代码对应的Sql语句。\n1. [如何使用仓储(一)-基础功能](https://aspdotnetcore.net/docs/efcore-pemelo-grud/)\u003cbr/\u003e\n1. [如何使用仓储(二)-分布式事务/本地事务](https://aspdotnetcore.net/docs/efcore-pemolo-unitofwork/)\u003cbr/\u003e\n1. [如何使用仓储(三)-CodeFirst](https://aspdotnetcore.net/docs/efcore-pemelo-codefirst/)\u003cbr/\u003e\n1. [如何使用仓储(四)-撸SQL](https://aspdotnetcore.net/docs/efcore-pemelo-sql/)\u003cbr/\u003e\n1. [ 如何使用仓储(五)-切换数据库类型](https://aspdotnetcore.net/docs/efcore-pemelo-sqlserver/)\u003cbr/\u003e\n\n#### 如何从零开发业务\n- 文档尚未完成\n\n#### 如何调用微服务\n- 文档尚未完成\n\n#### 如何配置网关\n- 文档尚未完成\n\n#### 如何使用注册/配置中心\n- 文档尚未完成\n\n#### 如何配置链路追踪\n- 文档尚未完成\n\n#### 如何配置健康检测\n- 文档尚未完成\n\n## 数据库脚本\n\n- [adnc/doc/dbsql at develop · AlphaYu/adnc](https://github.com/AlphaYu/adnc/tree/develop/doc/dbsql)\n\n## Demo介绍\n\n##### :white_check_mark: Shared \n\n\u003e Demo公用工程\n\n- `protos` grpc定义文件\n- `resources` 公用的静态文件与配置文件\n- `Adnc.Demo.Const` 常量文件\n- `Adnc.Demo.Remote.Event` 事件文件\n- `Adnc.Demo.Remote.Grpc` gprc客户端\n- `Adnc.Demo.Remote.Http` http客户端\n\n##### :white_check_mark: Adnc.Demo.Admin\n\n\u003e 经典三层开发模式，剥离了应用服务协议定义文件到`Adnc.Demo.Admin.Application.Contracts`层\n\n系统管理服务是系统支撑服务，实现了用户管理、角色管理、权限管理、菜单管理、组织架构、字典管理、系统配置管理。\n\n##### :white_check_mark: Adnc.Demo.Maint\n\n\u003e 经典三层开发模式，应用服务实现与协议定义都在`Adnc.Demo.Maint.Application`层\n\n运维中心服务是系统支撑服务，实现了登录日志、审计日志、异常日志。\n\n##### :white_check_mark: Adnc.Demo.Cust\n\n\u003e 经典三层开发模式，控制器、应用服务实现与协议定义、仓储都在同一个工程，这种结构适合细粒度服务拆分模式。\n\n客户中心微服务。\n\n##### :white_check_mark: Adnc.Demo.Ord\n\n\u003e DDD开发模式\n\n订单中心微服务。\n\n##### :white_check_mark: Adnc.Demo.Whse\n\n\u003e DDD开发模式\n\n仓储中心微服务。\n\n## Jmeter测试\n\n\u003e 6个测试用例覆盖了网关、服务发现、配置中心、服务间同步调用、数据库CURD、本地事务、分布式事务、缓存、布隆过滤器、SkyApm链路、Nlog日志记录、操作日志记录。\n\n- ECS服务器配置：4核8G，带宽8M。服务器上装了很多东西，剩余大约50%的CPU资源，50%的内存资源。\n- 因为服务器带宽限制，吞吐率约1000/s左右。\n- 模拟并发线程1200/s\n- 读写比率7:3\n\n## 前端\n\n### 项目地址\n\n- [adnc-vue3: ADNC's Vue3 front-end](https://github.com/alphayu/adnc-vue-elementplus)\n\n### 界面截图\n\n![.NET微服务开源框架-异常日志界面](https://aspdotnetcore.net/wp-content/uploads/2021/11/adnc-dashboard-nlog.png)\n![.NET微服务开源框架-角色管理界面](https://aspdotnetcore.net/wp-content/uploads/2021/11/adnc-dashboard-role.png)\n\n## 其他\n\n### 项目官网\n- [https://aspdotnetcore.net](https://aspdotnetcore.net)\n\n### 演示地址\n- [http://adnc.aspdotnetcore.net](http://62.234.187.128/)\n### 问题交流\n- QQ群号：780634162\n\n- 都看到这里了，那就点个`star`吧！\n\n## License\n\n**MIT**   \n**Free Software, Hell Yeah!**\n","funding_links":[],"categories":["C#","C\\#","C# #"],"sub_categories":["FPS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAlphaYu%2Fadnc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAlphaYu%2Fadnc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAlphaYu%2Fadnc/lists"}