分布式入门设计跟实现
来源:互联网 发布:淘宝神笔怎么取消 编辑:程序博客网 时间:2024/06/04 21:15
如何设计实现最基础的分布式应用,我们可以从如下两个ID入手:一个是全球唯一标识,另一个分布式hash散列值。
前一个保证你各个服务器之间产生的不通ID是不重复的,因为它的主要算法是跟时间和MAC地址有关的,后一个决定你
的数据是分发给哪台服务器处理。
对GUID不是太理解的可以看如下一段(摘抄自杂志):
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft's Globally Unique Identifiers (GUIDs)。
一般我们在分布式系统中用guid做主键,而在列中增加一个 id_hash来保存期hash值。
一.guid 如何实现
JAVA uitil中采用了统一的实现,参看
System.out.println(UUID.randomUUID().toString());
结果
1a078dc9-df28-4841-ad7a-00214f8a5ea7
二.hash值如何实现。
/** * * @param str 需要散列的字符串 * @param mode 散列度 * @return */public static int getStringHashValue(String str,int mode){Assert.notNull(str,"the hashString must not be null");int val=str.hashCode();if(val==Integer.MIN_VALUE) return 0;//处理当hashCode返回MIN_VALUE,abs为负的情况return Math.abs(val)%mode;};
System.out.println("the string 'abc' hash value = "+getStringHashValue("abc",mode)); System.out.println("the string 'abc' hash value = "+getStringHashValue("abc",mode));
结果:
the string 'abc' hash value = 303the string 'abc' hash value = 303
上面可以看到,满足一致性规则,相同的string产生了相同的hash值,这就保证了相同ID的用户分布到相同的机器上,满足了不同用户数据的隔离。
三.不同线程取数据如何隔离
通过hashStart 和 hashEnd 来分段取数据。例如:
searchParams.put("hashStart", profile.getHashStart());searchParams.put("hashEnd", profile.getHashEnd());searchParams.put("total", threadDataTotalInt);searchParams.put("collectType", BillingConstants.COLLECT_TYPE_INC);List<BillingCollectBean> collects = billingCollectService.getIncCollectBeans(searchParams);
profile.getHashStart()和profile.getHashEnd()通过antx配置,不同的机器配置不同的hash区段。
为满足平行扩展,我们最好将这些信息配置在数据库,通过读取数据库,自动取到自己的机器到底该处理哪些区段的纪录,
hash值散列时,mod取值可以根据机器数量和数据数进行设置,最好取的大一点,这样可以保证散列的均匀,同时粒度变的细小也便于控制(如果只有2,那最多可以给两个机器使用)。我们系统目前设置为1000。
- 分布式入门设计跟实现
- 分布式设计之DCOM实现
- 分布式之RPC设计实现
- 分布式高可用 id 服务器设计实现
- 分布式爬虫的设计与实现
- 分布式配置管理平台的设计与实现
- 分布式 分布式系统入门
- 简单理解 分布式跟集群
- 分布式跟集中式系统
- 分布式设计
- 分布式设计
- 分布式服务Dubbo从入门到"精通"之Schema实现
- mvc跟设计模式
- 分布式网管系统中SNMP Agent的设计和实现
- 分布式多串口步进电机控制的设计与实现
- 分布式transaction中lock的设计和实现
- 【分布式系统工程实现】GFS&Bigtable设计的优势
- 设计和实现高水平分布式网络爬虫
- 微软挑战赛之传话游戏问题
- JSON系列教程
- 点名程序 好玩
- 模仿Path菜单按钮的效果
- 数据库设计的三范式
- 分布式入门设计跟实现
- 使用Matplotlib与Python
- 有101根电线 每根的一头在楼底 另一端在楼顶 有一个灯泡 一个电池 无数根很短的电线 怎么样在楼上一次在楼下去一次将电线的对应关系弄清楚。
- Direct3D 11编程总结
- 大话设计模式之策略模式
- 第三周作业——冒泡排序和归并排序
- Android UI布局练习1(垂直分布)
- HDU1862EXCEL排序
- Bloom Filter