存档

文章标签 ‘Scalability’

缓存资料整理

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数据库引擎探究

分类: 阅读 标签: , , ,

Daneil-Journey Weekly Dose-2010/10/3

2010年10月10日 admin 没有评论

Scalability

多IDC的数据分布设计(一)

多IDC的数据分布设计(二)

CAP原理与最终一致性

OO & Design Pattern

视角的力量–再说OO设计原则

Martin Fowler在他的著作 《UML Distilled》中提到了三层视角(perspective):概念视角,规约视角,实现视角。

使用三种视角看软件开发,我们可以得到这样的描述:

概念视角:呈现所研究领域中的各种概念,得出概念模型的时候应该尽量少德或者不考虑它的实现,这个视角要回答的问题是:软件要负责什么?是策略性的结论

规约视角:我们现在考虑的是软件,但是我们关注的是软件的接口而不是实现。规约视角要回答的问题是:怎么使用软件?这个层次关注的是软件各部分的交流。

实现:这时我们考虑的是代码本身但是许多方面我们使用规约视角可能会更好,软件在规约层交流在实现层执行。

视角帮助我们将问题划分层次,隔离

从上面的描述我们很明显得看到“软件开发”所设计牵扯的问题已经被划分到三个不同的层次,在每一个层次我们都要有特定的思考成果。在高层没有思考成熟的时候我们不往下一个层次进行,按照这样一个原则,细节被隔离在思维的围墙之外。

Active Object 并发模式在 Java 中的应用

Architecture

如何做好软件系统的架构设计?

Tomcat 系统架构与设计模式,第 1 部分: 工作原理

Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

Java

Installing Multiple Eclipse Plugins with Ease

NOSQL

MapReduce: 一个巨大的倒退

Algorithm

拜占庭将军问题

拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这S些协议还要满足所要解决的问题要求的规范。这些算法通常以其弹性t作为特征,t表示算法可以应付的错误进程数。 很多经典算法问题只有在t<n/3是才有解,如拜占庭将军问题,其中n是系统中进程的总数

如果要想容忍m个判国者,必须保证总的将军的个数大于3m。

产品

新浪内部对腾讯公司的深度解析.pdf

学习腾讯的产品管理之道

其他

如何让PPT的备注演示者看到而观众看不到

Daneil-Journey Weekly Dose-2010/9/26

2010年9月26日 admin 14 条评论

Scalability

Applying Scalability Patterns to Infrastructure Architecture

Load distribution – Spread the system load across multiple processing units

  • load balancing / load sharing – Spreading the load across many components with equal properties for handling the reques
  • Partitioning – Spreading the load across many components by routing an individual request to a component that owns that data specific .
    • Vertical partitioning – Spreading the load across the functional boundaries of a problem space, separate functions being handled by different processing units.
    • Horizontal partitioning - Spreading a single type of data element across many instances, according to some partitioning key, e.g. hashing the player id and doing a modulus operation, etc. Quite often referred to as sharding.

    Queuing and batch – Achieve efficiencies of scale by processing batches of data, usually because the overhead of an operation is amortized across multiple request.

  • Relaxing of data constraints - Many different techniques and trade-offs with regards to the immediacy of processing / storing / access to data fall in this strategy
  • Parallelization – Work on the same task in parallel on multiple processing units

缓存技术浅谈

UML

UML建模之时序图

Algorithm

数组与链表的区别

分类: 阅读 标签: , , ,

负载均衡知识整理

2010年9月22日 admin 1 条评论

负载均衡的定义

In computer networking, load balancing is a technique to distribute workload evenly across two or more computers, network links, CPUs, hard drives, or other resources, in order to get optimal resource utilization, maximize throughput, minimize response time, and avoid overload. Using multiple components with load balancing, instead of a single component, may increase reliability through redundancy. The load balancing service is usually provided by a dedicated program or hardware device (such as a multilayer switch or a DNS server).

It is commonly used to mediate internal communications in computer clusters, especially high-availability clusters. If the load is more on a server, then the secondary server takes some load while the other is still processing requests.

 

image

 

 

应用类型 负载均衡策略
Web Application Round Robin
Caching Pool Frequency rule and expiration algorithms
Applicatoin like music store

shift the larger number popular requests to higher performance systems, serving the rest of the requests from less powerful systems or clusters.

 

持续性的负载均衡器

有状态的应用需要持续性或粘性的负载均衡,从而消费者能够从服务器Pool中维护一次Session.

负载均衡器的常用特性

  • Content filtering – inbound or outbound
  • Distributed Denial of Service (DDoS) attack protection
  • Firewalling
  • Payload switching – send requests to different servers based on URI, port, and/or protocol
  • Priority activation – adds standing by servers to the pool
  • Rate shaping – ability to give different priority to different traffic
  • Scripting – reduces human interaction by implementing programming rules or actions
  • SSL offloading – hardware-assisted encryption frees web server resources
  • TCP buffering and offloading – throttle requests to servers in the pool image

 

负载均衡主要算法

轮循法(Round Robin)

顺序循环将请求一次顺序循环地连接每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

此种均衡算法适合于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况;客户端的每一次请求服务在服务器停留的时间都可能会有较大的差异,随着工作时间的加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,这样的结果并不会达到真正的负载均衡。

算法实现可以参考

假设有一组服务器S = {S0, S1, …, Sn-1},一个指示变量i表示上一次选择的服务器,W(Si)表示服务器Si的权值。变量i被初始化为n-1,其中n > 0。

 

比率算法

给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。

优先权法

优先权(Priority):给所有服务器分组,给每个组定义优先权,BIG-IP 用户的请求,分配给优先级最高的服务器组(在同一组内,采用轮询或比率算法,分配用户的请求);当最高优先级中所有服务器出现故障,BIG-IP 才将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

最少连接法

最少的连接方式(Least Connection):传递新的连接给那些进行最少连接处理的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配, 直到其恢复正常。但由于不同应用对系统资源的消耗可能差异很大,而连接数无法反映出真实的应用负载,因此在使用重型Web服务器作为集群节点服务时(例如Apache服务器),该算法在均衡负载的效果上要打个折扣?为了减少这个不利的影响,可以对每个节点设置最大的连接数上限(通过阈值设定体现)?

最快模式

传递连接给那些响应最快的服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP 就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

观察模式

连接数目和响应时间以这两项的最佳平衡为依据为新的请求选择服务器。当其中某个服务器发生第二到第7 层的故障,BIG-IP就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

响应时间算法

负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。

散列算法

散列法也叫哈希法(HASH),通过单射不可逆的HASH函数,按照某种规则将网络请求发往集群节点?哈希法在其他几类均衡算法不是很有效时会显示出特别的威力?例如,在前面提到的UDP会话的情况下,由于轮转法和其他几类基于连接信息的算法,无法识别出会话的起止标记,会引起应用混乱?而采取基于数据包源地址的哈希映射可以在一定程度上解决这个问题:将具有相同源地址的数据包发给同一服务器节点,这使得基于高层会话的事务可以以适当的方式运行?相对称的是,基于目的地址的哈希调度算法可以用在Web Cache集群中,指向同一个目标站点的访问请求都被负载均衡器发送到同一个Cache服务节点上,以避免页面缺失而带来的更新Cache问题?

加权法

加权方法只能与其他方法合用,是他们的一个很好的补充?加权算法根据节点的优先级或当前的负载状况(即权值)来构成负载均衡的多优先级队列,队列中的每个等待处理的连接都具有相同处理等级,这样在同一个队列里可以按照前面的轮转法或者最少连接法进行均衡,而队列之间按照优先级的先后顺序进行均衡处理?在这里权值是基于各节点能力的一个估计值?

参考资料

Load balancing

服务器负载均衡算法

服务器负载均衡算法有很多(持续性的和非持续性的),包括轮循算法、最少连接算法、响应时间算法、散列算法、最少连接失误算法,链路带宽算法等等。此外实际服务器(Real Server)可以被分配不同的加权值来调整被分配的流量。比如性能高的大型服务器可配置较大的加权值,而为性能较低的小型服务器设置较小的加权值。为了避免服务器因过载而崩溃,可为实际服务器指定最大连接阈值来避免该服务器过载。任何服务器可被指定为另一台服务器的备份服务器或溢出服务器,从而进一步保证了应用可用性。

几种负载均衡算法

负载均衡

六类负载均衡算法概述

F5负载均衡算法及基本原理

Scalability & High Availability Refcardz

分类: 软件设计 标签:

Daniel-Journey Weekly Dose-2010/9/20

2010年9月20日 admin 2 条评论
分类: 阅读 标签: , ,

Daniel-Journey Weekly Dose-2010/9/12

2010年9月12日 admin 4 条评论
分类: 阅读 标签: , , , ,