自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (13)
  • 收藏
  • 关注

原创 分布式设计与开发(六)------让memcached分布式

memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较简单。memcached的分布式主要在于客户端,通过客户端的路由处理来搭建memcached集群环境,因此在服务端,memcached集群环境实际上就是一个个memcached服务器的堆积品,环境的搭建比较简单。下面从客户端做路由和服务端集群环境搭建两方面来谈如何让memcached分布式客户端做路由客户端做路

2010-08-29 20:05:00 37761 7

原创 开发人员如何了解用户和需求

很多前辈和书上都说开发人员,尤其是架构师和技术经理需要有商业感觉,我一直试图培养自己这方面的能力,可以常常不知所措,一说到感觉,就意味着要么是与生俱来的,要么就是在商业世界里一点一滴积累起来,而对于我们这些整天泡在技术细节里的人谈何容易。其实对我们来说,商业感觉这个词太大了,过于抽象,以至于我们不知如何做起,我觉得不如缩小范围,把我们要服务的用户和要实现的需求搞清楚倒是来得实在些。记得去年被收购的时候,新来的老板骂我们不懂用户不懂需求,做的东西别手蹩脚,磕磕跘跘。虽然感觉有些不爽,但审视自己确实没在用户和需

2010-08-29 11:40:00 6642 1

原创 分布式设计与开发(五)------数据库高可用架构

数据库高可用架构对于我们这些应用端开发的人来说是一个比较陌生的领域,是在具体的数据库产品之上搭建的环境,需要像DBA这样对数据库产品有足够的了解才能有所涉及,虽然不能深入其中,但可以通过一些经典的高可用架构学习其中的思想。就我所了解到的有以下几种:MySQL ReplicationMySQL ClusterOracle RACIBM HACMPOracle ASMMySQL ReplicationMySQL Replication就是通过异步复制多个copy以达到提高可用性的目的,常规的复制架构有以下几种:

2010-08-26 20:28:00 16496 3

原创 分布式设计与开发(四)------数据拆分

<br />一个大型系统里各个环节中最容易出性能和可用性问题的往往是数据库,因此分布式设计与开发的一个重要领域就是如何让数据层具有可扩展性,数据库的扩展分为Scale Up 和Scale Out,而Scale Up说白了是通过升级服务器配置来完成,因此不在分布式设计的考虑之内。Scale Out是通过增加机器的方式来提升处理能力,一般需要考虑以下两个问题:数据拆分数据库高可用架构<br />数据拆分是最先会被想到的,原理很简单,当一个表的数据达到无法处理的时候,就需要把它拆成多个表,说起来简单,真正在项目里

2010-08-26 16:50:00 27838 6

原创 单点登录SSO的实现原理

<br />单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因

2010-08-25 21:46:00 349719 60

原创 系统学习TCP/IP协议(二)------连接建立与关闭

 TCP三次握手建立连接TCP半关闭TCP的状态变迁TCP服务端监听和处理设计TCP三次握手建立连接TCP为了通信双方确认建立起连接,设计了三次握手的策略,三次握手的过程如下:1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。2) 服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认举一个实

2010-08-22 13:26:00 9921 1

原创 系统学习TCP/IP协议(一)------有用的策略和模式

协议实际上就是一种解决某些问题的策略和模式,在经典的TCP/IP协议中就有很多策略和模式值得学习。归纳起来有以下一些:分层封装和分用分层分层是TCP/IP乃至网络通信最核心的策略和模式,分层使得所有的网络应用程序不用关心底层链路传输的细节,也使得不同类型的网络有效地互通。这是一种典型的化繁为简,把复杂的事情分解到不同层面的策略,层与层之间是服务与被服务的关系,每层只需关注所在维度的事情。例如,通过网络层IP协议的抽象和处理,把不同类型的网络互连起来,并且这些底层传输的差异对于上层(运输层和应用层)是透明的,

2010-08-21 15:36:00 7257 2

原创 基于Jupiter建立code review机制

<br />code review是项目过程中一项非常重要的工作,可以有效检查出代码层面的问题,而这些问题常常是QA难以发现的。但在现实工作中code review常常因为无法量化而流于形式,无法形成有效地闭环,很多时候只是在PM提醒下互相看两眼,或是组织大家开code review会议,在会议上大伙一起对着投影做集体review,效果可想而知不会太好。<br />解决以上的问题关键在于形成一个机制并且借助有效的工具去实施,这一点上可以借鉴QA的bug系统,对每一个有问题的点建立问题发现、问题分配和问题解决

2010-08-19 17:10:00 9151 1

原创 分布式设计与开发(三)------高一致性服务ZooKeeper

分布式环境中大多数服务是允许部分失败,也允许数据不一致,但有些最基础的服务是需要高可靠性,高一致性的,这些服务是其他分布式服务运转的基础,比如naming service、分布式lock等,这些分布式的基础服务有以下要求:高可用性高一致性高性能对于这种有些挑战CAP原则的服务该如何设计,是一个挑战,也是一个不错的研究课题,Apache的ZooKeeper也许给了我们一个不错的答案。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它暴露了一个简单的原语集,分布式应用程序可以基于它实现同步服

2010-08-18 22:57:00 64222 8

原创 分布式设计与开发(二)------几种必须了解的分布式算法

<br />分布式设计与开发中有些疑难问题必须借助一些算法才能解决,比如分布式环境一致性问题,感觉以下分布式算法是必须了解的(随着学习深入有待添加):Paxos算法一致性Hash算法<br />Paxos算法<br />1)问题描述<br /><br />分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不

2010-08-15 11:53:00 79166 7

原创 分布式设计与开发(一)------宏观概述

在IDF05(Intel Developer Forum 2005)上,Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉,给广大软件开发者一个明显的信号,单纯依靠垂直提升硬件性能来提高系统性能的时代已结束,分布式开发的时代实际上早已悄悄地成为了时代的主流,吵得很热的云计算实际上只是包装在分布式之外的商业概念,很多开发者(包括我)都想加入研究云计算这个潮流,在google上通过“云计算”这个关键词来查询资料,查到的都是些概念性或商业性的宣传资料,其实真正需要深

2010-08-14 13:07:00 97154 45

原创 几种经典算法回顾

今天无意中从箱子里发现了大学时学算法的教材《算法设计与分析》,虽然工作这么几年没在什么地方用过算法,但算法的思想还是影响深刻的,可以在系统设计时提供一些思路。大致翻了翻,重温了一下几种几种经典的算法,做一下小结。分治法动态规划贪心算法回溯法分支限界法分治法1)基本思想将一个问题分解为多个规模较小的子问题,这些子问题互相独立并与原问题解决方法相同。递归解这些子问题,然后将这各子问题的解合并得到原问题的解。2)适用问题的特征该问题的规模缩小到一定的程度就可以容易地解决该问题可以分解为若干个规模较小的相同问题,即

2010-08-13 16:36:00 14042 6

原创 设计与开发应用服务器(二)------相关技术

服务器的设计与开发涉及到诸多技术和问题,归纳一下大致可以分为以下几种: * 服务器启动和接收数据过程 * 多线程策略 * NIO * 长连接 * 同步与异步 * 配置化支持 * 责任链模式 * 集群与负载均衡 * 数据包设计 * 服务端连接协议 * 客户端连接技术

2010-08-10 09:09:00 10865 12

原创 探索并发编程(七)------分布式环境中并发问题

<br />在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理:避免并发时间戳串行化数据库行锁统一触发途径<br />避免并发<br />在分布式环境中,如果存在并发问题,那么很难通过技术去解决,或者解决的代价很大,所以我们首先要想想是不是可以通过某些策略和业务设计来避免并发。比如通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,比如在以前博文中提到的例子,我们需要用多线

2010-08-05 17:39:00 20778 10

原创 探索并发编程(六)------Java多线程性能优化

大家使用多线程无非是为了提高性能,但如果多线程使用不当,不但性能提升不明显,而且会使得资源消耗更大。下面列举一下可能会造成多线程性能问题的点:死锁过多串行化过多锁竞争切换上下文内存同步下面分别解析以上性能隐患死锁关于死锁,我们在学习操作系统的时候就知道它产生的原因和危害,这里就不从原理上去累述了,可以从下面的代码和图示重温一下死锁产生的原因:public class LeftRightDeadlock { private final Object left = new Object();

2010-08-05 16:02:00 31986 14

原创 探索并发编程(五)------Java多线程开发技巧

很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读《Java并发编程实践》了解到了很多不为我知但又非常重要的细节,今日整理如下。不应用线程池的缺点有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(...).start(),对于一般场景是没问题的,但如果是在并发请求很高的情况下,就会有些隐患:新建线程的开销。线程虽然比进程要轻量许多,但对于JVM来说,新建一个线程的代价还是

2010-08-04 16:58:00 18414 3

原创 设计与开发应用服务器(一)------常见模式

设计与开发服务器算是一个技术含量比较高的领域,需要涉及到网络编程、IO、多线程、分布式、性能和可扩展性等较为复杂的技术细节,比起JSP/servlet或SSH框架开发业务系统来说,开发服务器比较偏重于技术一些,许多开发人员会有些束手无措,但却无法避免,比如基于HTTP协议的服务不适用时,或需要提供某种协议的容器时

2010-08-02 17:15:00 18322 8

原创 探索并发编程(四)------Java并发工具

基于线程安全的一些原则来编程当然可以避免并发问题,但不是所有人都能写出高质量的线程安全的代码,并且如果代码里到处都是线程安全的控制也极大地影响了代码可读性和可维护性。因此,Java平台为了解决这个问题,提供了很多线程安全的类和并发工具,通过这些类和工具就能更简便地写线程安全的代码。归纳一下有以下几种:同步容器类并发容器类生产者和消费者模式阻塞和可中断方法Synchronizer这些类和方法的使用都可以从JDK DOC查到,但在具体使用中还是有很多问题需要注意同步容器类同步容器类就是一些经过同步处理了的容

2010-08-01 13:12:00 17877 2

原创 探索并发编程(三)------Java存储模型和共享对象

很多程序员对一个共享变量初始化要注意可见性和安全发布(安全地构建一个对象,并其他线程能正确访问)等问题不是很理解,认为Java是一个屏蔽内存细节的平台,连对象回收都不需要关心,因此谈到可见性和安全发布大多不知所云。其实关键在于对Java存储模型,可见性和安全发布的问题是起源于Java的存储结构。Java存储模型原理有很多书和文章都讲解过Java存储模型,其中一个图很清晰地说明了其存储结构:由上图可知, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有变量

2010-08-01 10:07:00 15632 21

Oracle 9i 10g编程艺术:深入数据库体系结构

Oracle 9i 10g编程艺术:深入数据库体系结构

2011-01-17

Pro HTML5 Programming

Pro HTML5 Programming

2011-01-17

Comet And Reverse Ajax

Comet And Reverse Ajax

2011-01-17

Lucene 3.0 原理与代码分析完整版

Lucene 3.0 原理与代码分析完整版

2011-01-17

Hibernate In Action(英文)

Hibernate In Action(英文).

2010-02-04

Java Development with Ant

Java Development with Ant

2010-02-04

OReilly - Creating Effective JavaHelp

OReilly - Creating Effective JavaHelp

2010-02-04

AJAX In Action

AJAX In Action,AJAX In Action

2010-02-04

Database Programming with JDBC and JAVA

Database Programming with JDBC and JAVA

2010-02-04

Data Structures and Algorithms In Java

Data Structures and Algorithms In Java

2010-02-04

Advanced Java Networking

Advanced Java Networking

2010-02-04

空空如也

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

TA关注的人

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