在VPC中隔离你的网络有很大的安全好处,包括实现私人协作和正确存储敏感信息。
在开发方面,网络隔离也使多层网络应用的部署成为可能。分层的应用程序允许你在有和没有公共互联网访问的情况下划分层。这通常用于将数据库层与公共互联网隔离,同时仍然允许从顶层而不是直接从公共互联网获取补丁和软件更新。除了减少攻击面之外,这还可以实现多区域部署。
有许多方法来运行多层,但你通常可以依靠一些基本的形式,最大限度地提高可扩展性、安全性和可靠性。最常见的设计之一是三层架构,这在基于云的环境中特别流行。
三层应用程序由三个不同的层组成,它们驻扎在不同的服务器上,可以以高度的独立性进行开发和管理。这些部分是
- 演示文稿。管理用户和应用程序之间通信的外部界面,通常由带有HTML的网络服务器和附带的网络开发代码组成。
- 应用程序。一个定制的应用程序,提供必要的业务逻辑并将应用程序粘合在一起。
- 数据。一个数据库系统,用于存储和检索与应用程序一起使用的数据。
这三层作为独立的服务,通过基于网络的API进行通信。出于安全和性能方面的考虑,应用层和数据层通常需要驻扎在同一本地网络中,并置于一个共同的防火墙之后,但每一层的分离带来了将每个组件部署到不同硬件甚至不同物理位置的可能性。这里的灵活性将极大地取决于你的应用程序的要求。
下图显示了一个基本的三层网络应用程序的真实世界。演示层的网络服务器为在浏览器窗口中工作的用户提供一个界面。在另一端,数据层以数据库的形式出现,它可以是一个单一的系统,也可以是一个作为单一实体呈现给网络的集群。数据库层的流行开源选项包括SQL的MySQL、MariaDB和PostgreSQL以及NoSQL的MongoDB和Cassandra。
![](https://www.linode.com/wp-content/uploads/2022/11/Diagram-1-1064x451.png)
在网络服务器和数据库之间是应用层,你可能会在这里花费大部分的编码时间。应用层包含了你所需要的自定义代码和业务逻辑,以使应用程序完成其目标。在前端,网络服务器向应用层发送查询。应用层将响应网络服务器,网络服务器将格式化数据并将其呈现给用户。在后端,应用层查询数据库,接收数据,然后处理数据,为用户增加智能和洞察力。
作为一个非常简单的例子,数据库可能存储一家公司的销售记录。用户输入了一个请求,希望得到某一特定时间段内某一特定产品在某一特定地点的平均日销售额。网络服务器将该请求发送到应用层。应用层制定了对数据库的查询,接收原始数据,进行必要的计算,然后将响应发回给网络服务器。
![](https://www.linode.com/wp-content/uploads/2022/11/Diagram-2-1064x417.png)
对于应用层来说,并没有一个方便的、相当于演示层的Apache Web服务器或数据层的MongoDB数据库的解决方案。相反,应用层的定制代码通常是用Python 、PHP或Ruby编写的。然而,一些编程框架可以让你更有效地编写代码,包括Django(用于Python )、Rails(用于Ruby)和Symfony(用于PHP)。
理论上,应用层可以通过向Web服务器提供直接查询数据库的必要代码而与表现层相结合,但这对于大多数复杂的业务逻辑来说是不切实际的,并且否定了分割应用程序的许多好处。
其中最重要的好处之一是通过更小的攻击面提高 安全性 。如图 1 所示,三层解决方案最大限度地减少了应用程序中必须驻留在防火墙前面的部分。Web 服务器通过安全的 API 进行通信。其余的活动位于防火墙后面,关键是位于无法从 Internet 访问的专用地址空间中。特别是 SQL 注入,是最常见的漏洞之一,也是最具破坏性的漏洞之一。可以通过隔离和保护与数据库的所有直接通信来防止这些情况。
三层应用的另一个好处是可靠性。当每一层在单独的服务器上运行,或进一步分离到不同的硬件或完全在另一个数据中心运行时,一个层的故障不太可能影响其他层。这也为我们提供了可扩展性的潜力。因为这些组件独立运行,它们可以独立增长。例如,如果数据库访问是一个性能瓶颈,你可以向数据库集群添加节点,而对整体操作的干扰最小。
三层的方法也可以优化开发过程。连接各层的API以一种支持分工效率的方式将各组件分开。网络开发人员和管理员可以操作和维护网络服务器,而数据库开发人员和管理员可以运行数据库系统。在这两者之间,你为应用层所使用的框架的专家可以把他们的注意力集中在应用程序的代码上。例如,在DevOps的情况下,应用开发人员可以离线构建和测试新版本的应用程序代码,在对操作影响最小的情况下轻松改变它。
如果你开始建立一个网络应用,请考虑一个三层架构。在今天的容器和云环境中,很容易在不同的系统上分离组件,你的努力会得到回报,因为你的应用程序更可靠、更安全、更可扩展。
今天就开始在Linode上建立你的应用层。
评论 (1)
You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.