选择开发技术四步曲 - Purpleendurer@CSDN - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/05/20 16:42:21
选择开发技术四步曲
作者:Justin James
翻译:PurpleEndurer,2010-10-09第1版
分类:开发,编程
标签:性能,存储,数据库,硬件,企业软件,软件,数据管理
我的一位朋友正在为一个即将启动的编程项目而费脑筋:要在保证项目顺利完成的同时提高性能。他问我:“我该如何挑选技术呢?”这位朋友时断时续地编写过代码,但他还没有做过任何实质性的项目。他从未专注于任何特定的技术,他对这个项目不知如何下手。虽然他基于以前的经验倾向于部署到Linux,但这还不是最终决定。
在这儿,我将自己给他提的建议分享出来。我将不推荐任何具体的技术,而是告诉你,我在对技术和体系结构制定决策时的方法。
第1步:为应用程序作松耦合设计
敏捷方法已经变得非常流行,一些人认为,这意味着你不要尝试超越一两个星期的时间表。但这在为应用程序作松耦合设计准备时极具价值。您所需要做的只是使用一个具有流程图功能(例如Visio)的工具来提供一个高层次的逻辑概述。您不必陷入这样的细节:“验证这个字段至少包含五个字符”或数据布局。但你需要对应用程序各组成部分所担负的处理职责有一个总体思路。
这儿有图中应该包含的东西的一些例子:
▲ 任何重大的批处理任务。
▲ 数据存储(文件,数据库,“云”等)以及对之进行检索并提供给应用程序其它部分的组件。
▲ 重要处理出现的地方(在数据库中,在业务逻辑层,Web服务,客户端等)和它的作用。
第2步:确定资源的使用情况和特点
一旦逻辑概述图完成了,我们可以用它来确定资源的使用情况。你需要注意的资源是CPU、内存、硬盘空间和带宽。你要向外部Web服务传输大量数据或者与之相反?这就需要注意应用程序和服务之间的连接的带宽资源。也许你的数据库内部要做密集的运算 - 那就注意数据库的CPU使用情况,如此等等。
第3步:判断性能临界区域
一旦你明白了要使用哪里的资源,也就发现了潜在的性能瓶颈。这些地方会对你的技术选择有最大的影响。如果事实证明你存储在数据库中信息很少,你在数据库方面就有更多选择。也许你要在业务逻辑层执行的令CPU沉重的算法,这其中就表明你需要支持高速运算的语言和平台。下面是我以前做的图表,这会有助于您了解这会如何影响你的决策。
CPU 内存 磁盘空间 带宽
数据库 数据库必须是高情能系统,比如 PostgreSQL 或Oracle. 所有主要的数据库应该有大量足够的内存可供使用。 跳过附带有大小限制的低端数据库,如SQL Server Express。 把应用程序布署在在数据库所在机房。
业务层 语言必须要快,并且可能需要对多线程有很好的支持。 N/A 为了充分利用磁盘空间,把应用程序布署在同一机房。 把应用程序布署在在数据库所在机房。
向客户端提供的API接口 语言的速度必须要快,并且可能需要对多线程有很好的支持。 N/A 重新考虑你的架构。 重新考虑你的策略。
客户端软件 语言必须要快,并且可能需要对多线程有很好的支持。 仔细考虑您的目标市场和客户的能力。 仔细考虑您的目标市场和客户的能力。 确保目标市场的带宽(例如,不要销售给农村地区的消费者)。
第三方服务 精心挑选供应商。 N/A 选择一个低成本的存储厂商。 重新考虑你的策略。
第4步:权衡需求规模
你可以从图表中学到的另一件事是你的应用程序的哪个地方需要权衡。例如,如果大部分处理需求是发生在应用程序的客户端,那么服务器架构可以宽松得多。
您也将能明白自己需要何种规模。大多数数据库有集群功能,所以如果你有选择,这通常更容易,更好地把需要权衡的事情(特别是如果它们需要在请求之间共享状态)推进到已经扩大规模的数据库,或考虑具有内置集群或缩放堆栈的更高级的技术。
5. 项目人员技能结构的组成。
6. 项目本身的制约因素(时间、成本等等,尽量根据5,选择成本、时间投入较小的技术)适合最重要。
结论
利用轻量级逻辑概图来启动应用程序的发展过程,你会在正确的途径上选择适合自身需求的最佳技术。也存在很多非技术因素(如您的预算,特别是技术经验等),但你需要从某个地方开始,这个决策过程将有助于你缩小选择范围,并提前看清问题所在。
我很乐意你在下面的留言中,从而可以获得与这类问题相关的经验。(完)
作者:Justin James
翻译:PurpleEndurer,2010-10-09第1版
分类:开发,编程
标签:性能,存储,数据库,硬件,企业软件,软件,数据管理
我的一位朋友正在为一个即将启动的编程项目而费脑筋:要在保证项目顺利完成的同时提高性能。他问我:“我该如何挑选技术呢?”这位朋友时断时续地编写过代码,但他还没有做过任何实质性的项目。他从未专注于任何特定的技术,他对这个项目不知如何下手。虽然他基于以前的经验倾向于部署到Linux,但这还不是最终决定。
在这儿,我将自己给他提的建议分享出来。我将不推荐任何具体的技术,而是告诉你,我在对技术和体系结构制定决策时的方法。
第1步:为应用程序作松耦合设计
敏捷方法已经变得非常流行,一些人认为,这意味着你不要尝试超越一两个星期的时间表。但这在为应用程序作松耦合设计准备时极具价值。您所需要做的只是使用一个具有流程图功能(例如Visio)的工具来提供一个高层次的逻辑概述。您不必陷入这样的细节:“验证这个字段至少包含五个字符”或数据布局。但你需要对应用程序各组成部分所担负的处理职责有一个总体思路。
这儿有图中应该包含的东西的一些例子:
▲ 任何重大的批处理任务。
▲ 数据存储(文件,数据库,“云”等)以及对之进行检索并提供给应用程序其它部分的组件。
▲ 重要处理出现的地方(在数据库中,在业务逻辑层,Web服务,客户端等)和它的作用。
第2步:确定资源的使用情况和特点
一旦逻辑概述图完成了,我们可以用它来确定资源的使用情况。你需要注意的资源是CPU、内存、硬盘空间和带宽。你要向外部Web服务传输大量数据或者与之相反?这就需要注意应用程序和服务之间的连接的带宽资源。也许你的数据库内部要做密集的运算 - 那就注意数据库的CPU使用情况,如此等等。
第3步:判断性能临界区域
一旦你明白了要使用哪里的资源,也就发现了潜在的性能瓶颈。这些地方会对你的技术选择有最大的影响。如果事实证明你存储在数据库中信息很少,你在数据库方面就有更多选择。也许你要在业务逻辑层执行的令CPU沉重的算法,这其中就表明你需要支持高速运算的语言和平台。下面是我以前做的图表,这会有助于您了解这会如何影响你的决策。
CPU 内存 磁盘空间 带宽
数据库 数据库必须是高情能系统,比如 PostgreSQL 或Oracle. 所有主要的数据库应该有大量足够的内存可供使用。 跳过附带有大小限制的低端数据库,如SQL Server Express。 把应用程序布署在在数据库所在机房。
业务层 语言必须要快,并且可能需要对多线程有很好的支持。 N/A 为了充分利用磁盘空间,把应用程序布署在同一机房。 把应用程序布署在在数据库所在机房。
向客户端提供的API接口 语言的速度必须要快,并且可能需要对多线程有很好的支持。 N/A 重新考虑你的架构。 重新考虑你的策略。
客户端软件 语言必须要快,并且可能需要对多线程有很好的支持。 仔细考虑您的目标市场和客户的能力。 仔细考虑您的目标市场和客户的能力。 确保目标市场的带宽(例如,不要销售给农村地区的消费者)。
第三方服务 精心挑选供应商。 N/A 选择一个低成本的存储厂商。 重新考虑你的策略。
第4步:权衡需求规模
你可以从图表中学到的另一件事是你的应用程序的哪个地方需要权衡。例如,如果大部分处理需求是发生在应用程序的客户端,那么服务器架构可以宽松得多。
您也将能明白自己需要何种规模。大多数数据库有集群功能,所以如果你有选择,这通常更容易,更好地把需要权衡的事情(特别是如果它们需要在请求之间共享状态)推进到已经扩大规模的数据库,或考虑具有内置集群或缩放堆栈的更高级的技术。
5. 项目人员技能结构的组成。
6. 项目本身的制约因素(时间、成本等等,尽量根据5,选择成本、时间投入较小的技术)适合最重要。
结论
利用轻量级逻辑概图来启动应用程序的发展过程,你会在正确的途径上选择适合自身需求的最佳技术。也存在很多非技术因素(如您的预算,特别是技术经验等),但你需要从某个地方开始,这个决策过程将有助于你缩小选择范围,并提前看清问题所在。
我很乐意你在下面的留言中,从而可以获得与这类问题相关的经验。(完)
选择开发技术四步曲 - Purpleendurer@CSDN - CSDN博客
关于编程学习的七点思索 - Purpleendurer@CSDN - CSDN博客
C#简单开发文本朗读系统 - the_fire的技术博客 - CSDN博客
如何选择开源项目 - 【编程随想】的技术博客 - CSDN博客
技术族谱:软件开发相关知识体系的整理心得(图) - 思考-jinxfei - CSDN博客
RS-485总线网络中的抗雷击技术 - andyzx的开发日记 - CSDN博客
技术族谱:软件开发相关知识体系的整理心得(图) - 思考-jinxfei - CSDN博客
RDF简介 - 技术源于生活 - CSDN博客
fms技术 - wanglilin2000的专栏 - CSDN博客
CSDN技术中心 利用Eclipse开发Hibernate应用程序
CSDN技术中心 开发75条(写的不错)
CSDN技术中心 《敏捷软件开发》评和勘误
CSS的常用技巧放送 - web开发 - CSDN技术中心
Tomcat性能优化(2) - web开发 - CSDN技术中心
google搜索原理论文 - web开发 - CSDN技术中心
C 的可移植性和跨平台开发[3]:异常处理 - 【编程随想】的技术博客 - CSDN博客
CSDN
中文搜索引擎技术揭密:排序技术(转贴) - 曾登高 - CSDN博客
wince驱动开发 - mindengxue的专栏 - CSDN博客
DNP 3.0 Server开发心得 - softeveryday的专栏 - CSDN博客
CSDN技术中心 Log4j
搜索引擎索引压缩技术 - Java2King的专栏 - CSDN博客
在VC 中读写INI文件 - 技术收藏 - CSDN博客
非技术面试题集 - CHRYSLER_300C的专栏 - CSDN博客