`
nkadun
  • 浏览: 55539 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

<实践>Voldemort与Objot集成的WAP高性能方案与简单实现(一)

阅读更多
[摘要]

Voldemort:高性能、高扩展性、不错的一致性Key-Value集群方案,目前被LinkIn使用,与Dynamo思想类似,参见http://project-voldemort.com
Objot:面向服务的轻量级web开发库,参见http://objot.com

[目标]

搭建一个WAP游戏开发框架,利用烂服务器集群提供高性能,尽量保证游戏数据的一致性,并可根据负载情况随时进行扩展,同时能够通过配置来调节各服务器利用率。
尽可能减少网络传输,单服务器既包含WEB也包含DB节点。

[技术选型]

1、游戏中不需要复杂的查询,因此抛弃了SQL数据库而使用Key-Value存储;通过对各种数据库的了解,发现Voldemort更适合,能保证目标。采用其Server Routing模式,不将WEB与DB在物理上划开。
2、Spring过于臃肿,故采用更加轻量级的Objot,同时Objot基于Java5,配置更简洁。
3、采用JSTL + JSP处理页面数据。
4、采用Tomcat作为WEB容器。


[实现](以单数据库节点为例)
1、在Servlet中启动Voldemort服务器
cluster.xml //Voldemort集群配置文件
<cluster>
	<name>vortex</name>
	<server>
		<id>0</id>
		<host>localhost</host>
		<http-port>8081</http-port>
		<socket-port>6666</socket-port>
		<partitions>0, 1</partitions>
	</server>
</cluster>


server.properties //Voldemort节点服务器配置
# The ID of *this* particular cluster node
node.id=0

max.threads=100

############### DB options ######################
#不需要HTTP服务,Server Routing Mode必须开启socket
http.enable=false
socket.enable=true

# 采用BDB存储
bdb.write.transactions=false
bdb.flush.transactions=false
bdb.cache.size=256M

#NIO connector settings.
enable.nio.connector=false

storage.configs=voldemort.store.bdb.BdbStorageConfiguration, voldemort.store.readonly.ReadOnlyStorageConfiguration


stores.xml //存储方式配置
<stores>
  <store>
    <name>vortex</name>
    <persistence>bdb</persistence>
    <routing>server</routing>
    <replication-factor>1</replication-factor>
    <required-reads>1</required-reads>
    <required-writes>1</required-writes>
    <key-serializer>
      <type>identity</type>
    </key-serializer>
    <value-serializer>
      <type>identity</type>
    </value-serializer>
  </store>
</stores>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
...
	<servlet>
		<servlet-name>vortex-servlet</servlet-name>
		<servlet-class>vortex.VortexServlet</servlet-class>
                <!-- Voldemort家目录:)-->
		<init-param>
			<param-name>voldemort-home</param-name>
			<param-value>/home/nkadun/vortex/voldemort</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>vortex-servlet</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>
...
</web-app>


VortexServlet.java
public class VortexServlet implements Servlet {
	...
	private final String VOLDEMORT_HOME_KEY = "voldemort-home";
	private VoldemortServer server;
	private StoreRepository respository;

	private ServiceHandler handler;

	@Override
	public void destroy() {
		logger.info("Shutdown voldemort server...");
		if(server != null)
			server.stop();
		logger.info("Shutdown voldemort server successfully.");
	}
	@Override
	public void init(ServletConfig c) throws ServletException {
		config = c;
		handler = new ServiceHandler();
		try {
			logger.info("Starting voldemort server...");
			String voldemortHome = c.getInitParameter(VOLDEMORT_HOME_KEY);
			server = new VoldemortServer(VoldemortConfig.loadFromVoldemortHome(voldemortHome));
//启动Voldemort服务器
			server.start();
			respository = ((StorageService)server.getService(ServiceType.STORAGE)).getStoreRepository();
			logger.info("Voldemort server started.");

			handler.init(respository);
		}
		catch(ConfigurationException e) {
			logger.info("Error occurred:", e);
			throw e;
		}
		catch(Exception e) {
			logger.error("Error occurred:", e);
			throw new ServletException(e);
		}
	}

	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		try {
			String page = handler.handle(request, response);
			forward(page, request, response);
		}
		catch(Exception e) {
			throw new ServletException(e);
		}
	}
...
}

分享到:
评论

相关推荐

    Memcached内存分析、调优、集群

    ### Memcached内存分析、调优、集群:深入理解与实践 #### 1. Memcached背景与概述 Memcached是一款高性能的分布式内存缓存服务器,它最初由LiveJournal的运营人员开发,现已成为开源社区中不可或缺的一部分。其...

    Voldemort271.github.io:..

    这可能使用`&lt;nav&gt;`元素实现,内部嵌套`&lt;ul&gt;`无序列表和`&lt;li&gt;`列表项,每个列表项可能包含一个指向特定项目的`&lt;a&gt;`标签。此外,为了美观和用户体验,可能会用到CSS(层叠样式表)来定制布局和样式,使页面更具吸引力...

    voldemort,亚马逊发电机的开源克隆。.zip

    Voldemort是一款分布式键值存储系统,它源自亚马逊的 Dynamo 系统,并且作为一个开源项目,为全球的开发者提供了实现高可用、高可扩展性的数据存储解决方案。Voldemort 的设计目标是提供低延迟、高一致性的数据存储...

    voldemort 只使用内存作缓存的配置

    Voldemort 是一个分布式键值存储系统,常用于大数据和实时分析场景。它的设计目标是提供高可用性、可扩展性和高性能。在这个配置中,我们关注的是如何将 Voldemort 配置为仅使用内存作为缓存,而不涉及任何持久化...

    Nosql_Voldormort:No Sql-RubiS框架的Voldemort实现

    RubiS(可能是指Ruby on Rails的变体或一个自定义的框架)框架结合Voldemort,旨在提供一种高效、可靠的NoSQL解决方案。 Voldemort的特点和优势: 1. 分布式架构:Voldemort将数据分布在多个节点上,每个节点都...

    redis入门与实践

    ### Redis入门与实践 #### 一、Redis简介与NoSQL概念 Redis是一种广泛使用的开源内存数据结构存储系统,它可以作为数据库、缓存和消息中间件使用。作为一种NoSQL(Not Only SQL)数据库,Redis提供了键值对存储...

    Voldemort:分布式键值存储系统-开源

    Voldemort 是一个分布式数据库,它是亚马逊 Dynamo 的开源克隆。 它自动在多个服务器上复制数据,并自动对它们进行分区,因此每个服务器只包含总数据的一个子集。 它提供了许多其他功能,例如可插拔序列化支持、数据...

    NoSQL数据库学习教程.pdf

    Voldemort是指使用Voldemort来实现分布式系统的可扩展性。 Dynomite是指使用Dynomite来实现分布式系统的可扩展性。 Kai是指使用Kai来实现分布式系统的可扩展性。 应用篇: eBay 架构经验是指使用eBay的架构经验...

    Apache Hadoop Goes Realtime at Facebook

    ### Apache Hadoop 实现Facebook实时计算的关键技术与实践 #### 概述 随着大数据时代的到来,数据处理的需求日益增长,特别是在社交媒体平台如Facebook这样的大型应用上。为了应对这些挑战,Facebook选择采用...

    藏经阁-Storage Infrastructure behind LinkedIn's recommendation-29.p

    LinkedIn 推荐系统存储基础设施概述 在本篇中,我们将深入探讨 LinkedIn 的推荐系统存储基础设施,了解其架构设计、挑战和解决方案。...它具有高性能、高可用性和高扩展性,能够满足 LinkedIn 大规模用户的需求。

    Redis实战.pdf

    Redis是一种开源的、高性能的键值存储系统,以其高速读写速度而著称,常被用于缓存、消息队列等多种场景。本书通过实践案例和深入讲解,使读者能够掌握Redis的核心功能和技术细节。 #### 二、Redis与其他Key-Value...

    Redis实战 中文完整版.pdf

    Redis是一款开源的、高性能的键值存储数据库系统,它支持多种数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)。在本文件中,我们可以了解到Redis的相关特性...

    Practical Tips for Using MySQL as a Scalable Key-Value Store

    - **高性能**:NoSQL系统通常针对特定的工作负载进行优化,从而实现更高的吞吐量和更低的延迟。 - **更针对性的API设计**:NoSQL系统通常提供了更为精简和直接的数据访问接口。 - **灵活的模式设计**:支持动态模式...

    Big Data Glossary-大数据术语

    Caffeine是一个Java库,专注于提供高性能的缓存解决方案,适用于需要高速缓存的数据处理场景。 **3.8 S4** S4是Apache的一个项目,用于实现实时流处理。它允许开发者创建复杂的流处理拓扑,处理来自不同来源的实时...

    分布式定时任务调度系统技术选型指南.docx

    - **antares**:相对较少提及,但也是一个分布式任务调度框架,可能在特定场景下有其优势,如与特定技术栈的集成。 3. **比较** 在选择分布式定时任务系统时,需要对比各方案的特性、性能、社区活跃度和文档质量...

Global site tag (gtag.js) - Google Analytics