最近最火的词是什么?那大概就是微服务(Microservice
)了。最近也火的一踏糊涂的Docker、AppOps也都是围绕着微服务领域的。在微服务领域还有不少相关名词。这些名词有一个共同的特色那就是晦涩难懂。他们就像中国古代的道、气、八卦等词同样,一解释就懂,一问就不知,一讨论就打架。
html
本文主要来介绍几个和微服务相关的概念。这些概念的都是博主在浏览了大量资料以后总结出的我的看法,若有偏颇,请指正,共勉之。前端
首先来谈两个前端和移动端比较常见的词:组件化
和模块化
(后面我会说到为何要先介绍组件化
和模块化
)。web
首先,能够确定的是,组件化和模块化的中心思想都是分而治之
。目的都是将一个庞大的系统拆分红多个组件或者说是模块。架构
首先来看维基百科中关于组件化(Component-based software engineering)的介绍:app
Component-based software engineering (CBSE), also known as component-based development (CBD), is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system. It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems. This practice aims to bring about an equally wide-ranging degree of benefits in both the short-term and the long-term for the software itself and for organizations that sponsor such software.运维
大概意思就是:组件化就是基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分红多个独立的组件,主要目的就是减小耦合。分布式
维基百科中对模块化Modular Programming的定义以下:ide
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.模块化
With modular programming, concerns are separated such that modules perform logically discrete functions, interacting through well-defined interfaces.函数
模块化的目的在于将一个程序按照其功能作拆分,分红相互独立的模块,以便于每一个模块只包含与其功能相关的内容,模块之间经过接口调用。将一个大的系统模块化以后,每一个模块均可以被高度复用。
从上面的定义中能够看出,组件化和模块化的意思差很少,主要思想都是分而治之。只是一个把拆分以后的每一个片断叫作组件、另外一个把拆分以后的片断叫作模块。那么这两种拆分在拆分方式上是否是有什么不一样的?
关于组件化和模块化的区别,我在网上看了好多资料,也没有人能给出准确的回答。其实没有准确回答的缘由也比较明显,那就是大多数时候咱们真的不须要严格的区分这两个名字。咱们要学习的是其中的解耦和分治的思想和目的。
从另一个角度来说,若是真的要区分一下组件化和模块化的话,那么能够认为这两种分而治之的目的稍有区别:
模块化的目的是为了
重用
,模块化后能够方便重复使用和插拨到不一样的平台,不一样的业务逻辑过程当中。组件化的目的是为了
解耦
,把系统拆分红多个组件,分离组件边界和责任,便于独立升级和维护。
要谈微服务,那么必须创建在分布式的基础上,对于一个集中式系统也无需谈微服务。在个人另一篇文章微观SOA:服务设计原则及其实践方式(上篇))
微服务架构(MicroService
)是一种服务化架构风格,经过将功能分散到各个离散的服务中以实现对解决方案的解耦。微服务架构强调的第一个重点就是业务系统须要完全的组件化和服务化(这也是咱们为何要先介绍组件化和服务化的缘由)。微服务的诞生并不是偶然。它是互联网高速发展,敏捷、精益、持续交付方法论的深刻人心,虚拟化技术与DevOps文化的快速发展以及传统单块架构没法适应快速变化等多重因素的推进下所诞生的产物。
微服务的流行,Martin功不可没,先看看他是如何定义微服务的:
The microservice architectural style is an approach to developing a single application asa suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services , which may be written in different programming languages and use different data storage technologies.
总结起来大概如下四点:
Martin本身也说了,每一个人对微服务均可以有本身的理解,不过大概的标准仍是有一些的。
看了SOA和微服务,不少人会认为这不就是一回事儿么。其实SOA和微服务就是差很少的。
若是一句话来谈SOA和微服务的区别,即微服务再也不强调传统SOA架构里面比较重的ESB企业服务总线。微服务把全部的“思考”逻辑包括路由、消息解析等放在服务内部,去掉一个大一统的ESB,服务间轻通讯,是比SOA更完全的拆分。(微服务(Microservice)那点事)
关于微服务这里只是作一个简单的介绍,要想真正的了解微服务还有不少路要走,好比康威定律(我后面会专门写一篇文章介绍康威定律)、服务间通讯、服务的注册与发现、服务治理与服务编排等。。。
本文主要介绍了组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构等概念。可是,正所谓实践出真知。仍是要在平常工做中实际运用才能真正的掌握。