谈谈surging 与多语言混合微服务构思
1、前言
微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎是各大技术论坛、技术大会的热门话题。而Surging是高性能的模块化微服务引擎,是大家首选微服务引擎架构之一,而针对于框架有个突出的缺点就是只能支持基于.NET CORE开发,而现如今各大公司开发语言是多样的,每个业务线有各自开发的语言,所以出现了 多语言之间服务调用的问题。
跨语言调用是大家比较关心的话题,在这里我也提出自己的构思,后面计划实现基于java的surging ,可以和.NET CORE 进行互相调用。在这篇文章也会大致讨论一下我的构思:
而在开始之前,我想说下surging 是开源的,大家可以花时间去专研研究代码,也欢迎大家提供想法,贡献PR,但是如果你想节约时间,想深入了解surging,或者熟知如何部署,您可以购买作者的时间给你来四场一对多的直播,或者您有技术的疑难也可以通过购买企业服务的方式进行一对一的解答。而大家关心的事,有没有企业购买或者使用,在这里可以告诉你有,有很多。而且已经做了多场直播,还有购买OEM版权的。
2、协议之间适配
大家最初最常用的想要实现“跨语言”大多数方案是使用 http 协议做一层转换,最常见的手段莫过于借助 webapi 提供的 controller/action,间接通过httpclient调用webapi 提供的rest。这种方案的调用使得链路变长,tcp 通信之上又多了一层 http 通信,还需要写一套外层的webapi,不论是开发时间还是性能都有所拉长。
而针对于surging 是支持多种协议,surging内部提供了基于netty 的RPC协议之外,还有rest协议和grpc协议可供选择。这两者都是通用的跨语言协议。
rest 协议为满足 标准规范,在开发过程中引入了 GET、POST、PUT、DELETE 等特性,而这些特性可以通过元数据的方式注册到注册中心,对于习惯于编写传统rest 接口的人可以通过rest进行对接。
Gprc 更可以通过Google Protocol Buffers做到跨协议调用
RPC 跨协议调用就需要考虑 消息模型报文格式和序列化方案,而针对于消息报文包括了消息Id,消息类型,消息内容,而消息内容有两种类型,一种是远程调用消息,一种是远程调用结果消息。只要满足以上报文传递就可以了,而针对于报文必然要序列化和反序列化,而框架中提供了messagepack、ProtocolBuffers、Json.

3、服务治理与注册中心适配
谈到服务治理必然要谈到容错规则、负载均衡、服务路由,对于这些参数的适配,必然需要注册中心进行存储,而框架实现了基于consul 和 zookeeper 注册中心。
而谈到多语言混合,必然针对于每种语言都要考虑如何把服务路由信息注册到注册中心,并且需要实现一套基于consul 的心跳方式交互,还有一套基于zookeeper 的watcher 机制交互,而针对于服务路由里面包含了服务地址列表,需要实现针对于每种语言写一套负载算法,包括了轮询、哈希、随机算法,还需要实现一套各语言容错规则的判断,再发生错误时,能通过容错规则发生熔断。
4、拦截器的适配
而针对于拦截器考虑到需要跨语言和扩展性,在框架内部已经把拦截器参数和ID抽象化到服务路由元数据当中。并且可以针对于拦截器进行扩展,而框架实现了ServiceCacheIntercept和ServiceLogIntercept,而针对于跨语言需要做的是解析元数据,转化成拦截器参数,再通过参数去实现业务拦截降级,而以下是基于consul 注册的服务路由,里面包含了拦截器元数据

5、总结
以上是对于多语言混合微服务架构的一些构思,在以下日子里会去实现多语言混合架构,第一目标是先实现JAVA,还需要去花一些时间去做企业微服务培训和帮助企业更快熟悉如何构建微服务程序
谈谈surging 与多语言混合微服务构思的更多相关文章
- surging 将推出社区版微服务平台
前言 对于.NET大家并不陌生,有大批的企业选择.NET作为公司构建多种应用的开发平台,但是近几年随着微服务,大数据,移动端,物联网兴起,而后.NET社区生态没有跟上时代的步伐,已开始趋于没落,而其中 ...
- surging 微服务引擎 -协议主机的Behavior特性
1.前言 因为工作的关系,最近很少更新surging,因为surging 一直处在不温不火的状态,而自己每天利用业余时间进行完善,每天都是疲惫的状态,还要应付新手的提问,曾经一度想放弃,但是有些人劝说 ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- 集群、分布式、SOA、微服务、webService等思想的整理
引子:前几天甲方问我,他用wpf弄个界面,能不能通过其他语言给他传输数据,我由此想到了webservice(此时此刻,我也没有用过webServices),作日翻阅了一些资料,对这块技术有了个大概的了 ...
- 从成本角度看Java微服务
近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 深入理解SpringCloud与微服务构建
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81742534 目录 一.SpringClou ...
- springcloud微服务 总结一
一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...
随机推荐
- 【原创】(四)Linux进程调度-组调度及带宽控制
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- Delphi XE XML信息的读取
<?xml version=""?> <ConString> <Item> <Name/> <Type>C</Ty ...
- hadoop HDFS完全分布式搭建
1.准备阶段 准备好两台虚拟机(安装好hadoop,见:https://www.cnblogs.com/cjq10029/p/12336446.html),计划: IP 主机名 192.168.3.7 ...
- Ubuntu部署Asp.net core网站无法访问
前几天应工作需要,在阿里云上部署一个测试站点.本以为分分钟的事情,没想到打脸了. 当时直接新建一个webapi项目,publish后直接上传到阿里云,随后设置nginx转发网站端口5000. 接着打开 ...
- pytest、tox、Jenkins实现python接口自动化持续集成
pytest介绍 pytest是一款强大的python测试工具,可以胜任各种级别的软件测试工作,可以自动查找测试用并执行,并且有丰富的基础库,可以大幅度提高用户编写测试用例的效率,具备可扩展性,用户自 ...
- 使用VS2017进行Python代码的编写并打印出九九乘法表
我们来盘一盘怎么使用VS2017进行python代码的编写并打印出九九乘法表. 使用Visual Studio 2017进行Python编程不需要太复杂的工作,只需要vs2017安装好对Python的 ...
- ML-Agents(二)创建一个学习环境
ML-Agents(二)创建一个学习环境 一.前言 上一节我们讲了如何配置ML-Agents环境,这一节我们创建一个示例,主要利用Reinforcement Learning(强化学习). 如上图,本 ...
- 数据结构 - List 接口
简介 List接口继承自Collection接口,是Collection三大延伸接口之一.List中的元素都是有序的,并且都支持用索引访问.同时List中的元素允许重复. public interfa ...
- 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive
计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...
- 异步编程RxJava-介绍
前言前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式:并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和 ...