热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

十四、答案

十四、答案第一章什么是微服务?

十四、答案
第一章

什么是微服务?

微服务架构是一堆服务,其中每个服务都是独立部署的,并且应该实现单个业务功能。

可以定义 Azure 服务架构吗?

Azure Service Fabric 是一个帮助我们轻松打包、部署和管理可扩展且可靠的微服务的平台(容器也类似于 Docker 等等)。有时,由于复杂的基础设施问题等,很难专注于您作为开发人员的主要职责。在 Azure 服务结构的帮助下,开发人员无需担心基础设施问题。它提供了各种技术,并作为一个捆绑包提供,具有 Azure SQL 数据库、Cosmos DB、微软 Power BI、Azure 事件中心、Azure 物联网中心和许多其他核心服务的功能。

什么是数据库分片?

通常,数据库分片被简单地定义为大型数据库的无共享分区方案。这样,我们可以实现更高水平的高性能和可扩展性。分片这个词来自术语分片和传播,这意味着将数据库划分成块(分片),并将其传播到不同的服务器。

什么是 TDD,开发者为什么要采用这个?

使用 TDD,开发人员在编码之前编写测试,以便他们可以测试自己的代码。测试是另一段代码,可以验证功能是否按预期工作。如果发现任何功能不满足测试代码,则相应的单元测试失败。这个功能很容易修复;正如你已经知道的,这就是问题所在。为了实现这一点,我们可以利用框架,如微软测试或单元测试。

能详细说说依赖注入(DI)吗?

依赖注入 ( DI )是一种设计模式,它提供了一种技术,让你可以让一个类独立于它的依赖。这可以通过将对象从其创建中分离出来来实现。

第二章

重构单块应用时,我们应该考虑哪些因素?

就微服务而言,重构单个应用起着重要的作用。这不仅仅是像重构代码这样的事情,而是把它看作一个整体系统。这种重构进一步帮助将单块应用转变为微服务。在为 microservces 架构重构或准备我们的整体应用时,可能需要考虑许多因素。以下是重构单块时我们应该牢记的重要因素(这些因素基于我们想象中的应用和本章中的讨论):


  • 技术考虑:应该考虑分离特性、技术堆栈、团队和团队技能等因素。这些帮助我们做出关于重构组件的决定。

  • 商业考虑:如果我们决定重构整体,上市计划的考虑是最重要的因素。

c# 8.0 的默认接口方法有哪些?

默认接口方法是实现接口成员的接口中的方法。为了更好地理解这个特性,请看下面的代码:

public interface IProduct
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string ProductDesc() => $"Book:{Name} has Price:{Price}";
}

让我们将IProduct接口实现到我们的Product类。考虑以下代码:

public class Product : IProduct
{
public Product(int id, string name, decimal price)
{
Id = id;
Name = name;
Price = price;
}
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}

ProductDesc是我们界面的默认方法,总是会产生一个结果。在我们的例子中,它将返回一个字符串作为这个方法的结果。此外,该方法可用于所有实现IProduct接口的类。以类似的方式,我们在我们的Product类中实现了IProduct接口。

我们为什么要用斯瓦格?

斯瓦格基于开放应用编程接口规范(以前的斯瓦格规范)提供关于应用编程接口的文档。swag 还提供了测试 API 的工具。我们使用斯瓦格,以便向最终用户提供适当的文档。

第三章

什么是同步和异步通信?

同步通信是指客户端向远程服务(称为服务)请求特定功能,并等待直到得到响应。异步通信是客户端向远程服务(称为服务)请求特定的功能,而不等待,尽管它确实关心响应。

什么是整合模式?

集成模式是两个或多个服务从一个数据存储中读写数据。

什么是事件驱动模式,为什么它对微服务如此重要?

在事件驱动的模式中,我们以这样一种方式实现服务:每当一个服务更新其数据并且另一个服务(依赖服务)订阅该事件时,它就发布一个事件。每当从属服务接收到事件时,它都会更新其数据。这样,如果需要,我们的依赖服务可以获取和更新它们的数据。上图显示了服务如何订阅和发布事件的概述。这里,事件管理器可以是运行在服务上的程序,也可以是帮助您管理订阅者和发布者的所有事件的中介。它注册发布服务器的事件,并在特定事件发生/触发时通知订阅服务器。它还可以帮助您形成队列并等待事件。

什么是 CAP 定理?

CAP 定理又称布鲁尔定理,代表一致性可用性、(网络 ) 分区容差。根据这个定理,在分布式系统中,我们只能从这三个中选择两个:


  • 一致性(丙)

  • 可用性(一)

  • 分区容差

考虑我们有一个假想的系统,它是高度可用的(A)和高度一致的(C),但没有分区(CA)。当我们需要并执行分区(P)时,我们将系统分区到 n 个分区,或者说我们正在持续地对系统进行分区。在这种情况下,这是一个非常复杂的场景,数据可能无法到达/覆盖所有分区。这就是为什么我们要么使系统高度可用(AP),要么使系统高度一致(CP)。

第四章

写一篇关于单元测试的短文。

单元测试通常测试单个函数调用,以确保测试程序的最小部分。这些测试旨在验证特定功能,而不考虑其他组件。单元测试可以是任何规模的;单元测试没有明确的规模。一般来说,这些测试是在类级别编写的。

开发人员为什么要坚持测试驱动开发?

使用 TDD,开发人员在实际代码之前编写测试,这样他们就可以测试自己的代码。这个测试是另一段代码,可以验证功能是否按预期工作。如果发现任何功能不满足测试代码,则相应的单元测试失败。这个功能很容易修复,因为你知道这就是问题所在。为了实现这一点,我们可以利用框架,如微软测试或单元测试。

什么是存根和模拟对象?

存根对象不依赖于输入,这意味着响应或结果不会由于正确或不正确的输入而受到妨碍。最初,我们创建存根作为对象。模拟对象不是真实的,可能永远是假的。通过使用模拟对象,您可以测试可以调用的方法,并告诉我们单元测试是失败了还是通过了。换句话说,我们可以说模拟对象只是我们实际对象的复制品。

什么是测试金字塔?

测试金字塔是一种策略或方法,用来定义应该在微服务中测试什么。换句话说,我们可以说它帮助我们定义了微服务的测试范围。测试金字塔的概念是由 Mike Cohn 在 2009 年创建的。测试金字塔有多种口味;不同的作者描述了这一点,指出了他们是如何放置测试范围或确定测试范围的优先级的。

什么是消费者测试?

合同测试是一种方法,其中每个服务调用都独立地验证响应。如果有任何服务是依赖的,那么依赖关系就会被存根化。这样,服务在不与任何其他服务交互的情况下运行。消费者驱动的契约指的是一种模式,它指定并验证客户端/消费者和 API 所有者(应用)之间的所有交互。这里,消费者驱动意味着客户端/消费者以定义的格式指定它所要求的交互类型。另一方面,应用接口所有者(应用服务)必须同意这些合同,并确保它们不会违反这些合同。

如何在基于微服务的应用中使用消费者测试?

在微服务的情况下,实现消费者驱动的测试比. NET 单片应用更具挑战性。这是因为,在单片应用中,我们可以直接使用任何单元测试框架,比如 MS tests 或者 NUnit,但是我们不能在微服务架构中直接这样做。在微服务中,我们不仅需要模拟方法调用,还需要模拟服务本身,它们通过 HTTP 或 HTTPs 被调用。为了实现消费者驱动的测试,我们需要使用各种工具。一个著名的开源工具.NET 框架是 PactNet 另一个。网芯被称为 Pact.Net 芯。这些都是基于 Pact(https://docs.pact.io/)标准。

第五章

什么是 Docker 形象,为什么这么重要?

Docker 映像是一种模板,包含创建 Docker 容器的指令。只能看说明书;您不能向该模板添加自己的说明,因为这是一个只读模板。它由一个单独的文件系统、相关的库等组成。在这里,图像始终是只读的,并且可以运行完全相同的抽象、底层、主机差异。Docker 图像可以由一层叠加在另一层上组成。Docker 图像的这种可组合性可以比作分层蛋糕的类比。跨不同容器使用的 Docker 映像可以重用。这也有助于减少使用相同基础映像的应用的部署占用空间。

什么是 Docker 存储库?

Windows 注册表是一个数据库,用于存储 Microsoft Windows 操作系统内部或低级设置的信息。

什么是 Docker 容器?

当前正在运行的 Docker 映像的实例称为 Docker 容器。

什么是坞站枢纽?

这是一个公共注册表,用于存储图像。位于http://hub.docker.com。

在 Docker 文件中可以用 JSON 代替 YAML 吗?如果是,如何做到?

是的,我们可以使用 JSON 文件来代替 YAML 文件。请注意,YAML 是 JSON 的超集。这样,当我们使用一个 JSON 文件时,它隐式地是一个有效的 YAML 文件。我们需要指定文件名来使用 JSON 文件;例如docker-compose -f jsoncomposefile.json up
这里,我们使用up告诉系统,我们可以启动或重启jsoncomposefile.json文件中定义的所有服务。

就集装箱解释这些词:FROMCOPYWORKDIREXPOSEENTRYPOINT

为了理解这些术语,让我们考虑下面的代码片段:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-nanoserver-1903
AS base WORKDIR /app
EXPOSE 80 EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "FlixOne.BookStore.ProductService.dll"]

FROM是某种消息,告诉 Docker 在现有图像上拉基础图像并调用microsoft/aspnetcore:3.0COPYWORKDIR将内容复制到被调用/app 容器内的新目录中,并将其设置到工作目录中以获得后续说明。要在容器的端口 80 上公开我们的产品服务,我们可以使用EXPOSEENTRYPOINT,它们指定了容器启动时要执行的命令。举个例子,我们有ProductService,我们的切入点是["dotnet", "FlixOne.BookStore.ProductService.dll"]

借助我们的Product Services,编写一个简单的 ASP.NET Core 网络应用,以表格形式显示AddDeleteUpdate产品。

参考我们想象中的 FlixOne 书店应用的代码示例。

第六章

什么是软件安全?

安全性是 web 应用最重要的交叉问题之一。不幸的是,如今知名网站的数据泄露似乎司空见惯。考虑到这一点,信息和应用安全对于 web 应用来说变得至关重要。出于同样的原因,安全应用不应再是事后的想法。安全是组织中每个人的责任。如果我们要定义安全性,那么我们可以说这是一种实现代码的方法,这样我们就可以保护我们的软件免受恶意攻击和黑客风险,从而我们可以提供一个具有不间断功能的安全应用。

单片应用的安全挑战是什么?

有关更多信息,请参考单片应用中的安全性部分。

创建一个演示应用,并详细说明 OAuth。

请参考我们在本章的使用 OAuth 2.0 一节中讨论的示例应用。

什么是授权服务器,它是如何工作的?

授权服务器验证凭证,并使用授权代码将用户重定向回客户端。

什么是 Azure API 管理,为什么微服务需要 API 网关?

Azure API 管理(【APIM】)服务具有易于使用的用户界面和良好的文档。Azure 应用编程接口管理还附带了一个 REST 应用编程接口,因此 Azure APIM 门户的所有功能都可以使用 Azure APIM 可用的 Azure REST 应用编程接口端点以编程方式实现。

第七章

什么是监控?

监控提供有关整个系统或系统不同部分在其运行环境中的行为的信息。这些信息可用于诊断和深入了解系统的不同特征。

监测的必要性是什么?

微服务是复杂的分布式系统。微服务实施是任何现代信息技术业务的支柱。了解服务的内部及其交互和行为将有助于您使整体业务更加灵活和敏捷。微服务的性能、可用性、规模和安全性会直接影响企业及其收入。因此,监控微服务至关重要。它帮助我们观察和管理服务属性的质量。

什么是健康监测?

通过健康监测,我们以一定的频率(通常为几秒钟)监测系统及其各种组件的健康状况。这确保了系统及其组件按预期运行。借助详尽的运行状况监控系统,我们可以监视整个系统的运行状况,包括中央处理器、内存利用率等。它可能以 pings 或广泛的健康监控端点的形式出现,这些端点会发出服务的健康状态以及一些有用的元数据。

监控面临哪些挑战?

微服务监控提出了不同的挑战。会有这样的场景:一个服务可能依赖于另一个服务,或者客户端向一个服务发送请求,而响应来自另一个服务,这会使操作变得复杂;因此,扩展微服务在这里将是一项具有挑战性的任务。同样,流程实现——比如说 DevOps——在实现一个巨大的企业微服务应用时将是一项具有挑战性的工作。

微软 Azure 主要的日志和监控解决方案有哪些?

谈到微服务带来的监控挑战,Azure 或任何云提供商都没有现成的解决方案或产品。微软 Azure 诊断、应用洞察和日志分析是 Azure 提供的日志记录和监控解决方案。

第八章

什么是缓存,缓存在微服务应用中的重要性是什么?

缓存是增加应用吞吐量的最简单方法。原理很简单。一旦从数据存储器中读取了数据,它就尽可能地靠近处理服务器。在未来的请求中,数据直接从数据存储或缓存中提供。缓存的本质是最小化服务器必须做的工作量。HTTP 在协议本身中嵌入了内置的缓存机制。这就是它伸缩性如此之好的原因。

什么是服务发现,它如何在微服务应用中发挥重要作用?

更多信息请参考服务发现部分。

通过实现一个小程序来定义 Azure Redis 缓存。

Azure Redis 让您可以访问安全、专用的 Redis 缓存,该缓存由微软管理,可从 Azure 中的任何应用访问。所需的实现步骤请参考 Azure Redis Cache 部分。

什么是断路器?

断路器是电子设备中的一种安全功能,在发生短路时,它可以切断电流并保护设备,或者防止对周围环境造成任何进一步的损害。这个确切的想法可以应用于软件设计。当从属服务不可用或不处于健康状态时,断路器会阻止呼叫转到该从属服务,并在配置的时间段内将流量重定向到备用路径。

第九章

什么是反应式微服务?

一个软件必须具备某些基本属性才能被认为是反应性的。这些属性是响应性、弹性、自主性,最重要的是,是消息驱动的。

什么是消息级安全?

如果您希望保护单个请求消息的安全,消息级安全是最基本的方法。执行初始身份验证后,根据实现方式,请求消息本身可能包含 OAuth 承载令牌或 JWTs。这样,每一个请求都得到验证,并且与用户相关的信息可以嵌入到这些令牌中。该信息可以像用户名以及指示令牌有效性的到期时间戳一样简单。毕竟,我们不希望令牌的使用超过特定的时间范围。

什么是自动测试?

AutoRest 是一个帮助我们生成客户端库的工具,这样我们就可以访问 RESTful web 服务。自动测试从开放应用编程接口规范中获取应用编程接口定义。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
author-avatar
门板班不查询只
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有