微服务架构

一、单体结构

1. 什么是单体架构

一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。

2. 单体架构示例图

3. 单体架构的缺陷

(1)复杂性高。整个项目包含的模块非常多,模块的边界模糊,依赖关系不清晰,代码质量参差不齐……整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个BUG都会造成隐含的缺陷。

(2)技术债务。随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。已使用的系统设计或代码难以修改,因为应用程序的其他模块可能会以意料之外的方式使用它。

(3)部署频率低。随着代码的增加,构建和部署的时间也会增加。而在单体应用中,每次功能的变更或缺陷的修复都会导致我们需要重新部署整个应用。全量部署的方式耗时长、影响范围大、风险高,这使得单体应用项目上线部署的频率较低,从而又导致两次发布之间会有大量功能变更和缺陷修复,出错概率较高。

(4)扩展能力受限。单体应用只能作为一个整体进行扩展,无法结合业务模块的特点进行伸缩。

(5)阻碍技术创新。单体应用往往使用统一的技术平台或方案解决所有问题,团队的每个成员都必须使用相同的开发语言和架构,想要引入新的框架或技术平台非常困难。

由於单体架构的缺陷日益明显,所以越来越多的公司采用微服务架构范式解决上面提到的单体架构中的问题。

二、微服务

  1. 什么是微服务

 

2. 微服务架构示例图

3. 微服务架构的特性

(1)不同于构建单一、庞大的应用,微服务架构将应用拆分为一套小且互相关联的服务。每个微服务可独立运行在自己的进程里;

(2)系列独立运行的微服务共同构建起整个系统;

(3)每个服务为独立的业务开发,一个微服务只关注某个特定的功能,如订单管理、用户管理等;

(4)微服务之间通过一些轻量的通信机制进行通信,如REST API进行调用;

(5)可以使用不同的语言与存储技术;

(6)全自动的部署机制;

 4. 微服务架构的优势

(1)易于开发和维护。一个微服务只关注一个特定的业务功能,所以它的业务清晰、代码量较少。开发和维护单个微服务相对比较简单,整个应用是由若干个微服务构建而成,所以整个应用也会维持在可控状态;

(2)单个微服务启动较快。单个微服务代码量较少,所以启动会比较快;

(3)局部修改容易部署。单体应用只要有修改,就要重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可;

(4)技术栈不受限。在微服务中,我们可以结合项目业务及团队的特点,合理地选择技术栈;

 5. 微服务架构的挑战

(1)运维要求较高。更多的服务意味着更多的运维投入。在单体架构中只需要保证一个应用的正常运行;而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,带来了巨大的挑战;

(2)分布式固有的复杂性。使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都带来了巨大的挑战;

(3)接口调整成本高。微服务之间通过接口进行通信。如果修改某个微服务的API,可能所有使用了该接口的微服务都需要做调整;

(4)重复劳动。很多服务可能都会使用到相同的功能。而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,导致代码重复。

 

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。

三、对比

SOA  VS  微服务

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章