迎元旦,庆surging 1.0发布

一位摄影程序员的独白

每个人都有爱好,都有释放压力的活动,而我也不例外,我除了每天上班,周末就会约一群好友去拍妹子,成家后,就改为拍虫子,一拍就到了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

针对于Critical,Debug,Trace,Error,Information,Warning级别的日志可以通过Nlog组件进行实现,并且可以写入到Console,file,database

2.log4net

针对于Critical,Debug,Trace,Error,Information,Warning级别的日志可以通过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

针对于redis 缓存实现了哈希一致性,并且配有健康检查,对于超过6次不健康的服务会从哈希节点移除。目前只实现了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

时间: 2024-10-10 20:41:21

迎元旦,庆surging 1.0发布的相关文章

数人云操作系统 2.0 发布

5月26日,数人云产品战略发布会在万达索菲特酒店拉开序幕,此次发布会不仅是一场围绕Docker技术的企业级技术盛会,更是一场关于容器与开源云计算技术实践的分享交流会.由于Docker技术的爆发兴起,更多关于Docker的新闻,我们将陆续为您带来更多这方面的资讯.数人云CEO王璞在开场致辞中指出,2014年Docker技术逐步兴起,大量围绕Docker的创业公司以及诸多开源软件项目进一步丰满了容器技术的生态圈.容器技术的势头在今年继续火热,获得了整个行业以及谷歌.亚马逊.IBM.微软.红帽.VMw

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构

基于Java图片数据库Neo4j 3.0.0发布 全新的内部架构 Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本.此版本对内部架构进行了全新的设计;提供给开发者更强大的生产力;提供更广阔的部署选择.Neo4j 3.0 被认为是世界上最具伸缩性的基于Java的图片数据库. Neo4j 3.0.0 主要的新特性: Neo4j 3.0 新特性架构图 全新设计了内部架构移除了所有节点数量限制,数据库关系和属性都可以被存储和索引提供官方支持语言驱动器 (Java.JavaSc

docker 1.0.0发布以及一个bug依赖apparmor_parser

6月10号docker 1.0稳定版本发布,找了台ubuntu的机器,装了下 ubuntu version:12.04 docker version:1.0.0 装docker的步骤可以看官方文档:https://docs.docker.com/installation/ubuntulinux/ 装好之后,运行docker -d尝试启动docker守护进程,报错如下: [0fcb4ed6] +job serveapi(tcp://127.0.0.1:2375) [0fcb4ed6] +job i

开源 java CMS - FreeCMS2.0发布。

FreeCMS商业版V2.0更新功能 1.标签参数不区分大小写,如向infoList标签传递siteid参数,参数名为siteid或SiteId都可以正确传递参数. 2.增加清空索引功能. 3.增加信息五星评分功能. 4.增加数据模型:站点.栏目.信息,可自由扩展自定义字段. 支持输入方式: 文本框(单行) 文本框(多行) 富文本编辑器 复选列表(checkbox) 单选列表(radio) 下拉列表(select单选) 日期选择框 日期时间选择框 支持验证方式: 中文 英文 Email格式 网址

Qt on Android: Qt 5.3.0 发布,针对 Android 改进说明

5月20日,Qt 官方博客宣布 Qt 5.3.0 发布! 这个版本聚焦在性能.稳定性和可用性的提升上,与 5.1 / 5.2 相比有很大提升. 5.3.0 的主要变化: 稳定能.可用性大大提升 Qt for Windows Runtime Beta Official support for QNX 6.6 and QNX 6.5 SP1 引入的新特性 QQuickWidget,混合使用 Qt Widgets 和 Qt Quick 变得更加方便 Compiled Qt Quick Purchasi

Visual Studio的 Apache Cordova 插件CTP3.0发布!

北京时间12号晚23点开始的Connect()活动上,微软发布了一系列激动人心的消息! .NET开源了!以后.NET将可在Linux和Mac OS平台上运行! VS免费了!!如果你是学生,个人开发者,初创企业,那么你将可以使用Visual Studio Community 2013!免费! Visual Studio 2015集成了 Clang 和 LLVM,这意味着什么,意味你可以在VS里头编译iOS程序了! Visual Studio 2015还自带了Android模拟器!可以告别那个渣爆了

千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布

在各位用户不继的催更中,终于完成了这次更新.Visual Entity这个软件发布于 2011年,这个软件完成后,便上班去了,也没有做什么推广工作.所以知道的用户并不多,尽管它是个非常好用.并且免费的软件.它是一个支持 NHibernate 和 Linq to SQL 的实体设计器,关于它的介绍,大家可以看:http://www.cnblogs.com/ansiboy/archive/2011/03/14/1983754.html . 随着 Visual Studio 的不断升级,但是旧版的 V

Selenium v2.45.0 发布,此版本现已提供下载:http://selenium-rele

Selenium v2.45.0 发布,此版本现已提供下载:http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar.此版本支持 Firefox 36

NCWeather1.0发布

更新内容还是看github上的历史. 爽. 多写了不少代码,居然还比上个版本少了3KB. NCWeatherV1.0.apk 我想说说新学的数据库的内容来着,不过还是等等吧. NCWeather1.0发布,布布扣,bubuko.com