老手网

首页 > 作品展示 > 正文

【PaaS】erlang云平台

分类:作品展示 作者:oldhand 来源: 发布:2013-03-17 17:57:21
一、前言
           Erlang云平台,是Erlang编写的一个分布式云平台系统,主要集成了任务调度、全文检索,报表引擎、服务、文档型数据库、Memcached、REST、消息队列等核心模块,数据存储最终可以选择性地存储到Oracle、PostgreSQL、Mysql等关系型数据库。
           首先,让我们来了解一下Memcached,
           Memcached是一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。随着访问量的上升,几乎大部分的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。在这个时候,Memcached就自然的成为一个非常时尚的技术产品。Memcached可以作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在 Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,形成Memcached集群服务,Web应用发展到今天,不进行缓存的话,是不可能有高性能的,在大部分网站的PV分析数据得知,98%的只是查询数据,而不是更新数据,如果所有的查询全部分经过后台处理,到数据库进行请求的话,后台的压力是相当大的,而这些若能进行Memcached缓存的话,数据库可以减轻90%以上的压力。
         然后,了解NOSQL并与关系型数据库出现的问题,
        传统的关系型数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,同时也积累了大量的成功案例。在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。到了最近10年,网站开始快速发展。火爆的论坛、博客、sns、微博逐渐引领web领域的潮流。由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来 达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。关系型数据库很强大,但是它并不能很好的应付所有的应用场景。表结构更改困难,数据字典定义复杂,SQL语句编写麻烦,不能存储松散的数据模型,正是当前使用关系型数据库的开发人员面临的问题。
NOSQL的优势有很多优势:
1,易扩展
        NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
2,灵活的数据模型
        NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。这点在大数据量的web2.0时代尤其明显。
        NOSQL在对开发人员而言,是一个幸福的慨念,目前较为成熟的有CouchDB,MongoDB,Mnesia等,但这一些对于销售与客户而言,是一个难以理解的东西,介绍起来也是事半功倍,就是我们开发人员自己,也不敢说他的性能与稳定性,肯定会比Oracle,Mysql要强,毕竟,新生事物需要时间来认证。在可管理性,成熟度,客户接受能力等多个方面,我们更愿意把数据存储到Oracle数据库中。
我们云平台,前期版本最开始使用的是Mnesia,后期改造成可以选择性地存储到Oracle、PostgreSQL、Mysql等关系型数据库中,这个改造就是基于以上多方面原因的考虑,将关系型数据库,文档数据库的优势,完美的结合在一起。
现在,我们来了解REST技术,
         REST 是英文 Representational State Transfer 的缩写,是近年来迅速兴起的,一种基于 HTTP,URI,以及 XML 这些现有协议与标准的,针对网络应用的设计和开发方式。它可以降低开发的复杂度,提高系统的可伸缩性。
REST 的核心是可编辑的资源及其集合,用符合 Atom 文档标准的 Feed 和 Entry 表示。每个资源或者集合有一个惟一的 URI。系统以资源为中心,构建并提供一系列的 Web 服务。REST 的基本概念和原则包括:系统上的所有事物都被抽象为资源;每个资源对应唯一的资源标识;对资源的操作不会改变资源标识本身;所有的操作都是无状态的;等等。
在 REST 中,开发人员显式地使用 HTTP 方法,对系统资源进行创建、读取、更新和删除的操作:
使用 POST 方法在服务器上创建资源,
使用 GET 方法从服务器检索某个资源或者资源集合,
使用 PUT 方法对服务器的现有资源进行更新,
使用 DELETE 方法删除服务器的某个资源 。
REST通过一个URL来获取与更新数据,这个URL可以相当于一个Key,返回的数据为Value,那么REST技术核心在本质上与Memcached拥有相同的机制,他们是天生的一对黄金搭档,所以REST请求的最前端,可以直接连接Memcached进行缓存,若有数据更新时,我们对Memcached进行更新处理。
关系型数据库通过SQL语句进行操作,一个SQL语句,若只能一张表进行操作,那么缓存是很好做的,当有数据更新,删除所有的缓存就可以了,但实际上,我们的SQL语句包含了大量的联表查询,当某一张表发生更新时, 所影响的缓存就很多了,我们的缓存更新机制就无所适成了。但文档型数据库不存在这个问题,文档型数据库没有联表查询,所有的数据松散地存在一张表里了,那么缓存更新机制就很轻松了。
总结,REST + Memcached + NOSQL 形成了云平台的基本框架,集成全文检索、批量数据与报表引擎后,无论在开发人员研发效率上,销售与用户接受度上,产品的成熟度上,都是一个完美的结合,也是我们云平台的最大的一个亮点。
 
\

 
 
-
分享到:

Copyright © 2012 - 2014 oldhand.cn All Rights Reserved. 粤ICP备13025864号