当前微服务架构大行其道,很多java工程师也对微服务架构的学习和使用趋之若鹜。但是对于技术人来说,比了解技术更重要的是了解技术产生的背景及核心原理。

现在看起来非常复杂和庞大的架构,一定都是随着业务产品种用户量和数据量增长而不断演进的。架构的发展可能都会经历单体架构、垂直和集群、SOA(面向服务架构)、微服务架构等。

单体架构

单体架构的整个系统非常简单,通常来说,如果一个war包或者jar包里面包含一个应用的所有功能,则我们称这种架构为单体架构。
很多传统互联网公司或者创业型公司早期基本都会采用这样的架构,因为这样的架构足够简单,能够快速开发和上线。而且对于项目初期用户量不大的情况,这样的架构足以支撑业务的正常运行。

集群和垂直化

单体架构随着企业业务和用户量的增大,可能回面临以下挑战:

SOA

SOA(Service-Oriented Architecture),也就是面向服务的架构,从语义上来说,它和面向过程、面向对象、面向组件的思想是一样的,都是一种软件的组建以及开发的方式。核心目标是把一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务,这些被提取出来的共享服务相对来说比较独立,并且可以重用。所以在SOA中,服务是最核心的抽象手段,业务被划分为一些粗粒度的业务服务和业务流程。 SOA主要解决的问题是:

微服务架构

SOA将业务拆分为可共享复用的服务,可以在最大程度上避免共享业务的重复建设、资源连接瓶颈等问题。那么被拆分出来的服务是否也需要以业务功能为维度来进行拆分和独立部署,以降低业务的耦合以及提升容错性呢?
微服务就是这样的一种解决方法,我们可以把SOA看成微服务的超集,也就是多个微服务可以组成一个SOA服务。伴随着服务粒度的细化,会导致原本10个服务可能拆分为100个微服务,服务数量大就意味着服务的构建、发布、运维的复杂度也会成倍增加,所以实施微服务的前提是软件交付链路及基础设施的成熟化。
相比于SOA微服务关注的是:

微服务的优点

微服务的挑战