《面向模式的软件体系结构卷3》章节试读

当前位置:首页 > 计算机网络 > 软件工程/开发项目管理 > 面向模式的软件体系结构卷3章节试读

出版社:机械工业出版社
出版日期:2005-9
ISBN:9787111169833
作者:克车尔
页数:169页

《面向模式的软件体系结构卷3》的笔记-第2页

第一章,其实很多都没有什么他大的用,讲了模式和一些convention。比较有用的就是在考虑资源处理时候的几个方面:
1.性能: response time, throughput
2.scalability: 管理resource以及他们的lifecycle,其实跟我们平常做的差不多,主要考虑scenario,有什么样的case就有什么样的设计。
3.predicability,主要针对实时系统,如果设计的好,对于web server的throughput也需要这方面的考虑。
4.flexibility,灵活可以说是什么都可以,易于配置,管理,monitor,扩展。
5.稳定性
6.一致性,主要是从一个一致性的状态 --> 另一个一致性的状态。感觉这一点不太好搞,难道我们要persist state,transaction?

《面向模式的软件体系结构卷3》的笔记-第11页

第二章,
这一章主要是如何获得资源,讲了4个模式
lookup, 参照corba的naming service, trading service以及jndi, ldap。主要目的就是将user与resource provider解耦合。可以通过返回给用户一个proxy来实现一定的灵活性。比较有意思的是讲了点bootstrap,也就是resource provider与resource之间如何联系,可以通过广播,组播之类的机制。如果仔细考虑,不如去看p2p的发现机制。trading service是有描述的,感觉就想query language。最后讲了Federated Lookup其实就是加了一定策略的composite lookuper。 Replicated Lookup:主要实现了HA的cluster,可以在几个point上做cluster:1.proxy中,2. resource provider, 3. resource.其中对于java里边的有几个project适合我们仔细的看看: jini, JXTA,还有DNS的机制。
------------------------------------------------------------------------------------------------
Lazy acquisition
延迟获取我们用的比较多,将资源推迟到用的时候才获取,主要通过proxy来实现的。可以提高startup time,但是可能对第一次使用的时候,速度比较慢。
------------------------------------------------------------------------------------------------
Eager acquisition
实际上主要用于获取资源池的资源,防止抖动,比如说memory,毕竟heap memory分配需要lock和整理的。如果采用资源池,那么资源就是有状态的,需要管理资源的lifecycle。这里边提的比较好的一点是,在启动获取资源的时候,最好以hook的方式,好处是灵活性。还有一个是运行时获取,这个估计实用性不大,也就是靠adaptive。
------------------------------------------------------------------------------------------------
Partial acquisition
感觉这个是比较使用的模式,也是比较复杂的。刚开始获取一部分,然后再on demand或者说根据策略进行获取,让我想起了work manager,如果这个策略实现的比较好,可以真正的实现adaptive,这就是我们所期望的。
实现的主要思想就是分步进行,把大象装进冰箱需要几步:)。实际上这也是一个混杂模式,混合了Eager(刚开始上来就获取必要的一部分)和Lazy(如果eager获得的顶不住了,只要再来点)。他可以考虑异步的资源获取,比如说你可以schedule一个后台的job去获取资源,当user真正要用的时候可能就已经获得资源了,这样和reactor模式结合(感觉reactor真别扭,要说event manager比较好)。这里的错误处理是需要考虑的,实际上我们的错误处理一般来说都不需要“处理”,都是fail through类型的,如果真的要处理就需要state machine了。如果分布,每一步骤还是可配置的,那不就成了SEDA了?
最后举了协议的例子,有点意思。比如说IIOP,先读协议头,然后知道需要读多少数据,看来IIOP也类似于HTTP,都有content-length的概念。是不是协议的设计都需要类似的东西呢?
对于这一点的启发,我发现我们的cluster可以说没有协议的设计,最主要的是没有meta data,也就是header,所以导致了升级太tmd困难了。

《面向模式的软件体系结构卷3》的笔记-第1页

序言
资源的获取,管理,释放对长期运行的程序都有很大的影响。尤其是对其性能,规模,可伸缩性,可延续性。比如从堆上分配内存,对于web server或者application server而言,在请求处理代码路径中每一个从堆上分配内存的操作,都降低了服务器的性能和可伸缩性。我觉得这里很有感触,比如说java剧烈的gc,在performance audit的时候,我们都希望最后的throughput到达的时候,gc主要发生在新生代。原文说调用堆管理器分配内存和释放内存都需要lock,但是可能不是全部的lock,这是对于java来说的吧。所以在进入请求代码之前就尽可能多的分配好资源,比如说pool,或者利用cache。可以使用Partial Acquisition.


 面向模式的软件体系结构卷3下载


 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024