POEAA笔记-0

什么是架构

这里是Ralph Johnson认为“架构师一种主观上的东西,是专家级项目开发人员对系统设计的一些可共享的理解。一般地,这种可共享的理解表现为系统主要的组成部分以及这些组成之间的交互关系。它还包括一些决定,开发者们希望这些决定能早做出,因为开发者看来它们是难以改变的。”

它是主观的,所以每个人对架构的理解是不一样的,但架构师应该包容其他人对其他人对架构的理解,以产生合理的架构。这些专家级开发成员通常是架构师,当然也包括资深的专家。可共享的理解容易生成一种通用的语言,这些可共享的理解表现为系统中重要的组成部分,其中包括了领域模型,系统的核心。此外一些难以改变的决定应该尽早做出。

企业应用的特点

  1. 企业应用一般都涉及持久化数据。
  2. 企业应用一般都涉及大量数据。一个中等规模的系统往往包含1GB以上的数据,这些数据是以百万条记录的方式存在的。
  3. 企业应用一般还涉及很多人同时访问数据。
  4. 企业应用还涉及大量操作数据的用户界面屏幕。
  5. 企业应用很少独立存在,通常需要与散布在企业周围的其他企业应用集成。

企业应用的种类

在我们讨论如何设计企业应用以及使用哪些模式之前,明确这一观点是非常重要的,即企业应用是多种多样的。我认为,设计中最具挑战性的地方就是了解有哪些候选的设计方法以及各种不同设计方法之间的优劣比较,进行选择的空间很大,但我们只选三个方面。

  1. 考虑一个B2C网上零售商,人们通过浏览器浏览,通过购物车购买商品。其解决方案不但要考虑到资源利用的有效性,还要考虑到系统的可伸缩性,以便用户规模增大时通过增加硬件的方法可以解决。
  2. 考虑一个足月合同自动处理系统,它们用户数很少,但它的业务逻辑比较复杂。计算每个租约的月供,处理如提早解约和延迟付款这样的事件,签订合同时眼中个各种数据,这些都是非常复杂的任务,因为租约领域的许多竞争都是以过去的交易为基础稍加变化而出现的,正是因为规则的随意性很大,才使得这样一个复杂的业务领域里有挑战性。
  3. 第三个例子一家小型公司使用的简单“开支跟踪系统”。这个系统的用户很少,功能简单,通过HTML表现方式可以很容易的实现,涉及的数据表项也不多。尽管如此,开发这样的系统,也不是没有挑战,一方面你必须快速的开发出它,另一方面你必须为它以后可能的发展考虑,也许以后会增加赔偿检验的功能,也许它会被集成到工资系统中,也许还要增加关于税务的功能,也许要为公司的CFO生成汇总报表,也许会被集成到一个航空订票Web Service中,等等。
业务系统时多种多样的,每个系统都有其自己的特点和难点。要找到业务的痛点,各个击破。

关于性能的考虑

对于大多数与性能相关的问题,我的办法是首先建立系统,调试运行,然后通过基于测量的严格的优化过程来提高性能。
关于性能的另一个问题是很多术语使用不一致,最明显的例子就是“可伸缩性”。它可能有6-7种含义,下面我们使用其中一些术语:
响应时间:是系统完成一项外部请求所需的时间。
响应性:它是系统响应请求的速度有多快。
等待时间:是获得系统任何形式响应的最小时间,即使应该做的事情并不存在。
吞吐率:是给定时间内能够处理的请求量
负载:是关于系统当前负荷的表述,也许可以用当前有多少用户与系统相连来表示。
负载敏感度:是指响应时间随负载变化的程度
效率:是性能除以资源。如果一个双CPU的系统性能数据哦30TPS,另一个系统有4个同样的CPU,性能是40TPS,则前者效率高于后者。
系统的容量:是指最大有效负载或吞吐率的指标,它可以是一个绝对最大值或性能衰减至低于一个可接受的阀值之前的临界点。
可伸缩性 :度量的是系统中增加资源对系统性能的影响,垂直可伸缩性通常指提高单个服务器的性能,例如增加内存,水平可伸缩性通常指增加服务器数目。

当构建企业应用系统时,关注硬件的可伸缩性往往比关注容量和效率更重要。

模式

什么是模式

每一个模式描述了在我们身边不断出现的问题以及该问题解决方案的核心。
模式的关键点是它们源于实践,必须观察人们的工作过程,发现其中好的设计,并找出“这些解决方案的核心”

你可能感兴趣的:(架构,笔记)