原文:http://blog.csdn.net/yeyincai/article/details/51470475

—.背景

谈论服务化框架的时候,我们首先先了解这些概念:SOA、ESB、OSGi、servicemix、微服务、Spring Boot

SOA:面向服务架构,传统简单的网站系统采用MVC架构,随着系统需求不断的变化和业务不断的扩展,MVC显得很无力,MVC不断的变大,维护开发越来越困难,SOA解决的是MVC里面大而核心的功能,抽离出来做成服务提供给不断变化的业务使用。SOA提出多年,它仅仅是一个概念—一切皆服务,并不是一种技术的实现。

ESB:企业服务总线,是SOA 其中一种实现,打个比方,电商SOA包含会员、商品、支付、短信、物流等服务,比如用户购买商品需要整合下面服务,登录—>下单—>支付—>物流,ESB正是解决这种服务消息之间的路由规则,因此称之为服务总线。

OSGi:面向java动态系统,它的基础是动态化,目的是模块化,目标是系统解耦。电商系统中:我们可以抽离支付为一个模块,短信为一个模块,用户一个模块、产品一个模块,这样拆分大系统,降低耦合,强调了一切皆模块。

serviceMix:是apache下面一个支持OSGI的ESB容器,与普通的tomcat相比,tomcat运行的一个war包,serviceMix运行的是一个bundle(实质是jar包);tomcat不能动态增删模块,serviceMix是可以;tomcat的war包之间不能调用,serviceMix可以引用同一个容器的bundle服务。

微服务:功能单一的服务,是相对与SOA的一种说法,SOA是胖服务,集成了整个系统所有的服务,而微服务强调微小,一个服务最好只做一件事。比如签到微服务,短信微服务,它与OSGi目的都是一样。

Spring Boot:微服务的一种实现及其运行方式,采用了优秀spring,但是剔除了繁琐的XML配置,内嵌tomcat或者jetty等容器,极其简单开发部署。

二.服务化引入

        网站系统随着不断的发展,越来越复杂,架构的变迁也会从MVC—>SOA—>微服务,从简单到复杂,从集中到分布,上面介绍的技术都是为了解决这些问题。服务化框架的引入是SOA—>微服务过程必须要解决的问题。面对服务的增多,服务分布的部署,服务与服务之间相互的调用,不得不使用服务化框架去解决。著名的dubbo就是这样产生的。
 

三.服务化框架的简介

服务化框架分为两部分:rpc、注册中心
1.rpc:远程调用,远程调用的传输协议有很多种,可以走http、webservice、tcp等。facebook的thrift、google的grpc、alibaba的dubbo世界上主流的rpc框架。其重点在于安全、快速、最好能跨语言。
2.注册中心:用于存放,服务的ip地址和状态信息等。比较好的存放服务信息的方案有:zookeeper、consul、redis。其重点在于避免单点问题,并且好维护。
 

四.服务化框架原理

根据上面图,服务化原理可以分为3步:
1.服务端启动并且向注册中心发送服务信息,注册中心收到后会定时监控服务
2.客户端需要开始调用服务的时候,首先去注册中心获取服务信息
3.客户端创建rpc连接,服务端返回处理信息
 
第3步又可以细分,下面说说rpc的原理:
目标:客户端C类怎么调用远程机器上S服务的a.say()方法
1).服务发现,向注册中心获取服务(这里需要做的有很多:拿到多个服务时需要做负载均衡,同机房过滤、版本过滤、服务路由过滤等)
2).客户端发起调用,将需要调用的服务和方法和参数进行组装
3).序列化编码组装的消息,这里可以使用json,也可以使用xml,也可以使用protobuf,也可以使用hessian,几种方案的序列化速度还有序列化后占用字节大小都是选择的重要指标。
4).传输协议,可以使用传统的io阻塞传输,也可以使用高效的nio传输(netty)。
5).服务端收到后进行反序列化,然后进行相应的处理。
6).服务端序列化response信息并且返回。
7).客户端收到response信息并且反序列化。
 

五.服务化框架实现

以上介绍了服务化框架基本信息和原理。下面介绍服务化框架的实现。

        选取一种注册方案,鉴于zookeeper坑太多,偏向于选择consul,consul不像zookeeper这么抽象,封装了服务化的http  api,非常方便调用,并且增加了对服务健康检查。选取一种rpc方案,对比thrift和grpc,结合两者的特性,grpc支持android  ios  app调用,功能更加强大,并且基于http2传输,多路复用,并发情况不需要创建多个线程进行管理,并且是使用的protobuf3进行序列化,高效快捷。
以上的方案选取好后,就可以进行代码实现了

基于GRPC+consul通信的服务化框架(转)的更多相关文章

  1. 基于ARM9和嵌入式Linux系统的多功能综合通信控制系统的框架

    基于ARM9硬件平台和嵌入式Linux系统的多功能综合通信控制系统的框架设计及各模块的功能.系统采用符合POSIX.1标准的C语言编写,实现了对下位机传送数据帧的采集.分析和存储,并能根据上位机的配置 ...

  2. .NET Core微服务之路:基于gRPC服务发现与服务治理的方案

    重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢,这个过 ...

  3. 【转】服务化框架技术选型与京东JSF解密

    [京东技术]声明:本文转载自微信公众号“开涛的博客”,转载务必声明. 作者:章耿,原京东资深架构师,曾负责京东服务框架,配置中心等基础平台.近十年工作经验,专注于基础中间件等底层技术架构,对分布式系统 ...

  4. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  5. .Net Core Grpc Consul 实现服务注册 服务发现 负载均衡

    本文是基于..net core grpc consul 实现服务注册 服务发现 负载均衡(二)的,很多内容是直接复制过来的,..net core grpc consul 实现服务注册 服务发现 负载均 ...

  6. .Net Core Grpc 实现通信

    .Net Core 3.0已经把Grpc作为一个默认的模板引入,所以我认为每一个.Net程序员都有学习Grpc的必要,当然这不是必须的. 我在我的前一篇文章中介绍并创建了一个.Net Core 3.0 ...

  7. 转-基于NodeJS的14款Web框架

    基于NodeJS的14款Web框架 2014-10-16 23:28 作者: NodeJSNet 来源: 本站 浏览: 1,399 次阅读 我要评论暂无评论 字号: 大 中 小 摘要: 在几年的时间里 ...

  8. 第二篇 基于.net搭建热插拔式web框架(沙箱的构建)

    上周五写了一个实现原理篇,在评论中看到有朋友也遇到了我的问题,真的是有种他乡遇知己的感觉,整个系列我一定会坚持写完,并在最后把代码开源到git中.上一篇文章很多人看了以后,都表示不解,觉得不知道我到底 ...

  9. Docker 三剑客之 Docker Swarm(基于 overlay 组网通信)

    相关文章:Docker 三剑客之 Docker Swarm 这一篇主要是对 Docker Swarm 的完善,增加基于 overlay 组网通信,以便 Docker 容器可以跨主机访问. 不同主机间的 ...

随机推荐

  1. BQ24296充电管理芯片使用过程中的注意事项

    BQ24296遇到的一点问题 概述:BQ24296是TI出品的具有窄范围VDC控制.基于I2C通讯的最大支持3A充电电流的开关式电源路径管理芯片.可以轻松实现2A以上的大电流充电,能量转换效率达到90 ...

  2. Bootstrap_警示框

    一.默认警示框 Bootstrap框架通过“alert“样式来实现警示框效果.在默认情况之下,提供了四种不同的警示框效果: 1.成功警示框:告诉用用户操作成功,在“alert”样式基础上追加“aler ...

  3. 安装了ubuntu14.04+windows7双系统的笔记本启动后出现grub rescue>提示符

    解决思想如下: 1.在grub rescue>提示符处输入ls  即可看到该命令列出了硬盘上的所有分区,找到安装了linux的分区,我的安装在(hd0,msdos8)下,所以我以(hd0,msd ...

  4. 响应式设计,bootstrap框架的IE兼容问题

    学习bootstrap框架,主要是为了集成好的响应式框架,及其兼容性. 但是按bootstrap中文站的说明文档 制作了一个栅格布局的test.html后,怎么测试都不成功,在ie8下一直看不到媒体查 ...

  5. linux chomd 学习

    chomd -R 777 directory_name :递归地给directory目录下所有文件和子目录的属主分配读的权限 ------2016-10-31 -- source: Linux chm ...

  6. c语言指针占几个字节

    指针即为地址,指针几个字节跟语言无关,而是跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,现在一般是32位系统,所以是4个字节,以后64位,则就为8个字节. 可以在自己的电脑上测试下: ...

  7. 如何低成本的打造HTC Vive虚拟演播室直播MR视频?

    http://m.toutiao.com/i6298923859378700802/?tt_from=weixin&utm_campaign=client_share&from=gro ...

  8. android 破解工具

    来记录一下本人在平时工作中使用的android上的破解工具 静态破解: apktool: apk包 -> dex dex2jar和enjarify(google官方出品): dex->ja ...

  9. 安装mongodb

    安装mongodb的时候遇到一些麻烦 首先将安装包下下来 安装的是windows版本的 将bin文件夹加入环境变量后通过mongod和mongo指令就可以进行操作,很方便 用指令mongod --db ...

  10. 樱花漫地集于我心,蝶舞纷飞祈愿相随 発生:genesis 发生:genesis

    朱念齐,学号160809404(这些其实并没有什么乱用)唉( ̄y▽ ̄)~* 正文 鬼族后裔,原是露格尼卡王国的子民,在王立比布利亚学园任职魔法使拥有分别为: 拥有书库: 书库:傲慢(Superbia) ...