原文: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. Mysql常用数据类型

    Mysql常用数据类型 数字: 字符串: 时间:

  2. Sublime Text的使用代码块安装的模块

    在众多的开发工具IDE当中.作者现在唯独深爱sublime text(以下简称st).以前做后台开发使用visual studio(以下简称vs),以及实行前后端分工也是配合后台使用vs.这里要讲述两 ...

  3. Java开发中经典的小实例-(字符串倒序输出)

    public class Test12 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  4. 自建数据源(RSO2)、及数据源增强

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. charles抓包的使用教程

    // Charles 从入门到精通:(http://blog.csdn.net/donwei8/article/details/51647752) //抓包工具:Charles-断点修改 教程 (ht ...

  6. iOS开发 利用Reachability判断网络环境

    导入头文件:#import "Reachability.h" 然后将 SystemConfiguration.framework 添加进工程: 1.检查当前的网络状态(wifi.W ...

  7. 0512 Scrum 项目3.0

    SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. 3. ...

  8. VB6.0对鼠标滚轮不支持的解决方法[转]已经测试work

    今天要修改一个老DLL文件,安装了vb6,用起来很不爽. VB6编辑器 和 VBA编辑器 (Office 中的VB编辑器)都不支持鼠标滚动. 但 MS 已经提供了补丁http://download.m ...

  9. guava--Joiner、Splitter、MapJoinner、MapSplitter

    Joiner: List<String> stringList = new ArrayList<String>(); stringList.add("aa" ...

  10. CodeForces #367 div2 D Trie

    题目链接:Vasiliy's Multiset 题意:这里有一个set容器,有三种操作,+ num, - num, ? num,分别代表往容器里加上num,或者拿走num,或着从容器里找一个数temp ...