技术是为需求而服务的,分布式服务框架也同样如此,它不是凭空诞生的,也是因为有这样的需求才会有分布式服务框架这么样的东西诞生,在这篇blog中来详 细的分析分布式服务框架诞生的原因(其实也是需要用分布式服务框架的应用场景,这里隐含的意思就是并不是什么应用都需要分布式服务框架的)、分布式服务框 架需要提供的feature以及实现这些feature可选的技术方案。
其实这篇blog应该写在实现分布式服务框架系列blog之前,:),不废话了,来看为什么会需要分布式服务框架,在一个不断发展的大型应用中,系统的业 务和功能不断的增加,同时技术在不断的发展、团队在不断的变化,很容易造成的现象就是:各个子系统、模块实现的技术五花八门,部署时各子系统的方式和要求 不同,各个子系统之间的交互方式和方法不统一。这种现象带来的问题就是整个系统感觉很混乱,不过技术毕竟是不断的发展,因此各子系统、模块的具体实现技术 要完全限制应该是不太可能的,也没必要,但会希望系统对外提供的功能能采用统一的部署以及交互方法,这样的话每个子系统能保持其黑盒的实现方式,其他子系 统不想也不需要关心它的实现方式,只需要能够统一的方式调用到它们提供的功能就可以了,这是出现的第一个需求。
起初整个应用部署在一台机器上,但随着系统的功能越来越多,不得不不断的增加机器以减轻服务器的压力,但很快就出现瓶颈,不得不把应用分层部署,这样可以 撑一段时间,在撑过一段时间后发现再度出现瓶颈,于是希望能够再度的把系统进行划分,这个时候就变成了希望能够以非常细的粒度来部署了,而不是把一堆的功 能都部署在同一台机器上,这样带来的好处是系统的重用性能够再度的增强,服务器的压力能够有效的降低,使得系统可以以较低的成本继续保持Scable(就 像google),其实这也是ebay的演变过程,大家可以去看看那个著名的ebay架构演变的PPT,还有一篇中文的ebay是怎样炼成的。
从上面的需求场景描述中可以看出,需要分布式服务框架的场景并不是很多,这里还有一种场景没去提及,那就是对于一个大型企业而言,由于需要用到的软件多种多样,其实也是有分布式服务框架的需求的,但还是有些不同,因为要去满足那种场景的方法可以更为简单。
分析下分布式服务框架的应用场景,可以得知,分布式服务框架的诞生目的主要有两个:
1、约束需要对外提供的功能,保证其以一个统一的方式来对外提供和获取;
2、分布式的部署细粒度的功能。
在确定了这两个目的后,来详细的分析下为了达到这两个目的,需要提供些什么feature。
要约束对外提供的功能,保证以统一的方式来对外提供和获取,首先需要制定的标准是功能到底以什么方式来对外提供,这里首先诞生了服务这个很好很形象的名 词,对外提供的功能其实也就是为别人提供的服务了,那么服务里到底有些什么呢,面向接口自然是首选,所以服务都以接口方式来提供,另外可能就是会有一些服 务的元信息了,如服务的名称、描述、依赖、所在机器等等;接着要完成的就是如何把各子系统对外提供的功能定义成服务呢,这里要求分布式服务框架能提供强大 的集成能力,例如子系统是采用spring来实现,那么就需要支持能把spring的bean直接定义成服务;定义服务完成了,这个时候要解决的问题就是 其他的子系统怎么知道有这些服务的存在呢,因此需要提供一个统一的服务的注册中心,同时相应的带来的问题就是各个服务应用端怎么来查找这些服务,怎么调用 这些服务,这也是分布式服务框架需要解决的,在提供了上面的这些feature后,第一个需求就可以基本实现了。
分布式的部署细粒度的功能,这个在第一个需求达成的情况下,直接就可以实现了,因为分布式服务框架对服务应用端的粒度并没有要求,可粗可细,只是分布式的 部署细粒度的功能其实潜在的带来了另外的需求,那就是怎么样把这些细粒度的服务直接组装来满足业务的需求,这也是分布式服务框架应该提供的功能;同时,还 要注意的一点是,当变成细粒度的分布式部署的场景时,系统的稳定性和性能是会受到影响的,对于大型应用来讲这两点偏偏又是非常重要的,分布式服务框架需要 对此进行考虑。
.......................................................咖啡一杯,休息一下.......................................................
继续,上面分析完毕后产生了分布式服务框架的基本Feature,来总结看看,并同时对其进行可选的实现技术的分析:
1、服务模型
在服务模型中需要详细定义服务模型包含了哪些信息,而这些信息也就决定了服务在发布时需要提供的信息,同时也是为服务查找和调用提供的信息。
2、服务的注册中心
服务的注册中心在分布式服务框架中充当的就是服务信息的存储场所的作用,同时它还需要提供的一个重要的功能就是查找服务,这两个最重要功能最重要的就是稳定、高效以及支持Cluster。
存储服务信息上可采用数据库存储、分布式文件系统存储等,查找服务需要的就是支持高效的查找,这个要根据服务的查找方法等来建立相应的缓存和索引,这里需 要注意的是在cluster情况下的处理,选用数据库存储或分布式文件系统存储自然是不会有cluster的问题的。
另外一个需要确定的就是服务应用端怎么调用服务注册中心提供的管理接口,可采用的技术有JNDI、JMS、WebService等等N多种实现方式,可以根据具体的性能要求、实现方法、需求等来进行选择。
从扩展方面去看,服务的注册中心应该提供多种服务应用端和注册中心的交互协议的选择、扩展。
3、发布服务的方式,支持Spring、EJB3等等
支持直接的把服务应用端的功能发布为服务,发布的方式更多的是xml、annotation等方式,就是一种很不错的设计,所以要根据服务应用端采用的技 术而定,常见的如spring、EJB,这个完全根据分布式服务框架所面对的应用场景而定,如果你的服务应用端都是基于Spring的,那么就可以暂时只 提供Spring的方式了。
注册服务方面的技术基本也不用选择,因为它其实是根据服务应用端采用的技术而决定的,相当于提供一个集成的接口而已,由此接口去完成和服务中心的交互。
但这里有个关键的实现技术需要选择,就是把服务以什么方式对外提供,例如有JNDI、Webservice、JMS等等,就像Spring中的 HessianServiceExporter,这里需要的是服务框架本身支持好这些协议,至于到底要实现多少种也是根据需求来看了,而各种协议的实现可 以选用协议对应的成熟产品,如jndi有jboss jnp,也可以自己根据需求实现。
也许在spring中我们可以这么来发布service:
<hsf:service>
<ref bean="Spring Bean"/>
<metainfo:jndi server="" interface="服务接口名" name="简要名称" desc="服务功能描述"/>
<!--以jndi的方式对外提供-->
<publish:jndi server="">
<property name=""></property>
</publish:jndi>
<!--以hessianservice的方式对外提供-->
<publish:hessian server=""/>
<!--以jms的方式对外提供-->
<publish:jms server="" queue=""/>
</hsf:export>
4、查找服务和调用服务的方式,支持Spring、EJB3等等
查找服务和调用服务方面,需要做到的就是能够让服务应用端透明的使用远程的服务,所以其实也是和服务应用端采用的技术相关的。
当然,它本身需要提供以各种协议和服务中心通讯,以各种协议调用远端服务的支持,另外就是同步、异步的支持等,还需要从高效性去考虑。
对于使用者来说则比较简单,也许在Spring中我们可以这么来调用远端的service:
<bean id="loginService" class="HSFObjectFactoryBean">
<hsf:service>
<import:jndi server="" interface="">
<!--可用于过滤查找的服务-->
<property name=""></property>
</import:jndi>
</hsf:service>
</bean>
5、服务的组装
服务的组装需要提供的就是将服务中心的服务进行组装,以实现复杂的业务需求,这里面需要包括容错等等的支持,同样,高效性也是这里面的重点。
可选用的技术有采用事件框架、jbpm等。
6、稳定性和性能
通常来讲,需要用到分布式服务框架的应用在稳定性和性能方面都会有很高的要求,当然,稳定性更多的是通过避免Single Point的方式来提供,但同时软件层面也应该尽量避免无谓的错误,从技术角度上来讲可以采取fail-fast的思想来实现。
性能方面,需要根据使用时的压力情况来决定,如查找服务时太慢,需要考虑提升服务中心查找服务的效率,增加索引,使用分布式存储等等都是可采用的方式,提升性能的方面其实可采用的方案是非常多的,但每种技术几乎都是需要非常专业的人才去实现的。
上面分析的feature只是分布式服务框架的基本feature了,一个强大的分布式服务框架的话实现的东西会比这个多很多(例如提供服务管理端、监控端、IDE等),不过主要会是细节上,在具备了这些基础feature的情况下,细节就决定了高低了,:)。
分布式服务框架的引入也许会降低些性能,但应用的适当的话,则能充分发挥服务器性能,并且很大程度的降低系统Scable的成本,至于开发效率的话我不觉得是分布式服务框架需要解决的问题。
服务框架其实对于所有应用而言几乎都是需要的,而且非分布式的服务框架可选的是有很多的,但分布式服务框架可选的目前基本是没有,所以如果不是应用真的需 要,没有必要去实现分布式服务框架(就像在企业应用模式里Martin Fowler讲的一样,尽量不要分布式,:)),因为分布式服务框架对于技术层面还是有挺高的要求的,说简单点呢,就是高效的存储、查找策略+高效的通讯 策略+满足需求的服务模型+强大的集成能力构成了分布式服务框架的核心技术实现。
ps:在写完这篇blog后,发现自己在基于OSGi实现分布式服务框架(四)里面写OSGi不适合其实是个不准确的词,因为在服务的应用端其实是可以采 用OSGi的,不过以分布式服务框架而言,OSGi是没有什么适用的场景,除了服务模型可参考外,但在服务应用端而言,OSGi仍然是个很好的选择。
相关推荐
分布式框架的核心目标是实现服务的解耦、负载均衡、容错处理以及服务治理。通过阅读和研究这套源码,我们可以了解到以下几个关键知识点: 1. **服务注册与发现**:在分布式系统中,服务提供者需要将自己的信息注册...
文章中提到的分布式服务框架的提出,是基于对传统中心化服务框架(如ESB)的优缺点的分析。分布式服务框架的一个关键优势是去中心化,这意味着没有单点故障,从而提高了系统的抗毁性和鲁棒性。分布式服务框架通过...
分布式服务框架是现代大型软件系统架构中不可或缺的一部分,它允许开发者将应用分割为多个独立的服务,每个服务运行在自己的进程中,并且这些服务通常运行在不同的物理机器上,彼此通过网络进行通信。分布式服务框架...
通过阅读并分析这些源码,你可以深入理解分布式服务框架的设计原理,学习如何处理服务间的交互、异常处理、性能优化等问题。此外,还可以结合实际业务场景,尝试修改和扩展源码,以提升自己的编程和架构设计能力。在...
数据库技术与分布式计算框架是现代数据处理领域的两大基石,本文将带领读者从基础的数据库出发,逐步深入到分布式计算框架的核心,特别适用于想要从数据存储转移到分布式计算的初学者。 首先,从数据库层面来看,...
在.NET分布式框架中,一个关键组件是Windows Communication Foundation (WCF),它是.NET Framework的一部分,用于构建服务导向架构。WCF提供了一种统一的方式创建和使用服务,支持多种通信协议(如HTTP、TCP、Named ...
在大规模分布式系统中,由于网络延迟、服务故障等因素,实现这样的事务处理非常复杂。 LCN分布式事务框架的核心是基于消息中间件实现的,通过拦截器和通知机制,将本地事务与全局事务进行解耦。它的工作原理是:当...
分布式服务框架Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,旨在提高微服务架构下的服务调用效率,提供服务发现、流量控制、容错重试等核心功能。本调研报告将深入探讨Dubbo的核心特性、设计理念以及...
分布式服务架构是现代互联网应用的核心组成部分,它允许我们将大型、复杂的应用程序拆分成多个独立的服务,每个服务都可以单独开发、部署和扩展。本篇将深入探讨如何从零开始构建一个分布式服务架构,涵盖一系列关键...
本项目通过整合Dubbo、Zookeeper和SpringMVC,构建了一个完整的分布式服务治理框架,以实现高效的服务注册、发现、管理和监控。 首先,我们要理解Dubbo的核心功能。Dubbo提供了服务提供者(Provider)和服务消费者...
源码分析可以加深对理论知识的理解,同时锻炼实际编程技能,这对于提升你在分布式服务架构领域的专业素养至关重要。 总之,"从零开始写分布式服务架构"是一次全面探索分布式系统设计与实现的旅程,涵盖了从基础概念...
本文将深入探讨如何在Spring Cloud环境中整合分布式事务框架TX-LCN,以实现高效、一致的数据操作。 TX-LCN(Transaction for LCN)是一个轻量级的分布式事务解决方案,它为Java开发者提供了一种简单易用的方式来...
本文将重点介绍大数据机器学习的概念以及一种名为Spark的分布式计算框架,该框架已经成为大数据机器学习领域的重要技术。 大数据机器学习不仅仅是单纯的机器学习问题,也不是简单的大数据处理问题,而是需要同时...
分布式存储框架在统计分析中的应用是现代互联网技术发展的一个重要分支,它针对互联网应用中直接由用户生成的大量数据提供了有效的存储解决方案。这种解决方案在兰州电信分公司等企业的实际应用中,显示出了极高的...
《FourInOne四合一分布式计算框架详解》 FourInOne是一个高效的分布式计算框架,它集成了数据并行处理、任务调度、分布式存储和网络通信等功能,为开发者提供了一站式的解决方案,尤其适用于大规模数据处理和分布式...
分布式服务访问框架是一种用于构建大型、可扩展的网络应用程序的技术,它允许系统中的各个组件相互通信,即使这些组件分布在不同的计算机上。本教程将逐步介绍如何实现一个分布式服务访问框架,以提升系统的可伸缩性...
【分布式服务框架 Zookeeper — 管理分布式环境中的数据】 Zookeeper 是一个高度可靠的分布式服务框架,由 Apache Hadoop 项目开发,旨在解决大型分布式系统中的数据管理问题。它的核心功能包括配置管理、命名服务...
《Dubbo分布式服务框架开发者学习文档》是一份深入解析Dubbo技术体系的重要资料,它涵盖了Dubbo的核心功能和实现机制,对于理解并掌握这个流行的Java分布式服务框架具有极高的价值。Dubbo,作为阿里巴巴开源的一款高...
在分布式项目框架中,Dubbo可以作为服务提供者和服务消费者之间的桥梁,实现服务的透明化调用和管理。 Paoding Rose则是另一个关键的组件,它是一款面向Java Web的轻量级开发框架,尤其在分布式部署和负载均衡方面...
《星尘:轻量级分布式服务框架解析》 在当今的互联网时代,分布式服务框架已经成为企业级应用系统架构的重要组成部分。星尘(Stardust)就是这样一个轻量级的分布式服务框架,它提供了全面的解决方案,包括配置中心...