开源公司黄页 关于/ 阿里巴巴的50款开源软件[大部分为Java语言]

Posted 刘元涛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源公司黄页 关于/ 阿里巴巴的50款开源软件[大部分为Java语言]相关的知识,希望对你有一定的参考价值。

服务框架 Dubbo

Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。

主要核心部件:

 

  • Remoting: 网络通信框架,实现了 sync-over-async 和 request-response 消息机制.

  • RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能

  • Registry: 服务目录框架用于服务的注册和服务事件发布和订阅

Dubbo工作原理

  • Provider

    • 暴露服务方称之为“服务提供者”。

  • Consumer

    • 调用远程服务方称之为“服务消费者”。

  • Registry

    • 服务注册与发现的中心目录服务称之为“服务注册中心”。

  • Monitor

    • 统计服务的调用次调和调用时间的日志服务称之为“服务监控中心”。

(1) 连通性:

  • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

  • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示

  • 服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销

  • 服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销

  • 注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外

  • 注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

  • 注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表

  • 注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

(2) 健状性:

  • 监控中心宕掉不影响使用,只是丢失部分采样数据

  • 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务

  • 注册中心对等集群,任意一台宕掉后,将自动切换到另一台

  • 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

  • 服务提供者无状态,任意一台宕掉后,不影响使用

  • 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

(3) 伸缩性:

  • 注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心

  • 服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者

JDBC连接池、监控组件 Druid

Druid是一个JDBC组件,它包括三部分: 

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 

  • DruidDataSource 高效可管理的数据库连接池。 

  • SQLParser 

Druid可以做什么? 

1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 

2) 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 

3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 

4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 

扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。 

如下是一个基于Druid内置扩展StatFilter的监控实现:

Druid 的 JavaDoc 文档请看

http://tool.oschina.net/apidocs/apidoc?api=druid0.26

Java的JSON处理器 fastjson

fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。

主要特点:

  • 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson

  • 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)

  • 零依赖(没有依赖其它任何类库除了JDK)

示例代码:

import com.alibaba.fastjson.JSON;
 
Group group = new Group();
group.setId(0L);
group.setName("admin");
 
User guestUser = new User();
guestUser.setId(2L);
guestUser.setName("guest");
 
User rootUser = new User();
rootUser.setId(3L);
rootUser.setName("root");
 
group.getUsers().add(guestUser);
group.getUsers().add(rootUser); 
String jsonString = JSON.toJSONString(group); 
System.out.println(jsonString);

淘宝Hadoop作业平台 宙斯Zeus

宙斯(zeus)是什么

宙斯是一个完整的Hadoop的作业平台
从Hadoop任务的调试运行到生产任务的周期调度 宙斯支持任务的整个生命周期

从功能上来说,支持:
Hadoop MapReduce任务的调试运行
Hive任务的调试运行
Shell任务的运行
Hive元数据的可视化查询与数据预览
Hadoop任务的自动调度
完整的文档管理

宙斯开源,不仅仅是开源技术,更是开源产品

开发中心,一个文档管理,开发调试的环境,在任务上线前的主要工作区域
调度中心,生产任务的调度环境,当任务调试通过后,在此处配置调度信息进行生产调度

宙斯运行原理

使用指南

快速启动(Quick Start):
1.设置配置项
在/web/src/main/filter/antx.properties 中对配置项进行设置
设置完成后,复制到$user.home/antx.properties处
2.pom.xml本地jar地址修改
在/web/pom.xml中修改properties中的local.highcharts
因为此jar不在maven仓库中,此jar已经在/web/libs/highcharts-1.4.0.jar
将systemPath路径设置为绝对路径
3.数据库配置
zeus数据库:/web/src/main/resources/persistence.xml中对数据库进行配置
hive元数据库:/web/src/main/resources/templates/hive-site.xml中对Hive metastore数据库进行配置
4.打包
mvn package
打包在/web/target/exploded/zeus-web.war下
使用tomcat之类容器运行即可

以上步骤可以保证这个web项目正常启动,如果需要正式上线此项目,还需要配置以下内容:
1.动态模板配置
宙斯系统中有很多模板是可以动态修改的,包括以下一些,建议在正式运行之前都配置好
首页展示内容 启动后参见页面指南
首页通知内容 启动后参见页面指南
hive 默认udf函数 com.taobao.zeus.jobs.sub.HiveJob实现TODO内容

2.登陆系统
宙斯不包含单独的注册系统
建议使用单点登陆来实现登陆
大致原理:
(1) web.xml添加一个filter,用来跳转到单点登陆系统
(2) Spring容器中添加一个Bean,实现com.taobao.zeus.web.Login.Filter.SSOLogin接口

3.配置hadoop相关环境 默认的hadoop-site.xml和hive-site.xml在 /web/src/main/resources/templates下
修改相应的配置以对应相应的hadoop集群

4.超级管理员配置 在com.taobao.zeus.store.Super中进行配置

分布式消息中间件 Metamorphosis

Metamorphosis (MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源。

总体结构:

内部结构:

主要特点:

 

  • 生产者、服务器和消费者都可分布

  • 消息存储顺序写

  • 性能极高,吞吐量大

  • 支持消息顺序

  • 支持本地和XA事务

  • 客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据

  • 支持消费端事务

  • 支持消息广播模式

  • 支持异步发送消息

  • 支持http协议

  • 支持消息重试和recover

  • 数据迁移、扩容对用户透明

  • 消费状态保存在客户端

  • 支持同步和异步复制两种HA

  • 支持group commit

  • 更多……

阿里巴巴分布式数据库同步系统 otter

otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。

工作原理:

原理描述:

1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击

2. 典型管理系统架构,manager(web管理)+node(工作节点)

    a. manager运行时推送同步配置到node节点

    b. node节点将同步状态反馈到manager上

3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

Oracle数据迁移同步工具 yugong

yugong 是阿里巴巴推出的去Oracle数据迁移同步工具(全量+增量,目标支持MySQL/DRDS)

08年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目因此而诞生,其要解决的目标就是帮助用户完成从Oracle数据迁移到MySQL上,完成去IOE的第一步. 

整个数据迁移过程,分为两部分:

  1. 全量迁移

  2. 增量迁移

过程描述:

  1. 增量数据收集 (创建oracle表的增量物化视图)

  2. 进行全量复制

  3. 进行增量复制 (可并行进行数据校验)

  4. 原库停写,切到新库

架构

说明: 

  1. 一个Jvm Container对应多个instance,每个instance对应于一张表的迁移任务

  2.  instance分为三部分
    a.  extractor  (从源数据库上提取数据,可分为全量/增量实现)
    b.  translator  (将源库上的数据按照目标库的需求进行自定义转化)
    c.  applier  (将数据更新到目标库,可分为全量/增量/对比的实现)

非侵入式运行期 AOP 框架 Dexposed

Dexposed 是阿里巴巴无线事业部第一个重量级 Andorid 开源软件,基于 ROOT 社区著名开源项目 Xposed 改造剥离了 ROOT 部分,演化为服务于所在应用自身的 AOP 框架。它支撑了阿里大部分 App 的在线分钟级客户端 bugfix 和线上调试能力。

Dexposed 的 AOP 是实现了纯非侵入式,没有任何注释处理器,weaver 或者字节码重写程序。Dexposed 的集成非常简单,就像加载一个 JNI 库一样,只需要在初始化的时候插入一行代码。

经典用例

  • 典型的 AOP 编程

  • 仪表化 (测试,性能监控等等)

  • 在线热修复(重要,关键,安全漏洞等等)

  • SDK hooking,更好的开发体验

Gradle 依赖:

native_dependencies 
    artifact 'com.taobao.dexposed:dexposed_l:0.2+:armeabi'
    artifact 'com.taobao.dexposed:dexposed:0.2+:armeabi'

dependencies 
    compile files('libs/dexposedbridge.jar')
初始化:
public class MyApplication extends Application 
 
    @Override public void onCreate()         
        // Check whether current device is supported (also initialize Dexposed framework if not yet)
        if (DexposedBridge.canDexposed(this)) 
            // Use Dexposed to kick off AOP stuffs.
            ...
        
    
    ...
基础使用示例代码1:
// Target class, method with parameter types, followed by the hook callback (XC_MethodHook).
    DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodHook() 
 
        // To be invoked before Activity.onCreate().
        @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable 
            // "thisObject" keeps the reference to the instance of target class.
            Activity instance = (Activity) param.thisObject;
 
            // The array args include all the parameters.
            Bundle bundle = (Bundle) param.args[0];
            Intent intent = new Intent();
            // XposedHelpers provide useful utility methods.
            XposedHelpers.setObjectField(param.thisObject, "mIntent", intent);
 
            // Calling setResult() will bypass the original method body use the result as method return value directly.
            if (bundle.containsKey("return"))
                param.setResult(null);
        
 
        // To be invoked after Activity.onCreate()
        @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable 
            XposedHelpers.callMethod(param.thisObject, "sampleMethod", 2);
        
    );
基础使用示例代码2:
DexposedBridge.findAndHookMethod(Activity.class, "onCreate", Bundle.class, new XC_MethodReplacement() 
 
        @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable 
            // Re-writing the method logic outside the original method context is a bit tricky but still viable.
            ...
        
 
    );

android 应用热修复工具 AndFix

AndFix 是阿里巴巴开源的 Android 应用热修复工具,帮助 Anroid 开发者修复应用的线上问题。Andfix 是 "Android hot-fix" 的缩写。

AndFix 支持 Android 2.3 - 6.0,ARM 和 x86 架构,dalvik 运行时和 art 运行时。AndFix 的分支是 .apatch 文件。

AndFix 方法体取代实现规则:

Bug 修复过程:

使用

生成 .apatch 文件:

usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
 -a,--alias <alias>     alias.
 -e,--epassword <***>   entry password.
 -f,--from <loc>        new Apk file path.
 -k,--keystore <loc>    keystore path.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.
 -t,--to <loc>          old Apk file path.
合并 .apatch 文件:
usage: apkpatch -m <apatch_path...> -k <keystore> -p <***> -a <alias> -e <***>
 -a,--alias <alias>     alias.
 -e,--epassword <***>   entry password.
 -k,--keystore <loc>    keystore path.
 -m,--merge <loc...>    path of .apatch files.
 -n,--name <name>       patch name.
 -o,--out <dir>         output dir.
 -p,--kpassword <***>   keystore password.

分布式SQL引擎 Lealone

Lealone 为 HBase 提供一个分布式SQL引擎,尝试将BigTable(HBase)和 RDBMS (H2数据库) 结合的项目。

Lealone 发音 ['li:ləʊn] 这是我新造的英文单词,灵感来自于在淘宝工作期间办公桌上那些叫绿萝的室内植物,一直想做个项目以它命名。 绿萝的拼音是lv luo,与Lealone英文发音有点相同, Lealone是lea + lone的组合(lea 草地/草原, lone 孤独的),也算是现在的心境:思路辽阔但又孤独。 反过来念更有意思。

应用场景:

  • 使用Lealone的分布式SQL引擎,可使用类似MySQL的SQL语法和标准JDBC API读写HBase中的数据, 支持各种DDL,支持触发器、自定义函数、视图、Join、子查询、Order By、Group By、聚合。

  • 对于Client/Server架构的传统单机RDBMS的场景,也可使用Lealone。

  • 如果应用想不经过网络直接读写数据库,可使用嵌入式Lealone。

Java APNS开源库 apns4j

apns4j 是 Apple Push Notification Service 的 Java 实现!

Maven:

<dependency>    
    <groupId>com.github.teaey</groupId>    
    <artifactId>apns4j</artifactId>    
    <version>1.0.1</version>    
</dependency>
示例代码:
KeyStoreWraper keyStore = KeyStoreHelper.getKeyStoreWraper("XXXXXXXX.p12", keyStorePasswd);    
AppleNotificationServer appleNotificationServer = new AppleNotificationServer(AppleGateway.ENV_DEVELOPMENT, keyStore);    
SecurityConnectionFactory connectionFactory = new SecurityConnectionFactory(appleNotificationServer);    
SecurityConnection connection = connectionFactory.getSecurityConnection();    
     
NotifyPayload notifyPayload = new NotifyPayload();    
//notifyPayload.setAlert("TEST1");    
notifyPayload.setBadge(2);    
notifyPayload.setSound("default");    
notifyPayload.setAlertBody("Pushed By apns4j");    
notifyPayload.setAlertActionLocKey("Button Text");    
connection.writeAndFlush(deviceTokenString, notifyPayload);    
connection.close();

消息中间件 RocketMQ

RocketMQ是什么?

RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:

  • 能够保证严格的消息顺序

  • 提供丰富的消息拉取模式

  • 高效的订阅者水平扩展能力

  • 实时的消息订阅机制

  • 亿级消息堆积能力

  • Metaq3.0 版本改名,产品名称改为RocketMQ

分布式数据层 TDDL

淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数

以上是关于开源公司黄页 关于/ 阿里巴巴的50款开源软件[大部分为Java语言]的主要内容,如果未能解决你的问题,请参考以下文章

开源软件排名TOP50,最受IT公司欢迎的50款开源软件

最受IT公司欢迎的50款开源软件

科技公司钟爱的50款开源工具--转载

开源大事件:MariaDB公司改弦易辙,远离开源

全球100款大数据工具汇总(前50款)

java程序员如何提高,含小米腾讯阿里