微服务是什么?

什么是微服务

关于这种新框架的定义,有下面的描述:

它是一种特殊方法设计的一种有多种,粒度较小的,可以独立发布的服务(service)组成的应用。这种应用开发有很多优点。

最初这个概念由James Lewis,MartinFowler提出的。

微服务架构是一种通过一套小的服务组成一个单一的应用。这些服务都独立运行和控制对外交互,他们往往表现为一个HTTP的API接口。这些服务往往能完成某种独立的业务。这些最小单位的服务,可以通过不同语言的程序,不同数据存储技术来实现。

一直以来成功的一体化架构

在说明微服务之前先说一下一体化架构(Monolithic Architecture).

一体化架构属于包括全机能的独立应用系统。下面的图,就是一般的一体化架构的表现。

这样的系统,一般是通过各种包,架构活用,把业务进行组件化,功能化分解,即使这样,实施的时候互相还是互相紧密结合,在单一的进程中运行。

这种架构曾经是一种很成熟,很成功的。但是越来越多的开发维护人员为这种日益庞大的系统感到一种挫败感。特别是当越来越多的应用往云上移植重构的时候。再就是,这种架构下,一旦发生变更,哪怕很细小的变更,都要整个系统重构,整体重新编译和发布。

下面列举一下一体化架构的特点:

l应用整体在单一的Process下运行

l度量一个应用的时候,往往把应用整体的实例作为对象。(当然可以分解,只是整体一个应用规模比较大)

l应用的某个点发生修改的时候,需要全部重新编译和再次发布。

l组件或者某个功能之间的通信通过方法,函数的直接调用。

当今随着云服务的成熟运用,应用程序部署到云上已经作为一种普遍手段,需要更敏捷的对应变更,发布变的频繁。如果依然像以前那样,细微变更也要全部重新编译,再次发布,这不是大家希望看到的。

基于微服务的架构

微服务的构成,请参考下面的图例。

微服务,应用由很多规模比较小的Service组成(上面图中的小圆圈,或者小图例)。这些服务有下面的一些特征。

lService通过实装小规模的机能,并且运行于独立的Process.

l度量的时候,仅仅必要的Service作为对象。

l应用某些机能需要变更的时候,仅仅需要把对应的Service进行个别重新编译和发布。

l和其他的Service的通信通过HTTP的API(Service之间松耦合化)

lService的实现,适合对应机能的语言实装就可以,不局限于一种开发语言。

lService具有自己的数据管理机能,也是使用适合对应自己机能的数据库,可以根据机能特点选择关系型数据库(Oracle,MySql,SqlServer等)也可以选择非关系型数据库(NoSql,Cassandra,Cloudant等)。

也就是,应用通过Service组件化的过程。但是他的独立性更高,能支持多语言,多数据库,

变更发生时,影响范围更小,这就是针对一体化架构的最大的优点。

还有很重要的一点,技术人员的构成。往往一体化的应用开发,着眼于技术层,分UI组,逻辑组,数据处理组等的构成很多。

但是,作为微服务,应用的业务机能如何实现基于单独的Service。并且,各个服务包含UI要素,逻辑要素,数据处理要素,对于其他Service公开的API。这样,不同的Service可以通过各种各样的技术团队来实现,比如Java,.NET,SFDC等等。这样,一个大的应用可能由各种技术的组组成。

微服务的共同特征

l基于Service的组件化

l基于业务如何实现的组织

l不是Project,而是Product

l灵活的终端,通过Message通讯的管道

l分散式管理

l分散式数据管理

l为故障做好准备的设计

l演进式设计

关于不是Project而是Product补充一下,以前开发人员可能就关注自己的一个片段代码完成,然后集成时才会发现很多问题。在微服务的架构下,他必须关注整个技能的生命周期。也就是你开发这个Service,你运行这个Service。

关于“灵活的终端,通过Message通讯的管道”,原文是“smart endpoint, dumb pipe”(也有说哑管道),就是说Service之间的通讯通过HTTP接口,后面的处理都交给Service完成。

演进式设计,就应该指其粒度小,更适合频繁变更,对应于变更更敏捷。

面向微服务以及面向服务

面向服务(SOA)架构,他们的概念很接近,都是松耦合。把微服务说成粒度小的服务的说法也有。

提倡微服务的James Lewis,MartinFowler,他们观点是,SOA更多的场合是,利用EBS把一体化架构进行统合,从这点上来说,和微服务不同。SOA的组成过于庞大。

相对来说,微服务仅仅是提供基于HTTP的API的轻量的Service,这样,即使Monolithic应用也可以和微服务通信。

今后,微服务的架构,更敏捷,更易于适应变革,作为一种新的发展方向,值得我们关注。

--------------------------------------

欢迎关注本公众号,我们会持续推出关于微服务的文章。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G14C4N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券