• Stars
    star
    3,041
  • Rank 14,277 (Top 0.3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Jarslink is a sofa ark plugin used to manage multi-application deployment

简介

Build Status Coverage Status license maven

This project is no longer in active development, and is currently in maintenance mode. All the existing features have been merged into SOFAArk and we highly recommend that you use SOFAArk instead.

本项目已不再继续添加新功能,处于维护模式;本项目已有功能已被合并进 SOFAArk我们推荐您直接使用 SOFAArk


Jarslink 2.0 是 SOFABoot 官方基于 SOFAArk 开发的功能插件,负责管理多应用在 SOFAArk 容器之上的合并部署,具备如下特性:

  • 支持运行时动态安装和卸载应用。

  • 支持运行时应用热替换能力,保证服务的连续性。

  • 跨应用内部通信,支持应用发布引用 JVM 服务,跨应用既可以使用 RPC 框架,也可以走内部 JVM 服务进行通信。

  • 支持应用健康检查。

背景

在蚂蚁金服内部,在同一个 JVM 之上部署多个应用,是一件常见的事情。这样带来的主要优势如下:

  • 无关应用合并部署:有些应用在独立部署时,相互之间没有服务依赖,而且这些应用承担业务体量都偏小,单独启动 Java 虚拟机比较浪费资源, 将这些应用合并部署,能够节省资源。

  • 相关应用合并部署:有些应用之间存在服务依赖,独立部署时,各应用之间使用 RPC 调用,虽然使用了分布式架构,稳定性高,但依然存在网络抖动导致的延时性问题。这些应用合并部署,RPC 调用优先转为 JVM 内部调用,缩减调用开销。

不仅应用间存在合并部署,近端包也有同样的诉求。

近端包是提供一系列公共服务的三方组件,一般由应用作为依赖引入,这种开发模式容易导致两个问题:

  • 近端包引入的三方依赖和应用本身的依赖产生冲突,期望能做到隔离部署。

  • 近端包由应用作为依赖引入,因此近端包的任何升级改造都需要应用配合升级。但是作为一个公共的功能组件,近端包通常会被很多业务方应用依赖,此时推动业务方改造工作量巨大,因此期望能做到近端包的动态升级。

除了合并部署,蚂蚁金服很多业务场景需要模块的热部署,即在应用运行时,需要动态替换某特定模块而不影响其他模块的正常运行。

Jarslink2.0 正是为了解决诸如此类的问题,它是基于 SOFAArk 开发的 Ark Plugin,用于管理多应用合并部署。在了解 Jarslink2.0 之前,你需要提前了解 SOFAArk 框架。关于 SOFAArk 可以访问链接获取更多详细信息。

原理

Jarslink2.0 是一款基于 SOFAArk 开发的 Ark Plugin 。假设你已经对 SOFAArk 有一定的了解,很容易知道,应用被打包成 Ark Biz 的形式运行在 SOFAArk 容器之上。SOFABoot 或者 Spring Boot 应用,甚至普通的模块都可以借助 SOFAArk 插件打包成一个标准的 Ark Biz 包。

Jarslink2.0 支持多个 Ark Biz 运行在 SOFAArk 容器之上,从而做到多应用的合并部署。应用可以通过注解的形式快速发布服务或者引用其他应用发布的服务,达到相互通信的目的。下图是运行时多应用合并部署结构图:

undefined

从图中可以看到,使用 Jarslink2.0 通常需要引入两个 Ark Plugin, 下面介绍这两个 Ark Plugin 的作用。

  • Jarslink: Jarslink2.0 核心代码,支持动态接收命令,如安装、卸载、切换等等,用于管理 Ark Biz 的生命周期。如果需要运行时动态部署应用,需要添加如下依赖:
<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofa-jarslink-ark-starter</artifactId>
    <classifier>ark-plugin</classifier>
</dependency>
  • SOFARuntime: SOFARuntime 是 SOFABoot 提供的功能模块,用于实现跨应用的服务调用。如果需要使用跨应用调用功能,需要添加如下依赖:
<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>runtime-sofa-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>runtime-sofa-boot-starter</artifactId>
    <classifier>ark-plugin</classifier>
</dependency>

快速开始

贡献

文档

More Repositories

1

sofa-boot

SOFABoot is a framework that enhances Spring Boot and fully compatible with it, provides readiness check, class isolation, etc.
Java
4,870
star
2

sofa-rpc

SOFARPC is a high-performance, high-extensibility, production-level Java RPC framework.
Java
3,799
star
3

sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
Java
3,450
star
4

sofa-bolt

SOFABolt is a lightweight, easy to use and high performance remoting framework based on Netty.
Java
2,391
star
5

sofa-ark

SOFAArk is a light-weight,java based classloader isolation framework.
Java
1,519
star
6

sofa-tracer

SOFATracer is a component for the distributed system call trace. And through a unified traceId logging the logs of various network calls in the invoking link. These logs can be used for quick discovery of faults, service governance, etc.
Java
1,089
star
7

sofa-registry

SOFARegistry is a production-level, low-latency, high-availability service registry powered by Ant Financial.
Java
639
star
8

sofa-rpc-node

SOFARPC Node is a high-performance, high-extensibility, production-level Nodejs RPC framework.
JavaScript
609
star
9

sofa-lookout

SOFALookout is a light-weight monitoring and analysis tool
Java
372
star
10

sofa-acts

ACTS is a white box testing framework based on data model drivers.
Java
301
star
11

sofa-rpc-boot-projects

SOFABoot projects for SOFARPC, include starter and samples.
Java
289
star
12

sofa-common-tools

sofa-common-tools is a library that provide some utility functions to other SOFA libraries.
Java
174
star
13

sofa-bolt-node

The Node.js implementation of the SOFABolt protocol
JavaScript
156
star
14

sofa-hessian

An internal improved version of Hessian3/4 powered by Ant Group CO., Ltd.
Java
129
star
15

sofastack-doc

官网已迁移至 2.0 版本 https://github.com/sofastack/sofastack.tech -->
128
star
16

sofa-serverless

a framework to enabe app architecture evolve from monolithic to microservices smoothly by involving modular and macroservices architecture.
Java
113
star
17

sofastack.tech

Source for the SOFAStack website https://www.sofastack.tech
SCSS
105
star
18

spring-cloud-sofastack-samples

Spring Cloud ❤️ SOFAStack
Java
93
star
19

sofa-dashboard

Dashboard of SOFAStack.
Java
91
star
20

sofa-bolt-python

The Python implementation of the SOFABolt protocol.
Python
47
star
21

sofa-jraft-jepsen

Clojure
30
star
22

sofa-kubernetes-demo

A demo project that run SOFA in kubernetes.
Java
26
star
23

sofa-node

JavaScript
25
star
24

sofa-bolt-cpp

The C++ implementation of the SOFABolt protocol.
C++
24
star
25

sofa-hessian-node

A performance improved version of Hessian powered by Ant Group.
JavaScript
21
star
26

sofa-dashboard-client

Java
16
star
27

community

SOFAStack community material
14
star
28

sofastack.github.io

Website content of sofastack.io.
HTML
9
star
29

sofa-lookout-node

SOFALookout Nodejs Client
JavaScript
7
star
30

sofa-build

sofa-build is a common utility project for SOFABoot to use for plugin and dependency management.
6
star
31

sofa-common-go

sofa golang 通用类库
Go
3
star
32

sofa-registry-node

Node.js SDK for SOFARegistry
JavaScript
3
star
33

sofa-bolt-go

The Golang implementation of the SOFABolt protocol.
Go
2
star
34

sofa-hessian-go

Go
1
star