作家
登录

架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

作者: 来源: 2017-07-05 16:07:17 阅读 我要评论

在深刻进修zookeeper我想先给大年夜家介绍一个和zookeeper相干的应用实例,我把这个实例定名为长途调用办事。经由过程对这种应用实例的描述,我们会对zookeeper应用处景会有深刻的懂得。

长途调用是体系与体系之间的通信机制,它的另一种懂得就是过程间的通信。做分布式体系的开辟,长途调用技巧是其核心技巧。长途调用技巧可以将一组计算机体系形成一个收集体系,对外供给整体办事,那么这一群的计算机体系就构成了一个更大年夜型,机能更高的计算机体系。

我在前面的博客里介绍了一种分布式网站的架构设计,个中就有一个应用netty技巧编写的组件作为前端体系和办事端体系通信的序言。在一个大年夜型的互联网公司里话苄很多如许的网站体系,如不雅每一个网站都像我博客里所阐述的进行开辟,那么对于体系通信保护和治理,以及每个体系收集资本的分派治理就会造成必定的问题,对于如许的问题,我举个例子可能大年夜家会更明白些,比如一个互联网公司稀有个对外供给办事的网站,有的网站拜访量很大年夜,有的相对较小,然则公司的宽带资本是有限的,那么我们就欲望动态的治劳憾ブ派这些资本,如不雅我们网站的通信功能和网站都是紧耦合的,那么的┝寺封些资本的工作就会比较复杂和繁琐,也很轻易出问题。如许的问题还会还有很多,我这里不做过细分析了。做软件开辟时刻,有个原则,如不雅某个功能是可以通用的,该功能很须要同一治理时刻,我们就应当把这个功能采取成一个自力的体系或组件,并且这个体系或组件付与一些加强级的功能特点,如许必定半数个体系的结实性、可用性以及效力上有所晋升。

照样以我前面博客里写分布式网站讲起,办事端体系我们可以当做办事供给者,前端体系当做办事调用者,供给者可以类比商户,调用者可以类比客户,商户和客户可以直接进行交易,这种直接交易方法异常原始甚至还会有风险,现代社会谈户和客户直接的交易十分高效,高效的原因是因为有一个规范的大年夜市场,商户和客户的交易在市场里进行的,如许交易会变得加倍安然和高效,我设计的分布式框架最大年夜的特点就是供给了一个类似市场的角色,它来治理办事供给者和办事调用者,我把这个功能模块称为长途调用治理组件。

而我在分布式网站里所描述的通信技巧,就是长途调用技巧的一种,长途调用技巧就是客户端和办事端的通信技巧,它可以当做cs架构技巧的一种,在java里有很多优良的框架实现长途调用,例如java自带的RMI,spring自带的Httpinvoker,webservice技巧等等。然则现有的┞封些技巧知足不了互联网公司的长途调用需求,今天我将讲述一套我本身构思的一套长途调用技巧,这个是借鉴了一些我们公司的类似软件的做法。

我这里设计的长途调用框架,除了以上的功能外,我欲望它还能有心跳治理机制,超时治理机制,办事分级治理,就是根据办事的重要性或者体系的劳碌度可声调节收集资本。

该框架主如果针对java的,其他说话今朝不克不及支撑。起首我要总结长途调用技巧要包含那些技巧,它们分别是:

  • 通信技巧:长途调用就是经由过程收集技巧将不合体系构成一个整体,是以通信技巧是其重点,通信技巧我这里选择的是netty技巧,Netty供给异步的、事宜驱动的收集应用法度榜样框架和对象,用以快速开辟高机能、高靠得住性的收集办事器和客户端法度榜样。Netty会让我们开辟通信法度榜样变得简单,高效,其效力也是异常好的,同时它还支撑多种不合的收集协定。
  • 序列豢?状序列化技巧:java的序列化技巧是指将对象转换为byte数据,这些数据可以被还原为java对象,这种还原的过程就是反序列化了,该机制可以主动处理不合操作体系之间的差别,例如window下序列化的对象,可以在linux长进行从新构建。Java的jdk里自带了一个序列豢?状序列化机制,熟悉hadoop的人知道hadoop设计了一套序列豢?状序列化机制,为什么hadoop作者不选择应用java自带的序列化机制,这是因为java序列化机制异常复杂,复杂带来效力低下,java的序列化机制还有一个重要的缺点就是它序列化的二进制数据会异常大年夜,因为java序列化时刻会附带太多该对象的相干信息,过大年夜的数据量就会影响收集传输的效力,是以hadoop本身设计了一套序列豢?状序列化机制,hadoop不合节点之间的通信也是一种长途调用机制,是以我们发明好的序列豢?状序列化技巧对于长途调用是相当重要的。我们公司的长途调用框架序列化技巧有两种一种就是java自带的序列豢?状序列化机制,一种是hessian技巧,它是一种加倍高效的序列豢?状序列化技巧。
  • 紧缩技巧:做收集编程,最稀缺的资本就是宽带资本,如不雅传输数据过大年夜,那么对数据的紧缩就会显得十分重要,这里我推荐一个紧缩技巧snappy,它是一种高效的压休和解紧缩包,google公司内部广泛应用的一种紧缩技巧。
  • 高并发的技巧:长途调用技巧必定会是多线程,只有如许才能知足多个并发的处理请求,java在1.5的版本里供给了一个Executor框架,它在线程开辟里惹人了义务的概念,使得多线程的法度榜样开辟会加倍合理和可控,关于executor的技巧大年夜家可以看看一本经典的书本《java并发编程实践》。想让线程加倍有效力,池技巧也是并弗成少的,apache的common-pool是一个异常好的池技巧,我们可以将线程都预先创建好,然后放入到common-pool池里进行治理。
  • 非侵入式:这个也可以叫做松耦合,对于java的web开辟,最好的解耦方法就是应用spring技巧,当我们体系里把长途调用框架惹人后,设备好相干的参数,我们可以把用于长途调用的办法定义在spring的设备文件里,那么在法度榜样里调用的时刻,应用spring直接获取这个bean,那么对于长途调用的开辟就和我们在action里调用server的办法没啥差别了。下面是一段实例代码:
    1. <!-- 办事供给者设备 --> 
    2. <bean id="serverProvider" class="cn.com.sharpxiajun.RmifSpringProviderBean"

        推荐阅读

        比特币暴涨,挖矿机大卖,神话还能维持多久?

      房价涨幅虽猛,但自负年夜国度推出相干政策后,房价出现收紧迹象。国度统计局《2017年5月份70个大年夜中城市室庐发卖价格更改情况》的数据显示,本年5月15个一线和热点二线城市房地产市场根本稳定,其新建商品室庐价>>>详细阅读


      本文标题:架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

      地址:http://www.17bianji.com/lsqh/36044.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)