微服务是业界最新的流行语,似乎每个人都在以这样或那样的方式谈论它。让我们理解一下什么是微服务?通过这篇教程我们将理解微服务的定义,概念以及微服务的原理。
微服务的定义如今,微服务是SOA(面向服务的架构)之后越来越流行的架构模式之一,如果您正在跟踪行业趋势,那么您会发现,现在的企业不再像几年前那样对开发大型应用程序来管理端到端业务功能感兴趣。相反,他们选择快速和敏捷的应用程序,这也使他们花费更少的钱。
微服务有助于打破大型应用程序的边界,并在系统内部构建逻辑上独立的较小系统,例如,使用Amazon AWS,你可以轻松构建云应用程序。这是微服务的一个很好的例子。
如上图所示,每个微服务有它自己的业务层以及数据库,改变其中一个微服务不会对另外的微服务有任何的影响。
总之,微服务之间使用广泛的轻量级协议进行通信,例如 HTTP 和 REST,TCP, 或者 消息协议, 例如 JMS 和 AMQP。在特定的场景,他们也可以选择更专业的协议。
微服务的原理现在我们来看一下微服务必须需要的原则。
1,单一功能职责
单一功能职责是SOLID设计模式之一,它意味着一个单元,无论是类、函数还是微服务,都应该有且只有一个职责。在任何时候,一个微服务都不应该有一个以上的职责。
2,围绕着业务功能设计
微服务应该专注于特定的业务功能,并确保它有助于完成任务。微服务绝不应限制自己采用最适合解决业务目的的适当技术栈或后端数据库存储。当我们设计单个应用程序时,这常常是一个约束,我们试图在某些领域中使用一些折衷来解决多个业务解决方案。微服务使您能够选择最适合当前问题的解决方案。
3,你建造它,你拥有它。
这种设计的另一个重要方面与开发前后的职责有关。在大型组织中,通常由一个团队开发app location,经过一些知识转移会议后,将项目移交给维护团队。在微服务中,构建服务的团队拥有它,并负责在将来维护它。这使开发人员能够接触到他们的软件的日常操作,并且他们能够更好地理解他们构建的产品在现实世界中是如何被客户使用的。
4,基础设施自动化
准备和构建微服务的基础设施是另一个非常重要的需求,服务应该是可独立部署的,并且应该捆绑所有依赖项,包括库依赖项,甚至是执行环境,如抽象物理资源(web服务器和容器或虚拟机)。
微服务和SOA之间的一个主要区别在于它们的自治级别。虽然大多数SOA实现提供了服务级抽象,但是微服务更进一步抽象了实现和执行环境。
在传统的应用程序开发中,我们构建一个WAR或EAR,然后将其部署到JEE应用程序服务器中,例如使用JBoss、WebLogic、WebSphere等等。我们可以将多个应用程序部署到同一个JEE容器中。在理想的场景中,在微服务方法中,每个微服务将构建为一个胖Jar,嵌入所有依赖项,并作为独立的Java进程运行。
5,容错设计
微服务的设计应考虑到故障情况。如果服务失败,或者宕机一段时间,该怎么办?这些都是非常重要的问题,必须在实际编码开始之前解决——以便清楚地估计服务故障将如何影响用户体验。
快速故障是另一个用于构建容错、弹性系统的概念。这种哲学提倡预期失败的系统,而不是构建永远不会失败的系统。由于服务在任何时候都可能失败,因此能够快速检测故障并在可能的情况下自动恢复服务非常重要。
微服务应用程序非常重视应用程序的实时监控,检查体系结构元素(数据库每秒接收多少请求)和业务相关指标(例如每分钟接收多少订单)。语义监视可以提供出错的早期预警系统,从而触发开发团队进行跟踪和调查。
微服务的优点微服务有许多优点相比传统的多层架构(单体庞大应用),微服务的优点如下:
1,使用微服务,架构师和开发人员可以为每个微服务选择适合于特定用途的架构和技术(通晓多种语言对应的熟悉语言的架构)。这为以更经济有效的方式设计更适合的解决方案提供了灵活性。