GithubHelp home page GithubHelp logo

alphayu / adnc Goto Github PK

View Code? Open in Web Editor NEW
1.3K 1.3K 365.0 6.34 MB

.NET微服务/分布式开发框架,同时也适用于单体架构系统的开发。

Home Page: https://aspdotnetcore.net

License: MIT License

HTML 0.39% Batchfile 0.02% C# 99.59%
adnc consul dapr ddd dotnet6 efcore fluentvalidation grpc microservices rabbitmq redis refit restful skywalking

adnc's Introduction

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

代码改变世界,开源推动社区

概述

ADNC是什么?

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

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

ADNC有什么优点?

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

架构设计

目录结构

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.props Nuget发布信息配置

总体架构图

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.AspNetCore Skywalking `.NET6探针,性能链路监测组件
Castle DynamicProxy 动态代理,AOP开源实现组件
Pomelo.EntityFrameworkCore.MySql EFCore ORM组件
Dapper 轻量级ORM组件
Z.EntityFramework.Plus.EFCore 第三方高性能的EfCore组件
NLog
Nlog.Mongdb
Nlog.Loki
日志记录组件
AutoMapper 模型映射组件
Swashbuckle.AspNetCore APIs文档生成工具(swagger)
StackExchange.Redis 开源的Redis客户端SDK
CAP 实现事件总线及最终一致性(分布式事务)的一个开源的组件
RabbitMq 异步消息队列组件
Polly 一个 .NET 弹性和瞬态故障处理库,允许开发人员以 Fluent 和线程安全的方式来实现重试、断路、超时、隔离和回退策略
FluentValidation 一个 .NET 验证框架,支持链式操作,易于理解,功能完善,组件内提供十几种常用验证器,可扩展性好,支持自定义验证器,支持本地化多语言
Maxscale Mariadb开发的一款成熟、高性能、免费开源的数据库中间件
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介绍

✅ Shared

Demo公用工程

  • protos grpc定义文件
  • resources 公用的静态文件与配置文件
  • Adnc.Demo.Shared.Const 常量文件
  • Adnc.Demo.Shared.Rpc.Event 事件文件
  • Adnc.Demo.Shared.Rpc.Grpc gprc客户端
  • Adnc.Demo.Shared.Rpc.Http http客户端
✅ Adnc.Demo.Usr

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

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

✅ Adnc.Demo.Maint

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

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

✅ Adnc.Demo.Cus

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

客户中心微服务。

✅ Adnc.Demo.Ord

DDD开发模式

订单中心微服务。

✅ Adnc.Demo.Whse

DDD开发模式

仓储中心微服务。

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!

adnc's People

Contributors

18142552937 avatar alphayu avatar azeory avatar dependabot[bot] avatar domoyao avatar garfiedhuang avatar yimogit avatar zerekzhang avatar zoupengfei-lab avatar zouzjidelu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

adnc's Issues

mac 系统的 visual studio 2022 打开工程的时候报错,怎么解决

无法加载解决方案: /Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Adnc.sln
Load operation failed.
尝试加载项目“/Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Demo/Usr/Adnc.Demo.Usr.Api/Adnc.Demo.Usr.Api.csproj”时出错: Invalid value for Link property
尝试加载项目“/Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Demo/Maint/Adnc.Demo.Maint.Api/Adnc.Demo.Maint.Api.csproj”时出错: Invalid value for Link property
尝试加载项目“/Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Demo/Ord/Adnc.Demo.Ord.Api/Adnc.Demo.Ord.Api.csproj”时出错: Invalid value for Link property
尝试加载项目“/Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Demo/Whse/Adnc.Demo.Whse.Api/Adnc.Demo.Whse.Api.csproj”时出错: Invalid value for Link property
尝试加载项目“/Users/tielingwang/Documents/dotnet/demoproject/adnc-master/src/ServerApi/Demo/Cust/Adnc.Demo.Cust.Api/Adnc.Demo.Cust.Api.csproj”时出错: Invalid value for Link property

内网IP错误

位于 Microsoft.AspNetCore.Authorization.CapDashboardAuthorizationFilter 的 AuthorizeAsync 方法
···
public class CapDashboardAuthorizationFilter : IDashboardAuthorizationFilter
{
public async Task AuthorizeAsync(DashboardContext context)
{
//这里定义capdashboard外网验证,需要完善
//默认内网可以访问
if (context.Request.LocalIpAddress == "127.0.0.0.1")
{
return await Task.FromResult(true);
}
return await Task.FromResult(true);
}
}
···
以上的127.0.0.0.1 应当为127.0.0.1 ?

快速入门文档中下载sql脚本错误的URL未更新

实际文件名已经改为adnc_cust_dev.sql了,但文档仍然是旧的adnc_cus_dev.sql,会误导我这样的小白用户:)

#拉取mariadb镜像
docker pull mariadb:10.5.8
#启动容器,监听13308端口,并挂载data与logs目录
docker run --restart=always --name mariadb -p 13308:3306 -e MYSQL_ROOT_PASSWORD=alpha.netcore -e TZ=Asia/Shanghai -v /data/mariadb/logs:/var/log/mysql -v /data/mariadb/data:/var/lib/mysql -d mariadb:10.5.8 --lower_case_table_names=1
# 创建数据库并导入数据
cd /data
#下载脚本
wget https://gitee.com/alpha2007/Adnc/raw/master/doc/adnc_usr_dev.sql
wget https://gitee.com/alpha2007/Adnc/raw/master/doc/adnc_maint_dev.sql
wget https://gitee.com/alpha2007/Adnc/raw/master/doc/adnc_cus_dev.sql    -------> 改为 adnc_cust_dev.sql 以下文档皆需要调整
# 拷贝脚本文件到mariadb容器
docker cp /data/adnc_usr_dev.sql mariadb:/usr/adnc_usr_dev.sql
docker cp /data/adnc_maint_dev.sql mariadb:/usr/adnc_maint_dev.sql
docker cp /data/adnc_cus_dev.sql mariadb:/usr/adnc_cus_dev.sql     -------> 改为 adnc_cust_dev.sql 
#创建数据库 adnc_cus_dev
CREATE DATABASE IF NOT EXISTS adnc_cus_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
use adnc_cus_dev;
source /usr/adnc_cus_dev.sql;                                                     -------> 改为 adnc_cust_dev.sql 

你们为何不考虑用MassTransit

我最近在围观国内.net圈的使用习惯,我发觉一个非常奇怪的现象,大家好像只知道CAP,不知道MassTransit。

能说一下CAP有什么独到的地方吗?还是说你们其实不知道MassTransit?

nlog-mongodb.config配置无效

nlog-mongodb.config配置文件下 connectionString="${configsetting:item=MongoDb.ConnectionString}" 无效,直接填链接地址可以

可否写一个Windows部署的教程?

现有的教程是Linux的,但是公司资源不是我能控制的,我们必须要在Windows系统使用。

花了不少时间,尝试把教程改成Windows部署的,但由于之前没怎么接触容器和微服务,遇到不少问题。

比如Windows下 把容器ip赋值到变量,在容器内部读取不到,比如时间同步之类的,比如各种容器ip内网ip外网ip,看的有点晕。

希望能出一篇 Windows部署的具体教程。感谢~

感谢~

call InitAsync methos before (Parameter 'adnc:user:bloomfilter:accouts')

你好,请问我在使用这个布隆过滤器的时候报这个错,是什么原因呢?

Init 的时候由于集合为空,所以执行的是 await _distributedLocker.Value.SafedUnLockAsync(this.Name, LockValue); 方法
在创建用户时调用 Add方法时提示 call InitAsync methos before (Parameter 'adnc:user:bloomfilter:accouts')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.