ASP.NET Core应用的响应性伸缩扩展问题

Author Image
admin Tuesday, May 5, 2020 阅读数: 329

[YoYoMooc]ASP.NET Core应用的响应伸缩扩展问题

推荐视频:

ASP.NET Core应用的响应伸缩扩展问题

传统的 ASP.NET Core MVC应用程序的部署方法使其很难满足响应式伸缩扩展变化。

这使得存在两个问题较难解决:

  • 如何在短期内快速增加服务器的容量。
  • 在增加容量后的服务器满足了短期内的需求激增问题后,一旦需求高峰期过后,应用程序就不在需要增加的容量。

举个例子,在大型活动中扩展了50台服务器,活动结束后这50台服务器就不需要了。那么你就产生一个问题,如何去产能。

响应性问题

在实际工作运行中,大多数的ASP.NET Core 应用程序均部署在Internet Information Services(IIS)中,这使得在Windows Server上增加容量是一项重大决定,因为需要采购额外的硬件以及修改运行环境中对应的服务器。

其结果是ASP.NET应用程序只能努力提供恰到好处的容量来处理他们的工作量,要么遭受太多高峰时段的访问,但是容量很小(这会影响用户体验),或者高峰时段以外的容量太大(这会导致从而增加了运行应用程序的成本,并束缚了用于其他服务程序的容量。

Docker如何解决响应性问题?

容器是围绕应用程序的轻量级打包工具,只提供足够的资源给应用程序的运行。在确保与其他容器隔离的同时运行应用程序。根据应用,单个服务器可以运行许多容器,而Docker提供了集成集群,称为swarm,它可以进行大规模的容器部署,而不需要对集群或配置进行任何特殊的修改或处理。通过容器的低资源需求和swarm的结合意味着,扩展容器化的ASP.NET Core MVC应用只需添加或删除容器即可。而且由于每个容器都是隔离的,所以将服务器中闲置的容量资源分配给其他应用程序的容器,可以动态的平衡集群的工作负载。

Docker容器是虚拟机吗?

乍一看,容器看起来很像虚拟机,并且使用容器和虚拟机,即使它们以不同的方式工作。两者都可以缩放通过添加或删除实例创建应用程序,并且两者都可用于创建标准化环境用于运行应用程序。

但是,容器不是虚拟机。虚拟机提供了一个完全隔离的软件栈,包括操作系统。例如,一个单一的服务器可以用来运行混合的虚拟系统,比如说,一个服务器可以用来运行虚拟的机器,每台机器都可以是不同的操作系统,允许需要 Linux 和Windows中并排运行在不同的虚拟机上。

Docker只隔离了单个应用,而服务器上的所有容器都是在服务器的操作系统中。这意味着,所有的应用程序都在Linux服务器上的Linux容器中运行,或者在Windows服务器上的Windows容器中运行。

由于Docker容器仅隔离应用程序,因此与虚拟容器相比,它们需要的资源更少,这意味着一台服务器可以运行比虚拟机更多的容器。

这个并不意味着运行容器的服务器可以整体上处理更多的工作,但是它确实可以用更少的资源去运行和处理更多较低级别操作系统的任务,毕竟它们多数都是重复的嘛。

对比

图中显示了ASP.NET Core MVC部署在Docker和传统虚拟机的对比,但它们的关键区别在于,Docker提供了一些功能,使其能够轻松创建重复的容器,无需任何额外的配置,自动运行在一起,自动处理HTTP请求作为容器集群的一部分,让应用在工作集群中共享负载能力。

这一点,是和传统服务器部署存在云泥之别,而Docker之所以这么有用,是因为它解决了一致性和响应性的问题,以一种优雅的方式来解决,这是使用传统虚拟机难以实现的。

Docker容器是有限制的

Docker 容器并不适合每个项目。容器最适合MVC应用程序,因为它们的工作方式是无状态,这样一个客户端的一系列HTTP请求可以由在不同容器中运行的应用程序实例来处理。 但这并不意味着MVC应用程序不能有任何的状态数据,但它确实意味着需要存储状态数据,以便可以从任何容器中访问如通过使用数据库等。

1

深入浅出 ASP.NET Core 与 Docker 入门课程