微服务相关

组件化与模块化

组件化和模块化的中心思想都是分而治之。目的都是将一个庞大的系统拆分成多个组件或者说是模块。

组块化:组件化就是基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件,主要目的就是减少耦合。一个独立的组件可以是一个软件包、web服务、web资源或者是封装了一些函数的模块。这样,独立出来的组件可以单独维护和升级而不会影响到其他的组件。

模块化:模块化的目的在于将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容,模块之间通过接口调用。将一个大的系统模块化之后,每个模块都可以被高度复用。

模块化和组件化的区别

从上面的定义中可以看出,组件化和模块化的意思差不多,主要思想都是分而治之。只是一个把拆分之后的每个片段叫做组件、另一个把拆分之后的片段叫做模块。那么这两种拆分在拆分方式上是不是有什么不同的?

关于组件化和模块化的区别,我在网上看了好多资料,也没有人能给出准确的回答。其实没有准确回答的原因也比较明显,那就是大多数时候我们真的不需要严格的区分这两个名字。我们要学习的是其中的解耦和分治的思想和目的。

模块化的目的是为了重用,模块化后可以方便重复使用和插拨到不同的平台,不同的业务逻辑过程中。

组件化的目的是为了解耦,把系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护。

 

集中式与分布式

集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。

分布式就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务。计算机越多,CPU、内存、存储资源等也就越多,能够处理的并发访问量也就越大。

 

服务化

提到分布式,一个不得不提的词就是服务化,服务化架构使搭建分布式系统成为了可能。

服务化是一种粗粒度、松耦合的以服务为中心的架构,服务之间通过定义明确的协议和接口进行通信。

 

面向服务的架构(Service-Oriented Architecture,SOA)

SOA:Service Oriented Architecture面向服务的架构。也就是把工程拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。

 

 

面向对象和面向服务的对比

面向对象(OO)和面向服务(SO)在基础理念上有大量共通之处,比如都尽可能追求抽象、封装和低耦合。

但SO相对于OO,又有非常不同的典型应用场景,比如:

  • 多数OO接口(interface)都只被有限的人使用(比如团队和部门内),而SO接口(或者叫契约)一般来说都不应该对使用者的范围作出太多的限定和假设(可以是不同部门,不同企业,不同国家)。还记得贝佐斯原则吗?“团队必须做好规划与设计,以便未来把接口开放给全世界的程序员,没有任何例外”。
  • 多数OO接口都只在进程内被访问,而SO接口通常都是被远程调用。

 

微服务架构MicroService

微服务架构(MicroService)是一种服务化架构风格,通过将功能分散到各个离散的服务中以实现对解决方案的解耦。微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化(这也是我们为什么要先介绍组件化和服务化的原因)。微服务的诞生并非偶然。它是互联网高速发展,敏捷、精益、持续交付方法论的深入人心,虚拟化技术与DevOps(自动化运维)文化的快速发展以及传统单块架构无法适应快速变化等多重因素的推动下所诞生的产物。

总结起来大概以下四点:

  • 一些独立的服务共同组成系统
  • 单独部署,跑在自己的进程里
  • 每个服务为独立的业务开发
  • 分布式的管理

 

SOA和微服务

SOA关注的是服务重用,微服务在关注服务重用的同时,也同时关注快速交付;

微服务不再强调传统SOA架构里面比较重的ESB企业服务总线,同时SOA的思想进入到单个业务系统内部实现真正的组件化。微服务把所有的“思考”逻辑包括路由、消息解析等放在服务内部,去掉一个大一统的ESB,服务间轻通信,是比SOA更彻底的拆分。(微服务(Microservice)那点事

ESB(企业服务总线)是一种组件与组件之间进行消息传递的载体。它类似于计算机中的总线,通过总线将各种硬件连接到一起。那么,因为Web Service是跨平台的,所以ESB可以将企业的所有IT系统连接到一起,然后进行消息交互。而组件之间可能会使用SOAP协议来通信(目前还有一种 REST也比较流行)。

按照这样来理解的话,ESB应该是一种技术框架,而SOAP是组件Web service的一种消息通信实现方式。这个理解基本正确,但是ESB不是技术框架,是一种消息和服务集成的中间件平台。SOAP只是一种可以接入和适配到ESB的通信协议,其它包括Rest, JMS, FTP, socket,MQ等都可以接入和适配到ESB。参考如下Jboss ESB的一个图。


可以把微服务当做去除了ESB的SOA。也即是去中心化。每个服务完全独立部署开发

ESB是SOA架构中的中心总线,设计图形应该是星形的,而微服务是去中心化的分布式软件架构。

 

参考链接:

http://www.hollischuang.com/archives/1628

https://www.zhihu.com/question/37808426/answer/93335393

猜你喜欢

转载自blog.csdn.net/qq_35642036/article/details/83019628