谈谈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微服务 总结一
一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...
随机推荐
- CSS-水平居中、垂直居中、水平垂直居中
1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...
- Linux学习5-安装mysql
前言 今天我们来学习一下如何在Linux下安装mysql 一:准备安装包 可以从http://www.mysql.com/downloads/官方网站下载到最新版本,本次安装的版本是mysql-5.7 ...
- 最适合初学者的一篇 Ribbon 教程
什么是 Ribbon Ribbon 是一个基于 HTTP 和 TCP 的 客服端负载均衡工具,它是基于 Netflix Ribbon 实现的. 它不像 Spring Cloud 服务注册中心.配置中心 ...
- Markdown中插入复杂的合并表格方法
由于Markdown自身的语法限制,不能直接插入有合并单元格的复杂表格. 姓名 学号 专业 张三 2018123456 计算机 赵四 2018222356 自动化 李六 2018666666 信息工程 ...
- 关于 服务器ip和域名进行一个绑定
最近想让人访问我做个一个网站,但是我发现让服务器ip地址直接暴露不是很好 (做着玩) 于是就去阿里云买了一个5块1年的域名 先在网上百度了一下是怎么绑定域名的,发现全是含糊不清的信息,果然是垃圾百度 ...
- Azure CLI 简单入门
Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...
- go极其ide的安装
一.下载软件开发包 官网:https://golang.google.cn/ 二. 安装和配置SDK windows使用.msi一键安装 配置环境变量 GOROOT,自动的,默认将go安装到C:/ ...
- 服务发现组件之 — Eureka
前言 现在流行的微服务体系结构正在改变我们构建应用程序的方式,从单一的单体服务转变为越来越小的可单独部署的服务(称为微服务),共同构成了我们的应用程序.当进行一个业务时不可避免就会存在多个服务之间调用 ...
- 【MyBatis笔记】mapper文件的配置以及说明
<!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...
- Java多线程并发06——CAS与AQS
在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...