.NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(三)HTTP本地路由发现过程

这里写自定义目录标题

  • Surging
    • 一 简介
    • 二 安装使用
    • 三 工程结构介绍
    • 四 扩展工程
    • 五 总结

Surging

surging 是一个分布式微服务引擎,提供高性能RPC远程服务调用,服务引擎支持http、TCP、WS、Mqtt协议,采用Zookeeper、Consul作为surging服务的注册中心,集成了哈希一致性,随机,轮询、压力最小优先作为负载均衡的算法,底层协议集成采用的组件是dotnetty、websocket-sharp、Kestrel。支持通过docker hub 部署服务引擎,也可以通过nuget 引用组件的方式自定义服务引擎

一 简介

surging 是一个分布式微服务引擎,提供高性能RPC远程服务调用,服务引擎支持http、TCP、WS、Mqtt协议,采用Zookeeper、Consul作为surging服务的注册中心,集成了哈希一致性,随机,轮询、压力最小优先作为负载均衡的算法,底层协议集成采用的组件是dotnetty、websocket-sharp、Kestrel。支持通过docker hub 部署服务引擎,也可以通过nuget 引用组件的方式自定义服务引擎。

二 安装使用

这个写的较好:https://www.cnblogs.com/YorkSun/p/10438717.html
作者博客(很久没有更新了):https://www.cnblogs.com/fanliang11/tag/surging/

三 工程结构介绍

不常用:暂时没有用上,不代表不重要

  1. Surging.Core.Abp(不常用)
  2. Surging.Core.ApiGateWay(不常用)
  3. Surging.Core.AutoMapper(不常用)
    对象映射
  4. Surging.Core.Caching(重要)
    1 ) 缓存地址管理->配置地址,寻址
    2 ) 哈希算法->ConsistentHashNode
    3 ) 健康检查->DefaultHealthCheckService
    4 ) 缓存客户端->ICacheClient
    5 ) 缓存管理器->AppConfig负责缓存的配置和注册缓存实例,实例管理器CacheContainer提供缓存提供器(ICacheProvider)的实例。
    6 ) MemoryCache实现
    7 ) RedisCache实现
  5. Surging.Core.Codec.MessagePack(重要)
    Rpc传输消息处理,传输消息、接收消息的编码、解码
  6. Surging.Core.Codec.ProtoBuffer(不常用)
    传输消息编码协议,同上
  7. Surging.Core.Common(视情况)
    公共方法,扩展字符串、枚举处理等,不过在扩展的时候没有修改这里面的内容,是单独建一个项目,作用等同
  8. Surging.Core.Consul(重要)
    服务集群中HTTP路由管理、Rpc命令、缓存

1 ) Consul配置管理。默认配置ConfigInfo,从服务Consul配置(surgingSettings.json)中读取ConsulOption。
2 ) Consul地址管理,路由添加、路由寻址、Consul健康检查
3 ) Consul中Key/Value管理。由定时服务管理ClientWatchManager进行定时刷新
Key分类两类 ,所有接口继承IServiceKey都会被记录。其中Key会记录相关模块信息。
i. lock_services类
serviceRoutes
ii. services类

  1. serviceCaches 缓存相关信息
  2. serviceCommands被作用于RPC配置,负载分流策略、故障转移次数、开启熔断保护等请求策略。客户端代理调用等配置在服务端surgingSettings.json中配置,例如超时时间,服务在启动的时候,会从配置中读取然后写到各个command的Value中。接口可以更改Command属性,并在Value中记录相关策略信息。例如
    {
    “ServiceId”: “Surging.IModuleServices.Common.IUserService.GetUser_user”,//路由ID
    “FailoverCluster”: 3, //错误重试次数
    “CircuitBreakerForceOpen”: false, //是否开启熔断
    “Strategy”: “Injection”, //熔断后响应策略 故障转移、返回指定内容、回退
    “ExecutionTimeoutInMilliseconds”: 20000, //超时时间
    “RequestCacheEnabled”: true,
    …省略
    “MaxConcurrentRequests”: 20
    }
  3. serviceRoutes 所有接口路由信息,用Http、Proxy(代理不常用)、Rpc(http请求路由不再本地,用路由寻址后发起RPC)调用
    {
    “AddressDescriptors”:[
    {
    //接口地址信息 -> IP 主机地址
    //HttpPort -> Http端口
    //Port -> Rpc端口
    “Value”:"{“Ip”:“127.0.0.1”,“Port”:98,“WanIp”:“127.0.0.1”,“WsPort”:96,“MqttPort”:97,“HttpPort”:280}"
    }
    ],
    “ServiceDescriptor”:{
    “Id”:“Surging.IModuleServices.Common.IUserService.GetUser_user”, //路由转为ID 命名空间+类名+方法名
    “Token”:“428c32e9df8744c6b7a8d6b90327737b”,
    “RoutePath”:“api/v1/user/”, //路由地址
    “Metadatas”:{
    }
    }
    }
  1. Consul 健康检查 后续补上完整流程
  1. Surging.Core.CPlatform(核心)
    几乎是所有模块的基础,集群地址、缓存、配置、事件、日志、路由、序列化、RPC传输等依赖注入的方法接口基础类
  2. Surging.Core.DNS(不常用)
  3. Surging.Core.DotNetty(重要)
    Rpc服务器监听、传输通道的消息适配、消息发送、客户端创建工厂
  4. Surging.Core.DotNettyWSServer(没使用)
  5. Surging.Core.EventBusKafka(没使用)
  6. Surging.Core.EventBusRabbitMQ(重要
    消息队列使用的这个组件,可以参考微软项目eShopOnContainers,消息处理、断线重连、重试队列、死信队列等处理
    1 ) 配置管理。默认配置、配置提供、配置改写(从服务中读取配置AppConfig改写默认配置)
    2 ) 默认连接方式。DefaultRabbitMQPersisterConnection
    3 ) 初始化。EventBusRabbitMQModule
    4 ) 消息发送和消息接收管理。EventBusRabbitMQ,包含所有实现连接管理(连接、连接异常处理、断线重连等)、发送机制(发送时会注册exchange,模式为direct,该模式要求队列Queue注册时信道Route名称需要完全一致),接收机制(订阅消息,重试机制和死信队列机制。如果接收消息并处理相关业务失败次数大于配置次数加入…)
    5 ) 消息队列属性。QueueConsumerAttribute,消费者订阅的队列。
  7. Surging.Core.Grpc(没使用)
  8. Surging.Core.Kestrel.Log4net(日志)
  9. Surging.Core.Kestrel.Nlog(日志)
  10. Surging.Core.KestrelHttpServer(核心)
    HTTP服务监听、处理、转发、过滤、异常拦截,这个模块有内存泄漏,很隐蔽,后面可以详细说明一下:如何发现、如何分析、如何定位、如何修改
  11. Surging.Core.Log4net(日志 使用)
  12. Surging.Core.NLog(日志 未使用,个人觉得Nlog更好,团队谈论使用Log4net:大多数人熟悉)
  13. Surging.Core.Protocol.Http
  14. Surging.Core.Protocol.Mqtt
  15. Surging.Core.Protocol.Udp
  16. Surging.Core.Protocol.WS
  17. Surging.Core.ProxyGenerator
  18. Surging.Core.Redis(重要
    缓存的实现模块,处理连接池、虚拟节点、节点选择算法、缓存添加删除(只适配了字符串,其他类型需要按需扩展,是StackExchange.Redis的二次封装)
  19. Surging.Core.ServiceHosting(修改很少)
  20. Surging.Core.ServiceHosting.Extensions
  21. Surging.Core.Stage(重要
    http请求的过滤器实现模块
  22. Surging.Core.Swagger(API展示)
  23. Surging.Core.System(重要
    依赖注入的实现等,很重要但很少修改和扩展
  24. Surging.Core.Zookeeper(暂时未用)

四 扩展工程

团队可以根据需要扩展Surging,以下是我们扩展的内容

  1. 事务处理
  2. 幂等性操作
  3. 服务接口基类
    a ) 初始化当前登录用户信息等
  4. Quartz.net作业任务
  5. 仓储
  6. 集成微软模型验证
  7. 数据过滤:不安全字段(SQL注入等)、敏感词过滤(dang、zf等)
  8. 公共方法
    1、 枚举字段、属性用int替换,在上层使用时强转
    2、 枚举值参数注入

五 总结

整体上Surging是一款非常优秀、功能齐全、性能好。但是内容非常多,同同类功能多个实现,初次接触上手难度大,如果已经接触过微服务结构,发现可能有的模块实现有不太适合有的业务场景,后面会分模块剖析Surging内部实现,以便大家进化架构时可以更快扩展内容和扩展点。

.NetCore框架Surging系列(一)介绍相关推荐

  1. .NetCore框架Surging系列(六)路由发现

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  2. .NetCore框架Surging系列(九)性能提升-1

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  3. .NetCore框架Surging系列(二)HTTP

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 Surging系列(二)H ...

  4. .NetCore框架Surging系列(四)RPC客户端过程

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  5. .NetCore框架Surging系列(八)性能评估

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  6. .NetCore框架Surging系列(三)HTTP本地路由发现过程

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  7. surging 微服务框架使用系列之surging介绍

    surging 微服务框架使用系列之surging介绍 原文:surging 微服务框架使用系列之surging介绍 surging 是一个分布式微服务框架,提供高性能RPC远程服务调用,采用Zook ...

  8. (二)surging 微服务框架使用系列之surging 的准备工作consul安装(转载 https://www.cnblogs.com/alangur/p/8377977.html)...

    (二)surging 微服务框架使用系列之surging 的准备工作consul安装 suging 的注册中心支持consul跟zookeeper.因为consul跟zookeeper的配置都差不多, ...

  9. 深入学习SAP UI5框架代码系列之八:谈谈 SAP UI5 的视图控件 ID,以及 SAP UI5 视图和 Angular 视图的异同

    今天是 2021 年 4 月 27 日,周二,SAP 全球心理健康日.SAP 全球的员工,今天放假一天. 这不,早在上周五,我所在的 SAP Spartacus 开发团队的开发经理,就贴心地在 Sla ...

最新文章

  1. DataTable中数据记录的统计
  2. 自然语言处理的蓬勃发展及其未来
  3. ThinkPHP 3.2.2 在 volist 多重循环嵌套中使用 if 判断标签
  4. mysql的错误代码1064_mysql错误代码之1064的解决方案
  5. idea改成c盘_解决IDEA占用C盘空间过大的问题
  6. 「 ThoughtWorks面试 —— 一次愉快的技术交流 | 掘金技术征文」
  7. 纪中B组模拟赛总结(2020.2.22)
  8. web中间件_常见web中间件拿shell
  9. 控件进阶 编辑学生的窗体
  10. Page.RegisterClientScriptBlock和Page.RegisterStartupScript有何区别
  11. Hashtable和HashMap类的区别
  12. 重设OS X (macOS)系统帐户密码的几种方法
  13. 第九章(二)DAG上的动态规划
  14. 类中的反射 装逼利器
  15. 计算机用户文件夹加密,如何加密文件夹?手把手教你给文件夹加密方法
  16. dnf连不上服务器删什么文件,DNF:4.9更新“无法上游戏”,删1个文件才可登录,策划不争气!...
  17. cadence一些快捷键
  18. CMMI推广中EPG常犯错误
  19. 用户生命周期价值及产品运营策略
  20. sincerit 王者荣耀(01背包)

热门文章

  1. MPV视频播放器开发日志(02)字幕下载及网络爬虫初探
  2. 蒙特卡洛 c语言,从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)
  3. Feelings on Life
  4. MVC 和 MVVM 详解
  5. java编程思想读书笔记
  6. Python学习-1.基础语法元素
  7. ui设计-文案(CW)
  8. 可以参考的前端网站(提高审美和创新)
  9. RPA操控Outlook邮件
  10. Linux系统 ISO下载