基于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服务发现&负载均衡

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

Grpc的一个简单的负载均衡类库

首先先列下Grpc的教程,然后目前Grpc的C#的版本为1.0 prev版,反正就是还有坑的阶段,实际会出内存错误导致程序崩溃(内存错误你懂得,unsafe代码异常捕获都没用),这里就当是尝鲜版试验使...
  • starfd
  • starfd
  • 2016年08月01日 10:27
  • 3444

gRPC LB

gRPC负载均衡范围本文档解释了gRPC内的负载均衡设计。背景每个呼叫负载均衡值得注意的是,gRPC内部的负载均衡是基于每个呼叫而不是每个连接的基础上发生的。换句话说,即使所有请求来自单个客户端,我们...
  • xiaojia1100
  • xiaojia1100
  • 2017年12月19日 14:29
  • 180

体验 gRPC 那些事儿

我们来看 google 对于 gRPC 的定义: A high performance, open-source universal RPC framework 即 gRPC 是一个开源的高性能通过...
  • lihao21
  • lihao21
  • 2017年01月31日 22:29
  • 6150

GRPC原理解析

GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x +。GRPC与thrift、avro-rpc等其实在总体原理上并没...
  • zl1zl2zl3
  • zl1zl2zl3
  • 2017年12月12日 10:28
  • 119

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

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

RPC服务端+客户端 参考代码

服务端启动类 package com.netty.demo.server;   import io.netty.bootstrap.ServerBootstrap; import io.net...
  • m0_37786726
  • m0_37786726
  • 2018年02月03日 13:50
  • 13

深入学习consul

consul的介绍和使用
  • yeyincai
  • yeyincai
  • 2016年06月26日 20:18
  • 3727

golang使用服务发现系统consul

golang使用服务发现系统consul
  • changjixiong
  • changjixiong
  • 2017年07月08日 16:38
  • 688

gRPC, Thrift和Dubbo等3种RPC框架的比较

gRPC是Google开源的一款RPC框架(Go版本的实现),以protobuf作为IDL,通过protoc来编译框架代码。gRPC的Java实现的底层网络库是基于Netty开发而来,其Go实现是基于...
  • butterfly1009
  • butterfly1009
  • 2017年02月17日 23:13
  • 1041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于GRPC+consul通信的服务化框架
举报原因:
原因补充:

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