您的位置:主页 > 新闻中心 > 行业资讯 >

架构师的故事:设计微服务架构

行业资讯 / 2022-07-10 00:15

本文摘要:架构师在软件项目中的作用是提供待解决问题的事情模型。架构师的事情是提供脚手架,开发人员将凭据这些脚手架构建他们的代码,使应用法式所有部件都组合在一起。在构建微服务架构时,项目的架构师主要关注以下3个关键任务:(1)剖析业务问题;(2)建设服务粒度;(3)界说服务接口。2.1.1 剖析业务问题面临庞大性,大多数人试图将他们正在处置惩罚的问题剖析成可治理的块。 因为这样他们就不必努力把问题的所有细节都思量进来。他们将问题抽象地剖析成几个关键部门,然后寻找这些部门之间存在的关系。

牛宝体育app下载

架构师在软件项目中的作用是提供待解决问题的事情模型。架构师的事情是提供脚手架,开发人员将凭据这些脚手架构建他们的代码,使应用法式所有部件都组合在一起。在构建微服务架构时,项目的架构师主要关注以下3个关键任务:(1)剖析业务问题;(2)建设服务粒度;(3)界说服务接口。2.1.1 剖析业务问题面临庞大性,大多数人试图将他们正在处置惩罚的问题剖析成可治理的块。

因为这样他们就不必努力把问题的所有细节都思量进来。他们将问题抽象地剖析成几个关键部门,然后寻找这些部门之间存在的关系。在微服务架构中,架构师将业务问题剖析成代表离散运动领域的块。

这些块封装了与业务域特定部门相关联的业务规则和数据逻辑。虽然我们希望微服务封装执行单个事务的所有业务规则,但这并不总是行得通。我们经常会遇到需要跨业务领域差别部门的一组微服务来完成整个事务的情况。

架构师通过检察数据域中那些不适合放到一起的地方来划分一组微服务的服务界限。例如,架构师可能会看到代码执行的业务流程,并意识到它们同时需要客户和产物信息。存在两个离散的数据域时,通常就意味着需要使用多个微服务。

业务事务的两个差别部门如何交互通常成为微服务的服务接口。分散业务领域是一门艺术,而不是非黑即白的科学。读者可以使用以下指导目标将业务问题识别和剖析为备选的微服务。

(1)形貌业务问题,并聆听用来形貌问题的名词。在形貌问题时,重复使用的同一名词通常意味着它们是焦点业务领域而且适合建立微服务。

第1章中EagleEye域的目的名词可能会是条约、许可证和资产。(2)注意动词。动词突出了行动,通常代表问题域的自然轮廓。

如果发现自己说出“事务X需要从事物A和事物B获取数据”这样的话,通常讲明多个服务正在起作用。如果把注意动词的方法应用到EagleEye上,那么就可能会查找像“来自桌面服务的Mike安装新PC时,他会查找软件X可用的许可证数量,如果有许可证,就安装软件。然后他更新了跟踪电子表格中使用的许可证的数量”这样的陈述句。

这里的关键动词是查找和更新。(3)寻找数据内聚。

将业务问题剖析成离散的部门时,要寻找相互高度相关的数据。如果在会话历程中,突然读取或更新与迄今为止所讨论的内容完全差别的数据,那么就可能还存在其他候选服务。微服务应完全拥有自己的数据。

让我们将这些指导目标应用到现实世界的问题中。第1章先容了一种名为EagleEye的现有软件产物,该软件产物用于治理软件资产,如软件许可证和宁静套接字层(SSL)证书。这些软件资产被部署到组织中的种种服务器上。EagleEye是一个传统的单体Web应用法式,部署在位于客户数据中心内的J2EE应用法式服务器。

我们的目的是将现有的单体应用法式梳理成一组服务。首先,我们要采访EagleEye应用法式的所有用户,并讨论他们是如何交互和使用EagleEye的。图2-1形貌了与差别业务客户举行的对话的总结。

通过检察EagleEye的用户是如何与应用法式举行交互的,以及如何将应用法式的数据模型剖析出来,可以将EagleEye问题域剖析为以下备选微服务。图2-1 采访EagleEye用户,相识他们如何做日常事情图2-1强调了与业务用户对话时泛起的一些名词和动词。

因为这是现有的应用法式,所以可以检察应用法式并将主要名词映射到物理数据模型中的表。现有应用法式可能有数百张表,但每张表通常会映射回一组逻辑实体。图2-2展示了基于与EagleEye客户对话的简化数据模型。

基于业务对话和数据模型,备选微服务是组织、许可证、条约和资产服务。图2-2 简化的EagleEye数据模型2.1.2 建设服务粒度拥有了一个简化的数据模型,就可以开始界说在应用法式中需要哪些微服务。

凭据图2-2中的数据模型,可以看到潜在的4个微服务基于以下元素:资产;许可证;条约;组织。我们的目的是将这些主要的功效部件提取到完全独立的单元中,这些单元可以独立构建和部署。可是,从数据模型中提取服务需要的不只是将代码重新打包到单独的项目中,还涉及梳理出服务会见的实际数据库表,而且只允许每个单独的服务会见其特定域中的表。

图2-3展示了应用法式代码和数据模型如何被“分块”到各个部门。图2-3 将数据模型作为把单体应用法式剖析为微服务的基础将问题域剖析成差别的部门后,开发人员通常会发现自己不确定是否为服务划分了适当的粒度级别。一个太粗粒度或太细粒度的微服务将具有许多的特征,我们将在稍后讨论。构建微服务架构时,粒度的问题很重要,可以接纳以下思想来确定正确的解决方案。

(1)开始的时候可以让微服务涉及的规模更广泛一些,然后将其重构到更小的服务——在开始微服务旅程之初,容易泛起的一个极端情况就是将所有的事情都酿成微服务。可是将问题域剖析为小型的服务通常会导致过早的庞大性,因为微服务酿成了细粒度的数据服务。(2)重点关注服务如何相互交互——这有助于建设问题域的粗粒度接口。从粗粒度重构到细粒度是比力容易的。

牛宝体育

(3)随着对问题域的明白不停增长,服务的职责将随着时间的推移而改变——通常来说,当需要新的应用功效时,微服务就会负担起职责。最初的微服务可能会生长为多个服务,原始的微服务则充当这些新服务的编排层,卖力将应用的其他部门的功效封装起来。糟糕的微服务的“味道” 如何知道微服务的划分是否正确?如果微服务过于粗粒度,可能会看到以下现象。

服务负担过多的职责——服务中的业务逻辑的一般流程很庞大,而且似乎正在执行一组过于多样化的业务规则。该服务正在跨大量表来治理数据——微服务是它治理的数据的记载系统。如果发现自己将数据持久化存储到多个表或接触到当前数据库以外的表,那么这就是一条服务过于粗粒度的线索。

我喜欢使用这么一个指导目标——微服务应该不凌驾3~5个表。再多一点,服务就可能负担了太多的职责。

测试用例太多——随着时间的推移,服务的规模和职责会增长。如果一开始有一个只有少量测试用例的服务,到了最后该服务需要数百个单元测试用例和集成测试用例,那么就可能需要重构。如果微服务过于细粒度呢? 问题域的一部门微服务像兔子一样繁殖——如果一切都成为微服务,将服务中的业务逻辑组合起来会变得庞大和难题,因为完成一项事情所需的服务数量会快速增长。

一种常见的“坏味道”泛起在应用法式有几十个微服务,而且每个服务只与一个数据库表举行交互时。微服务相互间严重相互依赖——在问题域的某一部门中,微服务相互往返挪用以完成单个用户请求。微服务成为简朴CRUD(Create,Read,Update,Delete)服务的荟萃——微服务是业务逻辑的表达,而不是数据源的抽象层。如果微服务除了CRUD相关逻辑之外什么都不做,那么它们可能被划分得太细粒度了。

应该通过演化思维的历程来开发一个微服务架构,在这个历程中,你知道不会第一次就获得正确的设计。这就是最好从一组粗粒度的服务而不是一组细粒度的服务开始的原因。同样重要的是,不要对设计带有教条主义。

我们可能碰面临两个单独的服务之间交互过于频繁,或者服务的域之间不存在明确的界限这样的物理约束,劈面临这样的约束时,需要建立一个聚合服务来将数据毗连在一起。最后,接纳务实的做法并举行交付,而不是浪费时间试图让设计变得完美,最终导致没有工具可以展现你的努力。

2.1.3 相互交流:界说服务接口架构师需要体贴的最后一部门,是应用法式中的微服务该如何相互交流。使用微服务构建业务逻辑时,服务的接口应该是直观的,开发人员应该通过学习应用法式中的一两个服务来获得应用法式中所有服务的事情节奏。

一般来说,可使用以下指导目标思考服务接口设计。(1)拥抱REST的理念——REST对服务的处置惩罚方式是将HTTP作为服务的挪用协议并使用尺度HTTP动词(GET、PUT、POST和DELETE)。围绕这些HTTP动词对基本行为举行建模。

(2)使用URI来转达意图——用作服务端点的URI应形貌问题域中的差别资源,并为问题域内的资源的关系提供一种基本机制。(3)请求和响应使用JSON——JavaScript工具表现法(JavaScript Object Notation,JSON)是一个很是轻量级的数据序列化协议,而且比XML更容易使用。

(4)使用HTTP状态码来转达效果——HTTP协议具有富厚的尺度响应代码,以指示服务的乐成或失败。学习这些状态码,而且最重要的是在所有服务中始终如一地使用它们。所有这些指导目标都是为了完成一件事,那就是使服务接口易于明白和使用。

我们希望开发人员坐下来检察一下服务接口就能开始使用它们。如果微服务不容易使用,开发人员就会另辟门路,破坏架构的意图。本文摘自《Spring微服务实战》本书教读者如何使用Java和Spring平台构建基于微服务的应用法式。

在构建和部署第1个Spring Cloud应用法式时,读者将学习如何举行微服务设计。在本书中,经心挑选的真实案例展示了基于微服务的种种模式,这些模式用于设置、路由、扩展和部署服务。读者将相识Spring易于使用的工具,并看到其如何助力用微服务来增强和重构现有的应用法式。本书主要内容● 焦点微服务设计原则。

● 使用Spring Cloud Config治理设置。● 使用Spring、Hystrix和Ribbon实现客户端弹性。● 使用Netflix Zuul举行智能路由。

● 部署Spring Cloud应用法式。本书是为具有Java和Spring履历的开发人员编写的。


本文关键词:牛宝体育,架构,师,的,故事,设计,微,服务,架构,师,在

本文来源:牛宝体育app下载-www.cdfscar.com