《架构风格与基于网络的软件架构设计》读后感-----另选架构模式详细了解

首先,我们应该知道一个好的架构能够帮助我们在设计程序时给我们带来便利,并为产品提供更好的相关软件质量属性。

架构的质量属性包括,1性能 2可伸缩性 3简单性 4可修改性 5可见性 6可移植性 7可靠性。

就我在系统开发中的经验和阅读对此文提及的架构质量属性有了如下认识:

1性能对网络效率来说是一个重要因素,它包括

1.1网络性能(描述通信的属性),不同风格的架构对网络性能的影响不同,主要是受用户动作的交互的数量和数据元素的粒度的影响。

1.2用户可察觉的性能,这里指出网络性能是由网络移动信息的速率度量,用户可察觉的性能则是根据使用应用的对用户的影响来度量,其中包括延迟和完成时间。我理解就是就是快与慢的问题。

1.3网络效率,即对网络的使用如何达到最少,减少与用户动作相公公的网络交互。我的理解是,比如我在进行对一个数据表的多次查找时,可以将多次对数据库操作的逻辑换成只读一次,然后在控制层分开,需要时直接用,这样就减少了对数据库的反复操作,而这里就是将数据库换成网络,通过一些方法,减少多次操作。

2可伸缩性,我们知道一个原则--对扩展开放,对修改关闭。为了减少耦合度,我们也需要架构之间有一定的支持组件之间的交互能力,这就是可伸缩性存在的意义,对此我的理解是这样的。

3简单性,越简单的越容易组合改变,所以架构元素的通用性能够有效的提高简单性,减少了变数带来的重写困扰。

4可修改性,和上一次的质量属性中是类似的,可修改性指的是对应用架构所作修改的难易度。根据如何修改,下面也将其分解成了几个部分。

5可见性,我们在开发产品经常是需要调用接口的,而风格中也是类似。可见性是指一个组件对其他两个组件之间的交互进行监视和仲裁的能力。

6可移植性,软件的可移植性是指是否能在在不同的环境下运行,导致可移植性属性的限制,包括数据代码和风格。就我在学习hibernate中,hibernate就有很优越的数据库可移植性。

7可靠性,从架构角度讲,是指架构受系统层面影响的程度。

十种架构模式介绍:https://www.cnblogs.com/IcanFixIt/p/7518146.html

 

对客户端-服务器模式,我有以下的学习认识:

客户端/服务器模式是基于资源不对等,为了实现共享而提出的。换一种说法就是,由一个服务器和多个客户端构成,服务器组件为多个客户端提供服务。

服务器是负责数据管理,它的特征是被动的角色等待来自客户端的要求,处理后要传回结果,客户机则是完成与用户的交互工作,它的特征是主动的角色,主动发送请求,直到等待收到回应。这个过程就像小情侣吵架,总是扭捏的女孩子生气了对男孩子嘟囔,男孩子明白了之后做一些改变,但是蠢得不行的男朋友总是不会主动询问女朋友是否不开心,是否需要做出应对的措施。这里嘟囔就是请求,是男女孩子之间的交流矛盾,喋喋不休的女孩子则是客户机,宽容老实的男孩子则是服务器。

实际上客户机也是泛指多个客户机,服务器模型也是分布式的。也就是说数据分布是存储在多台服务器上的,分布式数据库管理系统的数据物理上是分布存储的,即数据存放在计算机网络上不同的局部数据库中:而在逻辑上,数据之间有语义的联系,属于一个系统。由于采用分散控制,即使整个网络中的某个局部出现故障,也不会影响全网的操作,因而具有很高的可靠性。(在系统的可用性分析中我们也提到了服务器集群的相关优点,见上文)另外,C/S模式不是计算机设备,是由以上特征来区分是哪一方的,例如,当服务器A不能单独处理任务时,往其他服务器B发出请求,那么此时B就是服务器,A是则是客户端。还是从谈恋爱来讲,男孩子不知所措,给他爸打了个电话寻求帮助,这时候他爸就是服务器,男朋友就是客户端了。从双方建立联系的方式来看,主动启动通信的应用叫客户,被动等待通信的应用叫服务器。

优缺点分析:

优点如~在C/S模式中(1)客户机与服务器分离,允许网络分布操作:二者的开发也可分开同时进行。(2) -个服务器可以服务于多个客户机。

缺点如~C/S模式中请求通常在服务器上的单独线程中处理,所谓线程,就是把一个进程分为很多片,其中每一片都可以是一个独立的流程。而单线程就是在执行时所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行,速度会显得有点慢。C/S模式中二层模式一般是单一的服务器,也是客户机-服务器直接交互,这样就引起了安全隐患和性能问题。因此在三层模式中多了一个中间件,位于客户端和服务器之间,使双方经过一些处理如验证检查等再交互。由于不同的客户端具有不同的表示,进程间通信会导致额外开销?

简单的来看,C/S和B/S之间的区别,C/S一般是指有应用软件,常指PC端。B/S有浏览器就够了。

        

使用场景:

  • 电子邮件,文件共享和银行等在线应用程序

 

就我的理解来看,如你需要取钱,打开你的网银APP,进行相应的操作。所有的处理都是在服务器端进行操作,而你和APP之间是交互,并对服务器端发出请求,是属于客户端的。总是客户端告诉服务器端,我要存钱了我要取钱了,服务器端不会主动问客户端这个月是不是用多了没钱了,生活费刚到是不是该存下来一点。服务器端是有多个服务器集群组成的,客户端也是多个全国各地男女老少的。

PS:https://pan.baidu.com/s/1Oo95fv2OhT8JlMPfYRvV_A

 

posted @ 2018-05-21 15:48  陶雨洁  阅读(286)  评论(0编辑  收藏  举报