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. 用 HTML5 造个有诚意的 23D 招聘稿

    前言 招聘对于一个公司来说是相当重要的一个环节,首先它影响着公司未来发展的趋势,其次它为公司注入新鲜血液,使公司更具有活力.当然在工业互联网,物联网大背景下诞生的 HT 也是需要注入新鲜的血液来进一步 ...

  2. SpiningUP 强化学习 中文文档

    2020 OpenAI 全面拥抱PyTorch,  全新版强化学习教程已发布. 全网第一个中文译本新鲜出炉:http://studyai.com/course/detail/ba8e572a 个人认为 ...

  3. 【面试经验分享】java面试中的那些潜规则

    1.大纲 潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 很多刚入行的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难道你的意思,只是想通过提问的方式来知道 ...

  4. Python数据科学手册(1) IPython:超越Python

    1.1 shell还是Notebook Jupyter Notebook 是 IPython shell 基于浏览器的图形界面,提供了一系列丰富的动态展示功能.Jupyter Notebook 不仅可 ...

  5. C语言程序设计(十一) 指针和数组

    第十一章 指针和数组 一旦给出数组的定义,编译系统就会为其在内存中分配固定的存储单元,相应的,数组的首地址也就确定了 C语言中的数组名有特殊的含义,它代表存放数组元素的连续存储空间的首地址 //L11 ...

  6. 区间DP(力扣1000.合并石头的最低成本)

    一.区间DP 顾名思义区间DP就是在区间上进行动态规划,先求出一段区间上的最优解,在合并成整个大区间的最优解,方法主要有记忆化搜素和递归的形式. 顺便提一下动态规划的成立条件是满足最优子结构和无后效性 ...

  7. 如何安装vue-devtool调试工具

    1.从git上下载工具压缩包,github下载地址:https://github.com/vuejs/vue-devtools: 2.打开cmd,切换到下载的文件目录下:npm install---- ...

  8. python对接elasticsearch的基本操作

    基本操作 #!/usr/bin/env python # -*- coding: utf-8 -*- # author tom from elasticsearch import Elasticsea ...

  9. flask连接数据库的URI书写格式

    1. MySQL mysql://username:password@hostname/database 2. PostgreSQL postgresql://username:password@ho ...

  10. java实现QQ、微信、轰炸机,撩妹,抖图功能,轻松自如

    今天交大家一个很牛的功能,让你朋友服你,他不扶你你来找我. 打游戏被骂,骂不过你来找我,我们有神器,直到他怕了为止. 废话少说,代码如下,动手,干就完了 乞丐版如下 参考连接:Java实现QQ微信轰炸 ...