不积跬步,无以至千里;不积小流,无以成江海

Our practice

不积跬步,无以至千里;不积小流,无以成江海

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  44 随笔 :: 18 文章 :: 3 评论 :: 0 引用

2008年10月4日 #

     摘要: Erlang 这门FP语言提供了非常高的分布式程序开发效率,不再需要辛辛苦苦使用ACE,NIO构造一个支持高并发的通讯底层,不再需要小心翼翼使用lock,semaphore等开发一个多线程的程序。然而,更为核心的问题出现了,怎样将一个大规模计算任务通过一个良好的算法并行起来,怎样实现进程间的通讯架构,使得系统能够实现Load Balance和Fail Over,实现高可用性,健壮性,高性能的目标。  阅读全文
posted @ 2008-10-04 00:00 陆英怀 阅读(20) | 评论 (0)编辑

2008年9月25日 #

     摘要: 前面记得在两篇文章中提到,如果远程创建、启动、停止、删除远程机器上的windows service,下面就是一个RPC的例子。 1,批处理RPC:   阅读全文
posted @ 2008-09-25 15:10 陆英怀 阅读(13) | 评论 (0)编辑

2008年9月18日 #

     摘要: 在QCon旧金山2007大会期间,InfoQ的编辑Stefan Tikov采访了CORBA宗师Steve Vinoski,就他对REST的关注,使用CORBA的场景,以及分布式系统中描述语言的角色等问题做了深入的探讨。其他主题还包括了解多门语言的好处,Erlang在构建分布式系统时的好处等。   个人简介    Steve Vinoski是一家美国创业公司Verivue的技术员工。他被公认为是CORBA领域里世界领先的专家之一,在加入Verivue之前他在IONA呆了10多年之久,是IONA的首席架构师和创始人之一。此前他还在惠普、Apollo计算机和德州仪器等公司从事过软件和硬件相关的工作  阅读全文
posted @ 2008-09-18 22:39 陆英怀 阅读(25) | 评论 (0)编辑

2008年9月12日 #

     摘要: 最近在做分布式存储计算的项目,由于涉及到多个服务器(72台),多个客户端,为了让这些服务器还有客户端能够自动化执行,统一管理(不知道有没有这样的软件,好像没有,现在我只能开着开60多个远程桌面,谁知道有这样的管理软件的推荐一下,thanks!)。 我现在的解决方案是: 1,批处理来进行发布新版本、获取执行结果 2,在每个机器上部署一个自定义的window service 来监听并接收sokect命令并处理(启动、中断、关闭分布程序) 批处理的基本知识我们在批处理入门 一文中已经做过介绍(不明白的同学请再去看看),下面我就按我这段时间每天工作流程所用的批处理给大家分享,一起来体验它的方便,高效性,自动化。  阅读全文
posted @ 2008-09-12 18:13 陆英怀 阅读(130) | 评论 (0)编辑

2008年9月2日 #

     摘要: 在Javascript中,一切都是对象,包括函数。在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义。但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解)。 定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下。 这两种方法均可以解决构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题。   阅读全文
posted @ 2008-09-02 23:32 陆英怀 阅读(69) | 评论 (0)编辑

2008年8月29日 #

     摘要: 线程安全的本质就是,要保护全局对象,在使用时只能被一个线程使用(包括读,写,删除)(注意,对全局对象只限于只读,那么是线程安全的)。解决的方法无非就是两种, 第一,把这个对象或者资源锁住,即等我用完了,其它线程才能再能,否则其它线程等待,这也是最常见的方式。 第二,给每个线程分配属于只属于自己的"全局对象"(这样听起来好像有点别扭)。  阅读全文
posted @ 2008-08-29 23:34 陆英怀 阅读(114) | 评论 (0)编辑

2008年8月28日 #

     摘要: 以前常听高手告诫MFC对象不要跨线程使用,因为MFC不是线程安全的。比如CWnd对象不要跨线程使用,可以用窗口句柄(HWND)代替。 CSocket/CAsyncSocket对象不要跨线程使用,用SOCKET句柄代替. 那么到底什么是线程安全呢?什么时候需要考虑?如果程序涉及到多线程的话,就应该考虑线程安全问题。比如说设计的接口,将来需要在多线程环境中使用,或者需要跨线程使用某个对象时,这个就必须考虑了。个人的理解是,所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不 用考虑同步的问题。  阅读全文
posted @ 2008-08-28 23:42 陆英怀 阅读(149) | 评论 (0)编辑

     摘要:   memchached的hash方式由Client API决定,余数hash方法是最早版本的memcached Client API中使用的,是比较简单也是比较容易理解的方式,当不考虑动态的添加服务器进程的时候,使用它是比较理想的,hash分布后的比较平均,容易达到多个进程(服务器)负载均衡的效果。   Consistent Hashing+虚拟结点的Hashing方法,可以实现比较好的负载均衡和动态的添加服务器时影响cach的命中率问题。值得大家去回味一下其中的算法。  阅读全文
posted @ 2008-08-28 22:46 陆英怀 阅读(92) | 评论 (0)编辑

     摘要: 在memcached中,我们一直提到key的hash来存取数据,为了更好的理解存取数据的过程。我们先来理解一下hash,即叫散列或者哈希。 google搜索到的头条:散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 我觉得这个解释太含糊,想要整明白哈希表,那就得明白哈希表到底有什么样的优势。  阅读全文
posted @ 2008-08-28 11:44 陆英怀 阅读(34) | 评论 (0)编辑

     摘要: 在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里)。下面让我们以memcached-1.2.1-win32版本的服务组件和C#API(Enyim.Caching)为基础,做一个"Hello world"级的程序,让我们真正感受到memcached就在我们身边。后一的文章,我们还讲memcached的核心部分(根据key来hash存取数据,缓存数据在server端的内存存储结构)和一些好的案例。  下面的实例实现的功能很简单,根据key来存取一个object对象(要支持Serializable才行哦),因为服务器端数据都是byte型的数据组实现存在。 第一步:配置config文件   阅读全文
posted @ 2008-08-28 01:16 陆英怀 阅读(130) | 评论 (1)编辑