做外围什么网站有客户,免费的app源码网,加盟餐饮的网站建设,河南阿里巴巴网站建设一、平衡
在前面分析了一些软件设计的基础和原则后#xff0c;今天分析一下整体设计上的一些实践问题。首先分析一下设计上的平衡问题。平衡非常好理解#xff0c;看到过天平或者标称的同学们应该都知道什么平衡。无论在哪个环境里#xff0c;平衡都是稳定的基础。 既然说到…一、平衡
在前面分析了一些软件设计的基础和原则后今天分析一下整体设计上的一些实践问题。首先分析一下设计上的平衡问题。平衡非常好理解看到过天平或者标称的同学们应该都知道什么平衡。无论在哪个环境里平衡都是稳定的基础。 既然说到了稳定大家应该明白了平衡在软件设计中的重要性了吧。再抽象一下秩序的稳定就是各方势力平衡的结果也就是常说的“斗而不破”。到此大家应该明白了平衡在软件设计中的意思就是在当前环境下对各种需求的一种适当的资源的分配。它既考虑了现在的实际需求也适当展望了一下未来的发展既兼顾了经济投入又考虑了实际产出既追求了一定的软件运行效率又考虑了资源占有数量既考虑了用户的实际体验又适当照顾了开发者的技术实现如此等等。 平衡不是说某一方一拍脑袋就决定的它通常是一种“软博弈”的结果。所谓软博弈就是用户、对接人、市场、架构设计和开发等人的互相妥协的结果。如果开发者有机会做到软件负责人或者首席架构师的角色就会深深的体会上面的意思。 它的主要体现是什么对开发人员来说就是不断改变的需求的细节的变化。也是网上那个漫画开发者声嘶力竭的喊“不许再更改需求了” 需要提醒大家的是平衡不是一成不变的它是一个动态的过程是一个不断演进和变化的过程直到软件生命周期的结束。
二、冗余
如果说平衡是一个综合的整体上的问题那么冗余就比较偏向于软件设计开发团队这一方了。冗余是什么意思就是闲事儿管得太多。体现到软件设计和开发上就是为实现一个功能用了一个以上的方法。或者这么说可能更好理解一个功能实现了至少两次及以上其使用的方法有可能相似甚至相同。那么冗余是完全和设计原则中的某些原则是完全相悖的可它为什么还存在呢只有一个原因就是为了安全和稳定或者说冗余其实就是一种灾备技术。 冗余有很多种 1、功能冗余就如上面提到的一个功能模块被开发了两次以上。 2、任务冗余实现一个任务使用了多个软件进程处理然后利用算法来处理结果得到正确的选项最典型的就是分布式算法中的选举。 3、开发冗余就是为保证任务的安全性利用多种技术架构方法甚至多个团队来实现同一个功能然后通过某种机制来保证结果的安全性。注意和任务冗余的区别前者是同一个软件实现的多个副本运行而开发冗余是多个软件实现同一功能。 4、时间冗余这个比较好理解不断的在不同的时间点采样验证结果的准确性和安全性。 5、指令冗余这个属于一种底层的安全处理保证程序在异常的情况下帮助程序恢复正常运行。
三、设计应用
在软件设计和实际应用中人们发现科学研究和工程实践有一个明显的不同在于科学研究讲究的是严谨的推导。而工程实践讲究的是最终结果。什么意思呢比如证明一个问题科学证明它是不能完全成立的但工程实践发现如果多试几次它就一定能成功。所以这个问题在工程上就是可行的而在科学研究上是不成立的。 所以在实际的工程实践特别是在互联大规模应用的今天平衡和冗余早就渗透到了软件应用的各个方面。 平衡的设计有很多种比如常见的以时间换空间或以空间换时间开发效率与开发速度算法选择与程序性能等等。在实际的开发中最典型的往往是牺牲一定的功能和性能尽快的把程序开发出来并上线应用。互联网效率是第一位的先机一旦失去往往意味着再好的项目也极大可能就砍掉了。这样的例子现在回头看可比比皆是最典型的就是常用的微信大家可以看看其如何研发出来的过程。 而冗余就重要了在软件开发中冗余往往无法具象化往往让人觉得有设计或者开发者“抽抽”的印象。但在运维中却可以非常明显的体现出来比如实际的网络事故中某公司使用某云结果挂了损失了不少钱。同样做过数据存储的开发者知道数据往往不能完全存储到一个硬盘上简单的使用阵列复杂的要多点存储。这就是冗余。冗余的问题在于到底冗余多少才是最安全的以及最具有性价比的。比如刚刚说到的数据存储冗余是一个机器两块硬盘还是一个机房两个不同的机器硬盘还是不同机房甚至不同的物理地域。 冗余其实就是平衡的一种手段上面出事故的公司虽然明白云也是有风险的但他们选择了相信云的风险不会搞到自己头上。或者说即使出现事故是那种不可忍受的事故的可能性极低怎么个意思呢低到与自己在公司或者其它云上再备份一份的成本要低不少。这就是平衡平衡风险与奖金投入的问题。
四、例子
平衡的例子太多了这里举一个简单的。实际开发中遇到客户要求两个月交付上线使用并且提出了各种要求。老板因为成本的问题只给开发团队两个人。两个开发者即使考虑了加班发现时间也非常不足。此时就会和客户讨论需求的细节忽略一些参与方对某些不太重要的或者不急切的需求不开发或者推到二期。在这个过程中客户方提出了某某功能必须上线可以加钱。这不就到达了平衡的第一步么。多给钱开发者加班砍掉非必要功能这就基本达到了初步的平衡。 到于冗余更好理解举一个比较极端的例子银行的数据保存在哪儿比如都保存在一个大家看起来非常安全的地方但某一天万年洪水或超级地震袭击数据全丢失了客户会怎么想所以对于大银行的数据一定是异地多处保存备份比如大西北一份东北一份南方和北方再各来一份这数据不就近似于百分百安全了。不可能这天南海北的几个地方同时有超级大的灾难或不可控的风险出现。
五、总结
软件设计不光是技术的问题纯技术流往往会产生一种唯技术论的现象。软件的设计是一种现实与计算机交互融合的过程往往涉及到技术之外的经济性、效率性、公平性等等具体的社会问题。软件设计是把软件的实现与实现世界结合起来服务于现实世界而不是一种独立存在。 要始终明白实际的需求才是软件技术发展的根本动力