更新时间:2022-05-11 10:15:54 来源:极悦 浏览1228次
极悦小编来给大家进行软件系统设计原则介绍。
在这篇文章中,我们将介绍一篇关于软件系统设计原则的综合文章。软件架构对于创建同时实现多个目标所需的复杂软件结构非常关键。在项目开始时创建正确的软件架构可以在可扩展性、可用性、可靠性和降低维护成本方面带来更好的长期结果。糟糕的软件架构和架构决策可能会导致维护成本增加和系统难以维护。
让我们来看看一些最好的系统设计原则。
关注点分离是软件设计中最重要的原则,即将您的软件系统划分为组件,每个部分构建一次。关注点分离导致应用程序的模块化,而模块化是可扩展和可维护的软件架构的关键。
软件系统需要以尽可能少的重叠功能进行分解。系统中的每个模块或服务都应该专注于一组专用的功能。这种方法使其更易于理解、开发、维护和易于增强应用程序。设计具有分离关注点的系统有助于用不同的编程语言开发不同的模块。面向对象编程中的继承和组合特性有助于提高应用程序的模块化。
模块化的主要好处是:
(1)可重用性
模块化使重用代码变得容易。公共代码可以打包为库,并且可以在多个项目和/或模块中使用。
(2)可维护性
当软件应用程序模块化时,易于排除应用程序故障,易于修复任何错误,易于维护。由于每个组件都是自包含的,因此可以轻松缓解依赖性问题。通过模拟其他依赖项来测试每个模块也很容易。模块化有助于提高开发团队的生产力,因为工作可以轻松地在开发人员或开发团队之间分离。
(3)可扩展性
模块化将模块彼此抽象。只要保持向后兼容性或创建新版本的 API,就可以更轻松地扩展每个模块的功能或向现有模块添加新功能,而不会对其他模块产生重大影响。通过创建新组件或模块可以轻松添加新功能。
内聚度是模块的相关元素归属在一起并做一件专门的事情的程度。模块中的所有相关代码应该彼此靠近。这有助于减少处理请求的延迟。耦合是指应用程序中不同模块相互依赖的程度。
耦合是两个系统之间的依赖程度。使软件组件尽可能松耦合,即每个模块应尽可能独立于其他模块,以便一个系统中的更改对其他组件的影响最小甚至没有。继承是紧耦合的一个例子。组合是松散耦合的一个例子。减少耦合导致增加内聚。
事件驱动架构可帮助应用程序在后端系统中感兴趣的数据项发生更改时得到通知。应用程序监听这些通知并刷新它们的缓存并采取任何后续行动。如果客户端应用程序可以处理事件通知,则有助于减少对后端系统的调用次数。
有几种通知机制可用于应用程序开发。其中一些是 ActiveMQ、RabbitMQ、Kafka 等分布式消息传递系统。每个云提供商还提供不同的消息传递/通知服务。
客户端请求路径中的大量处理会导致客户端调用延迟增加并限制吞吐量应用程序处理量。最少的处理导致更快的响应,应用程序可以用更少的容量处理更多的负载。通过预先计算可能的响应项并将它们缓存在分布式缓存中,可以实现最少的处理。当客户端请求数据项时,可以直接从填充的缓存中获取预先计算的数据。
在适用的地方使用缓存来减少远程服务调用、数据库调用和请求路径中的处理量。这有助于减少客户端调用服务的延迟。使用事件通知机制来保持缓存温暖并避免向客户端提供陈旧数据。
分布式系统被设计为高度可扩展、可靠且可用于服务于负载的变化,并且高度可靠且可用。以下是有关这些特征的更多详细信息:
(1)可扩展性
可扩展性是系统通过增加额外容量自动增长和管理需求增长的能力。缩放有两种类型,垂直缩放和水平缩放。
1)垂直缩放
在 Vertical Scaling 中,您可以添加更多具有更大容量的高级硬件,例如更多 RAM、强大的处理器等,以增加应用程序的负载。垂直扩展的问题在于容量可以增长多少总是有限制的。由于硬件成本,这种类型的扩展很昂贵,并且需要时间来获得新硬件。如果您想快速扩展您的应用程序以增加负载,那么这种类型的扩展不是一个很好的选择。
2)水平缩放
在水平扩展中,您可以在现有容量中添加更多服务器,以应对应用程序增加的负载。增加的应用程序负载通过负载均衡器分布在集群中的所有服务器上。如果您想快速扩展您的软件并且它并不昂贵,那么这种类型的扩展是最佳选择。
通过配置更改可以轻松扩展云环境中的应用程序,这会根据性能监控指标自动将额外的服务器添加到集群中。
(2)可靠性
系统的可靠性是在给定环境中特定时间段内软件操作失败的概率。如果即使系统的部分硬件或软件出现故障,它仍能继续为客户端请求提供服务,则该系统被认为是高度可靠的。任何失败的组件都可以在不影响客户端请求的情况下进行更换。
分布式系统的可靠性可以通过软件组件和数据的冗余来实现,因此任何一个组件或数据容器的丢失都不会导致性能下降或客户端请求失败。由于软件组件和数据的冗余,高可靠性会导致额外的成本。
(3)可用性
可用性是系统保持运行并在特定时期内继续执行其功能的时间。如果一个系统是可靠的,那么它就会自动可用,即它会继续运行。
(4)简单性
每个系统设计都是为了使系统尽可能简单。系统的简单性带来了一些好处,例如代码的重用、易于更改、易于添加新功能、易于测试和解决任何生产问题。
使用异步处理和并行处理将有助于加快客户端请求并减少请求的整体延迟。使用 RxJava 等框架并行处理给定客户端请求中涉及的多个子请求。尽可能使用异步调用来调用其他系统。减少客户端请求路径中的调用次数可以提高应用程序的性能,并且应用程序易于扩展。
以上就是关于“软件系统设计原则介绍”,大家如果想了解更多相关知识,可以关注一下极悦的Java视频,里面的课程内容从入门到精通,细致全面,通俗易懂,很适合没有基础的朋友学习,相信对大家会有所帮助的。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习