微服务学习笔记---什么是微服务

本篇为学习《Spring Cloud与Docker微服务架构实战》的笔记。

要理解什么是微服务,我们首先谈谈单体应用架构。

单体应用就是包含所有功能的应用程序,而架构单体应用程序的方法论就是单体应用架构。以一个电影系统为例,如下图:


单体应用架构的项目一般比较简单,业务相对没那么复杂。在部署、测试、运维上都比较容易。但一旦项目随着需求增加变得越来越大,业务越来越复杂后,单体应用的劣势就慢慢显露出来了。单体应用会变得越来越臃肿,可维护性,灵活性逐渐降低,维护成本也会越来越高。单体应用的问题主要有以下:

1、复杂性高:一个应用内包含的模块随着需求增加变得非常多,之间相互依赖,常常处理一个bug可能会引起另一个bug出现

2、技术债务:随着时间的推移,需求变更与人员的更迭,会逐渐形成技术债务,并越积越多。已经使用的系统设计与代码难以被修改,因为这个应用程序中可能有其它模块在使用它。

3、部署效率:当单体应用的代码越来越多,我们每一次修改都需要重新部署,这可能需要相当长的一段时间。

4、可靠性差:某个应用中的bug,可能会导致整个应用崩溃

5、扩展性受限:单体应用是一个整体,在需要扩展时也只能作为一个整体进行扩展,无法根据业务模块按不同的需求进行伸缩。比如我们有些业务模块对IO要求较高,有些业务模块对CPU性能要求较高,但单体应用作为一个整体,我们只能在硬件的选择上对一个整体进行评估。

6、阻碍技术创新:单体应用往往使用统一的技术平台或方案,团队成员也基本使用相同的开发语言和框架。要想引入新的技术平台和框架会非常困难。

综上,随着业务需求的发展,功能的增加,单体应用架构很难满足目前互联网时代业务快速变化的需要。


一、微服务概述

引用Martin Fowler对微服务的描述:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每人都在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

以后我们可以归纳一下:

1、每个微服务都独立运行在自己的线程中

2、一系列相互独立的微服务构成了整个系统

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

4、微服务之间使用轻量级通信机制,例如RESTFUL API进行调用

5、可能使用不同的开发语言与数据存储技术

6、全自动的部署机制

我们还是以电影系统为例,把它改成一个简单的微服务的架构


我们可以理解为把之前的单体应用各模块独立出来成子系统,各子系统之间使用轻量级通信机制进行通信。当然各子系统之间不仅业务独立,运行环境中也是独立的。

二、微服务面临的挑战

微服务的这种架构解决了单体应用的劣势。当然,微服务架构也不是完美的,同样面临着一些挑战。

1、运维要求高:更多的服务则意味着需要更多的运维的投入,相对于单体应用架构,微服务架构往往需要保证几十个甚至几百个服务能够正常运行与协作。

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

3、接口调整成本:微服务之前使用接口进行通信。如果修改某一个微服务的api,可能所有使用了该接口的微服务都需要做调整。

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


三、微服务的设计原则

微服务架构也有一定的设计原则,这些原则可以指导我们更加合理的架构微服务。

1、单一职责原则

    单一职责原则是指一个单元只应关注整个系统功能中单独,有界限的一部分。单一职责原则可以帮助我们更优雅的开发,更敏捷地交付。

2、服务自治原则

    服务自治是指每个微服务应具备独立的业务能力,依赖与运行环境。在微服务架构中,服务是独立的单元,应该与其他服务高度解耦。每个微服务从开发,测试,构建,部署,都应当独立运行,而不应该依赖其他的服务

3、轻量级通信机制

    微服务之间应用通过轻量级通信机制进行交互,微服务架构中,常用的通信协议有:REST,AMQP,STOMP,MQTT等。

4、微服务粒度

    微服务粒度是难点。应当使用合理的粒度划分微服务,而不是一味的把服务做小。代码量的多少不能作为微服务划分的的依据,因为不同的微服务本身的业务复杂性不同,代码量不同。


四、微服务技术选型

微服务的开发框架可使用Spring Cloud,它为微服务架构提供了完整的解决方案。

微服务的运行平台没有限定,可以将微服务部署在PC Server,或者阿里云,AWS等云计算平台者是可以的。目前这本书是在Docker上部署微服务。

其实微服务的架构并不是上图中的那么简单,真正的微服务架构还需要有服务网关,服务注册,配置服务器等组件的支持,以保证其高可用性,容错与灵活性。如下图:



这是看完《Spring Cloud与Docker微服务架构实战》第一章的学习笔记,许多内容直接提取书中的描述,希望对大家的理解有帮助。




猜你喜欢

转载自blog.csdn.net/ftdd_hw/article/details/80655589