单体应用与微服务
in Projects with 0 comment

单体应用与微服务

in Projects with 0 comment

单体应用

一个归档包(比如 war 包)包含的所有功能的应用程序。在项目中我们通常将需求分为三个主要部分:数据库、服务端处理、前端展现。在业务发展初期,由于所有的业务逻辑在一个应用中,开发、测试、部署都还比较容易且方便。这种通常称为单体应用。这也就是现在称之为单体应用架构的方法论。

尽管该应用已经进行了模块化,但由于 UI 和若干业务模块最终都被打包在同一个 War 包中,改 war 包包含了整个系统所有的业务功能,这样的应用系统成为单体应用。 相信很多项目都是从单体应用开始的。单体应用比较容易部署、测试,在项目初期,单体应用可以很好地稳定运行。然而,一般项目都会随着需求而不断的变化以及增加,越来越多的人加入到项目的开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。

因此,我们可以从中看出单体应用会面临的一些问题:

微服务

下面着重介绍微服务架构:

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

微服务加否应具备以下特性:

将整个应用拆分为多个服务,各个微服务独立运行在自己的进程中,并分别有自己的数据库,微服务之间使用 REST 或者其他协议通信。

当然,在软件领域,没有万能的解决方案。同样的,微服务也存在一定的不足:

更多的服务意味着更多运维的投入。在单体应用架构中,只需要抱枕一个应用的正常运行。而在微服务当中,需要保证几十甚至几百个服务的正常运行与协作,这给运维带来了很大的挑战。

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

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