(1)
服务单元按业务划分:根据MartinFowler的定义,可以按照业务功能划分微服务。一个大的业务可以分为几个小业务,一个小业务可以再细分成更小的业务。把划分好的微服务单独部署在服务器上并独立运行,从而减少了服务之间的耦合,提高了可扩展性和重用性。
(2)
服务间通过HTTP协议相互通信:按业务细分的微服务可以单独地部署,并独立运行。微服务间注重于通过HTTP协议彼此通信,大多数使用RESTfulAPI。这种通信模式与开发平台和编程语言没有关系,它可以通过不同的编程技术实现通信。
(3)
微服务的数据库独立:在单体架构中,所有业务都需要共享数据库,随着业务的增长,数据库中的表越来越多,会变得难以管理与维护。在微服务体系结构中,服务单元可以按业务划分,再无耦合关系,每个微服务可以建立自己的数据库。数据库的独立使得单业务的数据量变少,更易于维护,数据库性能会有明显优势,也方便于数据库迁移
(4)
自动化部署:在微服务体系结构中,应用系统被细分为若干个微服务,每一个微服务都有自己单独的应用程序,并需要依次部署这些微服务。随着业务划分更加细化,微服务数目的增加,部署的难度会大大提高。Docker容器技术的出现实现了自动化部署,提高了部署效率,减少了人员控制,降低了出错概率,并增强了软件的质量。
(5)
服务集中化管理:根据业务单元划分的微服务数量越多,管理起来就越复杂,因此微服务需要集中管理。目前主流的微服务框架,如SpringCloud,支持使用Eureka实现服务的注册和发现[3]。
(6)
去中心化:微服务架构下每个服务都是相对独立的单元,每个服务的构建可以有多种选择,可以根据服务内容,服务对象,以及软硬件的不同,为每个服务确定最适合的开发方案。同时,微服务架构推荐数据的分散管理。同时每个服务都拥有独立的数据层,可以使用不同的数据库技术,进一步降低了耦合度。
(7) 兼容性。微服务架构是一类标准,可以支持不同的开发语言。除了Java以外,Python、C#等各类语言机制都支持微服务架构。
(8)
易于开发和维护。每个微服务都具有独立性以及专用性,因此对每个微服务的开发以及维护工作较为简单。对于微服务的业务处理逻辑可以清晰定义,并且涉及到的代码量也相对较少
(9) 运行效率高。由于单个微服务的体积较小,因此其运行效率相对较快,并且对资源的依赖较少。
(10)
扩展性好。由于系统由不同微服务构成,因此当系统需要增加额外的功能时,仅需要增加新的微服务并且增加到系统中就可以完成系统功能的扩展,具有较强的扩展能力。