架构
架构一般来说意味着:
- 从最高层将系统分解成多个部分。
- 一旦作出就很难改变的决定。
Ralph Johnson说:
架构是一种主观
的东西,是项目专家开发人员对系统设计的一种共同理解
。通常,共同理解是指系统包含哪些主要组件以及这些组件相互之间如何交互。Martin认为架构模式中最重要就是分层
。
企业应用程序
企
业应用程序通常也被称为"信息系统(Information Systems)"或”数据处理系统(Data
Processing)"。企业应用程序的例子包括:薪水帐册、病人记录、船运跟踪、费用分析、信用等级、保险、供应链、会计、客户服务和外贸。不是企业
应用程序的例子包括:汽车燃油喷射(automobile fuel
injection),字处理器、选举控制器、化学工厂控制器、电话交换机、操作系统、编译器和游戏。
企业应用程序的特点:
- 企业应用程序通常包含持久化 的数据。
- 企业应用程序通常包含大量数据 ,一个中型系统的数据量超过1G,大约包含万条记录。
- 用户通常并发地 访问数据。
- 企业应用程序通常包含很多用户接口屏幕(user interface screen)。包含上百个不同的屏幕是很常见的。
- 企业应用程序通常需要和别的企业应用程序进行集成。
- 通常有复杂的业务逻辑(business logic)。业务逻辑通常是非逻辑的(illogic),它们经常变化而且看起来十分古怪。
企业应用程序的类型
不同类型的企业应用程序需要使用不同的方式来开发,要对“总是要这样做”的规则保持警惕。三种不同的企业应用程序举例:
- B2C在线零售店,用户浏览商品,将它们放入购物篮,然后购买。此类系统需要处理大量用户,这就要求高效利用资源并且应用需要是可伸缩的,这样通过添加硬件就能够增加负载量。此类系统的领域逻辑相当直观且明显,需要支持尽可能广泛的浏览器。
- 一个能使租赁协议的处理自动化的系统(a system that automates the processing of leasing agreements)。比起B2C在线零售店,这个系统的用户量要少得多,但是业务逻辑却要复杂得多。用户界面也要更复杂。
- 为一个小公司做的简单费用跟踪系统。这个系统只有少量的用户和简单的业务逻辑。它的主要挑战是快速的构建并及时听取反馈。
对于这三种应用程序不能够使用同一种架构。
性能(Performance)
做性能优化之前和之后一定要测量。
术语:
- 响应时间(response time) 。系统处理外部请求所花费的时间,比如说按一个按钮。
- 响应性(responsiveness) 。描述系统以多快的速度对请求进行响应,这和响应时间不同。比如说,当点击"复制"按钮到出现进度条这段时间是响应性,而到文件复制结束时是响应时间。
- 潜伏时间(Latency) 。 指接收到任何形式响应所需的最短时间。对本地程序,潜伏时间非常短,对于远程程序,潜伏时间至少是请求在网络上传输的时间。和响应性不同,它是用户感知到 响应所用的时间,潜伏时间是指服务器端(一般来说是计算机)接收到响应所用的时间。作为应用程序开发者,我们没有办法改善潜伏时间。
- 吞吐量(Throughput) 。在给定的时间内完成的工作量。如果是计算文件复制的时间,吞吐量可能用字节每秒(bytes per second)来衡量。对企业应用程序,吞吐量一般用事务数每秒来衡量(transactions per second, tps)。
- 负载(Load) 。用于系统处于多大的压力,例如可用有多少用户连接到系统来衡量系统负载。负载一般作为其它测量量的上下文,例如可以说,10个用户时请求响应时间是0.5秒而20个用户时响应时间是2秒。
- 负载敏感性(Load Sensitivity) 。表壳响应时间怎样随着系统负载变化。假设系统A对10到20个用户的响应时间是0.5秒,系统B对10个用户的响应时间是0.2秒,对20个用户的响应时间上升到2秒。我们说系统A比系统B有较低的负载敏感性。
- 效率(Efficeincy) 。用性能除以资源。系统A有2个CPU,其吞吐量是30tps,系统B有3个CPU,吞吐量是40tps,那么我们说系统A比系统B更有效率。
- 容量(Capacity) 。表示系统最大能够承受的有效负载或吞吐量。
- 伸缩性(Scalability) 。描述添加资源(通常是硬件)如何影响性能。一个可伸缩的系统可能通过添加硬件来获得更好的性能,例如通过加一台服务器可以加倍吞吐量。给单台服务器增加动力(如添加更多的CPU)是垂直伸缩性 。添加更多服务器是水平伸缩性 。
性能一般是指负载或吞吐量。当构建企业应用程序时,硬件伸缩性通常比系统容量甚至系统效率更重要,因为这时可以通过添加硬件来提高系统性能。