架构设计之性能考虑

03-09-25 qlwangbj
设计一个开发架构的时候,通常最主要考虑的是可扩展性、可维护性等,那么架构的性能在设计的时候重要吗,要考虑吗,有那些影响变量?

请教各位大侠,特别banq大哥给点指点,新来的,:)

              

banq
2003-09-26 15:41
不用客气,随便说说。

性能当然很重要,也是在设计时必须考虑的,架构设计实际是一个平衡设计,在可扩展性、可维护性、高性能等之间做个妥协选择。

性能设计首要考虑两点:你的系统哪些是同步的;哪些是异步的。该使用异步的使用了同步机制,会影响性能,有时效率高也是提高性能的一个重要手段。

涉及面很广,只能说一点了。

noxel
2003-09-26 16:13
设计的时候由于具体的算法和逻辑都没有确定,能决定性能的主要是io,包括数据库,socket,文件等。

基本上系统服务一个事务,有几个roundtrip,要通过哪几层io,合理的分配这些io的调用,降低不必要的io,可以让性能有个好的开始。

还有就是同步和争用的问题,这是在多线程设计的时候要重点考虑的,太多的线程在抢占同一个资源会降低性能。在多线程间同步一个庞大的资源,也会降低性能。

我懂的就这么多了,希望抛砖引玉。

hyzou
2003-09-27 09:23
这些也只是一部分,供你参考一下吧

1、short-lived object太多,尽量重用。eg:String

2、Excessive CPU consumption methods。

3、Fine-grained remote communication。过细的remote调用

4、persistence and I/O routines。DB用pool,logging也是IO操作,耗时(10%),应注意

5、Thread/Monitor contension。多线程在同一点上同步,造成堵塞。

6、poor choice of data structure and java language constructs.

7、improper JVM setting

解决方案:

1、Final,static,private尽量使用

2、用StringBuffer代替String

3、Type Casting昂贵,找折衷点

4、尽量cache

5、reflection昂贵,折衷

6、同步尽量避免

7、thread昂贵,尽量用thread pool。(Book:Concurrent programming A:Dao Lea)

8、选择上按优先级:Hashmap>Hashtable array>ArrayList>Vector。Hashtable,Vector是thread safe的,因此耗时,如为只读时,应分别用Hashmap、ArrayList代替。

9、IO昂贵,耗时,折衷

10、net communication尽量少用。

qlwangbj
2003-09-29 20:25
楼上的各位真是让兄弟茅塞顿开啊,原来是影响性能的因素有这么多!

可是通常讲解架构设计的资料充分考虑性能平衡的好像不太多,更多的讲如何进行抽象,如何解藕使得架构更加灵活,更多的封装变化,其实性能也很重要,是吧?!

小弟谢过楼上各位了!

猜你喜欢
3Go 1 2 3 下一页