起码要有两个可选的解决方案
作者:蒂莫西·海伊
你可能听过这条规矩。如果你是一名经验丰富的架构师,你肯定知道这点:对于某个问题,如果只考虑了一个解决方案,那你就有麻烦了。
软件架构是要在所有给定的约束条件下,寻找到解决问题的最佳方案。期望第一个解决方案即满足全部的需求和约束,几乎是不可能的。一般来说,必须根据优先级次序进行权衡,选择最符合需求的解决方案。
如果对手头的问题只有一个解决方案,这意味着将没有进行折衷权衡的余地。这个唯一的解决方案很可无法令系统投资方满意。这也意味着,如果由于商业环境瞬息万变而导致优先级次序发生转变,系统很可能没有空间来适应新的需求。
这种情况即使有——也绝少是真地由于缺乏可选方案而造成的,它更可能是架构师缺乏特定问题域的经验所致。如果事实确是如此,别费力气,赶紧让更有经验的架构师助你一臂之力。
如果依照习设计架构,这个问题将更不容易为人所察觉。架构师也许己熟稔于某种单一风格的架构(例如,三层或多层的客户机-服务器系统),却没有充分认识它不适用的情。如果发现自己在还没有对比其它方法之前,就己经想当然的给出了解决方案,那么,停下来,向后退一步,问问自己,是否能够想出另一种方法。如果不能,你可以需要帮助了。
我的一个朋友,曾是一家成长中的小型互联网创业公司的技术负责人。随着用户群扩大,他们系统的负载与日俱增,性能也每况愈下,公司开始渐渐失去来之不易的用户。
于是,老板问他,“我们该如何提高系统性能?”
我的朋友回答:“买一台更大的机器!”
“还有什么其他可做的?”
“嗯……据我所知,只有这样了。”
我的朋友被当场解雇了。当然,这个老板是正确的。
起码要有两个可选的解决方案相关推荐
- 关于互联网流量劫持分析及可选的解决方案
一.劫持的方式分析 互联网的流量劫持大致分两种,第一种是DNS劫持,第二种是链路劫持.对于这两种劫持的原因有很多,比如用户电脑中毒了,DNS被篡改了,比如家用路由器被攻破了等等.但这种个人极端原因毕竟 ...
- 移动Web开发图片自适应两种常见情况解决方案
本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...
- Cisco和H3C的两种不同动态***解决方案
经常见到有读者问:***客户端如果是动态WAN接入的,可以实现***连接吗?还有如何配在***中配置NAT穿越?前者的答案当然是肯定的,不仅***客户端可以是动态接入的,而且在LAN到LAN的***互 ...
- async-validator 表单验证两种数据的解决方案
上问题: 下面选项中后台给的value 有 number和 string 两种导致无法验证 解决方案 rules: [,{type: "string",required: true ...
- java求二阶微积分方程特解_Scipy:实现微分方程的两种方法:两种不同的解决方案:回答...
我试图解决我的化学论文的微分方程,在那里我偶然发现了一个关于scipy的微分方程求解器"odeint"的问题 . 首先,我根据scipy网站上的示例,通过功能CIDNP_1实现差异 ...
- Cisco和H3C的两种不同动态×××解决方案
经常见到有读者问:×××客户端如果是动态WAN接入的,可以实现×××连接吗?还有如何配在×××中配置NAT穿越?前者的答案当然是肯定的,不仅×××客户端可以是动态接入的,而且在LAN到LAN的×××互 ...
- spring定时任务执行两次的直接解决方案
这个问题,很多人是通过修改tomcat的配置文件来解决的.这里之所以要提出一种直接解决方案,是应为并不是每个开发人员都有权限修改线上环境的tomcat配置,这个直接解决方案就是给无权修改tomcat配 ...
- QQ浏览器打开自动出现两个网页的解决方案
问题如图: 解决方案: 步骤 打开QQ浏览器,点击右上角"三"的图标,选择设置 选择"自定义网页或一组网页",不要选择它推荐的选项,你选择它推荐的打开就是两个啦 ...
- 关于APP更新,两包共存的解决方案
大多数是由于包名不一致导致的,一定要注意包名一致.不然手机会认为是两个app,导致两个包共存 查看包名的方法 1.hbuilder打包时会有提示 2.手机打开设置->应用->正在运行-&g ...
最新文章
- 一文搞定 GBDT、Xgboost 和 LightGBM 的面试
- HTML基础部分(1)字体,照片,链接
- Java移除ssl认证_Java SSL证书吊销检查
- hashmap取值_一万六千字的HashMap深度剖析
- c++17(17)-异常try catch,operator[],vector at
- 【Python基础入门系列】第06天:Python 模块和包
- nginx+web.py+fastcgi(spawn-fcgi)的session失效問題
- SWT、JavaFx十种页面布局快速理解
- Alpha冲刺(2/10)——2019.4.24
- oracle goldengate 数据库实例,案例:Oracle goldengate报错ggsci: error while loading shared libraries:...
- BotVS开发基础—2.4 获取订单、取消订单、获取未完成订单
- [转]厚积薄发,有的放矢--李开复博士给中国计算机系学生的建议
- 写给MongoDB开发者的50条建议Tip14
- SpringMVC框架学习上篇
- matlab聚类分析_数据挖掘——聚类分析
- FPGA verilog 临近插值任意比例视频缩放代码
- 【校招Verilog快速入门】组合逻辑篇:VL12、4bit超前进位加法器电路
- upc第十一场2020.11.30
- 4字母域名价值高吗?目前值多少钱?
- 解决雷电模拟器在windows 10下无法桥接网卡的问题
热门文章
- 魅蓝note3 android7,魅蓝Note3和全面评测对比 良心推荐!
- 人像摄影的美姿和构图技巧
- Java中对URL解码
- 交互式课件制作步骤分享
- 【转】炒股技巧:教你四种买入方法 准确率高达95%!
- python string indices must be_Python解析json时提示“string indices must be integers”问题解决方法...
- 嵌入式多任务OS中Vxworks和linux的一些区别
- PHP初级教程------------------(5)
- tokudb_TokuDB 安装
- (Alpha)Let's-典型用户和场景功能规格说明书