文档章节

性能优化,高并发

o
 osc_x4h57ch8
发布于 2018/04/24 16:50
字数 1283
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

 

性能:直观表现为返回页面的时间。即从浏览器发送请求到服务器,服务器返回浏览器的时间。

所以性能优化考虑到用户客户端(浏览器),网络,服务器处理时间三方面。

浏览器前端优化:使用缓存,合并图片,启用压缩。

网络:增加带宽

服务器:各地建机房就近处理请求

    1.代理服务器接收请求:(代理服务器作用:缓存,代理,负载均衡(算法:轮询[加权],随机,hash,最少连接),故障检测(心跳),失效转移,自动恢复)

    2.应用服务器处理业务请求:(架构方面:应用服务器经过对业务进行分层,分割,分布式部署,缓存,消息队列 [生产消费模式] ,SOA [复用,服务治理])

                (代码方面:代码优化,采用合适的数据结构,了解内存使用情况  [GC] 进行优化)

                

                内存回收优化 例如用数组存储二叉树 Node的左右节点指针使用数组下标,在GC时遍历的对象会减少,提升性能。

                垃圾回收总结:暂停线程,标记,压缩,移动指针,分代回收阀值,Finalize 终结队列 f-reachable队列引来代提升和不确定顺序回收,工作站和服务器模式回收模式。大对象堆LOH。

                  细节:

                  让我们来看下垃圾回收执行时发生了什么:refer
                  1. 垃圾回收器构建一个可达对象图,构建步骤请参考上文
                  2. 垃圾回收器扫描短弱对象表,如果弱对象表中指向的对像没有在可达对象图中,那么这个对像就被标识为垃圾对象,然后短对象表中的对象指针被设置为空
                  3. 垃圾回收器扫描终结队列(参考上文),如果队列中的对象不在可达对象图中,这个对象从终结队列中移动到Freachable队列中,这时候,这个对象又被标识为可达对象,不再是垃圾了
                  4. 垃圾回收器扫描长弱引用表。如果表中的对象不在可达对象图中(可达对象图中包括在Freachable队列中对象),将长引用对象表中对应的对象指针设置为null
                  5. 垃圾回收器移动可达对象(因为要移动内存中数据所以需要暂停线程)

                  一旦你理解了垃圾回收器的工作过程,就很容易理解弱引用是如何起作用了。访问WeakReference的Target属性导致系统返回弱对象表中的目标对象指针,如果是null,表示对象已经被回收了。

                  短弱引用不跟踪复活,这意味着垃圾回收器可以在扫描终结队列之前检查弱引用表中指向的对象是否是垃圾对象。

                  而长弱引用跟踪复活对象,这意味着垃圾回收器必须在确认对象回收之后才可以将弱引用表中的指针设置为null。

                    WeakReference使用场景:你可以为这个数据创建一个弱引用对象,并把对这个数据的强引用解除掉。这样如果程序占用的内存很低,垃圾回收操作就不会触发,弱引用对象就不会被回收掉;这样当程序需要使用这块数据时就可以通过一个强引用来获得数据,如果成功得到了对象引用,程序就没有必要再次读取用户的磁盘了。

                  大对象不压缩,因为内存中移动他们代价过高?为什么代价高呢?压缩小对象也需要移动啊?

                  工具:CLRProfiler是一个观察GC堆看堆上的对象被那个对象引用的工具,它非常棒。 .Net CLR Memory

    3.数据服务器读写数据:关系型数据库 (ACID ,事务)不适合做分布式

                                                         优化: 数据库字段 默认值不使用null ,使用可变长度字段类型

                           常用筛选,排序条件建立索引
                     优化sql语句,exists的使用 ,避免使用<> ,is null 而弃用索引全盘扫描数据,筛选条件顺序命中复合索引 ,避免索引列计算,使用视图

                        NoSql数据库 (CAP,海量数据存储,分布式存储,易扩展,HA高可用)

   
   

    磁盘:机械硬盘  RAID  HDFS

          固态硬盘 

分布式问题:架构复杂,一致性问题,通信问题,机器故障替换 [自动化]

缓存+集群+负载均衡

缓存:

1.浏览器缓存

2.cnd缓存

3.nginx缓存

4.本地缓存

5.分布式缓存

集群:

高可用策略:冗余+故障转移

负载均衡算法:1轮询(循环队列) 2加权轮询 3随机 4ipHash 5 最少连接

 

并发、并行

并发:某时间段内并发(如:每秒并发)。

并行:某时刻同时做的事情,多核多cpu并行执行。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

使用amoeba实现mysql读写分离

转载马士兵连老师笔记 使用amoeba实现mysql读写分离 1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、...

兵荒马乱的青春
15分钟前
0
0
学Vue,就要学会vue JSX(二)

学习JSX,先了解一下createElement 提到JSX,不可避免的就要提到createElement,当你看完本节,你会发现,奇怪的知识又增多了。ok,我们接着上一部分继续讲。这一次的准备工作是了解createEleme...

osc_kurqu050
16分钟前
12
0
学Vue,就要学会vue JSX(三)

是时候使用JSX代替createElement了 接着上面的讲,当我们看到上面用createElement去实现组件,太麻烦了,别说工作效率提高了,就是那些嵌套可以嵌套正确就很赞了,所以我们需要用JSX去简化整...

osc_tq5hz9vv
17分钟前
13
0
protocol buffer使用

protocol buffer使用例子 protocol buffer是什么 https://developers.google.com/protocol-buffers 这是protocol buffer的官方网站,上边有详细的使用方式。 一般常见的序列和反序列方式就是...

RandomObject
18分钟前
7
0
小白的前端之路-HTMl

HTML——超文本标记语言 HTMl里面有标签,标签又分为单标签和双标签,也分为行级元素和块级元素 标签是用<>包裹起来的,而且必须要有<>,否则会直接显示在浏览器上面哦 现在介绍一下常用标签...

osc_e45irv7l
18分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部