微服务架构概述

1. 单体架构存在的问题

一个归档包(例如:war格式文件、EAR格式)包含所有功能的应用程序,通常我们把这类应用称之为“单体应用”。而架构单体应用的方法论,称之为单体应用架构。

以一个博客管理系统为例,主要包括:文章管理、评论管理、分类专栏、订阅专栏等模块。该应用尽管已经进行了相应的模块化。但由于UI和若干业务模块最终都被打包在一个war包中,该war包包含了整个系统所有的业务功能,这样的应用称之为“单体应用”。

相信很多应用都是从单体应用开始的,当然,单体应用也有自身的优势,例如:单体应用比较容易部署、测试。在项目的初期,单体应用能够很好的运行。然而随着需求的不断增加,越来越多的人员加入开发团队,代码库也在不断飞速膨胀。久而久之,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高,客户需求稍微有些变更,给运维发布带来的风险都很巨大。下面列举了单体应用存在的一些问题:

  • 复杂度高:以笔者经手的一个复杂单体应用为例,整个项目包含的模块非常多,复杂都一旦高了,难免模块之间的边界会越来越模糊,依赖关系错综复杂,代码质量参差不齐,混乱的搅和在一起......  每次修改代码都胆战心惊,甚至添加一个简单的功能,或者修改一个BUG都会带来隐含的缺陷。
  • 技术债务:随着时间的推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。“不坏不休”,这在软件开发过程中非常常见,在单体应用中这种现象更甚。
  • 部署频率低:随着代码增多,构建和部署的时间也会增加。而在单体应用中,每次代码的更新或者缺陷的修复都会导致整个项目的重新部署。全量部署的耗时久,影响范围大,风险高,这促使了单体项目的发布频率低。而部署频率低又导致了两次发布之间会有大量的功能变更和缺陷修复。最终致使软件整体的出错概率变高。
  • 可靠性差:某个应用模块出现Bug,例如:死循环、OOM等之类的问题,可能会导致整个应用的崩溃。
  • 扩展能力受限:单体应用只能作为一个整体进行扩展,无法根据业务模块的需要而进行伸缩。例如:应用中有的模块是计算密集型的,它需要更强劲的CPU资源;而有的模块是I/O密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件的选择上做出妥协。
  • 阻碍技术创新:单体应用往往使用统一的技术方案或平台解决所有的问题,团队中所有的成员都必须采用统一的开发语言或者框架,要想引入新技术或者新框架就非常困难。

综上所述,随着业务需求的发展,功能的不断增加,单体应用架构很难满足日新月异的互联网时代快速变化的需要。那么,如何解决单体应用架构存在的问题呢?

2. 如何解决单体架构存在的问题

单体架构应用存在诸多问题,已经不能满足互联网时代业务的需要,那么,有没有一种架构模式可以解决或者缓解以上问题呢?微服务架构就是这样一种架构模式。下面我们将探讨什么是微服务架构,以及使用微服务架构有哪些优缺点。

3. 什么样的架构是微服务架构?

微服务架构风格是一种将单一应用程序开发为一组或者多组小型服务的方法,每个服务运行在自己独立的计算机进程中,服务之间采用轻量级的HTTP/HTTPS进行互相通信。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务公用一个最小型的集中式管理,服务可用不同的语言或者框架开发,使用不同的数据存储技术。从中可以看到,微服务架构应具备以下特性:

  • 每个微服务可运行在自己独立的进程中;
  • 一系列独立运行的微服务可共同构筑起整个复杂应用系统;
  • 每个服务为独立的业务开发单元,一个微服务只关注某个特定的功能模块,例如:订单管理、用户管理等等。
  • 微服务之间通过一些轻量级的通信机制进行通信,例如:RestFul API进行互相调用;
  • 可以使用不同的语言和数据存储技术;
  • 全自动化的部署机制。

4. 微服务架构的优点与面临的挑战

相对单体应用架构而言,微服务架构有着显著的优点。但是,微服务架构并非万能的,使用微服务也给我们带来了一些挑战。我们先来分析一下使用微服务有哪些优点。

微服务架构优点如下:

  • 易于开发和维护:一个微服务只会关注特定的业务功能,所以它业务清晰、代码量较少。开发和维护单个微服务相对简单。而整个项目应用是由很多个微服务组建而成的,所以整个应用也会被维持在一个可控状态;
  • 单个微服务启动较快:单个微服务代码量较少,功能配置简单,所以启动速度较快;
  • 局部修改容易部署:单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来讲,对某个微服务进行修改,只需要重新部署这个微服务即可;
  • 技术栈不受限制:在微服务架构中,可以结合项目业务和技术团队特点,合理的选择技术栈。例如:某些微服务可以使用关系型数据库MySQL;某些微服务有图形计算的需求,可以使用图数据库Neo4j;甚至可根据需要,部分微服务采用JAVA开发,部分微服务采用Nodejs开发;
  • 按需伸缩:可根据需求,实现细粒度的扩展。例如:系统中的某个微服务遇到了瓶颈,可以结合这个微服务的特点,增加内存、升级CPU或者是增加新节点。

综上所述,单体应用架构的缺点,相反恰恰是微服务的优点。而这些优点使得微服务看起来简直非常的完美。然而,完美的东西并不存在,下面我们来探讨使用微服务架构会带来哪些挑战。

微服务架构面临的挑战如下:

  • 运维要求较高:更多的服务意味着更多的运维成本投入。在单体架构应用中,只需要保证一个应用的正常运行。而在微服务架构应用中,需要保证几十甚至几百个服务的正常运行与协作,这给运维带来了很大的挑战。
  • 分布式应用固有的复杂度:使用微服务架构构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的挑战。
  • 接口调整成本较高:微服务之间通过接口进行通信,如果修改某一个微服务的API,可能导致使用了该接口的微服务都需要做相应的调整。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值