存档

文章标签 ‘Scalability’

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.

Daniel-Journey Weekly Dose –2011/12/31

2011年12月31日 admin 1 条评论

Scalability

CAP理论及BASE思想等

OOP

静态类的原罪

Java

各种java序列化工具性能对比

 

LINUX

linux 统计目录下的文件数量

第一种方法: ls -l|grep "^-"|wc -l ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)。

第二种方法: ls -lR|grep "^-"|wc -l

linux du 显示路径下各子目录大小

du -h –max-depth=1 /backup/

 

通过IOStat命令监控IO性能

  • rrqm/s:队列中每秒钟合并的读请求数量
  • wrqm/s:队列中每秒钟合并的写请求数量
  • r/s:每秒钟完成的读请求数量
  • w/s:每秒钟完成的写请求数量
  • rsec/s:每秒钟读取的扇区数量
  • wsec/s:每秒钟写入的扇区数量
  • avgrq-sz:平均请求扇区的大小
  • avgqu-sz:平均请求队列的长度 。毫无疑问,队列长度越短越好。
  • await:平均每次请求的等待时间。await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm:平均每次请求的服务时间。从源代码里可以看出:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
  • util:设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对)。有时候会出现大于100%的情况,这是因为读取数据的时候是非原子操作。
分类: 阅读 标签: , , ,

转载:海量存储系列之一

2011年12月24日 admin 没有评论
分类: 阅读 标签:

Daniel-Journey Weekly Dose –2011/12/4

2011年12月4日 admin 没有评论

Scalability

深入浅出Flashcache(一)

投资

趋势是什么?总听到人说“顺势而为”,其实很多人并没搞清楚。股市的趋势是要分时间周期的,对以周为单位的人来说,最近3周的趋势无疑是下跌的;对于以日为单位的人来说,上周4的日内趋势就是上涨。因此请先确定你的操作频率,以周为单位应该做空,以日为单位在上周4就应该做多,都是可以盈利的!

欧债危机到底是怎么回事

Java

java nio 之MappedByteBuffer

理解Heap Profling名词-Shallow和Retained Sizes

Shallow Size
对象自身占用的内存大小,不包括它引用的对象。
针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
针对数组类型的对象,它的大小是数组元素对象的大小总和。

Retained Size
Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

LINUX

理解Inode

Architecture

关于复杂事件处理和事件驱动架构的争论

EDA: Event-Driven Architecture事件驱动架构

高性能队列Fqueue的设计和使用实践

Java读写

BufferedOutputStream虽然最快,但是易丢失数据,权衡之下,我们选择了MappedByteBuffer作为我们的文件操作实现

Daniel-Journey Weekly Dose –2011/10/07

2011年10月7日 admin 2 条评论

Scalability

淘宝商品库优化实践解析

Marketing

黑帽SEO和白帽SEO

58e940fajw1dlmhp3fu1mj

网站运营知识一网打尽

50a22381gw1dloiqgn8gqj

B2C的六大数据指标体系

1、转化率体系:包括到达率、注册转化率;2、购买力体系:包括客单价,重复购买率等;3、会员体系:会员访问深度、访问频次、新会员占比;4、商品体系:热销品类、毛利率、销售额;5、用户行为体系:浏览习惯、站内搜索、投资回报率等

879c681etw1dliju0zdopj

Hardware

Cache Memory

分类: 阅读 标签: , ,

缓存资料整理

2011年5月1日 admin 没有评论

Caching is a technique for sharing data among multiple consumers or servers that are expensive to either compute or fetch.  Data are stored and retrieved  in a subsystem that provides quick access to a copy of the frequently accessed data.

Caches are implemented as an indexed table where a unique key is used for referencing some datum.  Consumers access data by checking (hitting) the cache first and retrieving the datum from it.  If it’s not there (cache miss), then the costlier retrieval  operation takes place and the consumer or a subsystem inserts the datum to the cache.

image

写入的策略

当出现后台数据发生变动而没有更新Cache的时候,Cache中的数据就会变得陈旧.缓存的写入策略定义了缓存中的数据时如何更新的。

策略 实现说明
Write-through

every write to the cache follows a synchronous write to the backing store

Write-behind

updated entries are marked in the cache table as dirty  and it’s updated only when a dirty datum is requested

No-write allocation:

only read requests are cached under the assumption that the data won’t change over time but it’s expensive to retrieve

分类: 软件设计 标签:

Daniel-Journey Weekly Dose- 2010/12/4

2010年12月5日 admin 4 条评论

Programming

怎样把自己培养成为一个优秀的程序员

Database & SQL

用Twitter的cursor方式进行Web数据分页

Scalability

多IDC数据时序问题及方法论

RAID介绍

8 Commonly Used Scalable System Design Patterns

  1. Load Balancer – a dispatcher determines which worker instance will handle a request based on different policies.
  2. Scatter and Gather – a dispatcher multicasts requests to all workers in a pool. Each worker will compute a local result and send it back to the dispatcher, who will consolidate them into a single response and then send back to the client.
  3. Result Cache – a dispatcher will first lookup if the request has been made before and try to find the previous result to return, in order to save the actual execution.
  4. Shared Space – all workers monitors information from the shared space and contributes partial knowledge back to the blackboard. The information is continuously enriched until a solution is reached.
  5. Pipe and Filter – all workers connected by pipes across which data flows.
  6. MapReduce -  targets batch jobs where disk I/O is the major bottleneck. It use a distributed file system so that disk I/O can be done in parallel.
  7. Bulk Synchronous Parallel – a  lock-step execution across all workers, coordinated by a master.
  8. Execution Orchestrator - an intelligent scheduler / orchestrator schedules ready-to-run tasks (based on a dependency graph) across a clusters of dumb workers.

如何解决cache同时过期问题

解决办法:

在一个比较大的应用中,cache尽量使用服务的形式,跟web应用进行隔离开来,避免应用重启导致重建cache对后端的冲击。(其实这样能提高多个web下面的缓存利用率)

cache服务尽量使用多个,避免一个宕机重建全部cache对后端的冲击。多个cache服务尽量使用一致性hash的模式。

cache同时过期的问题,比如是30秒过期,可以找个业务可以接收的范围,比如25-40秒之间随机一个过期时间,可以减少同时过期的概率。

可以考虑使用多级cache。

事实上,在设计系统的时候,就需要考虑cache如果失效对系统产生的可能冲击影响,以及如何去避免这些问题的发生。重启系统可以考虑一个缓存预热的过程。

Project Management

项目经理的思维批判

Daniel-Journey Weekly Dose-2010/11/20

2010年11月20日 admin 4 条评论

Java

Standard System Properties

通过Java/JMX得到full GC次数?

防痴呆设计

检查重复的jar包

检查重复的配置文件

检查所有可选配置

日志信息包含环境信息

异常信息给出解决方案

kill之前先dump

Scalability

如何解决cache同时过期问题

Linux

Linux知识学习(11)Tar命令压缩文件

压缩:tar -cvf
解压:tar -xvf
查看:tar -tvf
如果tar包被gzip压缩过,在命令选项中多加一个’z'即可。

 

程序员

项目经理的思维批判

怎样把自己培养成为一个优秀的程序员

从经理的角度看技术债务

技术债务来自哪里

  • 没有经验的开发人员
  • 项目工期的压力
  • 凌乱而难读的代码。
  • 专业领域的代码。
  • 过度复杂
  • 糟糕的设计

    解决问题

  • 让开发人员接受语言方面的基本培训并教授他们面向对象的原理,从而把他们的理解力提升至入门阶段。要想既成功又有效的话,这需要花几个礼拜的时间培训,还需要有精通这方面的人员来跟进和支持这一系列培训。
  • 告诉开发人员和管理人员,当前的这些问题都是需要花费企业资金的。这点尤其重要,因为它会使解决这些问题的意义更加明确。你要清楚地告诉他们,管理人员会重视这些问题,并且已经开始着手偿还这些技术债务了。不断支持这些工作使之成为常规的原则之一,这样整个团队就会信任这个准则。
  • 提供一些培训,包括代码的坏味道,重构,单元测试和测试驱动开发等。还可以结合课堂会议,基于网络的材料和书籍来进行培训。
  • 在工作的时候,给他们一些空余时间去研究和练习他们的技能(一个礼拜两个小时应该是达成这个目标的最小的时间量)。练习的代码应该被丢弃,这样,他们就能无拘无束地尝试和试验一些事情,不管怎么样,他们不用在基础代码库上面进行练习。花点时间练习和研究应该是最有用的建议了。假如没有为他们提供空闲的时间,就压根不会发现真正合理的敏捷开发方式。这种组织方式也被称为“道场”-Dojo(更加详细的资料可以参考TDD Randori Session TDD Randori Workshop)。
  • 使用工具(静态分析,单元测试,持续集成,自动化可接受性测试)来帮助团队发现、减少和衡量他们的技术债务量。应该在团队层面利用这些度量数据,而不能分享给管理人员。团队成员需要知道,他们并不会因为对这些技术债务的度量而接受奖励或者遭受惩罚。如果我们把这些度量数据报告给管理层,并由管理层来追踪的话,开发人员很快会找到一些窍门来规避它们,这样就失去了本来应有的价值了。
  • 当人们完成了他们的培训或者在技术上取得了少许提升时,应该得到奖励。奖励可以是给予一次认可的表彰或者是一些小小的礼物,但不要直接给予现金奖励。
  • 每两个礼拜进行一次午餐聚会和一些关于技术方面的学习型会议。利用这些会议来促进开发成员之间的讨论。提供午餐可以提高参会人数。另外比较重要的是需要管理人员每次都来出席,这样就很清楚的表明他们也一直支持大家提高技术。
  • 维护关于技术债务的备忘录 – 任何时候,如果开发人员发现一些无法立即应付的技术债务时,就需要填写一份技术债务登记卡。开发人员应该优先考虑这些技术债务,并花费10-15%的精力来偿还这些技术债务。大多数项目中,任何的一些小事都会使问题变得更加严重

OO & Design Pattern

超越设计模式

Daniel-Journey Weekly Dose-2010/11/7

2010年11月7日 admin 1 条评论

Java

JAVA线程dump的分析 — jstack pid

  • 在 windows环境中,在启动程序的控制台里敲: Ctrl – Break,线程的 dump会产生在标准输出中( 缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。
  • 在 unix, linux和 MacOS 环境中,在控制台中敲: Ctrl-\,或者,;  用 “kill -3 <pid>” ,或者 “kill – QUIT <pid>”。 Pid是用所关注的 JAVA进程号,您可以用 “ps -ef | grep java” 找到;或者使用 JDK 5.0中的 “jps -v” 命令获得。
  • 在各个操作系统平台,都可以用 JDK 5.0工具包中的 jstack <pid>

Programming

每位开发人员都应铭记的10句编程谚语

    1. 无风不起浪
    2. 预防为主,治疗为辅
    3. 不要孤注一掷 (过度依赖某人)
    4. 种瓜得瓜,种豆得豆
    5. 欲速则不达
    6. 三思而后行
    7. 如果你惟一的工具是一把锤子,你往往会把一切问题看成钉子
    8. 沉默即赞同
    9. 双鸟在林,不如一鸟在手
    10. 能力越大,责任越大

    Scalability

    Amdahl定律

    分布式服务框架常被质疑的价值

    Other

    Windows命令行窗口日志输出重定向方法

Daniel-Journey Weekly Dose-2010/10/16

2010年10月17日 admin 7 条评论

Java

Java Annotation手册

关于 JVM 命令行标志您不知道的 5 件事

Linux & Unix

10 个值得采用的 UNIX 命令行习惯

  1. 在单个命令中创建目录树。
  2. 更改路径;不要移动存档。
  3. 将命令与控制操作符组合使用。
  4. 谨慎引用变量。
  5. 使用转义序列来管理较长的输入。
  6. 在列表中对命令分组。
  7. find 之外使用 xargs
  8. 了解何时 grep 应该执行计数——何时应该绕过。
  9. 匹配输出中的某些字段,而不只是对行进行匹配。
  10. 停止对 cat 使用管道。

Vim Movement Shortcuts Wallpaper

curl 资料总结

Scalability

greenplum数据库引擎探究

分类: 阅读 标签: , , ,