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 与多语言混合微服务构思的更多相关文章

  1. surging 将推出社区版微服务平台

    前言 对于.NET大家并不陌生,有大批的企业选择.NET作为公司构建多种应用的开发平台,但是近几年随着微服务,大数据,移动端,物联网兴起,而后.NET社区生态没有跟上时代的步伐,已开始趋于没落,而其中 ...

  2. surging 微服务引擎 -协议主机的Behavior特性

    1.前言 因为工作的关系,最近很少更新surging,因为surging 一直处在不温不火的状态,而自己每天利用业余时间进行完善,每天都是疲惫的状态,还要应付新手的提问,曾经一度想放弃,但是有些人劝说 ...

  3. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  4. 集群、分布式、SOA、微服务、webService等思想的整理

    引子:前几天甲方问我,他用wpf弄个界面,能不能通过其他语言给他传输数据,我由此想到了webservice(此时此刻,我也没有用过webServices),作日翻阅了一些资料,对这块技术有了个大概的了 ...

  5. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器 Open Liberty .但是采用 ...

  6. Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  7. 基于 Docker 的微服务架构实践

    本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...

  8. 深入理解SpringCloud与微服务构建

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81742534 目录 一.SpringClou ...

  9. springcloud微服务 总结一

    一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...

随机推荐

  1. 提取.bank音频包。 Extract .bank audio files

    转载请注明出处! 首先我们需要提取的文件是 .bank 的音频文件包,里面包含很条音频. 这是我们会用到工具 step1: 运行  quickbms.exe, 它会自动打开选择文件窗口,我们直接选择下 ...

  2. ysoserial源码结构分析

    1.前言 之前也花了几天晚上熟悉了一下commonscollections系列的构造,那么学习一下这个项目是如何设计的也挺重要,多学习大佬如何写代码应该也能对自己的代码能力有提升吧~2333 2.项目 ...

  3. 03 HDFS的客户端操作

    服务器和客户端的概念 hdfs的客户端有多种形式 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 参数配置 文件的切块大小和存储的副本数量,都 ...

  4. 开发RTSP 直播软件 H264 AAC 编码

    上一篇对摄像头预览,拍照做了大概的介绍,现在已经可以拿到视频帧了,在加上 RTSP 实现,就是直播的雏形,当然还要加上一些 WEB 管理和手机平台的支援,就是一整套直播软件. 介绍一些基础概念:RTP ...

  5. vnstat 流量统计 并附带一个小 php 查看流量的页面

    安装apt-get install vnstat 配置到自动启动update-rc.d vnstat enable 启动/etc/init.d/vnstat start vnstat基本使用命令 vn ...

  6. AspNetCore3.1_Middleware源码解析_3_HttpsRedirection

    概述 上文提到3.1版本默认没有使用Hsts,但是使用了这个中间件.看名字就很好理解,https跳转,顾名思义,就是跳转到 https地址. 使用场景,当用户使用http访问网站时,自动跳转到http ...

  7. Docker 技术系列之安装多版本Mysql5.6和Mysql5.7

    大家好,后面的就不是关于MAC专有的内容,基本是跟Java环境,基础技术方面有关.所以这个教程对于在linux系统还是macOS都是通用的,不用担心. 上一篇,我们安装好对应的Docker之后,感受到 ...

  8. 【简说Python WEB】Flask-Moment

    目录 [简说Python WEB]Flask-Moment 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:virutalenv Python的版本:Python 3.6 ...

  9. javaScript 基础知识汇总 (十三)

    1.Class 在JavaScript中 calss即类是一种函数 基本语法 class Myclass{ constructor(){} method1(){} method2(){} method ...

  10. C语言-转义字符

    %d   十进制有符号整数 %u   十进制无符号整数 %f    浮点数 %s   字符串 %c   单个字符 %p   指针的值 %e   指数形式的浮点数 %X   无符号以十六进制表示的整数 ...