如何设计可扩展网站

发布时间:2020-07-31 09:50:00

可扩展性是指在对系统影响最小的情况下,不断扩展和增强网站功能的能力。这就是可扩展性。我相信您可能经常误用可伸缩性和可扩展性这两个概念。事实上,许多工程师会混淆这两个概念,并使用可扩展性来表示可伸缩性。让我总结一下不同之处:

可扩展性是指在对系统影响最小的情况下,不断扩展和增强网站功能的能力。这就是可扩展性。我相信您可能经常误用可伸缩性和可扩展性这两个概念。事实上,许多工程师会混淆这两个概念,并使用可扩展性来表示可伸缩性。让我总结一下不同之处:

它是指在对现有系统影响最小的情况下,不断扩展或增强系统功能的能力。结果表明,该系统结构稳定,不需要频繁更改,应用之间的依赖性和耦合性较小。它可以快速响应需求变化。这是系统架构设计的开放性和封闭性原则(开放性和可扩展性)。建筑设计考虑未来功能扩展。在系统中添加新功能时,不需要修改现有系统的结构和代码。

系统通过增加(减少)自身的资源规模来增强(减少)其计算和处理事务的能力。如果增加或减少是成比例的,则称为线性可伸缩性。在网站架构中,通常是指利用集群来增加服务器数量,提高系统的整体事务吞吐量。

开发低耦合系统是软件设计的最终目标之一,它推动了我国软件开发技术的创新和发展。从各种软件系统工具到各种开发框架,从汇编语言到面向过程的开发语言,都体现了软件系统低耦合的设计目标。低耦合系统意味着更容易扩展和重用低耦合模块。低耦合系统设计将使开发过程和维护更容易管理。

但低耦合并不意味着这一点都不重要。如何对系统的各个模块进行分解,如何定义各个模块之间的接口,以及如何重用不同的模块来构建一个完整的系统,是软件设计中挑战性的部分。一个优秀的软件架构师的价值不在于掌握了多少先进的技术,而在于能够将一个大系统划分为n个低耦合的子模块,这些子模块包括水平的业务模块和垂直的基础技术模块。

网站的体系结构可以通过分层和划分进行扩展,这也是模块化设计的重要手段。通过分层划分,将软件划分为几个低耦合的独立组件模块。这些组件模块通过消息传递和依赖调用聚合成一个完整的系统。

在大型网站中,这些模块以分布式部署的方式部署,独立的模块部署在独立的服务器(集群)上,物理上分离了模块之间的耦合关系,进一步降低了耦合,提高了可重用性。在减少耦合和提高可重用性后,网站可以更容易地扩展和扩展。

模块分布式部署后,如何实现模块间的聚合?主要有两种方法:分布式消息队列和分布式服务。如果模块之间没有直接调用,增加或修改模块对其他模块的影响很小,系统的可扩展性会更好。消息队列使用分发订阅模式。在其他消息使用者侦听消息(或事件)之后,他们将处理它。

您可以看到两者之间没有关联,这就是异步处理。对于新业务,只要您对这种消息感兴趣,就可以订阅它,这对原有系统和其他业务没有影响,从而实现可扩展设计。

在过滤、处理和包装消息之后,消息接收者构造一个新的消息类型,连续发送消息,并等待其他消息接收者订阅来处理该消息。因此,事件(消息对象)驱动的业务架构可以是一系列流程。

消息生产者应用程序通过远程访问接口将消息推送到消息队列服务器。消息队列服务器在将消息写入本地内存队列后立即向消息生成器返回成功的响应。消息队列服务器根据消息订阅列表查找订阅消息的消息消费应用程序,并根据FIFO原理通过远程通信接口将消息队列中的消息发送给消息消费程序。

目前,有很多开源软件,例如:Rabbitmq、Kafka、rocketmq等。

这些消息队列在可用性、可伸缩性、数据一致性、性能和可管理性方面有了许多改进。

例如:

就可伸缩性而言,每次添加消息队列服务器时,消息队列都是无状态的。我们只需要将一台服务器添加到消息生产者的服务列表中。

就可用性而言,如果消息队列的服务器内存已满,则消息将写入磁盘。消息被消费后,将从磁盘中读取并加载到内存中继续处理。

为了避免消息队列服务器中断而造成的消息丢失,将成功发送到消息队列的消息存储在消息生产者服务器中,并在消息消费服务器实际处理消息后删除消息。消息队列服务器关闭后,生产者服务器将选择分布式消息队列服务器群集中的其他服务器来发布消息。

设计可扩展性体系结构的另一个重要方法是使用分布式服务。如果分布式消息队列通过消息对象分解系统耦合,不同的子系统处理相同的消息;那么分布式服务通过接口分解系统耦合,不同子系统通过相同的接口描述调用服务。




热门推荐

技巧精选

17742004931 联系我们,谈您的需求

立即咨询 立即建站