迎元旦,庆surging 1.0发布

一位摄影程序员的独白

640?wx_fmt=png

       每个人都有爱好,都有释放压力的活动,而我也不例外,我除了每天上班,周末就会约一群好友去拍妹子,成家后,就改为拍虫子,一拍就到了30岁,到了30岁就感觉到了中年的压力,这时候停下手中的摄影,开始研究技术,我开始翻阅各种技术博客,各种开源作品,静下心去研究技术时,发现.NET的技术非常薄弱,各种解决方案都非常欠缺,尤其是微服务,在.NET领域基本上一片空白,这时候碰巧.NET CORE 的出现,研发surging想法也开始萌芽,也到处跟同事说,我要研发一套微服务框架,真正意义上的微服务框架,让大家都去关注业务,而无需去关注webapi,rest,http,tcp,rabbitmq,缓存等与业务无关的技术,这些都由框架和中间件去实现,而同事,朋友投过来的都是鄙夷,惊讶,意思是就凭你,是啊!就凭我,在不断学习下,2017年我开始迈出了研发的第一步,2017年6月16日开始在github 进行开源。而半个月后被邀请到TCC开源小组孵化surging.

        转眼间已经到2018年年尾,还有一个星期就跨入2019年,在新年到来的日子,surging 也准备发布1.0稳定版本,在这1年半的日子里,耗费了多少个日日夜夜我已经记不清,每天下班回来我都要理清下surging ,还有哪些欠缺,需要弥补,需要完善,耗费了心血和时间在surging上,但是这一切都是值得的,因为有些公司已经采用surging  ,在微服务上已经给了非常好的解决方案,并且有一家物联网公司已经使用surging 的ws,mqtt协议,据了解客户端设备就有好几万台。那下面我们来看看1.0版本有那些功能。

 


组件介绍

一、通信组件

1. Dotnetty:

针对于底层的http,mqtt,TCP协议采用了dotnetty进行实现 ,并且可以配置使用Libuv,而dotnetty 是微软的Azure团队,使用C#实现的Netty的版本,性能非常强大。

2.websocket-sharp:

针对于底层的websocket采用了websocket-sharp进行实现,因为官方未支持.net core,所以把它转化支持.NET CORE,并且源码放到surging ,并且同时和suring 一起发布

2.Kestrel:

针对于底层的Http协议采用了Kestrel进行实现,并且swagger也依赖于Kestrel,后期会扩展身份验证,数据加密,服务聚合等功能以代替网关,并且还会完善基于Kestrel的文件服务

二、编解码组件

1.Newtonsoft.Json

针对于json 的编解码采用了Newtonsoft.Json进行实现 ,并且默认使用Newtonsoft.Json进行编解码

2.MessagePack-CSharp

针对于messagepack 的编解码采用MessagePack-CSharp进行实现,MessagePack-CSharp是用于C#实现的MessagePack序列化组件,比官方的MsgPack-Cli快10倍,与其他所有C#序列化程序相比,具有最好的性能

3.protobuf-net

针对于二进制的protobuf格式的编解码采用的是protobuf-net进行实现

三、日志组件

1.Nlog

Nlog组件

2.log4net

log4net组件进行实现,并且可以写入到Console,file,database

四、注册中心

1. consul

针对于MqttServiceRoute、ServiceCache、ServiceCommand、ServiceRoute采用了consul的Key/Value 进行存储,并且更新是采用了心跳进行更新

2. zookeeper

针对于MqttServiceRoute、ServiceCache、ServiceCommand、ServiceRoute采用了zookeeper指定path进行node 储存,并且更新是采用了watcher进行更新

五、队列

1. rabbitmq

针对于消息队列rabbitmq 实现了消息的重试,失败回滚,消息的延迟处理,目前只实现了direct

2. kafka

实现了针对于topic 进行发布订阅。

六、缓存

1.MemoryCache

由surging 的Caching组件提供的内存缓存,使用该类型可以方便的在程序内部缓存数据并对于数据的有效性进行方便的管理

2.Redis

key-value

七:动态代理

1.ProxyGenerator

针对动态代理是通过Roslyn构建脚本来生成编译AOP动态代理,以提供通过接口创建代理方式访问。

负载均衡

一、容错策略

 

1. 随机(Random):

通过生成随机数随机选择服务地址,调用量越大分布越均匀

2. 轮询(Polling)

通过轮询地址选择服务地址,存在比较慢的机器容易在这台机器的请求阻塞较多,默认使用此负载算法

3.哈希一致性(HashAlgorithm)

通过第一个参数生成的哈希值进行哈希一致性选取服务地址,对于第一个相同参数的值的请求会定位到同一个服务提供者上

4.压力最小优先(FairPolling)

通过轮询优先选择压力最小的服务地址,针对于压力比较小的服务器会分配更多的请求。

 

服务容错和熔断

一、容错策略

1.故障转移策略(Failover):

通过设置故障转移群集数(FailoverCluster),从而服务故障自动转移到健康的服务提供者

2.脚本注入策略(Injection):

通过设置脚本注入(Injection),服务发生错误时会返回所定义运行的脚本结果

3.回退策略(FallBack)

通过设置回退的实例名(FallbackName),服务发生错误时通过FallBackName去调用依赖注入的接口IFallbackInvoker

二、熔断

1.错误率熔断

通过设置错误率(BreakeErrorThresholdPercentage),当失败调用数/远程调用数大于错误率,会启用熔断

2.超时熔断

通过设置执行超时时间(ExecutionTimeoutInMilliseconds),当服务调用超过执行时间会启用熔断

3.并发熔断

通过设置信号量最大并发度(MaxConcurrentRequests),在多线程环境下超过设置的信号量,会启用熔断

4.错误数熔断

通过设置调用失败的错误数(BreakerRequestVolumeThreshold),在10秒钟范围内超过设置的调用失败错误数,会启用熔断

众筹活动

针对surging,体系比较庞大,组件涵盖比较多,需要4名人员一起完善surging中英文文档,然后经过大家商量进行众筹,然后得到了大家热烈响应,决定完成后,和参加者一起去云南旅游,不够我自己补上费用,经过4天的募捐已经达到6478元,最近也邀请同事,朋友参加,已经有2名非常优秀的人员参加英文文档编写,他们的英文非常好,可以和老外远程会议,并且公司藏龙卧虎的人非常多,最近有小组成员去了芝加哥出差,对于我这个英语二把刀的人来说,完全是个互补。并且每个月1号会把贡献者名单更新到github

总结

surging 还有很长的路要走,我会花很多时间在surging 维护和完善上,也请大家关注元旦1.0版本的发布,QQ群还有神秘大礼哦!

原文地址:https://www.cnblogs.com/fanliang11/p/10165757.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YBTOJ:求好元素(哈希表)

文章目录题目描述解析代码题目描述 解析 如果枚举m,n,p的话是n3的 会超时 但我们注意到右边查询只有O(n) 这就很不平衡 所以考虑把p移到右边,预处理枚举m、n存到哈希表中 查询枚举i、p 这样就把复杂度均摊降到了n2 但是本题数据较强 所以我们得保证哈希表的单词查询…

Strange Shuffle CodeForces - 1471E(交互题)

交互题 这类型不同于普通的题。 可以理解为有个问题需要你解决,你通过输入某些东西表示你要问系统的问题,这时系统会回答你的问题。在代码中的回答方式就是会输入某个东西就是系统给你的答案,通过这些信息你可以得到问题的解你是不可以自己测…

学习KMP (概念 + 模板 + 例题: 子串查找)

我又回来了,感jio这几天有点勤啊!! 这一次我带着KMP来了, 文章目录KMP介绍模板例题: 子串查找题目暴力题解KMP题解代码实现KMP介绍 KMP,即 Knuth-Morris-Pratt 字符串查找算法,由Donald Knuth…

直播预告 - 博时基金DevOps体系建设和自动化测试分享

最近几年,基金行业发展比较快,业务范围从传统公募到大资管,业务地域从中国大陆到全球化,在互联网金融浪潮中扮演了重要角色,金融科技又带来新的挑战和机遇。据毕马威2014年研究报告显示,由于新技术、人口变…

YBTOJ:公共子串(KMP)

文章目录题目描述解析代码题目描述 解析 我的做法是二分答案,暴力枚举子串,对其他的字符串进行KMP。 复杂度logL*L2 没有一次AC,因为忘记了字符串清零!,否则它会和上次二分的字符串没被覆盖到的部分连在一起。 之前遇…

Asp.Net Core + Docker 搭建

一、Docker安装(1)机器准备 本次实验,我是在Win10上,使用Vmware Workstation虚拟机安装的Ubuntu 18.04.l LTS版本进行搭建。(2)安装Docker# yum install docker注意:如果提示未安装yum 使用命令:apt-get install yum&a…

数数字

今天中午1小时,定时两道,我就知道自己的太阳降落了。。。orz 文章目录题目题解代码实现题目 PB 带来了若干只蒟蒻。 众所周知,NTF 是数论学会的会长,于是 PB 准备用数字击败 NTF,以证明 PB 比 NTF 更强。 于是 PB 准…

YBTOJ:前缀数组(KMP)

文章目录题目描述解析代码题目描述 解析 题面脸上写着5个大字:我是KMP 但是本题没有自己做出来。。。我一开始的思路其实很接近题解了,只是被我舍弃了qwq。 后来卡在暴力nL2的瓶颈上,用了个倍增的诡异操作搞到了nLlogL,但是n5&am…

西安活动 | 2019年1月13号 拥抱开源, 又见.NET 线下交流活动报名进行中

随着.NET Core的发布和开源,.NET又重新回到人们的视野。.NET Core的下个3.0即将release,加入非常多的新功能,越来越拥抱变化,DevOps和Microservice的最佳实践已经在.NET Core落地,比如 Ocelot网关、GrpcConsul 服务注册…

[ZOJ 3203] 灯泡

今天这个**又带着题走来了!! 文章目录[TOC] 题目题解代码实现题目 相比 wildleopard 的家,他的弟弟 mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上,他徘徊在自己狭小的房子里,思考如…

YBTOJ:字符串题(KMP)

文章目录题目描述解析1.p[i]>0:2.p[i]0:代码题目描述 解析 我个人做起来很费劲的一道题,用vector,并查集等等东西搞来搞去过掉了(竟然只WA了一次 ) 看题解思路就一下子清晰了,还是对KMP的理解不到位。 …

Asp.Net Core 轻松学-正确使用分布式缓存

前言本来昨天应该更新的,但是由于各种原因,抱歉,让追这个系列的朋友久等了。上一篇文章 在.Net Core 使用缓存和配置依赖策略 讲的是如何使用本地缓存,那么本篇文章就来了解一下如何使用分布式缓存,通过本章&#xff0…

计算几何初步

两点之间距离 欧氏距离 即欧几里得距离。 平面内两点的距离为 \[\sqrt{(x_1-x_2)^2(y_1-y_2)^2} \]立体空间内两点的距离为 \[\sqrt{(x_1-x_2)^2(y_1-y_2)^2(z_1-z_2)^2} \]\(\dots\) \(n\) 维空间内两点的距离为 \[\sqrt{\sum_{i1}^{n}{(x_1-x_2)^2}} \]曼哈顿距离 二维空间内…

树链剖分概念及模板 + 例题 [POJ3237 tree + 软件包管理器]

文章目录概念模板例题1:软件包管理器题目题解代码实现例题2:POJ3237 tree题目题解代码实现概念 树链剖分主要是用于解决以下这两个问题。 1、更改树上点x到点y的最短路径上的所有结点的值 2、查询树上点x到点y的最短路径上的所有结点的和。 在讲树链剖分…

YBTOJ:字符串匹配(KMP)

文章目录题目描述解析代码题目描述 解析 看了题解。。。 这题的关键在于可以变换匹配的一个充要条件: 每个字符与前一个相同字符的距离相同 这个搞出来之后就可以以它为关键字进行KMP了 注意! 当与前一个字符的距离超过匹配长度时,是没有意义…

TransactionScope事务处理方法介绍及.NET Core中的注意事项

作者:依乐祝原文链接:https://www.cnblogs.com/yilezhu/p/10170712.html今天在写CzarCms的UnitOfWork的使用使用到了这个TransactionScope事务,因此对它进行了相关资料的查阅并记录如下,希望对大伙在.NET Core中使用有所帮助。写在…

YBTOJ:字符匹配(KMP)

文章目录题目描述解析代码题目描述 解析 显然应该要尝试套kmp的板子 关键是如何套 也就是那个判断匹配的条件是什么的问题 本题的关键是当kmp匹配时,匹配位之前的所有位大小关系的顺序都是匹配的,所以我们只需要看当前位即可 考虑对b预处理出3个数组&a…

历史上的今天(history)+ 勇者斗恶龙(dragon)

朋友们我来了,好久都没有更新了,手实在痒痒,不撸两道,内心过意不去 文章目录A:历史上的今天(history)题目题解代码实现B: 勇者斗恶龙(dragon)题目描述题解代…

领域驱动设计,让程序员心中有码(四)

#领域驱动设计,让程序员心中有码(四)----------------------追忆有关分层的古老往事我一直认为,程序员也是艺术家,他们撰写的每一行代码,是献给这大好世界的优美诗篇。不同的人,写的代码也许风格…

YBTOJ洛谷P4551:最长异或路径(trie树)

洛谷传送门 文章目录题目描述解析代码题目描述 解析 本题关键就在于一点: 若把每个点的深度dep[i]定义为从根到节点边权的异或和 那么i到j的路径异或和可以表示为: dep[i] ^ dep[j] 首先要是i、j在不同子树上显然成立 如果他们在同一子树上,…