基于GRPC+consul通信的服务化框架

原创 2016年05月21日 18:18:47

—.背景

        谈论服务化框架的时候,我们首先先了解这些概念: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学习博客:grpc学习
consul学习博客:consul学习
博主自己写的一个rpc:flashRPC基于netty+protostuf实现,基准测试可达10万TPS,性能优越
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

grpc(5):使用grpc+consul 开发服务调用

1,consul 服务发现在使用了几次之后终于感受到了这个系统挺好的了。 在一个小的团队里面,要做服务发现,做的简单高效。 可以直接使用 consul 作为服务发现,服务检查的系统。 不用自己去...

简单RPC框架-基于Consul的服务注册与发现

一般我们常见的RPC框架都包含如下三个部分: 注册中心,用于服务端注册远程服务以及客户端发现服务服务端,对外提供后台服务,将自己的服务信息注册到注册中心客户端,从注册中心获取远程服务的注...

解开gRPC神秘面纱(一)

gRPC是什么?       gRPC是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架。 gRPC基于HTTP/2...

gRPC服务发现&负载均衡

https://segmentfault.com/a/1190000008672912 构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均...

grpc(4):使用 golang 调用consul api 接口,注册user-tomcat服务

1,关于consuldubbo的注册中心是zookeeper,redis。 motan的注册中心是zookeeper,consul。 kubernetes的注册中心是 etcd。 使用consu...

服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型

概述前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架。下面就简单介绍一下RPC框架技术选型的过程...
  • fgyibupi
  • fgyibupi
  • 2017年01月23日 11:08
  • 19816

微服务之RPC

RPC 简介什么是RPC?RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC...
  • enzoy
  • enzoy
  • 2016年09月28日 16:44
  • 2230

spring-boot 深入学习

spring-boot深入学习

基于HTTP/2和protobuf的RPC框架GRPC

gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准、ProtoBuf(Protocol Buffers)序列化协议而设计开发,带来诸如双向流、流...

SpringBoot非官方教程 | 第四篇:SpringBoot 整合JPA

转载请标明出处:  http://blog.csdn.net/forezp/article/details/70545038  本文出自方志朋的博客 JPA全称Java Persiste...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于GRPC+consul通信的服务化框架
举报原因:
原因补充:

(最多只允许输入30个字)