架构复杂度中的性能

性能带来的复杂度主要体现在两方面: 单台计算机内部为了获得高性能而带来的复杂度。 另一方面是多台计算机集群为了获得高性能而带来的复杂度。 此处的单台计算机并非都可以用集群中的单节点来涵盖。 伸缩性和高性能息息相关的 单机 计算机内部复杂度最关键的地方就是操作系统,是作为将硬件性能充分发挥出来的关键。 操作系统作为软件的运行环境,其复杂度直接决定了软件系统的复杂度。 操作系统和性能最相关的就是进程和线程。 在早期,计算机一次只能执行一个任务,如果某个任务需要从 I/O 设备(例如磁带)读取大量的数据,在 I/O 操作的过程中,CPU 其实是空闲的,而这个空闲时间本来是可以进行其他计算的。...

1 minute read

内存分析工具MAT

MAT的下载地址:https://eclipse.org/mat/downloads.php 两种使用方式: 独立使用 eclipse自带MAT也可以使用 Shallow heap Shallow size就是对象本身占用内存的大小,不包含其引用的对象。 常规对象(非数组)的Shallow size有其成员变量的数量和类型决定。 数组的shallow size有数组元素的类型(对象类型、基本类型)和数组长度决定 因为不像c++的对象本身可以存放大量内存,java的对象成员都是些引用。 真正的内存都在堆上,看起来是一堆原生的byte[], char[],...

1 minute read

故障假设与故障检测器 Election algorithm

要点 熟悉故障检测器有助于了解分布式系统中故障的本质 如何判断进程何时已经崩溃 首先,为了便于理解及阐述,做如下假设: 每对进程都通过可靠的通讯连接(尽管底层网络组件可能出现故障,但进程使用能屏蔽故障的可靠通讯协议)。 进程故障不隐含对其他进程的通信能力的威胁(没有进程依赖于其他进程来转发消息)。 进程只在崩溃时出的故障(这个假定对与很多系统来说足够来) WARNING: 一个可靠的通讯连接最终将消息传递到接收者的输入缓存区。在同步系统中,假设在必要的地方有硬件冗余,一遍底层出故障的时候,可靠通道不仅最终传递每个消息,而且是在指定时间内完成传递工作。 .名词诠释 [width=”100%”,options=”header,footer”] |==================== |中文|英文|定义 |网络分区|network partition|每个网络内的进程可以通信,但两对进程在路由故障的时候不可能通讯...

1 minute read

选举算法 Election algorithm

选择一个唯一的进程来扮演特定的角色的算法成为选举算法。 举例”中央服务器”互斥算法一个变种,从临界区的进程中选择一个进程作为”服务器”。这就需要选举算法来选举一个进程。基本要求是所有进程都同意,当进程不再相担任这个角色,需要重新选举。 .名词解释 [width=”100%”,options=”header,footer”] |==================== | 中文 | 英文 | | 召集选举 | call the...

1 minute read

分布式互斥

要点 临界区问题 解决分布式互斥问题的解决方案:基于消息传送的解决方案 这种解决方案独立于特定的资源管理方案,下面会具体描述其算法 部分算法后在还会进一步描述 [NOTE] 有些应用场景是没有服务器的,且需要协调它们(一对进程)对共享资源的访问。这种情况经常出现在以太网、”自组织”模式的IEEE 802.11 无线网等网络中,其中网络接口作为对等成分进行协作,使得在共享介质上一次只有一个节点进行传输。 [NOTE] 简单的解决方案是这些进程只要通过互相通信就能互斥,就能不需要服务器。 NFS文件服务器是无状态的,因此不支持文件加锁 UNIX系统提供由locked(守护进程)实现的一个文件加锁服务。 互斥算法 假设:...

2 minute read

垃圾回收

Heap: PSYoungGen: PS Eden Space: 新的对象会先生成在Young area,也就是PSYoungGen中。 新生代总大小为eden+from+to,与-Xmn相对应。例如:有个服务获取数据包,但是数据比较大,且需要并发读取,这时候新增对象会多。如果新生对象多到,新生代内存空间不够,则会转移到老生代。 from space: to space: PS Survivor Space:救助空间。...

1 minute read

JVM 相关

工具 jconsole:java自带图形化调试工具 命令:jstack(查看线程)、jmap(查看内存)和jstat(性能分析) 概要 Heap: PSYoungGen: PS Eden Space: 新的对象会先生成在Young area,也就是PSYoungGen中。 新生代总大小为eden+from+to,与-Xmn相对应。例如:有个服务获取数据包,但是数据比较大,且需要并发读取,这时候新增对象会多。如果新生对象多到,新生代内存空间不够,则会转移到老生代。 from space: to...

2 minute read

再看java中的弱引用

== WeakReference 为了更好的理解弱引用,务必对WeakReference有清晰的认识 [source,java] /** * Returns this reference object's referent. If this reference object...

2 minute read