1. 从0诞生

2012年云计算在业界已经风起云涌,云计算为企业带来的价值为世界所认同,按需提供的计算、存储、网络等底层IAAS基础设施、以及丰富的PaaS和SaaS服务为IT公司产品的开发、运营以及快速可持续发展提供了强有力的支撑。云计算犹如肥沃的土壤,让产品和idea犹如雨后春笋般在晴朗的空气和阳光中快速成长,势如破竹。

同样网易杭州研究院也早已蓄势待发,准备捋起袖子,大干一场,如同追风少年,驰骋于时代浪潮之巅。

其中后台技术中心存储平台开发组NOS团队正在紧锣密鼓的打造面向整个公司的云存储服务。更好得整合底层的存储资源并以开放协议(HTTP RestFul)提供给广大的网易开发团队使用。

巧妇难为无米之炊,而对于NOS团队来说,米缸里头的米俨然已经准备好。网易杭州研究院早在其他互联网企业高呼去IOE之前,在2006年就已经紧锣密鼓得打造分布式文件存储服务和分布式数据库服务来满足公司当前和未来业务的发展;这两个系统分别是DFS(Distribute File System)和DDB(Distribute Data Base)。DFS的目标是整合诸多服务器的存储资源为上层应用提供海量的存储系统,支撑横向按需扩容。DDB的目标是整合底层的关系型数据库服务,为上层服务提供海量的数据库服务。DFS和DDB都秉承了Keep it Simple的系统设计理念,对于大型分布式系统来说,简单尤为可贵,简单意味着可控、不易出错和强大的生命力。

DFS的设计原理非常简单,把底层的磁盘组织起来为上层提供统一的存储视图,如下为DFS的基本设计架构图。每个对象有一个全局唯一的64位文档ID号,按照24+10+10+10+10切分为四段,分别代表桶号,目录结构和文件名(避免本地文件系统单目录下元数据的限制), 每个SN管理多个磁盘,多个SN上的磁盘做成磁盘对,桶建在磁盘对上,桶和SN的最终映射关系缓存于客户端。客户端FSI直接根据其缓存的映射关写多份副本。

DFS分布式文件存储系统在邮箱大附件和网盘应用中得到了非常成功的应用,承担了所有网易邮箱附件存储服务,存储规模达到几十上百PB级别(在国内互联网公司也算是规模不小的集群),为网易邮箱的快速可持续发展提供了强有力的支撑。DDB分布式数据库架构不再这里鳌述,详见DDB架构实践

而当时对于这些基础组件,如DFS分布式存储系统,使用模式为一个产品部署一套,譬如邮箱网盘、大附件、相册、网易博客等都会单独部署一套。该模式存在的核心问题是,网易新产品层出不穷,一个产品一套造成了大量的运维工作,同时也形成非常多的资源孤岛,多个产品不能融合共用资源,造成大量的资源浪费。

随着时间的发展,云服务的思维方式慢慢深入人心。团队决心改变这种模式,在这样的背景下,NOS(NetEase Object Storage)立项,团队基于DFS和DDB,在8人1年多的时间成功打造了一款功能媲美AWS S3的云存储系统,如下图所示(2012功能对比)。2012年10月30日系统成功上线,NOS呱呱坠地,意义重大,伴随着其它云计算产品陆续完成发布,网易正式进入云计算新时代。

xxx

2. 成长之痛

如同婴儿诞生,NOS上线之初,短暂平静后便开始经历摸爬滚打,一路荆棘一路坎坷,不断成长。

2012年上线之后,接入NOS的第一个产品是网易云课堂,承接课堂上的所有图片和视频;后续不断有网易公开课、网易云音乐、有道云笔记、网易云阅读、网易花田、印象派、网易游戏官网等网易互联网产品的接入。上线半年的时间内,产品的架构能够很好地满足当时的系统负载,顺风顺水度过了半年的时间。

和其他互联网产品一样,NOS作为面向开发者(同时也直面用户请求)的产品,在技术上的短板和流程上的缺陷随着越来多产品的接入及产品自身的发展壮大不断凸显。

2013年IM大战一触即发,腾讯微信已如鱼得水,阿里强推来往,网易和电信公司联合推出易信,各大互联网公司希望继微信之后能在IM领域能够占得一亩三分地。技术上,易信在语音、图片、视频等这些UGC数据的上传、存储、访问和处理基本全部使用NOS。NOS和其他网易云计算的基础设施保障了易信产品在短期内快速发布上线。

但是上线之后的大规模推广给NOS系统带来了数十倍于往常的压力,UGC产品带来的线上增量是NOS团队未曾预料到的。

2013年5月普通的一天,天气像往常一样,阳光明媚,下午16:20分,NOS一台服务器意外挂掉,随后产品方反馈NOS服务很慢,排查发现此时NosProxy(NOS对外业务逻辑服务模块)使用的servlet容器tomcat的连接数从往常的100、200上升到5000以上,对于tomcat 这样的线程并发模型服务器(Thread Based concurrey Servlet),底层需要一个线程处理一个用户请求,而依赖组件的过载和超时的不合理设置直接导致了处理线程一直被后端依赖组建block,下午16:32连接数再一次恶化,NOS对外提供的所有接口和服务陆陆续续不可用,用户请求的不断到达和后端依赖模块的过载,直接导致系统发生了雪崩效应。 事态严重,NOS立即对线上服务模块进行重启并启动扩容计划,开始调集公司力量增加新服务器进行线上扩容。

此时丁老板办公室外面的易信团队异常骚动,此起彼伏的不断问候NOS爹娘。到了下午5点多,NOS又一次出现故障,新机器还没ready,团队能做的就只能是重启重启重启,突然,NOS负责人后面出现了一高大而又陌生的身影,丁老板穿着拖鞋下来了,直接接彪了一句:“tomcat怎么能这么用”(你没听错,丁老板是技术出身的!!!)。记忆中,这是头一次离老板这么近,近在咫尺,丁磊在背后看着你处理线上问题,更多的细节伴随着颤抖着的小手敲着键盘的声响已经记不太清了。

成长的代价很沉重,收获有点沉甸甸。此次重大事故后,团队进行了全方位的总结,技术方面的改进很多,主要包括:

  • 服务拆分:子系统过载会级连导致整个系统的过载,对关键服务模块进行了拆分和隔离。
  • 过载保护:对所有子系统的调用设置合理的超时,避免持续等待,并且进行了完善异常验证测试。
  • 尽力而为:子系统过载服务不过来的时候直接决绝服务,尽力而为,并且拒绝做无用功(客户端已经超时的请求直接丢弃)。
  • 高可用:避免系统单点,使用Nginx健康检查、VIP、自动切换脚本等机制自动屏蔽故障节点,保障线上服务持续可用。
  • 故障隔离:对图片、上传下载服务器进行物理机器的隔离,物理隔离代价较大,在实践上还在逻辑上对不同业务进行一定隔离,比如进程隔离、业务隔离等等,避免一个篮子里的鸡蛋都出问题。

3. 快速发展

技术和构架上的改进基本能够保障系统宏观上跟得上业务的发展。而如何在产品快速发展过程中保持持续稳定,这个难题是我们这5年来遇到的很大的难题。

首先看一个概念,对于云服务而言,评估一个服务是否稳定有一个很重要指标,即可用性或者说可用率,该指标具体量化了系统或者服务的稳定性特性,如下所示。

可用率 宕机时间每年
90%(1个9) 36.5天
99%(2个9) 3.65天
99.9%(3个9) 8.76小时
99.99%(4个9) 52分钟
99.999%(5个9) 5分钟
99.9999%(6个9) 31秒

详细可参看:如何打造高可用系统

在NOS产品的不断发展中,除了需要持续维护系统稳定的运行,还需要不断开发新功能,并进行构架的调整。如何在大大小小的关节点和振荡期持续对外稳定输出服务,维持高水准的稳定性和可用性? 这个问题的难度远比绝大部分技术上的调整艰难得多得多。需要长时间的积累以及团队的坚持履行、甚至涉及到团队文化的建设。如下我们具体看下NOS团队在这方面的实践经验和取得的成绩。

下面为NOS高速发展的2年记录的实际线上可用率数据。

时间 可用率
2014下 99.99543%
2015上 99.99657%
2015下 99.97374%
2016上 99.999%

在这两年时间,NOS服务普遍做到了3个9,甚至4个9以上的可用率。在2016年上半年,NOS系统达到了5个9的可用率,唯一发生的故障为线上数据库服务器故障,自动化脚本在3分钟的时间内自动完成故障探测和备份节点切换,实际造成的影响不到3分钟。期间伴随着诸多新功能的上线和构架调整,如下所示,2016上半年,NOS组件数量到达41个,版本发布多达42次,涉及15个功能组件,上线次数30次(不包含灰度发布),每周都要进行好几次上线,新增3大组件,开发语言包括JAVA、C++、Golang、Python、ObjectC、Android等等。

同时相比于2015年底,2016年上半年新增存储容量达到历史总量的70%系统压力增加50%,系统的横向水平扩展能力很好的满足了业务快速增长的需求。据不完全统计,NOS当前为目前网易负载数一数二的大系统。

在产品推广使用上面,2014~2016 NOS发展迅速,成为网易内部及合作伙伴云存储产品的首选。下图列举了当前使用NOS一些产品。NOS提供的非结构化数据解决方案为大型互联网、社交通信、电商、移动、支付理财、云计算saas等诸多领域的产品提供了稳定的服务。

回过头来我们来回答“NOS如何在大大小小的关节点和振荡期持续对外稳定输出服务,维持高水准的稳定性和可用性?”,这个问题,在将近5年的时间内,NOS团队用无数次的讨论和实践、血泪教训不断总结和完善了–“NOS稳定保障流程体系”

从定义、规划、实施、测试、上线、运维、事故等7个大方面“确保提早发现问题,缩小问题发生的代价,快速进行恢复,从而最大限度减小损失”

流程看起来好重,当然并不是所有大小功能的上线工作都需要执行全面完善的流程,但是基本上关键的流程都会覆盖到, 大型架构的改动都会严格执行所有流程。客观现实要求团队必须如履薄冰,一步一个脚印踏踏实实,用完善的流程来避免人为引入的不可靠因素,因为NOS云存储服务是给大量产品提供7x24小时在线服务,出问题的代价太沉重。

当然NOS云服务的快速健康发展,原因有很多,除了提供了“稳定的基础服务”、我们还提供“贴近用户的增值服务”(如丰富的图片和音视频服务、直传加速服务)及“口碑坚挺的技术支持”(开发会投入1/3时间接待客户,帮助客户更快更好得使用NOS)。稳定是基石,增值服务吸引了更多的用户,口碑坚挺的技术支持更是帮助团队实现客户留存和良好的口碑传播。通过这三方面更好得支撑各个产品稳定服务,从而反过来促使NOS产品自身不断发展壮大。

4. 星辰大海

数据存储是企业持续发展不可或缺的土壤,并且企业对数据存储的需求会越来越多,量也会越来越大。NOS团队会一直致力于打造一流的存储服务以及基于存储的富媒体和上下行加速服务,一站式解决非结构化数据管理难题,助力产品方实现最佳用户体验

2016年,网易公有云计划正式启动,NOS和所有的其它网易云产品一样,踏上的新的征程,将19年的技术积累做全面开放,赋能给所有IT企业,为所有企业插上一双网易云的翅膀,共同创造美好的未来。


This article used CC-BY-SA-4.0 license, please follow it.