基于 SOFAArk 和 SOFADashboard 实现动态模块管控 | Meetup#2 回顾

SOFA Ark模块化更新小Demo 创建一个工程,包含3个模块 父工程里面的配置 父工程的Pom文件,管理版本 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 .. 阅读详情

作者:卫恒(宋国磊) SOFATracer 以及 SOFADashboard 开源负责人。

本文根据 5月26日 SOFA Meetup#2上海站 《使用 SOFAStack 快速构建微服务》主题分享整理,着重分享如何使用 SOFADashboard 来管控 SOFAArk ,对于 SOFAArk 中的一些基础概念和知识不过多涉及;建议大家在阅读之前,先了解下 SOFAArk 的相关基本知识。

现场回顾视频以及 PPT 见文末链接。

640?wx_fmt=png


0前言

SOFAArk [1] 是一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力,由蚂蚁金服开源贡献。SOFAArk 在 0.6.0 版本 [2] 提供了非常丰富的功能特性,其中最核心的当属多应用(模块)合并部署这个能力。SOFAArk 本身提供了多种方式来支持多应用(模块)合并部署 ,包括基于命令行的管控,基于 API 的管控等。本篇将结合 SOFA 开源的管控端组件 SOFADashboard [3],来实现 SOFAArk 提供的合并部署和动态模块推送的功能。

案例工程地址 [4]:
https://github.com/sofastack-guides/sofa-dashbaord-samples-parent


1背景

复杂项目通常需要跨团队协作开发,各自负责不同的组件,而众所周知,协调跨团队合作开发会遇到不少问题;比如各自技术栈不统一导致的依赖冲突,又比如往同一个 Git 仓库提交代码常常导致 merge 冲突。因此,如果能让每个团队将负责的功能组件当成一个个单独的应用开发,运行时合并部署,通过统一的编程界面交互,那么将极大的提升开发效率及应用可扩展性。SOFAArk 提出了一种特殊的包结构 -- Ark Biz,用户可以使用 Maven 插件将应用打包成 Biz,允许多 Biz 在 SOFAArk 容器之上合并部署,并通过统一的编程界面交互。

640?wx_fmt=png


2案例模型

本篇所演示案例是上图的一个简化版,从整体上可以体现 SOFAArk多应用合并部署的能力。主要包括已经几个工程:

  • sofa-dashboard-ark-hostapp : 宿主应用

  • sofa-dashboard-ark-facade   : 提供接口 API

  • sofa-dashboard-ark-provider :提供接口 API 的具体实现,将发布一个 JVM 服务

sofa-dashboard-ark-hostapp 和 sofa-dashboard-ark-provider 均作为 SOFAArk 中的 ark-biz 存在;sofa-dashboard-ark-hostapp 作为宿主应用对外提供服务。

640?wx_fmt=png

上图的模型中,在宿主应用不重启的情况下,实现  provider 模块的动态替换,从而实现版本升级。

在宿主应用启动时,provider 1.0.0 以静态合并部署方式“寄宿”到宿主应用中,这部分实际上与 SOFADashboard 管控是没有什么关系的,为了案例效果,在下面的案例中,关于静态合并部署的操作也会涉及到。

最终的工程结构图如下:

640?wx_fmt=png


3环境准备

本文需要启动 SOFADashboard 服务端,具体请参考 : Quick Start [5] ;其他基础设施环境如 Zookeeper 、Mysql 等需提前准备。


4工程构建

本篇将通过 step by step 的方式来构建整个工程,为大家在实际的应用过程中提供一种简单的思路,同时也帮助大家更好的理解 SOFAArk 中的一些点。

sofa-dashboard-ark-facade

基础 API 提供模块,不需要依赖任何其他二方或者三方 JAR,这里仅提供一个接口。

public interface SofaJvmService {	
    String test();	
}

sofa-dashboard-ark-provider

这个模块是 JVM 服务的提供方,也是后面需要在宿主应用中进行替换演示的模块包,这个模块本身也是一个 Web 应用。这里就来一步步分解下,如何将一个普通的 SpringBoot 工程改造成一个 ark-biz 工程。

1、新建一个 SpringBoot 工程

新建 SpringBoot 工程推荐的方式有两种,一种是在 https://start.spring.io/  进行下载,另外一种是基于 IDEA 的 Spring 插件来生成;此处不在过多描述过程。

2、工程基本能力实现
  • 引入 sofa-dashboard-ark-facade 依赖,先将需要提供的 JVM 服务实现:

  1. @SofaService

  2. @Service

  3. public class SofaJvmServiceImpl implements SofaJvmService {

  4. @Override

  5. public String test() {

  6. return "first version biz";

  7. }

  8. }

NOTE: SofaService 的作用是将一个 Bean 发布成一个 JVM 服务, 所以这里需要加上 Spring 提供的 @Service 注解将 SofaJvmServiceImpl 标注为一个 Bean。
  • 配置文件:


  1. spring.application.name=biz-ark-test

  2. server.port=8800

  3. logging.path=./logs


3、配置打包插件,将应用打包成 ark-biz  

根据官方文档,可以使用 sofa-ark-maven-plugin 插件将一个普通的工程打包成一个 ark biz 包。这里直接给出本篇中工程的配置:


  1. <plugin>

  2. <groupId>com.alipay.sofa</groupId>

  3. <artifactId>sofa-ark-maven-plugin</artifactId>

  4. <version>0.6.0</version>

  5. <executions>

  6. <execution>

  7. <!--goal executed to generate executable-ark-jar -->

  8. <goals>

  9. <goal>repackage</goal>

  10. </goals>

  11. <!--ark-biz 包的打包配置 -->

  12. <configuration>

  13. <!--是否打包、安装和发布 ark biz,详细参考 Ark Biz 文档,默认为false-->

  14. <attach>true</attach>

  15. <!--ark 包和 ark biz 的打包存放目录,默认为工程 build 目录-->

  16. <outputDirectory>target</outputDirectory>

  17. <!--default none-->

  18. <arkClassifier>executable-ark</arkClassifier>

  19. <!-- ark-biz 包的启动优先级,值越小,优先级越高-->

  20. <priority>200</priority>

  21. <!--设置应用的根目录,用于读取 ${base.dir}/conf/ark/bootstrap.application 配置文件,默认为 ${project.basedir}-->

  22. <baseDir>../</baseDir>

  23. </configuration>

  24. </execution>

  25. </executions>

  26. </plugin>


4、工程依赖

从前面背景介绍中的设计理念图中可以看出,动态合并部署需要依赖的插件核心有两个,一个是 runtime plugin,一个是 config plugin(没有涉及到 RPC 服务相关);由于 provider 并不是作为宿主应用,其本身不需要具备动态配置的能力,因此这里仅需要引入 runtime plugin 来为当前 ark-biz 工程提供运行时环境即可。


  1. <!-- runtime plugin -->

  2. <dependency>

  3. <groupId>com.alipay.sofa</groupId>

  4. <artifactId>runtime-sofa-boot-plugin</artifactId>

  5. </dependency>

  6. <!-- 其他依赖 -->

  7. <dependency>

  8. <groupId>com.alipay.sofa</groupId>

  9. <artifactId>healthcheck-sofa-boot-starter</artifactId>

  10. </dependency>

  11. <dependency>

  12. <groupId>com.glmapper.bridge.boot</groupId>

  13. <artifactId>sofa-dashboard-ark-facade</artifactId>

  14. </dependency>


5、编译打包

执行 mvn clean package ,之后会在当前模块的 target 目录下生成 xxx-ark-biz.jar 的包。

640?wx_fmt=png

sofa-dashboard-ark-host

前面已经构建好了所需要的一些基础工程,sofa-dashboard-ark-host 作为宿主应用,期望其具备的能力有以下几个:

  • 提供可以直观的 check 模块变更后的结果

  • 提供能够给 provider 1.0.0 版本 ark-biz 包运行的宿主环境

  • 能够通过 SOFAArk 提供的状态 endpoint 查看插件状态

  • 能够支持 Zookeeper 下发指令,控制 Biz 的生命周期

基于以上几点功能,下面来分步骤实现。

1、提供一个简单的 Rest 接口来 check 结果

sofa-dashboard-ark-host 本身也是一个 Web 应用,所以在这个提供一个 Rest 接口,具体实现是通过@SofaReference 调用 provider ark-biz 包中发布的 JVM 服务。


  1. @RestController

  2. public class TestController {

  3. @SofaReference

  4. SofaJvmService sofaJvmService;

  5. @RequestMapping("test")

  6. public String test(){

  7. return sofaJvmService.test();

  8. }

  9. }


2、作为宿主应用
  • ARK 容器配置

这部分可以先参考阅读 SOFAArk 配置 [6] 。本案例中简单配置了一份 ARK 容器的配置文件。


  1. # log 日志目录

  2. logging.path=./logs

  3. # 指定zookeeper 服务地址

  4. com.alipay.sofa.ark.config.address=zookeeper://localhost:2181

  5. # 指定宿主应用名

  6. com.alipay.sofa.ark.master.biz=host-app


com.alipay.sofa.ark.master.biz 默认情况下是宿主应用的 artifactId。如果这里指定了名字,则在宿主应用的插件配置里面需要使用此名字。

  • 依赖引入

引入 sofa-ark-springboot-starter 、web-ark-plugin 以及 provider ark biz 包。


  1. <!-- 引用ark starter-->

  2. <dependency>

  3. <groupId>com.alipay.sofa</groupId>

  4. <artifactId>sofa-ark-springboot-starter</artifactId>

  5. </dependency>

  6. <!-- 引用ark web插件-->

  7. <dependency>

  8. <groupId>com.alipay.sofa</groupId>

  9. <artifactId>web-ark-plugin</artifactId>

  10. </dependency>

  11. <!-- 引入 sofa-dashboard-ark-provider ark-biz ,这里属于静态合并部署情况-->

  12. <dependency>

  13. <groupId>com.glmapper.bridge.boot</groupId>

  14. <artifactId>sofa-dashboard-ark-provider</artifactId>

  15. <version>1.0.0</version>

  16. <classifier>ark-biz</classifier>

  17. </dependency>



  • 插件配置


  1. <plugin>

  2. <groupId>com.alipay.sofa</groupId>

  3. <artifactId>sofa-ark-maven-plugin</artifactId>

  4. <version>0.6.0</version>

  5. <executions>

  6. <execution>

  7. <id>default-cli</id>

  8. <goals>

  9. <goal>repackage</goal>

  10. </goals>

  11. </execution>

  12. </executions>

  13. <configuration>

  14. <!--指定优先级-->

  15. <priority>100</priority>

  16. <!--指定baseDir-->

  17. <baseDir>../</baseDir>

  18. <!--bizName,这里需要和 bootstrap 中指定的master.biz 配置保持一致,默认为 artifactId-->

  19. <bizName>host-app</bizName>

  20. </configuration>

  21. </plugin>


3、状态查看

SOFAArk 提供了 /bizState 这样一个 endpoint 用来获取当前插件的版本及状态信息。这里就在宿主应用中引入actuator 依赖并进行相关配置。


  1. <!-- 引用 actuator -->

  2. <dependency>

  3. <groupId>org.springframework.boot</groupId>

  4. <artifactId>spring-boot-starter-actuator</artifactId>

  5. </dependency>


application.properties 中配置暴露所有端点。


  1. management.endpoints.web.exposure.include=*


4、提供动态配置插件能力

SOFAArk 提供了 config-ark-plugin 对接 Zookeeper 配置中心,用于运行时接受配置,达到控制 Biz 生命周期,引入如下依赖:


  1. <!-- 引用ark 配置推送扩展插件-->

  2. <dependency>

  3. <groupId>com.alipay.sofa</groupId>

  4. <artifactId>config-ark-plugin</artifactId>

  5. </dependency>


参考 SOFAArk 配置,在 SOFAArk 配置文件 conf/ark/bootstrap.properties 增加如下配置:


  1. com.alipay.sofa.ark.config.address=zookeeper://localhost:2181



5静态合并部署演示

基于上述所有的配置,将 host-app 打包,然后运行。

  • mvn clean install 

  • java -jar sofa-dashboard-ark-hostapp-1.0.0.jar

下面可以通过 SOFAArk 提供的 endpoint 来查看下当前应用的 biz state 信息:

640?wx_fmt=png

这里只有宿主应用自身的 ark biz 状态信息,实际上我们使用了静态合并部署。但是貌似 ark-biz 合并部署的包插件没有在 bizState 中体现出来。访问下 http://localhost:8085/test 我们的 check  rest 服务:

640?wx_fmt=png

提示出来没有可用的 JVM 服务。

这里有个点是并不会去激活里面的 ark biz 包,需要通过通过 终端或者 API 的方式来进行激活,实际上只是激活了宿主应用本身的 ark-biz。


6 SOFADashboard 命令推送

SOFADashboard 进行推送的原理可以参考前面背景介绍中的描述。下面主要来介绍如何使用 SOFADashboard 进行动态模块切换。

注册插件

将 sofa-dashboard-ark-provider 这个 ark-biz 插件注册到 SOFADashboard:

640?wx_fmt=png

填写插件的基本信息:

640?wx_fmt=png

注册成功之后,模块列表如下:

640?wx_fmt=png

增加版本

点击添加版本,弹出新增版本表单,输入版本信息及当前版本对应的 ark biz 包文件地址;支持从文件服务器(http 协议)上拉取,也支持从本地文件(File 协议)系统获取。下面为了方便,使用从文件系统中获取,配置如下:

640?wx_fmt=png

添加成功之后,插件列表如下:

640?wx_fmt=png

关联应用

640?wx_fmt=png

点击插件列表后面的 关联应用案例,将插件与应用进行关联,如下:

640?wx_fmt=png

详情查看

点击插件列表后面的详情按钮,可以查看当前插件下所有应用信息和应用实例信息。

640?wx_fmt=png

命令推送

SOFADashboard 提供两种维度的命令推送:

  • 基于应用维度,当前应用所有的实例都会监听到此命令变更;

  • 基于 IP 维度,分组维度的单 IP 场景。

下面演示基于 IP 维度的推送:

1、安装

点击安装,安装过程中,插件状态会发生变化, RESOLVED 状态为正在解析。

640?wx_fmt=png
延迟 1~3s 之后,状态变为  ACTIVATED 状态

640?wx_fmt=png

再次访问下 http://localhost:8085/test 我们的 check rest 服务:

640?wx_fmt=png
实现了在不重启宿主应用的情况下,实现了内部业务逻辑的变更。

2、版本切换

模块版本 1 运行一段时间之后,出现新的需求,希望更改下模块版本 1 中的一些逻辑。在未使用动态模块的情况下,一般就需要新拉一个迭代,然后将原有的逻辑修改,然后发布上线。可能是一个非常小的功能点,但是却需要走复杂的发布流程。

这个就可以借助动态模块的方式来实现版本的动态切换。修改 sofa-dashboard-ark-provider  模块逻辑实现,升级版本,重新打包 sofa-dashboard-ark-provider 。

在 SOFADashboard ,新增 2.0.0 版本,并且配置指定的版本 ark-biz 包的文件地址。添加成功之后如下:

640?wx_fmt=png

进入详情界面,切换版本到 2.0.0:

640?wx_fmt=png

执行安装,此时版本 2.0.0 状态将会变为非激活状态:

640?wx_fmt=png

执行点击激活按钮进行激活,延迟 1~3s 之后,状态变更为激活状态:

640?wx_fmt=png

再次访问下 http://localhost:8085/test 我们的 check  rest 服务:

640?wx_fmt=png

可以看到,版本 2.0.0 中的逻辑已经生效了;切回到 1.0.0 ,此时 1.0.0 的状态变成了非激活状态:

640?wx_fmt=png


7小结

本文分享了基于 SOFAArk 和 SOFADashboard 实现动态模块管控的能力。动态模块在实际业务中有非常丰富的场景,对主应用不发版,不重启的情况下实现具体模块的功能变更;在此基础上也可以实现版本灰度的能力。

本案例中,provider 也是一个独立的应用,其作为一个子模块在宿主应用 hostapp 中启动,因此也可以基于 SOFABoot 这种能力来实现多 Web 应用的合并部署的能力。

以上就是本次分享的全部内容。

SOFA Meetup 上海站回顾资料

现场回顾视频以及 PPT 地址:

http://t.cn/AiKlmCmE

文中涉及相关链接

[1] SOFAArk:
https://www.sofastack.tech/sofa-boot/docs/sofa-ark-readme

[2] SOFAArk 0.6.0 版本:
https://github.com/alipay/sofa-ark/releases/tag/v0.6.0

[3] SOFADashboard:
https://github.com/sofastack/sofa-dashboard

[4] 案例工程地址:
https://github.com/sofastack-guides/sofa-dashbaord-samples-parent

[5] Quick Start:
https://www.sofastack.tech/sofa-dashboard/docs/QuickStart

[6] SOFAArk 配置:
https://www.sofastack.tech/sofa-boot/docs/sofa-ark-ark-config

640?wx_fmt=png

Java隔离容器之sofa-ark使用说明及源码解析 一.使用方法及示例 简介:当引入二方依赖包或三方依赖包时,可能出现外部依赖jar包与自己的工程需要依赖的冲突,或者多个二方三方依赖包互相冲突。这时候就需要一个隔离容器对他们进行隔离,其依赖的原理就是jvm认为不同classloader加载的类即使包名类名相同,也认为他们是不同的。sofa-ark将需要隔离的jar包打成plugin,对每个plugin都用独立的classloader去加载。 ... 阅读详情

相关推荐

sofa-tracer:SOFATracer是分布式系统调用跟踪的组件。 并通过统一的traceId在调用链接中记录各种网络调用的日志。 这些日志可用于快速发现故障,服务管理等

SOFATracer SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 traceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等。 一、背景 在当下的技术架构实施中,统一采用面向服务的分布式架构,通过服务来支撑起一个个应用,而部署在应用中的各种服务通常都是用复杂大规模分布式集群来实现的,同时,这些应用又构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现、有可能部署了几千台服务器。因此,就需要一些可以帮助理解各个应用的线上调用行为,并可以分析远程调用性能的组件。 为了能够分析应用的线上调用行为以及调用性能,蚂蚁金服基于 提供了分布式链路跟踪 SOFATracer 的解决方案。 二、功能简介 为了解决在实施大规模微服务架构时的链路跟踪问题,SOFATr

【亲测免费】 探索阿里巴巴的SOFAArk:轻量级服务治理框架

是阿里巴巴开源的一款轻量级、高性能的服务治理框架,它源于阿里巴巴内部的微服务运行容器平台,旨在解决多框架共存、类隔离、插件化部署等问题。作为SOFA生态的一部分,SOFAArk致力于打造一个稳定、可靠、易扩展的技术基础设施。 ## 技术解析 ### 1. 类加载器体系 SOFAArk基于独特的类加载机制,实现了应用间的类隔离,有效防止了不同组件之间可能产生的类冲突问题。它的类加载器结构遵循“...

gitblog_00041的博客 994

如何下载最新版本的VMware Workstation

随着虚拟化技术的发展,VMware Workstation作为行业领先的桌面虚拟化软件,为用户提供了在单一物理计算机上运行多个操作系统的能力。本文将详细介绍如何从Broadcom支持网站下载最新的VMware Workstation Pro版本。

安呀智数据坊的博客 669

SOFADashboard:全方位微服务治理的智能伴侣

SOFADashboard:全方位微服务治理的智能伴侣 是一个由阿里巴巴开源的、强大的微服务管理控制台。它为开发者提供了可视化界面,用于监控、管理和操作分布式应用和集群,让复杂的微服务环境变得更加易于理解和管理。 技术剖析 架构设计 SOFADashboard 基于 SOFAStack(Scalable Open Financial Architecture Stack),这是一个全面的金融级分布...

gitblog_00002的博客 469

Latex里面关于作者名字显示有灰色; 二级+三级标题斜体;

Latex里面关于 作者名字显示有灰色; 二级+三级标题斜体,与正文的距离; 邮箱字体;ORCID字体设置(整理不易,请先关注,Thanks)

m0_61015717的博客 746

路由 NAT(简介、静态NAT、动态NAT、NATServer、NAPT、Easy-ip、NAT地址映射表)

为了有效节约公网IPv4地址,并提供一定的网络安全保障能力,NAT网络地址转换技术孕育而生。NAT(Network Address Translation)网络地址转换,主要将私有地址转换成公网地址。NAT优点能够缓解公网地址紧缺问题。解决IP地址空间冲突或重叠的问题。网络扩展性更高,本地控制也更容易。内网结构变得不可见,从而增加了安全性。NAT缺点因为地址映射的原因,当网络转换过多时会存在转发延迟的问题。端到端寻址变得困难,因为经过了NAT地址转换相当于换了张脸,想找人就难了。

Hades_Ling的优快云博客 8751

mysql中(2) with check option能起什么作用?_基于 SOFAArk 和 SOFADashboard 实现动态模块管控 | Meetup#2 回顾...

作者:卫恒(宋国磊) SOFATracer 以及SOFADashboard 开源负责人。本文根据 5月26日 SOFA Meetup#2上海站 《使用 SOFAStack 快速构建微服务》主题分享整理,着重分享如何使用SOFADashboard 来管控SOFAArk ,对于SOFAArk 中的一些基础概念和知识不过多涉及;建议大家在阅读之前,先了解下SOFAArk 的相关基本知...

weixin_39737001的博客 135

5款免费二进制编辑器横向评测:从HxD到ImHex谁更适合你?

本文对5款免费二进制编辑软件进行深度横向评测,包括HxD、wxHexEditor、010 Editor、ImHex和GNU Emacs,涵盖从轻量级到专业级的各种需求。评测基于文件处理能力、编辑功能、分析工具等核心维度,为开发者、逆向工程师和安全研究人员提供实用选择指南,帮助用户根据具体场景选择最适合的二进制编辑工具。

weixin_29278805的博客 371

探秘SOFADashboard:阿里巴巴开源的微服务治理平台

探秘SOFADashboard:阿里巴巴开源的微服务治理平台 项目简介 是阿里巴巴开源的一款强大的微服务治理平台,它提供了一站式的监控、管理和诊断解决方案,帮助开发者更好地管理和运维分布式系统。作为SOFAStack(Scalable Open Financial Architecture)的一部分,SOFADashboard致力于打造易于使用的可视化界面,让复杂分布式系统的管理变得简单。 技术分...

gitblog_00016的博客 560

当图像配准遇见边缘计算:低功耗设备的优化实践

本文探讨了在边缘计算环境下优化图像配准技术的实践方法,重点解决低功耗设备如树莓派和Jetson Nano上的算力瓶颈问题。通过算法轻量化、硬件加速和内存优化等策略,实现了毫秒级图像配准,适用于智能安防、移动医疗等实时性要求高的场景。

weixin_29054195的博客 388

PCL 基于超体素的点云分割【2024最新版】

点云超体素分割原理介绍、代码实现以及如何做到将每一个超体素内的点进行单独保存而不造成点云缺失的方法。博客长期更新,本文最近一次更新时间为:2024年12月29日。

点云侠的博客 36万+

蚂蚁金服SOFAArk框架解决spring boot多模块包冲突

目录背景SOFAArk应用SOFAArk解决包冲突打包Ark Plugin打包 Ark 包其他配置jvm类加载双亲委派机制 背景 在菊花云上进行开发,使用它们的Hbase服务过程中,由于其版本国语古老,所使用的依赖包也是非常早期的版本,导致和目前整体程序开发框架有较大的冲突,一个个排除冲突包工作量大,效率低。灵鸡一动,考虑到国内大厂复杂的业务场景,铁定有类似的情况并且开发了相应的开源解决方案,所以搜了一下,找到了蚂蚁金服开发的SOFAArk。 SOFAArk 官网地址:https://www.sofasta

Ntozot的博客 2612

多后端系统统一聚合与智能分流:用 Multi Origin Composition 与 Routing 打造一套可扩展的 SAP Gateway 架构

本文针对企业级SAP集成场景,详细介绍了如何利用SAP Gateway的MOC(多源组合)和Routing功能实现多后端系统的智能路由与数据聚合。通过系统别名配置、用户角色绑定和主机名分流等机制,可实现按用户、按域名的精确路由。文章还提供了配置清单、性能优化建议和常见问题解决方案,帮助工程师落地多后端OData服务的最佳实践。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 186

SOFAArk Committer 专访|看它不爽,就直接动手改!

吕冰洁(花名:尚之)蚂蚁集团技术专家“我们团队是在做蚂蚁集团内部 Serverless 项目,深度依赖 SOFAArk。SOFAArk 作为 Serverless 项目的核心热部署组件,在...

金融级分布式架构 761

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SOFADashboard 启动开源共建 | SOFAStack 一站式管控平台

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33976072的博客 454

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SOFAArk 开源项目安装与使用指南

SOFAArk 的仓库在 [GitHub](https://github.com/sofastack/sofa-ark.git) 上,其目录结构设计清晰,便于开发者理解和扩展。以下为核心目录的简要介绍: - **`ark-parent`** - 核心父模块,定义了项目的构建基础和依赖管理。 - **`ark-plugin`** - 插件模块,包含了各种功能插件,如日志、监控等,这些是SOFAAr

gitblog_00772的博客 1013

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从一个例子开始体验轻量级类隔离容器 SOFAArk | SOFAChannel#11 直播整理

<SOFA:Channnel/>,有趣实用的分布式架构频道。本文根据 SOFAChannel#11 直播分享整理,主题:从一个例子开始体验轻量级类隔离容器 SOFAArk。回...

金融级分布式架构 2623

【开源之夏 2023】欢迎报名 SOFAStack 社区项目!

开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。活动联合国内外各大开源社区,针对重要开源软件的开发与维护提供项目任务,并面向全球高校学生开放报名。一▢✕开源之夏 2023Project IntroductionSOFAStack 社区项目介绍2023 年,SOFASta...

金融级分布式架构 282

spring boot 打包_蚂蚁金服轻量级类隔离框架 Maven 打包插件解析 | SOFAArk 源码解析...

SOFAStack(ScalableOpenFinancialArchitecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFAArk 源码》第二篇,本篇作者盲僧,来自 OYO。《剖析 | SOFAArk 源码》系列由 SOFA 团队和源码爱好者们出品,项目代号:,文末附...

weixin_39609622的博客 661

模块耦合名词解释_蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器

SOFAStackScalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。蚂蚁金服在 SOFAStack 体系内研发了一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力--SOFAArk。本篇文章为SOFA...

weixin_42501130的博客 313

基于 SOFAArk 实现应用的动态装载和卸载

基于 SOFAArk 实现应用的动态装载和卸载案例描述操作步骤原理 本篇主要来看下蚂蚁金服开源的 SOFAArk 这个产品。SOFAArk 是一款基于 Java 实现的轻量级类隔离容器,主要提供类隔离和应用(模块)合并部署能力;本文主要基于 telnet 指令的方式进行应用 Biz 的装载和卸载操作。去年在上海 KubeCon 大会上有分享过 《SOFABoot 动态模块实践》,主要是通过 SOF...

glmapper_2018 919
上一篇: Service Mesh 发展趋势:云原生中流砥柱
下一篇: 基于 SOFAArk 和 SOFADashboard 实现动态模块管控 | Meetup#2 回顾
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值