每个软件架构师和软件工程师都必须知道的10种设计模式

https://ravindraelicherla.medium.com/10-design-patterns-every-software-architect-must-know-b33237bc01c2
存在任何解决实际人类问题的业务 。它可能是提高速度,降低成本,提高便利性,增加生活乐趣或使知识触手可及 。通常用于解决这些业务问题的技术 。但是,为什么设计模式很重要?IT系统的典型挑战是可用性,可伸缩性,弹性,数据管理,性能和安全性 。在进入设计模式之前,弄清楚这些词很重要 。
可用性: Availabilit Ÿ是一次系统的比例高达在定义的时间段 。系统可能由于多种原因而停机,例如软件错误,网络问题,负载问题,DDoS(分布式拒绝服务)攻击和基础架构硬件问题 。可用性按以下百分比表示 。
每个软件架构师和软件工程师都必须知道的10种设计模式

文章插图
 
可扩展性:2014年,印度在线零售商Flipkart继续向客户道歉,因为十亿美元的大额销售由于可扩展性问题而无法满足客户的需求 。可伸缩性是计算资源,数据存储需求,消息传递基础结构和成本的一个因素 。有两种方法可以解决可伸缩性问题 。第一个是垂直扩展,您将继续增加资源的容量,第二个是水平可扩展性,在此添加更多节点 。这两种方法都各有利弊 。通常,垂直缩放速度更快,但是在一定的时间点之外仍具有局限性,水平缩放会花费更多时间,并且接近无穷大缩放 。
可伸缩性是系统资源如何应对不可预测的客户需求 。
弹性:您继续在电子商务网站上购买手表 。您不喜欢该设计,并且想要寻找更多选择 。您选择了几个带有设计,颜色,价格过滤器的下拉框,然后单击搜索按钮 。现在您会期望看到手表的图片,价格数据,一些规格,例如表带材料类型,手表机芯,颜色,交货日期 。如果交货时间微服务那段时间该怎么办?您现在有多个选择 。完全不要显示该字段,而是显示一条静态消息“我们正在计算准确的交货日期,请耐心等待”,否则您将选择一个日期范围并显示给客户 。
弹性是系统能够妥善处理故障并尽快从故障中恢复的能力 。
数据管理:数据管理在可伸缩性,可用性,安全性和弹性方面起着至关重要的作用 。与数据管理相关的架构决策取决于您要构建的应用程序类型 。它是繁重的(更多的用户事务),繁重的(报告),旨在进行分析(预测,客户细分),时间序列(日志处理)还是Datawarehouse(数据分析) 。影响数据一致性,数据可用性,数据存储和归档策略的其他因素很少 。
性能:可伸缩性和性能是相互关联的 。如果与系统可以处理的用户相比,有更多的用户,则系统自然会遇到性能问题 。怎么处理呢?您增加资源或减少用户数量 。当然,第二选择不是理想的选择,因为您最终将失去业务 。实际上,当您解决可伸缩性问题时,我们将解决这些性能问题 。我只想提醒您,可伸缩性不能解决所有性能问题,但可以解决一些问题 。例如,如果性能问题是错误编写的DB查询的结果,那么在不对查询进行微调的情况下扩展资源将被证明是灾难性的决定 。
安全性:建立安全的系统可确保用户的数据安全无虞 。数据完整性和数据持久性同样重要 。这与将钱存入银行非常相似 。如果您将一百万美元存入银行,您不想损失那笔钱(安全),您会希望银行总是说您存了一百万美元-这里没有错(诚信),即使十年后您也去了银行,您仍然会有那一百万美元的钱(耐用性) 。
现在您已经掌握了正确的基础知识,让我们一一介绍重要的模式 。没有设计模式可以解决所有问题 。需要根据用例进行选择 。


    推荐阅读