以前,我们部署一个项目,要把它打成war包或者jar包,放到Tomcat这样的容器里运行,每当需要改动源代码的时候,需要重新打包部署,对于小项目而言,这样的做法尚且可以,如果是企业型的项目,这样的做法简直是灾难,所以微服务的概念应运而生。
举个例子,在淘宝购物,首页会根据我们的喜好推荐一系列商品,这就是一个服务,将商品加入购物车,又是另一种服务,搜索栏搜索商品又是另一种服务,淘宝就是由若干个微服务构成的。
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的API进行通信的小型独立服务组成。这些服务由各个小型独立团队组成。微服务架构有别于更为传统的整体式方案,可将应用拆分成多个核心功能,每个功能都能被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。
微服务架构使应用程序更易于扩展和更快的开发,从而加速创新并缩短新功能的上市时间。
整体式架构和微服务架构
通过整体式架构,所有的进程紧密耦合,并可作为单向服务运行,这意味着,如果应用程序的一个进程遇到需求峰值,则必须扩展整个架构,随着代码库的增长,添加或改进整体式应用程序的功能变得更加复杂。这种复杂性限制了试验的可行性,并使实施新概念变得困难。整体式架构增加了应用程序可用性的风险,因为许多依赖且紧密耦合的进程会扩大单个进程故障的影响。
使用微服务架构,将应用程序构建为独立的组件,并将每个应用程序进程作为一项服务运行。这些服务使用轻量级API通过明确定义的接口进行通信。这些服务时围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对 各项服务进行更新,部署和扩展 ,以满足对应用程序特点功能的需求。
微服务的特性
自主性
可以对微服务架构中的每个组件服务进行开发,部署,运营和扩展,而不影响其他服务的功能。这些服务不需要与其他服务共享任何代码或实施。各个组件之间的任何通信都是通过明确定义的API进行的。
专用性
每项服务都是针对一组功能而设计的,并专注于解决特定的问题。如果开发热恩怨逐渐将更多代码加到一项服务中并且这项服务变得复杂,那么可以将其拆分成多项更小的服务。
微服务的优势
敏捷性
微服务促进若干个小型独立团队形成一个组织,这些团队负责自己的服务,各团队在小型且易于理解的环境中行事,并且可以更独立,更快速的工作。这缩短了开发周期时间。
灵活扩展
通过微服务,您可以独立扩展各项服务以满足其支持的应用程序功能的需求,这使团队能够适当调整基础设施需求,准确衡量功能成本,并在服务需求激增时保持可用性。
轻松部署
微服务支持持续集成和持续交付,可以轻松尝试新想法,并可以在无法正常运行时回滚。由于故障成本较低,因此可以大胆尝试,更轻松的更新代码,并缩短新功能的上新时间。
技术自由
微服务架构不遵循一刀切的方法。团队可以自由选择最佳工具来解决他们的具体问题。因此,构建微服务的团队可以为每次作业选择最佳工具。
可重复使用的代码
将软件划分为小型且明确定义的模块,让团队可以将功能用于多种目的。专为某项功能编写的服务可以用作另一项功能的构建块,这样应用程序就可以自行引导,因为开发人员可以创建新功能,而无需从头开始编写代码。
弹性
服务独立性增加了应用程序应对故障的弹性,在整体式架构中,如果一个组件出现故障,可能导致整个应用程序无法运行。通过微服务,应用程序可以通过降低功能而不导致整个应用程序崩溃来处理总体服务故障。