自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 收藏
  • 关注

原创 Load和CPU利用率

首先,top命令是没有计算load的平均值的,top命令只不过是在不停的从/proc/loadavg文件来读取load的平均值.(strace显示top命令会打开/proc/loadavg并且会定期从中读取load的平均值信息).当使用man proc的时候,会有如下说明: /proc/loadavg 该文件的前三个属性,分别表示在1分钟,5分钟和15分钟内,任务队列中进程的平均个数.

2017-08-13 16:30:10 1626

原创 Top命令基础

本文主要描述了Linux中top命令的一些用法以及意义

2017-06-23 22:36:32 1146

原创 Pipes-and-Filters模式

Pipe和Filter模式将执行复杂处理的任务分解为可重复使用的一系列离散元素。这种模式可以提高性能,可扩展性和可重用性,允许执行部署和缩放独立处理的任务元素。问题一个应用程序可能根据其处理的不同的信息需要执行各种复杂的任务。一个简单的,但不灵活的方法就是可以将应用的处理作为一个单独的模块。但是,如果部分相同的处理需要在应用程序的其他地方,这种方法可能会减少代码重构,重用,优化的机会。下图1说明了单

2017-06-11 16:34:27 5021

原创 Java内存管理(三)——卡片表

在垃圾回收的过程中,会碰到一个问题,就是老年代中的对象可能引用年轻代中的对象。在这种情况下,每次遍历老年代的对象来查找所有存活对象的时候就会消耗相当的时间。而且,在应用中,通常来说,这种引用是非常少的(某些研究表明,这种情况的引用占总引用量的1%都不到)。但是这些引用需要遍历整个老年代对象是一个相当大的Overhead。Card-tableJVM中会维护一个卡片表的数据结构,主要用于查看老年代中指向

2017-05-24 15:34:33 3178

翻译 Spring ORM数据访问——JPA

JPASpring JPA在org.springframework.orm.jpa包中已经可用,Spring JPA用了Hibernate集成相似的方法来提供更易于理解的JPA支持,与此同时,了解了JPA底层实现,可以理解更多的Spring JPA特性。Spring中JPA配置的三个选项Spring JPA支持提供了三种配置JPAEntityManagerFactory的方法,之后通过EntityM

2017-05-17 19:41:14 6017

翻译 Spring ORM数据访问——Hibernate

Hibernate我们将首先介绍Spring环境中的Hibernate 5,然后介绍使用Hibernate 5来演示Spring集成O-R映射器的方法。本节将详细介绍许多问题,并显示DAO实现和事务划分的不同变体。这些模式中大多数可以直接转换为所有其他支持的ORM工具。本章中的以下部分将通过简单的例子来介绍其他ORM技术。 从Spring 5.0开始,Spring需要Hibernate ORM

2017-05-16 19:52:45 5873

翻译 Spring ORM数据访问——概述

介绍一下Spring中的ORMSpring框架在实现资源管理、数据访问对象(DAO)层,和事务策略等方面,支持对Java持久化API(JPA)以及原生Hibernate的集成。以Hibernate举例来说,Spring有非常赞的IoC功能,可以解决许多典型的Hibernate配置和集成问题。开发者可以通过依赖注入来配置O-R(对象关系)映射组件所支持的特性。Hibernate的这些特性可以参与Spr

2017-05-15 21:38:17 5674

原创 Java内存管理(二)

前文描述了一些关于串行收集器的知识,本文继续针对垃圾收集器进行描述。并行收集器(parallel collector)在硬件发展到今天,很多的机器上面的物理内存会更高,并且拥有更多的CPU资源。并行收集器,也被称作吞吐收集器,就是用来更好的利用多个CPU性能,增加垃圾回收的吞吐量的一种垃圾收集器。并行收集器的年轻代回收年轻代使用的算法在串行收集器和并行收集器上是一致的。只是使用了多个CPU,通过降低

2017-04-29 15:23:13 1603

原创 Java内存管理(一)

Java相比传统语言(C,C++)的一个优势在于其能够自动管理内存,从而将开发者管理内存任务剥离开来。 本文大体描述了J2SE 5.0 release中JVM对于内存是如何管理的。并且为选择和配置对应的收集器,配置收集器的参数提供了一些建议和参考。手动VS自动内存管理内存管理是能够识别哪些释放的对象不再使用,释放掉这些对象所占用空间的一个

2017-04-20 20:50:44 3307

翻译 Competing-Consumers模式

Competing-Consumers模式支持多个并发消费者来处理消费消息队列上接收到的消息。该模式令系统能够并发的处理消息,并且优化吞吐,增加扩展性和可用性,同时平衡工作负载。问题在云环境中运行的程序可能需要处理大量的请求。相对于同步的处理每个请求,通常更常用的技术是由应用将请求通过消息系统来传给其他的服务(消费者服务),然后由其他的服务来异步处理。该策略能够确保应用中的业务逻辑不会因为请求的处理

2017-03-21 23:44:44 8354

翻译 Priority-Queue模式

Priority Queue模式优先级队列模式:将请求根据优先级进行分流,令高优先级的请求能够比低优先级的请求更快的接收和处理。优先级队列模式对于针对需要根据不同的客户端来实现不同的服务级别的情况下十分实用。问题应用可能会将某些指定的任务代理到一些其他的服务或应用上面。比如,会存在需要执行一些后台处理,或者与其他应用或者服务集成的情况。在云环境中,通常使用消息队列来代理任务和后台的处理。在很多时候,

2017-03-19 00:46:02 11543

翻译 Event-Souring模式

Event-Sourcing模式使用仅附加存储来记录或描述域中数据所采取的动作,从而记录完整的一系列系列事件,而不是仅存储实体的当前状态。因为存储包含全部的事件,可以用来具体化域对象。Event-Sourcing模式可以简化复杂的域中的任务,避免了数据模型和业务领域的同步和引发的争用问题;增强性能,扩展性,以及响应;为事物数据提供一致性;保留全部的事件执行历史,可以跟踪和实现回滚之类的补偿操作。问题

2017-03-08 23:45:57 5858

翻译 Materialized View模式

Materialized-View模式是在要求数据格式不利于查询操作的情况下,根据多个数据仓库的数据生成预生成的视图的一种模式。这种模式可以帮助支持高效的查询和数据提取,提高应用程序的性能。问题在存储数据时,开发人员和数据管理员考虑的第一优先级通常集中在如何存储数据,而不是如何读取数据。所选择的存储格式通常与数据的格式、管理数据大小和数据完整性的要求,以及存储的类型密切相关。例如,使用NoSQL存储

2017-02-22 12:43:24 13895

原创 公平锁与非公平锁

在ReentrantLock中很明显可以看到其中同步包括两种,分别是公平的FairSync和非公平的NonfairSync。公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。默认情况下ReentrantLock是通过非公平锁来进行同步的,包括synchronized关键字都是如此,因为这样性能会更好。因为从线程进入了RUNNABLE状态,可以执行开始,

2017-02-17 13:32:14 15577

原创 Java线程和多线程(十五)——线程的活性

当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞。当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕。在本章中,我们来需要仔细分析可能会影响应用多线程的活性问题。死锁死锁的概念在软件开发者中已经广为熟知了,甚至普通的计算机用户也会经常使用这个概念,尽管不是在正确的状况下使用。严格来说,死锁意味着两个或者更多线程在等待另一个线程释放其锁定

2017-02-17 13:22:49 4476 1

原创 Pessimistic and Optimistic locking

事务隔离通常通过锁定任何对事务中资源的访问来实现的。总的来说,有两种方法针对事务的锁定:乐观锁(Pessimistic locking)和悲观锁(Optimistic locking)悲观锁(Pessimistic locking)悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现

2017-02-15 15:35:34 2023

翻译 Sharding模式

将数据存储为一组水平的数据分区。这种模式可以在存储和访问大量的数据的时候提高可扩展性。场景和问题由单个服务器托管的数据存储可能受到下列限制:存储空间限制。基于大规模云应用所使用的数据仓库,可能会包含海量的数据,并且数据增长速度非常的快。一个服务器通常只提供有限容量的磁盘存储,当然它可能是可以替换现有的磁盘与较大的,或添加进一步磁盘到服务器以增加存储量。但是,该系统将最终达到一个硬件的限制,一味地增

2017-02-06 20:57:59 7298

翻译 Data Partitioning Guidance

在很多大规模的解决方案中,数据都是分成单独的分区,可以分别进行管理和访问的。而分割数据的策略必须仔细的斟酌才能够最大限度的提高效益,同时最大限度的减少不利影响。数据的分区可以极大的提升可扩展性,降低争用以及优化性能。为何进行数据分区绝大多数的云应用和云服务都会将存储和检索数据作为其业务的一部分。而应用所使用的数据仓库的设计对于系统的性能,吞吐,扩展性都有着非常重要的影响。其中在大规模系统中常用的一种

2017-02-03 17:20:32 5348 3

翻译 Health Endpoint Monitoring模式

Health Endpoint Monitoring模式是一种用来监控服务健康状态的模式。Health Endpoint Monitoring模式通过在应用内额外暴露一个可以进行功能检查的接口来实现,可以由外部工具定期访问暴露在外部的端点来检查服务的状态。该模式可以有效验证服务是否可用。问题监控应用的状态通常是一种很好的应用实践。通常来说,也是业务的一个需求。针对一些中间层和共享的服务也同样如此。因

2017-01-25 21:16:00 1898

翻译 Command and Query Responsibility分离模式

CQRS模式,就是命令和查询责任分离模式。CQRS模式通过使用不同的接口来分离读取数据和更新数据的操作。CQRS模式可以最大化性能,扩展性以及安全性,还会为系统的持续演化提供更多的弹性,防止Update命令在域模型Level发生冲突。问题在传统的数据管理系统中,更新数据以及请求数据的命令是通过数据仓库中的同一类型的实体来执行操作的。这些实体属于关系数据中的表的一列或者几列。通常,在这些系统中,所有的

2017-01-22 00:33:04 2375

翻译 Data Consistency Primer

云应用通常来说,使用的数据很多都是分散的,来自不同的数据仓库。在这种环境下,管理和保持数据一致性是很复杂的,无论是在并发跟可用性上都可能出问题。开发者有的时候就需要为了强一致性而牺牲可用性了。这也就意味着开发者需要需要针对应用最终一致性设计一些切面,并且意识到应用并不是所有的时刻都是完全数据一致的。管理数据一致性每个web应用和服务都会使用到数据。这数据通常被用户和组织来做出商务决策的。因此,保证数

2017-01-05 21:27:11 6741

翻译 Sagas模式

Sagas属于一个错误管理模式,也同时用于控制复杂事务的执行和回滚等。同时,Compensating-Transaction模式的的实现也是也是类似于Sagas策略的,可以对比参考一下。Sagas的最开始的出现是因为一些长时间的事务的实现(最开始的时候仅仅是因为数据内的事务),现在也包括一些跨越多个区域的分布式事务。这些长时间持续的事务无法简单地通过一些典型的ACID模型使用多段提交配合持有锁的方式

2016-12-21 12:51:50 11780

翻译 Compensating-Transaction模式

在应用中,会将一系列相关的操作定义为一个连续的操作,当其中一个或者多个步骤失败的时候,Compensating-Transaction模式会重置(回滚)这个连续的操作。在云应用中,这些需要保证一致性的操作是较为常见的,正是这些操作构成了复杂的业务处理和工作流。问题云中运行的应用会频繁的修改数据。数据可能会传播到另外一组数据源,但是数据库却可能在不同的地方。为了避免竞争并且增加诸如此类分布式环境的性能

2016-12-20 17:31:20 4514

翻译 Retry模式

Retry模式能够通过重复之前失败的操作来处理那些在调用远端服务或者网络资源的时候发生的一些可以预期的临时性的错误。Retry模式可以提高应用的稳定性。问题应用中,负责链接其他服务的组件必须要对环境中可能发生的临时性错误十分敏感。这些错误包括瞬间的网络连接丢失,服务的暂时不可用,或者是服务繁忙导致的超时等等。这些错误都属于不需要额外操作就能够自我修复的错误,只需要过了一定的时间延迟再重复之前的失败操

2016-12-17 12:35:07 5468

翻译 Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。问题在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源或者是远端服务的时候,是很容易碰到一些偶然的错误的,比如说,网络连接速度很慢,超时,或者是资源的过量使用,或者临时资源不再可用等等。这一类的错误通常来说会在短暂的时间内,自动恢复过来。一个健壮的云应用也该能够通过

2016-12-07 10:21:36 14367 1

原创 Java线程和多线程(十四)——Synchronized关键字解析

曾经有一个比较有趣的面试问题,那就是,关于使用synchronized关键字,是用在方法上面尾号,还是用在一个代码块上面为好?答案就是使用锁定代码块为更好。因为这样不会锁定对象。当synchronized关键字在实例方法的上面时,线程对于该方法的访问会直接锁定整个对象,参考如下代码:class Sync { public synchronized void syncMethod() {

2016-11-27 23:29:23 1987

原创 代理模式

本人最常用的模式是装饰模式,一直搞不太清楚其跟代理模式的区别,今天来区分一下。代理模式代理模式是结构设计模式之一,也是非常好理解的一种模式。根据GoF中所说:为其他的对象提供代理或者占位符,来控制其访问的权限从上面的定义就可以知道代理模式的场景主要是当我们需要提供访问访问控制的时候使用的。假设我们有一个类,要在一个系统上面运行一些命令。在服务器端这个类工作的很正常,但是如果我们想根据这个类做一个客户

2016-11-27 14:40:00 655

原创 责任链模式

前一阵子仔细看了一下Tomcat的Filter实现,才知道这个叫做责任链模式。正好借此机会了解了一下。 责任链模式属于行为设计模式中的一种。概念责任链模式用来在设计时实现松耦合的一种方式,适用于当客户端发送的请求对象需要进行一系列的处理的场景。然后,request对象会在责任链中来处理,在执行单元中判断是否将request继续发送到下一个执行单元来继续处理。JDK中的例子JDK中就有使用责任链模式

2016-11-27 14:06:48 1169

翻译 Cache-Aside模式

Cache-Aside模式是从数据仓库中将数据加载到缓存中,从而提高访问速度的一种模式。该模式可以有效的提高性能,同时也能一定程度上保证缓存中的数据和数据仓库中的数据的一致性,和同步数据到数据仓库中。问题应用通过缓存来优化针对数据仓库的重复访问。当然,令缓存中的数据永远和数据仓库中数据保持一致是不切实际的。应用中的缓存应该事先一些策略来辅助更新缓存保证数据的一致,当然,也需要检测数据过期等情况来进

2016-11-15 23:04:29 13100

原创 Java线程和多线程(十三)——Callable,Future,FutureTask

在Java多线程之中,Callable和Future的使用时非常广泛的。在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务。但是,Runnable的任务是无法有返回值,也不能抛出异常的。而有些时候,我们希望一个线程能够有一些返回值。在Java 5中,引入了java.util.concurrent.Callable接口,这个接口很类似于Runnable接口,

2016-11-02 10:49:46 6221 4

原创 Java线程和多线程(十二)——线程池基础

Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务。开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池。 线程池是Java中多线程的一个重要概念,因为通过Thread模型来控制多线程是非常麻烦以及易错的一个过程。过多的释放线程会造成线程调度的变慢以及过度的消耗内存。而频繁的创建线程,也没有很好的复用线程,所以有了线程池的概念。Java中的

2016-10-30 11:12:43 10249

原创 Java线程和多线程(十一)——BlockingQueue

这次讨论的是Java的BlockingQueue,java.util.concurrent.BlockingQueue是一个Java的队列接口,支持一系列操作,比如,在获取和移除对象的时候如果队列为空会来等待队列变成非空的,而当队列满了的时候,插入元素会等待队列中的元素被移除,保证队列有空余的空间。Java的BlockingQueue是不能接受null的值,如果传入null将会跑出NullPoint

2016-10-22 18:51:38 3535

原创 Java线程和多线程(十)——TimerTask

Java中的java.util.Timer是一个工具类,可以用于调度一个线程在将来的某一个时刻执行特定的任务。Java Timer类可以将一个任务定时执行一次,或者是以后以每隔一定的时间间隔来触发一次。Java TimerTaskjava.util.TimerTask是一个抽象类,也同时实现了Runnable接口的。我们可以继承这个类来创建我们自己的TimerTask之后由Timer来调度。Java

2016-10-15 19:12:46 7755 1

原创 Java线程和多线程(九)——死锁

Java中的死锁指的就是一种多于两个线程永远阻塞的特殊状况。Java中的死锁状态至少需要多于两个线程以及资源的时候才会产生。这里,我写了一个产生死锁的程序,并且讲下如何分析死锁。首先来看一下产生死锁的程序:package com.sapphire.threads;public class ThreadDeadlock { public static void main(String[] arg

2016-10-13 20:45:49 3440 2

翻译 Spring AOP(一)——基础概念

前文的一些内容更多是针对Spring容器内部的一些特性的描述,接下来一个专题将描述Spring AOP的一些信息,配置细节等等。介绍面向切面编程(AOP)是一种新的针对程序结构的思路,它补足了面向对象编程(OOP)的一些细节上的不足。OOP的关键在于模块化概念,也就是Java中的class。而AOP关心的模块则是切面。切面关心的模块化主要是考虑的是诸如事物管理这类会跨越多个类型和对象的一些方面。(而

2016-10-12 23:39:12 20012

原创 Java线程和多线程(八)——Thread Dump

Java的Thread Dump就是列出JVM中所有激活状态的线程。Java Thread DumpJava Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的。下面将介绍多种不同的方式来获取Java程序的Thread Dump信息。这些指令在*nix型的操作系统下是有效的,但是在Windows下面,采取的方式会有一些不同。(主要是Pid信息获取不太一致,可通过任务管理器获取)Vi

2016-09-27 22:54:51 10765 1

翻译 Spring核心技术(十五)——BeanFactory

BeanFactory是Spring IoC功能的潜在基础,但是现在BeanFactory一般仅仅用于直接集成第三方的框架,对于大多数的Spring用户来说,BeanFactory已经算是一个历史了。BeanFactory以及其相关的接口,包括BeanFactoryAware,InitializingBean,DisposableBean,出于跟大量第三方框架兼容的问题,仍然存在。因为很多时候,第三

2016-09-26 23:02:35 1762 2

原创 Java线程和多线程(七)——ThreadLocal

Java中的ThreadLocal是用来创建线程本地变量用的。我们都知道,访问某个对象的所有线程都是能够共享对象的状态的,所以这个对象状态就不是线程安全的。开发者可以通过使用同步来保证线程安全,但是如果不希望使用同步的话,我们也可以使用ThreadLocal变量。Java ThreadLocal其实每个线程都有自己的ThreadLocal变量,并且这个变量可以通过get()和set()方法来获取默认

2016-09-24 18:16:04 2472 1

原创 Java线程和多线程(六)——守护线程

当我们在Java中创建线程的时候,这个线程在默认的情况下是一个用户线程,并且,如果这个线程在运行,那么JVM就不会终结这个应用。和用户线程不同,当一个线程被标记为守护线程的时候,JVM在用户线程结束的时候,是不会持续等待守护线程结束的,而是直接结束程序,并且结束程序中相关的守护线程。Thread.setDaemon(true)方法可以用来将线程置为守护线程,参考下面的例子:package com.s

2016-09-20 13:11:00 3139 1

原创 Java线程和多线程(五)——单例类中的线程安全

单例模式是最广泛使用的创建模式之一。在现实世界之中,诸如Databae的连接或者是企业信息系统(EIS)等,通常其创建都是受到限制的,应该尽量复用已存在对象而不是频繁创建销毁。为了达到这个目的,开发者通常会通过实现单例模式来创建一个wrapper类,来封装资源,限制其运行时所创建对象的个数。单例中的线程安全总的来说,开发者一般会按照如下的方式来创建单例的类:使用私有构造函数来避免其它外部引用通过n

2016-09-17 15:05:59 1969 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除