存档

作者存档

Daniel-Journey Weekly Dose -2012/3/21

2012年3月21日 admin 没有评论

Java

BerkleyDB for Java概述

LIGHTWEIGHT FAST PERSISTENT QUEUE IN JAVA USING BERKLEY DB

设计模式之不变模式(Immutable Pattern)分析

 

理解ThreadLocal

  线程首次调用ThreadLocal.get方法时,会请求initialValue提供一个初始化值。概念上,你可以将ThreadLocal<T> 看作Map<Thread,T>它存储了线程相关的值,不过事实上它并非这样实现的。与线程相关的值存储在线程对象自身中,线程终止后,这些值会被垃圾回收。

关于Java中的final

当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变,但引用变量所指向的对象中的内容还是可以改变的

其初始化可以在三个地方,
一是其定义处,也就是说在final变量定义时直接给其赋值,
二是在构造函数中。而且在Java1.1以前,只能是在定义时给值
三是在初如化代码块中{} 或者 static{}

安全发布的模式

如果一个对象不是不可改变的,它就必须被安全的发布,通常发布线程与消费线程都必须同步化。

为了安全地发布对象,对象的引用以及对象的状态必须同时对其他线程可见。为了创建一个正确的对象可以通过以下条件安全的发布:

  1. 通过静态初始化器初始化对象的引用。
  2. 将他的引用存储到Volatile域或AutomicReference;
  3. 将他的引用存储到正确创建的对象的final域中
  4. 或者将它的引用存储到有锁正确保护的域中

 

分类: 阅读 标签:

Daniel-Journey Weekly Dose -2012/3/24

2012年3月21日 admin 没有评论

ARCHITECTURE

谈谈 Event & Thread

Event/thread之争由来已久,有人说event好 [1],也有人说thread好 [2],但更早前人说了两个具有duality,其实一样好 [3]。

先从thread structure和context switch入手理解thread model(以后找机会再谈谈0号1号进程,这是解剖OS的肯綮),培养对control flow的直观认识,进而熟悉event-driven,培养起event=logical thread的认识。然后辨识non-blocking/asynchronous/continuation/delegation等等概念。如果还是一知半解,没有关系,software engineer有个法宝,无往而不利。就是modeling/simualting,然后iterate

Eventing带来了很多问题,你得把思维掰碎了再重组。如果你不理解,建议看看“低俗小说”,昆汀·塔伦蒂诺通过event-driven完成了对以前multi-threading电影结构的颠覆。

简单来说,event/thread只是形式,更重要的是二者反映出的异步/同步思想。虽然thread也能做成异步,event也可同步,但毕竟这不是自然的行为。很多时候形式很重要,它可以引导用户采用你的模型/理念。你会很自豪,因为这不是你强制的,但这也带来了压力,不好的形式将在很长时间后引爆问题——这也是为什么写基础库比写application需要深厚得多的功力的原因。

异步理念带来了系统结构深刻的变化,更多的资源、数据结构和控制点暴露出来了,也使得控制流得以在更细粒度上分片。归结为两个好处:1) 执行的可调度性;2) 资源分配的动态性;从而也使调速、限流等手段得以实现。这其实也就使得以前的layering被打破了,使得mechanism/policy彻底解耦成为可能,使得底层可以更简单、上层可以充分利用它的intelligence,从而带来了application-controlled extension。其实这可以用一张图片形象描述,就是鲜奶要保温而火腿需冷藏那个 [figure1]。

 

LINUX

Fio压测工具和io队列深度理解和误区

应用使用IO通常有二种方式:同步和异步。 同步的IO一次只能发出一个IO请求,等待内核完成才返回,这样对于单个线程iodepth总是小于1,但是可以透过多个线程并发执行来解决,通常我们会用16-32根线程同时工作把iodepth塞满。 异步的话就是用类似libaio这样的linux native aio一次提交一批,然后等待一批的完成,减少交互的次数,会更有效率。

【原创翻译】《Linux 性能及调优指南》2.3.10 pmap

在输出结果的最后一行显示了一些重要的信息,如下:

mapped :映射到文件的内存数量

writable/private :进程所占用的私有地址空间数量

shared :与其它进程共享的地址空间数量

pmap : 理解linux的进程内存占用

RSS 就是这个process 实际占用的物理内存

VSZ 就是process 的虚拟内存,就是process 现在没有使用但未来可能会分配的内存大小。

而 pmap 的输出中,writeable/private: 19208K ,这个就是yakuake 这个程序真正占用的物理内存,不包含shared libraries 。在这里,它只有19208K,而ps 的RSS 是34416K。

linux之pmap命令!

Address:00378000-0038d000 进程所占的地址空间
Kbytes 该虚拟段的大小
RSS 设备号(主设备:次设备)
Anon 设备的节点号,0表示没有节点与内存相对应
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
Mapping: bash 对应的映像文件名

了解Linux的进程与线程

pmap -x <pid> 可以查看进程的内存占用信息

lsof -a -p <pid> 可以查看一个进程打开的文件信息

ps -Lf <pid> 可以查看进程的线程数。

procfs也是一个分析进程结构的好地方。procfs是一个虚拟的文件系统,它把系统中正在运行的进程都显现在/proc/<pid>目录下。

DATABASE

ORACLE ERROR CODE代表的意思

分类: 阅读 标签: , ,

Daniel-Journey Weekly Dose -2012/3/18

2012年3月19日 admin 没有评论

Database

Berkeley DB Performance Tuning

The database cache is global for all databases in a particular environment and needs to be allocated at the time that environment is created. Most of the time this is done programmaticaly. The issue of course is that, the optimal cache size is directly related to the size of the data set, which is not always known at application design time. Many BerkeleyDB applications end up storing considerably more data than originally envisioned. Even worse, some applications do not explicitly specify a cache size at all, so the default cache size of 256KB is allocated – which far too low for many applications.

Java

JVM学习之-栈

Java Anti-Patterns

    1. String concatenation
    2. Lost StringBuffer performance
    3. Testing for string equality
    4. Converting numbers to Strings
    5. Not taking advantage of immutable objects
    6. XML parsers are for sissies
    7. Assembling XML with String operations
    8. The XML encoding trap
    9. char is not int
    10. Undefined encoding
    11. Unbuffered streams
    12. Infinite heap
    13. Infinite time
    14. Assuming a cheap timer call
    15. Catch all: I don’t know the right runtime exception
    16. Exceptions are annoying
    17. Re-wrapping RuntimeException
    18. Not properly propagating the exception
    19. Catching to log
    20. Incomplete exception handling
    21. The exception that never happens
    22. The transient trap
    23. Overkill initialization
    24. Log instances: static or not?
    25. Chosing the wrong class loader
    26. Poor use of reflection
    27. Synchronization overkill
    28. Wrong list type
    29. The HashMap size trap
    30. Hashtable, HashMap and HashSet are overrated
    31. Lists are overrated
    32. Object arrays are soooo flexible
    33. Premature object decomposition
    34. Modifying setters
    35. Unnecessary Calendar
    36. Relying on the default TimeZone
    37. Time zone "conversion"
    38. Using Calendar.getInstance()
    39. Dangerous Calendar manipulation
    40. Calling Date.setTime()
    41. Assuming SimpleDateFormat was thread-safe
    42. Having a global Configuration/Parameters/Constants class
    43. Not noticing overflows
    44. Using == with float or double
    45. Storing money in floating point variables
    46. Not freeing resources in a finally block
    47. Abusing finalize()
    48. Involuntarily resetting Thread.interrupted
    49. Spawning thread from static initializers
    50. Canceled timer tasks that keep state
    51. Holding strong references to ClassLoaders and unflushable caches
分类: 阅读 标签: ,

Daniel-Journey Weekly Dose -2012/3/4

2012年3月5日 admin 2 条评论

Investment

基金定投五大法宝

第一,定投不必太在意择时,长期坚持更重要。

第二,必须遵守“小跌小补仓,大跌大补仓”原则。

第三,由于市场通常都是风水轮流转,因此,所定投的标的品种也需要轮流换。

第四,及时锁定收益,落袋为安。

第五,以基养基,用基金定投所获取收益来定投别的基金。

牛市和熊市的操作思维不同,熊市是反弹10%就准备跑,牛市是下跌10%就准备买。

Programming

转:结对编程的误区

Architecture

Event Sourcing

Java

Using a memory mapped file for a huge matrix

Annotation入门实例,一分钟了解Annotation

spring中bean的高级属性之list, set, map以及props元素(含举例)

How to develop and monitor Thread Pool Services by using Spring

Network

How To Optimize Your Site With HTTP Caching

Caching Method 1: Last-Modified

Caching Method 2: ETag

Caching Method 3: Expires

Caching Method 4: Max-Age

 

Windows

如何压缩 Outlook PST 和 OST 文件

用车小常识(一)

2012年3月3日 admin 没有评论

如何调整后视镜

A、左镜:将地平线置于镜面的1/2,车身约占镜面1/4;

B、右镜:将地平线置于镜面的2/3,车身约占1/4;

C、中视镜:不是化妆镜,切记!

 

教你三招倒车入位

http://www.tudou.com/programs/view/hYTWCvsjgeM/

分类: 汽车 标签:

Daniel-Journey Weekly Dose -2012/2/26

2012年2月23日 admin 3 条评论

Algorithm

Algorithm of the Week: Insertion Sort

LINUX

Linux系统内存相关信息获取

/proc/meminfo 每个字段的意思

ulimit

ulimit用于shell启动进程所占用的资源

cat /proc/<tomcat pid>/limits

How do I Find Out Linux CPU Utilization?

sar -u 2 5

Report CPU utilization. The following values are displayed:

  • %user: Percentage of CPU utilization that occurred while executing at the user level (application).
  • %nice: Percentage of CPU utilization that occurred while executing at the user level with nice priority.
  • %system: Percentage of CPU utilization that occurred while executing at the system level (kernel).
  • %iowait: Percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.
  • %idle: Percentage of time that the CPU or CPUs were idle and the system did not have an outstanding disk I/O request.

Programming

QPS

QPS每秒查询率(Query Per Second)

每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。

对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

Context Switches

You can determine whether context switching is excessive by comparing it with the value of Processor\% Privileged Time. If this counter is at 40 percent or more and the context-switching rate is high, then you can investigate the cause for high rates of context switches.

线程

轻量级锁
偏向锁

多线程的优劣/性能/系统开销

1.进入内核模式;
2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
5.退出内核模式。

There are three principles of package cohesion

There are three principles of package coupling

Java

理解HotSpot的CMS GC

Java Anti-Patterns

Jboss调优——最佳线程数

一个GC频繁的Case

Java轻量级锁原理详解(Lcightweight Locking)

Java轻量级锁原理详解(Lightweight Locking)

正确使用 Volatile 变量

Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分

锁提供了两种主要特性:互斥(mutual exclusion)可见性(visibility)

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。 c

Java生成UUID

String s = UUID.randomUUID().toString()

Guidelines for Java Testable Design

Avoid complex private methods
Avoid final methods
Avoid static methods
Use “new” with care
Avoid logic in constructors
Avoid the Singleton
Favor composition over inheritance
Wrap external libraries
Avoid service lookups

Ways to create objects in java example . Use static factory methods to create instance of a class in java

1. Use new keyword and call to constructor
2.Use public static factory methods
3.getInstance()
4.Reflective methods for creating instances of classes :
5.Objects creation using Deserialisation :
6.Using Clone method to copy / clone objects of an exisiting object

Architecture

Event Collaboration

Message Bus a.k.a. Event Bus

Message Bus

转载:架构师接龙系列

2012年2月23日 admin 没有评论

一些知名的架构师的问与答,无论是问题还是答案都值得学习

架构师接龙:岳旭强 VS. 杨卫华

JDK 7给Web带来了什么?协程在老系统上的应用,有哪些挑战?怎么解决?

类似Twitter、新浪微博这样的应用,针对第三方开放API接口,如何避免少数应用程序因为用户量激增而对系统带来冲击?对请求数做限制之外有没有更为折衷的办法?

Web应用的性能、扩展性是业界比较关注的,但是可用性显然更重要,有什么关键措施和经验可以提高系统的可用性?

 

架构师接龙:腾讯高级工程师邝宇恒VS. 百度架构师侯震宇

你的团队会对所有代码进行代码评审吗?具体如何实施?如何评价代码评审的作用?

架构师接龙 飞信孙朝晖VS.139说客李祎

你们做灰度发布和A/B测试吗?如果做的话,在架构上是如何支持的?

目前你的组织内是否具备了根据性能需求动态伸缩的应用部署基础架构?如果有的话,是怎样建设的?如果还没有,你怎样看待这个问题?

在你们的系统中,是否在设计与开发阶段就预留功能降级的接口,以应对突发故障?请举例说明设计的原则和实施方法。

架构师接龙:黄冬&邓毅

大量的用户使用行为记录需要留存,而留存下的数据量非常大,对于相关的数据也要进行频繁和复杂的业务计算,对于这样的存储有什么解决方案吗?对于这样的分析型计算有什么有效的架构 ?

架构师接龙:盛国军&栾义来

我们知道缓存能够提升性能,但缓存有个致命的问题,就是对事实数据的改变不敏感。如何保持和协调缓存数据和事实数据的一致性?

架构师接龙 岑文初VS. 杨海朝

模块化来降低耦合性时如何把握模块划分的粒度?如何权衡复用性与粒度过细导致依赖复杂的矛盾?

如何处理高并发系统中缓存失效的场景?

目前是如何做好应用的依赖监控的?例如依赖缓存,是否知道缓存的命中率情况、使用率等;依赖外部服务,是否知道外部服务的消耗时间、成功失败情况等。

对于不同系统之间的耦合如何处理?比如前端系统要求快速响应大量的用户请求,但是依赖于后端的服务体系,而服务系统的瓶颈可能在数据库读写上,如何协同这样需求差异化系统工作?

对于系统优化,平时如何查找瓶颈,最后又如何确定优化后是有效的?

架构师接龙 杨海朝VS. 孙立

在错综复杂的庞大系统中,如何避免多条线频繁地发布新代码对线上业务的影响?

在设计一个大规模伸缩性服务时需要做好哪些准备?是否会考虑分区、故障、自动化、异步等方面的问题?

在架构设计中如何应对不断出现的超过预估的数据量和访问量?

架构师接龙 孙立VS. 孙朝晖

你如何看待横向扩展(Scale Out)和纵向扩展(Scale Up)?

大型网站往往会将多种语言进行融合使用,关于这方面,你有什么经验分享?

对于大型系统的突发性故障,如何在架构层面帮助快速定位故障的原因?

架构师接龙:林昊&黄冬

随着数据量的不断增长以及前端应用的不断水平扩充,数据库的压力会成为明显的问题,这个时候常用的方案是数据拆分,在数据拆分时有些什么较好的拆分方式,以及如何能够做到数据拆分后对已有程序不产生影响或产生很小的影响?

数据拆分只是解决数据量增长后带来的问题的一种解决方案,请问是否还有一些其他的方式来解决数据量增长带来的问题呢,以及如何来实现这些方式呢?

对于大型网站而言,经常要面对不可预知的热点事件带来的高流量,如何能够做到避免这样突发的高流量造成网站的不可用呢?

高度可伸缩是互联网追求的目标,基于您的经验,请提供一些构建高度可伸缩系统的最佳实践?

架构师接龙:盛大许式伟VS. 金山张宴

作为系统架构师,您一般会从哪些方面来保证网站的高可用性(降低故障时间)?

您在任务切分上,有什么经验分享?您通过哪些手段保证任务的独立性?

这些讨论中有很多直接学习和借鉴的内容,下面是我感兴趣的几个话题

  1. JDK7的新特性,包括GC和并发框架
  2. 如何进行代码Review
  3. 功能降级,以及如何不断出现的超过预估的数据量和访问量
  4. 如何保持和协调缓存数据和事实数据的一致性,以及如何解决缓存失效的问题
  5. 通过模块化来降低耦合度
  6. 分层接口化和组件化
  7. 服务化
  8. 应用监测
  9. 做好应用的依赖监控,例如依赖缓存,是否知道缓存的命中率情况、使用率等;依赖外部服务,是否知道外部服务的消耗时间、成功失败情况等。
  10. 系统之间耦合的处理
  11. 异步化、线程池化、事件驱动

Daniel-Journey Weekly Dose -2012/2/19

2012年2月20日 admin 2 条评论

Java

Java Socket实战之一 单线程通信

Java Socket实战之二 多线程通信

Java Socket实战之三 传输对象

Java Socket实战之四 传输压缩对象

JVM伪共享

disruptor – Concurrent Programming Framework 并发编程框架

How to Analyze Java Thread Dumps

Architecture

The LMAX Architecture

The LMAX Architecture(中文)

Tumblr架构 – 页面浏览量150亿/月并且比Twitter更难拓展

Pipe Comet

Servlet 3以前,一次http请求就由一个容器线程完成全部处理,容器线程的生命周期取决于整个业务处理的时间(如果后端有依赖系统,例如DB,集中式缓存,外部系统service),由此可见,并发处理请求的数量在容器线程池有限的条件下,直接用容器线程数量/rt(响应时间)即可得到。而容器线程是否真的需要有那么久的生命周期?在整个事务处理过程中是否可以被回收,等到需要时在申请?

ebay_architecture.pdf(2006)

eBay 的Scalability最佳实践

水平切分
避免分布式事务
虚拟化所有层次
Cache

再谈 eBay 的扩展性最佳实践

1)水平切分 Partition Everything

2)异步处理Asynchrony Everywhere

3)自动Automate Everything

4) 故障检测与回溯(Remember Everything Fails)

5)拥抱不一致(Embrace Inconsistency)

Web服务请求异步化介绍

SOA

SOA@eBay读后

SOA @ eBay : How is it a hit

Daniel-Journey Weekly Dose –2012/2/12

2012年2月13日 admin 没有评论

LINUX

linux中的inode简单介绍

Linux会为每一个文件分配一个唯一的inode节点。在linux中,文件的文件名、文件属性、文件内容是分别存储的:文件名存放在目录项(即 dentry)中,文件属性存放在inode中,文件内容存放在block中。Linux在查找文件时,首先先读取dentry,dentry中存储的文 件名和inode编号的一个映射表, 根据这个表找到inode编号,再根据inode找到磁盘中的文件。

Understand UNIX / Linux Inodes Basics with Examples

An Inode number points to an Inode. An Inode is a data structure that stores the following information about a file :

  • Size of file
  • Device ID
  • User ID of the file
  • Group ID of the file
  • The file mode information and access privileges for owner, group and others
  • File protection flags
  • The timestamps for file creation, modification etc
  • link counter to determine the number of hard links
  • Pointers to the blocks storing file’s contents
  •  

    $ stat DW.txt 

    File: `DW.txt’
    Size: 24908         Blocks: 56         IO Block: 4096   regular file
    Device: ca01h/51713d    Inode: 15696241    Links: 1
    Access: (0664/-rw-rw-r–)  Uid: (  505/   admin)   Gid: (  505/   admin)
    Access: 2011-11-03 18:45:29.000000000 +0800
    Modify: 2011-11-03 18:38:33.000000000 +0800
    Change: 2011-11-03 18:38:33.000000000 +0800

Linux Performance Monitoring and Tuning Introduction

UNIX Process Overview (Inside a Linux Process, and Types of Process)

7 Practical PS Command Examples for Process Monitoring

List Currently Running Processes (ps -ef, ps -aux)

 

List the Process based on the UID and Commands (ps -u, ps -C)

ps -f -u wwwrun,postfix

ps -f -C tatad.pl

List the processes based on PIDs or PPIDs (ps -p, ps –ppid)

ps -f –ppid 9576
ps -f  -p 25009,7258,2426

List Processes in a Hierarchy (ps –forest)

ps -e -o pid,args –forest

List all threads for a particular process (ps -L)

ps -C java -L -o pid,tid,pcpu,state,nlwp,args

Finding memory Leak (ps –sort pmem)

ps aux –sort pmem

6 Stages of Linux Boot Process (Startup Sequence)

Bg, Fg, &, Ctrl-Z – 5 Examples to Manage Unix Background Jobs

Executing a background job

Appending an ampersand ( & ) to the command runs the job in the background.

Sending the current foreground job to the background using CTRL-Z and bg command
  • Press ‘CTRL+Z’ which will suspend the current foreground job.
  • Execute bg to make that command to execute in background.
  • View all the background jobs using jobs command

     

    Taking a job from the background to the foreground using fg command

      fg %1 will bring the job#1 (i.e download-file.sh) to the foreground.

Kill a specific background job using kill %

kill %2

Linux / Unix Command: ps

Linux下ps命令详解

linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 不可中断的静止
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令

PS命令常用用法

ps a 显示现行终端机下的所有程序,包括其他用户的程序。

ps -A 显示所有程序。

ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

ps -e 此参数的效果和指定"A"参数相同。

ps e 列出程序时,显示每个程序所使用的环境变量。

ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

ps -H 显示树状结构,表示程序间的相互关系。

ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

ps s 采用程序信号的格式显示程序状况。

ps S 列出程序时,包括已中断的子程序资料。

ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。

ps u 以用户为主的格式来显示程序状况。

ps x 显示所有程序,不以终端机来区分。

最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

Investment

【经济周期六个阶段】第1阶段经济下滑期:仅有债券是牛市。第2阶段:仅有商品是熊市。第3阶段经济复苏期:都是牛市。第4阶段:只有债券是熊市。第5阶段:只有商品是牛市。第6阶段经济滞胀期:都是熊市

JAVA

JVM -XX: 参数介绍

Understanding JVM Internals

Master/worker or P2P Grid? How about You choose?

JPPF

JPPF makes it easy to parallelize computationally intensive tasks and execute them on a Grid.

CPU 占用过高 (查看Java堆)

常用的Linux系统监控命令

nid : 对应的linux操作系统下的tid

tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上

Programming

再读《重构》

重构的意义之一也是提高开发进度。杀手锏是”不要告诉经理“。

The benefits of reducing memory consumption

Working set size

Subversion Tip of the Week-Recovering Deleted Items

svn log –verbose

This will list all of the changed items in each revision, allowing you to pinpoint the revision where you deleted the file.

svn merge {revision number}

svn copy {revision number}

SOA

服务治理过程演进

服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。
其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?
这时就需要登记每个服务都是谁负责的,并建立一个服务的文档库,方便检索。

慢慢一些敏感数据也都服务化了,安全问题开始变得重要,谁能调该服务?如何授权?

这样的服务可能需要一个密码,访问时需带着此密码,但如果用密码,要改密码时,就会很不方便,所有的消费方都要改,所以动态生成令牌(Token)可能会更好,提供方将令牌告之注册中心,由注册中心决定是否告之消费方,这样就能在注册中心页面上做复杂的授权模型。

就算是不敏感的服务,也不是能任意调用,比如某服务突然多了一个消费者,这个消费者的请求量直接把服务给拖跨了,其它消费者跟着一起故障。

首先服务提供方需要流控,当流程超标时,能拒绝部分请求,进行自我保护。
其次,消费者上线前和提供者约定《服务质量等级协定(SLA)》,SLA包括消费者承诺每天调用量,请求数据量,提供方承诺响应时间,出错率等,将SLA记录在监控中心,定时与监控数据对比,超标则报警。

虽然有SLA约定,如果不能控制,就只是君子协定,如何确保服务质量?
比如:一个应用很重要,一个不那么重要,它们调用同一个服务,这个服务就应该向重要应用倾斜,而不是一视同仁,当支撑不住时,应限制不重要应用的访问,保障重要应用的可用,如何做到这一点呢。这时,就需要服务路由,控制不同应用访问不同机器,比如:
应用分离:
consumer.application = foo => provider.host = 1,2,3
consumer.application != foo => provider.host = 5,6
读写分离:
method.name = find*,get* => provider.host = 1,2,3
method.name != find*,get* => provider.host = 5,6

随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?

应用间声明依赖强度,哪些功能强依赖,哪些弱依赖,然后基于依赖强度,计算出影响面,并定期测试复查,加强关键路径上的服务的优化和容错,清理不该在关键路径上的服务。

分类: 阅读 标签: , , , ,

Daniel-Journey Weekly Dose –2012/2/5

2012年2月5日 admin 没有评论

Windows

Windows 7中Telnet功能安装与测试

Programming

我们什么时候应该使用异常?

错误码

1. 错误信息不丰富
2. 加入错误状态码可能需要改变函数签名
3. 错误状态码可能会被忽略

 

Cloud

谁来拯救云计算

Scalability

Write Through Cache

Cache is a component that will magically store data so that future requests of that same data will not be to the Remote Server, and hence it will improve the performance of our application significantly faster.

Operations

Java应用运维

Architecture

关于排队系统

对事件驱动的消息订阅的再思考

浅谈架构

如果要更正式点定义,架构就是model和pattern,从而把code串成system。而其中最重要的就是design principles (设计原则),即为什么这个问题要用这个而非那个。更文艺点,再结合点美学,也可以叫作design philosophy (设计哲学或理念)。

然后我们来看什么是model和pattern,这两个具体的定义我还没想出来。先说一下比较,model偏宏观,而pattern偏微观;model重抽象描述,而pattern重具体实现。比如,你的系统有一个服务端和一个客户端,那么client/server就是model,而client与server之间的交互方式则是pattern,比如RPC/message、同步/异步,比如用滑动窗口来组织请求与应答等等。当然,这和系统的尺度有关。如果你zoom in到服务端,此时的model可能就是模块的组织关系,而pattern则是调用方式,比如用function call还是event等。

架构是什么:其实"架构", 就是一个人用于解决常见(注意常见)设计问题的特定方法…

经常有人把"架构"说的很玄乎,很虚. 其实"架构", 就是一个人用于解决常见(注意常见)设计问题的特定方法(注意特定的, 但不一定是一个). 遇到问题稍许有些变化, 他能适当的调整自己的常用(注意常用)设计而去适合这个变化的能力. 这就叫:"架构"设计… 也就是说, 架构是:方法论, 是经验, 更是变通能力.

Reactor模式和NIO

Reactor模式,或者叫反应器模式

Java

 

使用Jakarta Commons Pool处理对象池化

对于没有状态的对象(例如String),在重复使用之前,无需进行任何处理;对于有状态的对象(例如StringBuffer),在重复使用之前,就需要把它们恢复到等同于刚刚生成时的状态。由于条件的限制,恢复某个对象的状态的操作不可能实现了的话,就得把这个对象抛弃,改用新创建的实例了。

Java克隆

Java Support for Large Memory Pages

Java HotSpot VM (Virtual Machine) Performance Tuning: Command-line options

Solving OutOfMemoryError (part 5) – JDK Tools

jps -lvm

-m Output the arguments passed to the main method. The output may be null for embedded JVMs.
-l Output the full package name for the application’s main class or the full path name to the application’s JAR file.
-v Output the arguments passed to the JVM.