写点什么

UPYUN:用 Erlang 开发的对象存储系统

  • 2014-02-20
  • 本文字数:3394 字

    阅读完需:约 11 分钟

在国内的几家云计算创业公司当中,UPYUN(又拍云)选择了一个比较独特的定位:面向开发者提供非结构化数据云存储服务。非结构化数据存储服务一个很重要的卖点是要提供快速的静态文件访问能力,这对底层的存储系统性能和上层的 CDN 系统提出了较高的要求。

黄慧攀 @oneoo )是 UPYUN 技术总监。在 QCon 上海 2013 大会上,黄慧攀介绍了 UPYUN 的 CDN 系统架构,包括 Nginx 的二次开发经验、防盗链服务的实现、海量小文件的性能处理等;在 QCon 北京 2014 大会上,他将对 UPYUN 底层的对象存储系统的研发经验进行分享。

在本次采访中,黄慧攀介绍了 UPYUN 对象存储系统的一些历史,团队的分工,以及做测试方面的一些思路。

InfoQ:先介绍一下你自己吧。你关于计算机的知识都是自学,从底层网络、操作系统到上层的 Java、PHP 都玩,Lua 也玩。你对技术的选择有什么标准吗?如果有,是怎样的标准?

黄慧攀:我是出身于广东一个小城市“鹤山”人,最早是在 95 年接触电脑,98 年开始使用互联网,那时网易还只是做邮箱服务的,我非常感谢我的初中母校,使我能这么早期接触到互联网,影响一生 :) 也因为当年电脑、互联网才刚刚起步,学校也缺乏较好的教育能力,所以很多知识需要自学。也因为这个兴趣太浓,搞得其他学科基本都挂科了,也就没考上高中和大学。到现在还是有点小后悔,起码得把英文学好。

2001 年,18 岁的我第一份工作是市里一个集团公司的 B2B 门户网站,负责程序开发工作。那时用的语言是 PHP,边学边做的折腾了 3 年时间。

2004 年,项目因为市场、资金的原因结束了。在我们的小城市互联网就业机会基本为零,只好转到一个做弱电工程的公司任技术工程师,负责网络系统方案设计、智能灯光系统等等。

2006 年,压抑不住互联网的心,就出来创办 yo2.cn 优博网,国内第一个基于 WordPress 的博客服务平台,这个创业经历使我的技术能力提升很大,因为没人嘛,所以整个网站的事情都得自己做,开发、运维、客服,甚至设计等等。记得当时网站被人吐槽最多的就是用户体验,我想如果能把这块也做好,可以做 UED 了,哈哈。

2009 年,机缘巧合来到杭州,跟朋友做了几次创业,虽然也是失败告终,但在其中的过程使自己成长了很多,因为创业嘛,所以很多事情都必须自己做的,这就奠定了我的技术层面比较广的基础。

2011 年,收到又拍网的邀请,开始又拍云的开发工作至今。

经历这么多年和多次创业,积累到比较丰富的技术经验。知识比较全面,在看待技术选型方面的把握还是比较准的。比如:Java 的优点是适合大型项目、团队协作开发,缺点也很明显,开发周期长、人员成本相对 PHP 高一些;而 PHP 的优点则是适合中小型项目、开发周期短、人员成本低,当然弊端也很明显,不支持多线程、系统资源占用高。每个语言都有自己的优缺点,要根据项目实际情况来选择。后来一个偶然的机会接触到 Lua 语言,发现它跟 PHP 很像,但又没了 PHP 几个大缺点,非常棒。所以现在我主要使用 C 和 Lua 这两个开发语言。

InfoQ:你自己做过博客平台,也在企业网站、网游等网站做过,现在在 UPYUN,可以说是从面向消费者的.com 公司转移到了一个更加基础一些的服务。你觉得在 UPYUN 做的事情跟以前有什么不一样吗?

黄慧攀:我觉得做 UPYUN 这件事,是之前几个项目的升华吧。因为这些面向消费者的项目让我知道在开发过程中产生的痛点,从而挖掘出开发者的需求。我很高兴能为开发者服务,帮助大家更快的把项目做好。

InfoQ:能不能简单介绍一下 UPYUN 这套对象存储系统的研发历程?比如是什么时候开始做的,最初的设计者是什么背景,借鉴过哪些思路,研发的过程中有没有什么好玩的故事等等。

黄慧攀:UPYUN 的对象存储系统其实早在 08 年就开始设计的,当初用的是 MogileFS,为又拍网服务。因为早期的 MogileFS 的设计本身有一定限制,tracker 角色的元信息使用单个 MySQL 实例存储,无法满足我们日益增长的存储量,所以在 2010 年转为使用 Erlang 语言开发。设计目标是提供 PB 级别的存储服务,经历 1 年多的业务测试才正式对外开放存储服务。

选择 Erlang 语言进行开发,主要是语言本身就支持分布式,这可以节省很多开发工作。且 Erlang 语言在电信行业的应用非常广泛,稳定性有保障。

在分布式算法的选型上是参考 Dynamo 方案。而在具体的数据存储结构方面则是自主研发的一致性哈希算法,以实现多机柜、多服务器和多磁盘之间的数据备份工作。做到每文件的对应备份点在不同机柜、不同服务器上,避免某台服务器甚至某个机柜的服务器宕机而影响到文件的读写操作。

至于测试周期长达 1 年多,是因我们本身又拍网(照片社区)的数据量就非常庞大,从老的 MogileFS 集群迁移到新的云存储服务器占大部分时间,另外是因分布式存储服务的容灾测试过程比起应用测试要漫长得多,主要的测试点会有:某磁盘故障、某服务器故障、某机柜故障等好几种灾难测试,且每个故障都会产生一定量的数据迁移,文件会在集群内部自动寻找合适的备份点再建备份,所以说测试周期需要很长时间。也只有做到充分的测试,我们才放心的在集群上存储大量数据。否则等遇到无法排除的问题,要考虑新建集群的话,迁移成本和周期都会非常巨大。比如 10PB 的数据要从 A 集群迁移到 N 集群,网络传输就要 100pb,基于 10gb 网络也得耗时半年;且要保障迁移期间内不再发生新故障,这是很难做到的。所以我们选择前期测试做得非常充分,来保障日后服务的可持续性。

InfoQ:又拍云专注于做图片的存储,你们提供了一些很有特色的服务(如缩略图、防盗链),同时非常专注于服务质量。相对于文件备份类的应用场景,海量小图片存储是非常吃资源的,你们在存储系统的设计上做了哪些工作以确保在资源占用高的情况下仍然能保持图片访问的服务质量?

黄慧攀:是的,UPYUN 主要面向小于 100MB 的小文件提供服务,目前我们的存储集群已存有超过 2PB 的数据。面向海量小文件所面临的主要问题是:随机读取非常高、磁盘性能低;大家都知道缓存系统可以解决这类问题,而 CDN 其实就是个巨大的缓存系统,所以我们自建了 CDN 并对外提供服务。不仅能解决海量小文件所产生的磁盘性能问题,还能加速文件在互联网上的传输,一举两得。

InfoQ:UPYUN 系统的测试是如何做的?

黄慧攀:我们团队还比较小,目前未专门设立测试部门,所有测试工作均由项目开发者来完成,毕竟开发人员更清楚会有哪些潜在问题,并制定自动化测试的样例。下面是我们一个项目的开发、测试与发布流程:

  1. 项目策划、文档和方案撰写
  2. 开发(过程中会有两名以上开发人员交叉 review)
  3. 本地测试(主要测试该项目的功能是否正常和程序稳定性、资源占用率等等)
  4. 模拟平台测试(主要测试该项目的功能上线是否对原平台上其他子系统产生不良影响,这里会有我们自己编写的一批批量测试脚本,以验证平台每项功能逻辑是否正确)
  5. 灰度测试(业务环境中抽取 1% 的服务器更新或指定某个别客户可使用该功能来进行测试)
  6. 全网发布

从整个流程来看,我们的测试周期是比较长的,测试工作占整个项目周期 50% 以上,甚至个别影响范围大的项目,测试周期会长达半年以上。

InfoQ:你们的团队是怎样分工的?研发跟产品运营、系统运维的同学又是如何沟通的?

黄慧攀:大家从我们的产品介绍上会知道我们主要提供 3 块服务,

  1. 云存储
  2. 云分发
  3. 云处理

所以我们的开发团队主要是根据这 3 个方向进行分组。现在我们团队分应用开发组和核心研发组,而在核心研发组中又分存储、分发、处理 3 个小组,分得比较细。因此我们的小组成员之间会有交叉分工,以便大家对整体系统能有充分的了解。

我们的产品服务与一般互联网服务不太一样,我们是以产品为主导而非运营主导,且我们的产品经理也是开发出身的,所以在与开发团队的协作沟通上不会存在什么问题。另外的运维部门则是更加紧密,因我们正在开始整个平台的自动化运维系统开发,我们的开发人员已走到一线,跟运维人员一起探讨运维自动化系统的功能性问题,开发人员能亲身了解运维工作和痛点,并以此来驱动运维自动化系统的开发工作。

InfoQ:这次 QCon 北京,你希望面向哪些人群进行分享?他们能从你的分享中获得什么?

黄慧攀:很感谢 QCon 能让我们来继续跟大家做些云计算方面的分享。在上一次的 QCon 上海大会我跟大家分享了又拍云的 CDN 技术,按我们公司的服务层次划分,这次的分享主题是我们在云存储系统的研发和构建过程中遇到的一些问题和经验。希望大家能通过我们这次的分享,对云存储能有更深入的了解,比如分布式算法、存储结构和日常维护等等。

2014-02-20 00:506897

评论

发布
暂无评论
发现更多内容

Kubernetes官方java客户端之二:序列化和反序列化问题

程序员欣宸

Kubernetes java client

6元自助洗车店加盟需要多少费用

共享电单车厂家

自助洗车加盟 6元自助洗车店加盟 6元自助洗车 自助洗车加盟费

互联网裁员风暴的一些思考

慕枫技术笔记

3月月更

2022年中国智能支付终端市场专题分析

易观分析

数字人民币 智能支付终端

脚本库详细说明 - 大屏云极简使用手册

shulinwu

架构训练营-模块一

哈喽

「架构实战营」

打通源码!高效定位代码问题|云效工程师指北

阿里云云效

阿里云 源码 云原生 代码 代码管理

破解数据库内核人才困局:PingCAP 的思考与尝试丨Talent Plan 专访

PingCAP

【OH干货】给OpenHarmony 开发板配置网络

拓维信息

开源 OpenHarmony

汇聚创新力量 企业智能化转型开源社区“星策”正式成立

第四范式开发者社区

程序员 金融 开源社区 企业转型 企业数据化转型

【多云管理】多云管理如何化繁为简提高效率?

行云管家

云计算 企业上云 多云管理 多云

云效一站式DevOps平台

阿里云云效

云计算 阿里云 DevOps 云原生 云效

自助扫码洗车机加盟怎么加

共享电单车厂家

自助洗车机价格 自助扫码洗车机 自助洗车怎么加盟 共享洗车加盟

博文推荐|Apache Pulsar 轻装上阵:迈向轻 ZooKeeper 时代

Apache Pulsar

zookeeper 开源 云原生 pip Apache Pulsar

全方位讲解 Nebula Graph 索引原理和使用

NebulaGraph

索引 知识图谱 #数据库

Dcm4chee--MySql版Docker镜像制作

birdbro

Docker DCM4CHE

Linux云计算之VSFTP服务器概述-安装vsftp服务器端、客户端

学神来啦

Linux 运维

Redis(一)原理与基本使用

神农写代码

Linux环境,C/C++语言手写代码实现线程池

Linux服务器开发

c++ 线程池 Linux后台开发 服务端开发 线程池源码

6元自助洗车设备一套多少钱一台

共享电单车厂家

自助洗车机多少钱 自助洗车机价格 自助洗车加盟 6元自助洗车设备 6元自助洗车机

体验了一把最近很火的开源项目-MASA Blazor

MASA技术团队

C# .net 微软 组件库

数据产品经理实战-如何做方案

第519区

数据产品经理 解决方案

最新太原市五家正规等保测评机构名单看这里!

行云管家

网络安全 等保 等保测评 太原 等保测评机构

《假如你身处被“科技制裁”的俄罗斯》之数据库专家访谈 | 墨天轮专访

墨天轮

数据库 oracle 开源 国产数据库 MySQL 数据库

OpenHarmony v3.1 Release版本发布

OpenHarmony开发者

OpenHarmony

研发数字化管理,如何打破“上班摸鱼下班加班”的怪圈

方云AI研发绩效

团队管理 研发管理 研发效能 数字化转型 研发管理工具

源声|听听赛博堡垒的锻造之路,以及云安全那些事儿

OpenTEKr

网络安全 软件开发 开源技术

数字资产管理系统解决方案

低代码小观

数字化 资产管理 企业管理系统 数字化经济 企业管理软件

自助洗车加盟需要投资多少?分析下

共享电单车厂家

自助洗车机 自助洗车加盟

6元共享24小时自助洗车加盟如何

共享电单车厂家

24小时共享自助洗车 6元自助洗车加盟

T3 出行 Apache Kyuubi Flink SQL Engine 设计和相关实践

网易数帆

sql 大数据

UPYUN:用Erlang开发的对象存储系统_QCon_sai_InfoQ精选文章