微服务是什么以及它带来的好处

来源:互联网 发布:wingware python ide 编辑:程序博客网 时间:2024/05/01 22:48

       软件的发展日新月异,我们都希望在软件交付和运行的过程中做到效率最高,越来越多的技术贯穿在软件开发测试上线的各个过程中给予我们最快捷的结果,但是我们发现最本质的问题是改进软件的架构使得这些技术最大化的利用。微服务的概念应运而生,给了我们更好的方法来构建我们的应用系统。本文是在读了《微服务设计》一书第一章后的总结,希望明确微服务的定义以及微服务给我们带来的好处。

    什么是微服务

    没有权威的对微服务的定义,但是大家对微服务的总结都异曲同工

1、小而专业;

在应用系统中的每一个服务都是微小的,只做一件事情体现了专业性,小到什么程度其实要因系统而异。书中给了我们一条准则:即把因相同原因而变化的东西聚合到一起。比如可以根据团队组织结构对服务进行划分,直到一个服务可以由一个小团队来支持;比如可以根据重写这个服务的时间来判断,大概两周可以重写的服务算作微服务;比如可以根据该服务涉及到的功能来判断,当单一服务完成单一功能时可以判定是微服务。我们可以提供很多“比如”,但是并没有一个非常明确的准则。同时,当服务细微,我们需要考虑到如何管理大量服务的方法。如何将一个单体应用系统拆分成微服务又涉及到领域驱动设计的专题,我们之后再讨论。

 

2、独立自治;

一个微服务是一个独立的实体,我们可以独立进行开发、运营,不需要其他服务的依赖。服务的部署不能引起服务消费方的变动。某项服务会向其他服务暴露API,服务之间通过网络调用进行通信。服务消费方不能与API的实现技术耦合,也不能与服务实现技术本身耦合。某项服务的修改不会影响到其他的服务这是最重要的一点。

 

    微服务的好处:

1、技术异构:

单体系统中,采用新的语言,数据库或者框架都会对整个系统产生巨大影响;微服务中,不同的服务可以用不同的技术,以使得我们可以在特定的服务中选用最合适的技术,如图不同的服务可以采用不同的数据库和编程语言:

2、弹性:

弹性好指的是如果系统中某个部件不能用了,是否会对其他组件起到非常重要的影响。在单体系统中,服务不可用,所有的功能都不可用,除非增加多个实例运行在不同机器上以降低功能损失概率。在微服务系统中,正如我们前面所述,服务之间是独立的,服务是否可用并不会相互影响。

3、扩展:

单体系统的扩展必须整体进行扩展,即使可能性能问题只存在与某一小部分。但是微服务的扩展可以因服务而异,如图所示:

 

我们可以根据服务的不同做出不同的扩展。

4、简化部署:

单体应用即使更改某一行代码也要重新进行部署,风险高。为了降低这样的风险,开发者倾向于完成某个新的功能模块后在进行部署,前后部署差异大,出错可能性高。

微服务应用各个服务是独立进行部署的,也可以独立回滚,也就加快了部署的速度,降低了部署的风险。

5、与团队组织结构相匹配:

我们可以为每一个微服务团队分配某个具体的微服务任务,尤其是在项目十分庞大的时候,这样匹配的分配任务极大提升效率。

6、可组合性:

当使用服务的情况发生改变的时候,我们可以重新对微服务的调用情况进行组合,达到快速应对变化的目的。

7、对可替代性的优化:

当你希望对老旧的系统进行更新时,会发现在微服务的系统中可以轻松的对某个服务进行更新和删除。

 

 

与其他分解技术的比较:

1、共享库:

将代码库分解成多个库,不同的团队和服务可以通过库的形式共享功能。但是这么做有几点缺点:必须使用同种语言或者平台;无法独立扩展;当库更新后需要重新部署。

2、模块:

可以使用模块分解技术对模块的生命周期进行管理,使其在进程运行过程中也能够做修改。但在同一进程内模块与模块之间的隔离会出现各种问题。

 

微服务并不是杀手锏,而要根据项目自身的情况选择微服务,并要做好有关分布式系统的更多的复杂性。

原创粉丝点击