自从2011年宣布第一波开源项目以来,阿里巴巴的技术人一直积极参与开源社区共建。开源项目数量每年都有所增长,目前阿里巴巴已经有150+个开源项目,其中数个项目star破万。相关的GitHub 2017年数据统计显示,阿里巴巴是唯一一家入围GitHub顶尖贡献名单的中国公司。
在开源中国举行的“2017年度最受欢迎中国开源软件Top20”的评选中,阿里巴巴占据五席位。
其实,阿里巴巴并没有开源项目的KPI考核,各个团队都是发自内心地将踩过的坑和总结的经验融入到开源项目中,供业界所有人使用,希望帮助他人解决问题。这正是社区一致的开源精神,大家都可以站在巨人的肩膀上,每个人都可以即是老师又是学生,这或许可以解释为什么IT技术的发展能如此充满活力。
本文总结整理了2017年阿里巴巴九个重要的新开源项目和在开源中国评选中五个备受欢迎的项目,希望能对大家有所帮助。在此,特别感谢阿里技术人和社区粉丝们的辛勤付出。
互联时代的用户端
随着Web2.0、Web3.0时代交迭,无线端硬件性能的提升与用户体验理念的倡导,Web站点与应用变得越来越重要与复杂。这一点可以从JavaScript的热度变化看出来:JavaScript、 Java、PHP同样诞生于1995年,但是三者却经历了不同的发展曲线。JavaScript不断发展,热度渐涨声名鹊起,GitHub的JavaScript语言编写的开源项目共计23万个位列第一,是第二名Python开源项目的2.3倍,并且远超Java和PHP开源项目总和。JavaScript被越来越多的使用,AJAX使得它在前端编程中大放异彩,而Node.js也让人开始关注JavaScript在服务器端开发的能力。
阿里巴巴向社区贡献了两款企业级开源项目: UI设计语言和React实现项目Ant Design、Web基础框架Egg.js。
Ant Design,前端的美好呈现
Ant Design提炼自蚂蚁金服的中后台设计经验:在产品交互和视觉风格上,它秉承“微小 · 确定 · 幸福”的理念,追求提升用户和设计者的使用体验;积累了丰富、灵活、使用的基础组件,并准备了常见问题的解决方案;使用TypeScript支持完整的类型定义,采用高质量React组件可以开箱即用,并且基于npm + webpack + dva 的企业级开发框架。
回顾2017年,Ant Design主要做了三件事情:
l Ant Design 2.x 版本持续迭代,版本从 2.6.0 迭代到 2.13.11。
l 10 月推出了 Ant Design Pro 的前端脚手架,对中后台常用的场景提供了最佳实践。
l 12月初发布了 Ant Design 3.0,带来了全新的设计体系和大量新特性。发布日志可见:https://medium.com/ant-design/announcing-ant-design-3-0-70e3e65eca0c
在开源两年多的时间里,Ant Design一直通过收集设计和研发的需求进行不断改进。设计师团队不断优化和改进Ant Design的设计规范,视觉效果整体调整也体现在本次3.0新版本中。而研发层面则会听取内部与外部的各种业务需求:向社区公开项目开发的长期规划,尤其是主要目标和破坏性改动,并且日常性地通过钉钉群和GitHub中收集大量新需求和问题报告,
与社区保持密切互动。项目有小版本研发的固定周期,每周都会发布bugfix版本,每月发布minor版本。
Ant Design是 React 社区最流行的 UI 组件库之一,除了阿里巴巴集团,还有腾讯、百度、美团、滴滴和饿了么等公司在使用。目前Ant Design在GitHub上拥有21485颗star,是开源中国评选的2017年度 Top20最受欢迎中国开源软件。
Ant Design负责人偏右表示,在此次发布Ant Design 3.0之后,项目已经相对成熟,会进进入较长的持续维护阶段,暂时预计不会有巨大的变化;团队将在视觉布局和主题配置、国际化、集成化上补齐Ant Design Pro 的功能,推动其实践落地。
相关链接:http://ant.design/http://pro.ant.design/ https://github.com/ant-design/ant-design
企业级Web基础框架Egg
企业开始采用微服务架构,这涉及到服务颗粒、API接口、开发维护等具体任务,前端与后端不得不面对“应该更考虑用户侧的灵活体验,还是更加配合后端服务的通用性”的争执。Node.js在近几年的蓬勃发展中,慢慢改进了很多被人诟病的黑点:生态上npm包数量冠绝全球,改进单线程问题,借助ES规范逃离回调地狱,成熟的TypeScript带来类型系统,性能也得以持续优化。
但是,非常遗憾的是,Node.js的基建成熟度与生态热度并不匹配,Node.js本质上依然似个新生儿:工业界的Web框架实践寥寥无几;社区重复造轮子,而且缺乏统一参考规范,带来很多重复、不合理使用的问题;相比应用,Node.js的基础技术研究依然很少,如何保证高可用成为重要问题。
阿里的Node.js应用始于2011年,经历了重复造轮子等上述困扰之后,开始认真思考起来“如何既能统一生态共建,又能支持差异化定制”。于是,Egg应运而生,其名寓意“孕育”,是期望成为一个Web开发基础框架,以帮助各团队在Egg之上搭建适配业务的上层框架。Egg沉淀自大规模企业应用的工程实践经验,包括多年稳定支撑天猫双11大促;也经历了三年四个版本的微内核打磨。
Egg 基于 Koa,但又完全有别于 Sails / LoopBack 等上层框架, Egg 位于它们之间的中间层,提供『微内核 + 插件机制 + 框架定制能力』,提供了一套统一的约定,为上层框架服务。Egg是渐进式开发,极具伸缩性,因此既适合个人小项目快速开发,也适合企业级的团队开发协作。
虽然刚刚开源一年,但是Egg已经收到500+(主库272)Pull Request,并处理了1200+个issue,发布了40+篇共计10万余字的官方文档。在GitHub上收获6k+ star,Egg官网PV近万。在阿里巴巴内部,Egg服务了500+前端开发者和1000+应用;而在外部,Egg收到了来自百度、腾讯、全民直播、丁香园等多家公司共计90多位技术人员的改进反馈,甚至收到了Node TSC Director Rog Vagg在Twitter上的关注与转发 。
未来,Egg会将重心放在开发者体验方面的优化上,并且分享更多的最佳实践。
这里还需要浓墨重彩地讲讲阿里的Node技术积淀:除了阿里内部的1000+应用,阿里技术人同样进行了Node.js底层排坑工作,也与Intel探讨如何进一步提高Node.js性能。此外,阿里最近刚刚发布Node.js性能平台,作为企业级性能解决方案,它提供免费的Node.js 运行时 + 监控诊断服务。
相关链接:https://eggjs.org/ https://node.console.aliyun.com/
自2007年苹果推出iPhone以来,智能手机的普及开启了移动开发时代,App开始承载越来越多的业务场景,但这也同样给开发带来了不小的挑战。
灵活的Android开发框架Atlas
和大部分开源项目一样,Altas也是为了解决阿里自身遇到的问题。伴随着手机淘宝的不断发展,研发团队规模扩大,功能愈发复杂,需要端侧业务的快速迭代;而开发、运行和运维中遇到的问题不断增多,也需要及时进行线上bug修复。于是手淘团队开始思考如何将复杂事情简单化,如何进行动态部署,提升团队的移动开发效率。
Atlas以容器化思路解决大规模团队协作问题,适用于Android 4.x以上系统版本的大小型App开发,并且支持动态发版。一般而言,业界常用解法是插件化框架,但是考虑到复用性,Atlas采用的组件化模式,将业务拆开并复用公共部分。项目借鉴服务端的OSGI思想,将业务拆出来独立成bundle,隔离解耦运行,从而实现并行开发、快速迭代和动态部署。
Altas源自阿里巴巴移动团队五年的研发积累,进行了静态组件化和动态组件化的技术准备。在今年正式开源之后,Altas基本上保持了每两个月发布一次大版本,同时做到内部和社区使用同一套代码。Altas完善了稳定性、工具链升级及dexpatch等方面,具体而言,三个重大的功能点是:动态部署新增component支持;dexpatch功能;bundle间的view复用。
作为初来乍到的开源项目,老实说,Altas最初并没有做的尽善尽美,由于项目具有较高的门槛,再加上文档不够完善,Demo简陋,所以遭遇了较多吐槽。Altas随即紧急决定建立一个钉钉群,一边帮助开发者更快的理解和接入Atlas,一边完善文档和Demo。据悉,目前基本上内部很多安卓App都使用了Altas(如天猫、淘宝、虾米、优酷、阿里云),而外部至少有三款接入Altas的App上线,这是令Altas团队非常开心的事情。
Atlas的愿景是“带你重返App开发的田园时代”。未来,Altas将继续完善文档、升级工具链,降低接入成本、提升稳定性与兼容性,并且还会推出配套的Emas for Atlas商业服务,并便于服务端的发布。
相关链接:
http://atlas.taobao.org/ https://github.com/alibaba/atlas
构建高性能的分布式系统
业界同样见证了的从大型机到分布式系统的趋势转变。大型机部署简单,无需多个节点配置,但是售价高、维护困难、单点依赖较高;而小型机组建的分布式系统则在降低成本的同时提高整体的并发量、扩展性和可靠性。相信不少人都听说过数据库连接池Druid,json解析fastjson,消息中间件RocketMQ,分布式RPC Dubbo这几个开源项目;今年还有刚开源的飞天缓存ApsaraCache,自研富容器技术Pouch和文件分发系统Dragonfly。
分布式服务治理框架Dubbo重大升级
Dubbo一个基于Java的高性能RPC框架,早在2012年开源,自开源以来深受国内友商和开源爱好者的青睐,虽然一直陆续在维护,但是由于用户群体庞大,日常维护根本无法完全满足社区的旺盛需求。随着阿里技术的发展,在保证集团内部和客户服务之外,如今可以抽调更多经历将技术赋能全社会。
今年Dubbo重启维护并进行了重大升级,Dubbo2的设计原则强调扩展性、使用轻量及对开源外围系统和协议的适配,它不仅修复了优雅停机、注解配置等一些框架缺陷,还新增了通信模块和线程堆栈特性等,框架稳定性有了大幅提升。具体而言,Dubbo今年发布了 2.5.4, 2.5.5, 2.5.6, 2.5.7, 2.5.8 等五个版本,主要修复、合并了社区呼声最高的 issue 和 Pull Request,另外主要做了以下的增强:对 Netty 4 的支持、annotation 的增强、Java 8 的支持、docker 的支持。Dubbo还会继续完善,如Dubbo Spring Boot starter、RESTful 支持,优雅部署,容错增强,路由策略增强以及异步化增强等。
除了框架本身,Dubbo 团队还重建了官网 (日均 PV 3500+),更新了文档。为了进一步的扩大影响力,对官网、文档、代码开始英文化的工作,并初见成效,著名的技术博客 baeldung 发表了对 Dubbo 的深度介绍 Introduction to Dubbo,并参与了开源中国、InfoQ 的访谈和宣讲等活动,并入选开源中国 2017 年度最受欢迎开源软件Top20。
Dubbo之所以进行了重大升级,是因为观察到与 RPC 特别相关领域的技术趋势,未来主要会着重向 Cloud Native、多语言增强、微服务支持等几个方向演进,同时Dubbo还会不断建设生态系统和社区以及打造国际影响力。
欢迎大家来https://gitter.im/alibaba/dubbo https://github.com/alibaba/dubbo和Dubbo的开发团队一起探讨。
分布式消息中间件RocketMQ
今年9月,Apache软件基金会官方宣布,阿里巴巴捐赠给Apache社区的开源项目RocketMQ从Apache社区正式毕业,成为Apache顶级项目(TLP)。自此,Apache RocketMQ成为国内首个非Hadoop生态体系、国内首个互联网中间件的Apache顶级项目。今年,RocketMQ还斩获了第十二届中日韩开源软件技术优胜奖和开源中国的“2017年度最受欢迎中国开源软件Top20”。
RocketMQ是阿里巴巴在2012年开源的第三代分布式消息中间件,商用版MQ可在阿里云上获得。历年双11,RocketMQ都承载着阿里巴巴生产系统100%的消息流转,以去年双11为例的, RocketMQ完成了1.2万亿消息精准低延迟投递,交易峰值高达17万笔/秒。
RocketMQ来自于中国,但已经引起了全世界范围的关注。RocketMQ不仅斩获2015年中日韩开源论坛的CJK OSS大奖,并且已经进入欧美主流开源门户网站的视野,目前100多家公司和科研机构正在使用RocketMQ。值得一提的是目前美国是RocketMQ全球第二大访问国。
作为一款分布式消息引擎,RocketMQ有如下特性:
l 低延迟、高并发:99.6%以上的响应延迟在1毫秒以内
l 面向金融:满足跟踪和审计的高可用性
l 工业级适用:可确保万亿量级的消息发送
l 中立性:支持多种消息传递协议,如JMS和OpenMessaging
l 性能可靠:给予足够的磁盘空间,消息可以累积存放而没有性能损失。
相关链接:https://rocketmq.apache.org/https://github.com/alibaba/rocketmq
数据库连接池 Druid 和JSON库Fastjson
Druid是阿里唯一使用的数据库连接池,支持双十一等最严苛的使用场景。Druid有一句slogan是“为监控而生的数据库连接池”。经过六年开源积累,已经相对成熟的Druid收获了不小的知名度与口碑,并陆续成为很多技术团队解决方案中的关键环节。
Fastjson在服务端开发、Android客户端中广泛使用,阿里几乎每个Java应用都用到了fastjson。
这是一个高性能功能完善的JSON库,通过“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,堪称目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
这两个相对而言比较成熟的项目,今年并没有大的功能变更,都是每个月根据社区中反馈的issue发布小版本。未来,Druid后续会增强监控功能,监控功能和阿里云相关监控产品对接。其中的Parser模块会剥离出做一个项目大力发展。
相关链接:https://github.com/alibaba/druid https://github.com/alibaba/fastjson
云数据库Redis分支 ApasaraCache
ApsaraCache(飞天缓存)是云数据库Redis版所使用的Redis分支,是在社区 2.8 版本基础上开始维护的分支,并 backport 了部分 3.0 分支的功能,该版本主要解决了云上用户对稳定性、性能、灾备和平滑升级体验的诉求。
据了解,其实在ApsaraCache开源前,该方案就已经拥有很多成功的客户案例,其中既有视频直播行业的秒拍、一直播、映客、中国网络电视台;也有游戏行业的陌陌游戏、龙渊网络、中情龙图、畅游;同时还有民生类的新闻如今日头条、交通如高德导航、金融如蚂蚁金服、其他如大疆创新,可以说,应用范围和场景非常广泛。
ApsaraCache已经有很多成功的客户案例了,为什么要开源呢?原因在于:
1. Redis在中国的用户群体和使用方式都发生着深刻的变化,遵循极简哲学设计的Redis在某些场景下的稳定性和性能都受到新的挑战,另外很多云上客户在使用Redis的过程中也碰到了各种各样的问题,基于这些问题和挑战,ApsaraCache对Redis进行了大量的重构和改造,为了赋能Redis用户,也为了让Redis开发爱好者能够更好地参与进来,我们决定对ApsaraCache进行开源。
2. Redis是BSD License,相对比较自由;最新版本Redis 4.0支持Redis Module功能,而Redis Module属于AGPL License,ApsaraCache后续也会支持Redis Module机制并开源功能Module代码。所以ApsaraCache开源也是对开源协议的尊重与遵守。
3. ApsaraCache一直在等待Redis 4.0 Release版本的发布,待该版本发布之后会积极推动两边feature的融合,争取merge到社区主干。
Redis创始人Salvatore认为,ApsaraCache项目开源是一件非常好的事情,将能够吸引全世界更多Redis核心专家参与,进一步提升产品的稳定性和可用性。同时,也表明阿里巴巴拥有Redis产品开发的能力,希望未来我们一起努力提升产品的各种功能和特性,给Redis带来更多更好的改进。
ApsaraCache于今年10月份正式开源,据悉,其即将发布新版本会新增两个功能: 解决了AOF Rewrite频繁造成的主机稳定性瓶颈,且支持精确到秒级的按时间点恢复;解决了原生内核在弱网条件下容易复制中断导致的全量同步问题。
相关链接:https://github.com/alibaba/ApsaraCache
自研富容器技术Pouch和文件分发系统Dragonfly
Pouch是阿里内部自研容器技术,目前数据中心运行有数十万个Pouch容器,大规模支撑内部离线在线业务的混部。
首先,Pouch是一种富容器技术,内部应用体验类似虚拟机,拥有init进程,富含多种系统服务;其次,通过内核加固与轻量级虚拟机支持,Pouch提供丰富的安全隔离保障和隔离维度;在镜像分发上,特别是超大规模场景下可通过P2P的方式缓解网络负载;在内核兼容性方面,更加符合企业现状,考虑到大部分企业IT系统内核的升级缓慢、版本较低,最大限度适配现有底层基础设施。
以往大家常用传统的方式来下载文件,这带来两个问题:首先如果遇到特别大的文件,下载失败就要重试,效率低下;其次如果客户端进行大规模下载, 会把文件源压垮。
Dragonfly中文名“蜻蜓”,蜻蜓是通过P2P方式来下载文件,有效的缓解了文件源的压力, 同时还支持断点续传,即使因网络环境导致失败,也无需反复下载文件。蜻蜓的另外一个特点是与Docker、Pouch等技术的集成,它具备镜像预热等功能,Docker原生的下载镜像速度慢,而采用P2P技术的蜻蜓很好地解决了这个问题。
蜻蜓可以满足Docker或者Pouch使用者的较大下载量(如大镜像文件)需求。而对于具备海外节点,蜻蜓也可以节约跨国带宽的。
据悉蜻蜓有两个版本:开源版,支持Apache 2.0协议,可用于P2P文件分发、容器镜像分发、局部限速、磁盘容量预检;企业版则还具备断点续传、全局限速、镜像预热、支持内存文件系统、智能网络流控、智能动态压缩、智能调度策略等功能,该版本内置在云效、阿里云容器服务(公共云、专有云)之中。
相关链接:https://github.com/alibaba/pouch https://github.com/alibaba/Dragonfly
源自最佳实践的参考规范
《阿里巴巴Java开发规约》
程序员的交流是通过代码,代码的质量好坏与工程、团队效能息息相关。
阿里众多资深技术专家与代码规约人员共同潜心研制了一套Java规约守则,并将对应规则研发了自动化检测工具(DE检测插件(IDEA、Eclipse))。如此可以使得开发者更加方便、快速将规范推动并实行起来。该插件在扫描代码后,将不符合规约的代码按Blocker/Critical/Major三个等级显示在下方,甚至在IDEA上,我们还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。对于历史代码,部分规则实现了批量一键修复的功能。
Java代码规约正式以插件形式公开走向业界,并引领Java语言的规范之路。目前,插件已在云效公有云产品中集成。
阿里巴巴P3C项目组会长期更新与维护插件,团队也希望更多的人参与进来,除了发现和解决已实现的检测规则以外,能够实现更多有益的规则,让插件变得更加完善并且帮助到更多的开发者。
相关链接:https://github.com/alibaba/p3c
分布式消息领域的国际标准标准OpenMessaging
OpenMessaging项目由阿里巴巴发起,与雅虎、滴滴出行、Streamlio公司共同参与创立,项目意在创立厂商无关、平台无关的分布式消息及流处理领域的应用开发标准。据发起人介绍,随着标准的不断演进,会有更多的互联网、云计算厂商参与到该项目以及生态体系中来。
OpenMessaging的价值有哪些呢?
在云计算时代,消息通讯已经成为现代数据驱动架构的关键环节,消息中间件可以连接数据源、数据处理引擎和应用程序。然而,全球范围内,消息领域仍然存在两大问题:一是缺乏供应商中立的行业标准,导致各种消息中间件的高复杂性和不兼容性,相应地造成了公司的产品低效、混乱和供应商锁定等问题。二是目前已有的方案框架并不能很好地适配云架构,即非云原生架构,因此无法有效地对大数据、流计算和物联网等新兴业务需求提供技术支持。
OpenMessaging抛弃历史包袱,轻装上阵,期望能解决这些弊端。除了做到可以链接跨平台、跨语言、跨产品和跨云的标准之外,OpenMessaging将提供Cloud Native的能力,面向云计算、混合云架构,实现多云平台无缝迁移,致力于提供金融、电子商务、IoT及大数据等领域的一站式解决方案。
https://github.com/openmessaging/openmessaging-java/
物联网时代
早在1982年,卡内基梅隆大学就在探讨智能设备的联网,这可以算作IoT早期概念的诞生,不过其普及流行还是近些年的事情,2005年国际电信联盟发布了《ITU互联网报告2005:物联网》,其中指出“物联网”时代的来临。Gartner统计数据显示2016年IoT设备使用数量是64亿,并预计该数据在2020年上升至204.1亿。
新一代物联网操作系统AliOS Things
作为一个相对新兴的领域,物联网相关技术的发展依然可圈可点。操作系统市场呈现高度碎片化,很多人采用传统嵌入式的RTOS,也有人研发新的物联网操作系统,但是这两者存在不少的痛点:开发维护成本高,硬件生态/开发工具/功能组件不丰富,系统安全和可靠性无保证,云端一体应用开发部署难实现等。
AliOS Things是针对上述痛点而研发的新一代物联网操作系统:通过提供安全、可靠、可扩展和高度优化的基础OS, 丰富而有差异化的功能特性和开发工具,云端一体化的应用框架,致力于为广大物联网开发者赋能增效。
AliOS Things是业界中最广泛应用的轻量级消费类、连接类和控制类MCU的物联网操作系统。值得一提的是,AliOS Things依托阿里云,基于生活、城市、工业等所有主要物联网应用领域等IoT开放平台,实现了安全设备管理和升级、语音识别、云端一体开发和全链路优化等高阶应用。目前,AliOS Things已经被移植到包括意法半导体(STMicroelectronics)、乐鑫(Espressif)、博通(Beken)等17家国内外芯片厂商的21款芯片之中。
AliOS Things自今年十月份开源以来已经推出3个主要版本,并长期保持稳定的更新节奏;项目有丰富的文档和活跃的开发者社区,目前项目官方网站日均PV 1500+,收到了大量的反馈。AliOS Things 目前已经作为阿里云所有物联网业务设备端上能力的集成平台推出,并在多个业务项目成功落地。
相关链接:https://github.com/alibaba/AliOS-Things
轻量化操作系统AliOS Lite
继AliOS Things开源,AliOS还有将开源AliOS Lite。AliOS Lite是面向IoT领域的轻量化操作系统,支持更多任务处理,支持语音交互、视觉计算等智能处理,适用于CPU性能和内存需求较低(最低支持256MB)的IoT设备,例如智能音箱、智能手表、智能摄像头等。
同时由于IoT设备种类繁多、硬件能力差别较大,业界尚不能找到一个兼容性较好而且低开发门槛的操作系统,也很难有足够的机器智能和安全防护能力支持。
具体而言AliOS Lite解决了以下痛点:
1) 可伸缩的系统设计适应低至 256 MB 内存的智能设备,可配置剪裁的设计适应能力不同的各类设备,保证在 API (应用编程接口)层次上一致的行为;还通过服务依赖流水线、快速渲染、后台程序统一托管等一系列机制提升系统效率。
2)整合阿里巴巴机器智能能力,如人脸识别、图像分类等,以 API 的形式提供给开发者;支持主流机器学习框架,例如 Tensorflow、Caffe。
3)强化加固其安全内核,提供轻量快捷的安全升级机制。
4)在低开发门槛同时,保障系统运行轻快高效。应用开发语言JavaScript,提供了完善高效的集成开发环境和工具。创新地支持轻量的多线程编程,使能多核硬件、支持预编译和静态类型,提速应用运行速度 35%, 降低应用内存消耗 20%。
总体而言,AliOS lite的特点是智能、轻量、可扩展、高效和安全等,并具备可配置裁剪的可伸缩设计和高效 JavaScript 引擎,应用模型无需安装即可使用,并具备独特的生命周期管理功能。