从这里开始

Eight线上示例系统的简介

Eight的线上系统(点击链接),是一个展示Eight的基本功能和使用方式的演示系统。它本身由Eight开发,实质上是Eight所构建的服务分发和管理系统,它由自身托管。

通过本系统,可以理解到如何简便的将一套系统部署到一个节点上,以及如何控制和管理运行于节点之上的系统和业务。

部署系统

如果要部署一套系统到您本地,您需要如下四个步骤:

  • 下载底座
  • 注册一个账号
  • 使用合适的命令行启动底座
  • 在线上系统平台给当前节点配置一套系统

下载底座

下载底座在首页的此处,点击后可获得一个jar包。

下载底座

运行底座需要安装java环境。eight底座可运行于jre 1.6-jre 20(最新版)的各种环境下,不同环境下配置参数略有不同。 注意,由于线上系统的CDN服务商提供的https协议已经不再支持TLS 1.0,使用jre 1.6会无法连接。所以,使用演示系统的最低版本为java 7。 当然这仅仅是由于CDN服务商的限制,如果不通过CDN代理,或者不使用https,则服务端与底座均可以运行在jre 1.6下。

注册账号

然后注册一个账号,并用账号登录系统。

下载底座

登录后可以看见两个菜单项,分别是应用管理和节点管理。其中应用管理是用来导入、发布、修改、配置各种应用系统的。如图:

应用管理

节点管理则是用来配置和管理各个节点上发布的系统的。当然也可以查看到一些节点相关的信息。

应用管理

初始的节点管理里没有任何节点,也不存在手工添加节点的可能。如果需要管理一个节点,则必须启动一个刚才下载底座。

启动命令

底座启动是一条形如:

java -Dframework.boot.scanner.node=winnt4 -Dfile.encoding=UTF8 -Dframework.web.user=xxxx -Dframework.web.password=pppp -Dframework.web.url=https://www.yeeyaa.net/api -jar eight-seat-1.0.0.jar

的命令。

可配置的参数很丰富。后续你会发现,底座的配置参数非常关键,将影响底座的性状以及底座内运行的各种应用。但必不可少的参数仅仅只有以下这些:

参数 含义 例子 补充说明
file.encoding 各种应用内文本的默认编码方式 file.encoding=UTF8 在windows环境下需要。windows默认的code page并不是utf-8,会导致java读入文件时出现乱码,且此参数只能在初始启动时设置。
framework.web.user 填写你注册的用户名 framework.web.user=zhangsan@example.com  
framework.web.password 填写你的密码 framework.web.password=xxxxxxxxx  
framework.web.url 填写系统发布服务地址 framework.web.url=https://www.yeeyaa.net/api 此处地址可以配置为任何一台发布服务器,配置后该节点由对应的发布服务器部署、维护和管理

通常说来,通过以上配置,就已经可以启动一个节点了。此时的node名称为该节点第一个网卡的ip地址。如果需要手工定义该节点名称,则需要提供额外的参数:

参数 含义 例子 补充说明
framework.boot.scanner.node 设置节点名称 framework.boot.scanner.node=winnt4 在管理系统中对节点进行管理以节点名称为准,相同名称的节点会共享相同配置。建议为节点设置独立的有特点的名称

对于使用java 8以下的运行环境的节点,运行本示例时,由于加载的类较多,为防止内存溢出,建议手工设置PermSize到128M:

参数 含义 例子 补充说明
XX:MaxPermSize 设置永久区大小 -XX:MaxPermSize=128m  

特别的,对于使用java 1.6运行环境的节点(注意:java 1.6不能连接线上https://www.yeeyaa.net/api。),有以下约束:

参数 含义 例子 补充说明
https.protocols 设置默认https协议 https.protocols=TLSv1 java 1.6并不优先使用TLS协议,且仅支持TLS v1.0。需要设置默认协议,使其以较高安全性的TLS协议连接服务端
framework.center.useThread 关闭多线程组件加载模式 framework.center.useThread=false 此问题来源是spring。有足够证据证明整个spring4.x系列在java 1.6环境中运行时存在bug,当多线程同步启动多个spring applicaion环境时,先启动完毕的applicaiton可能会强行结束尚未启动完毕的application,导致初始化失败。至少到当前spring 4.3.30此故障一直存在。此问题影响java 1.6,包括最高版本6u45,但在java 7及以上不存在,原因在于spring对于不同版本的java做了区别处理。关闭多线程加载可以回避该问题,但可能会稍微减缓系统加载与批量更新过程

特别的,对于使用java 17及以上运行环境的节点,由于java 17已经默认关闭了第三方库通过反射(reflection)机制访问基础库的非公开方法和成员变量,所以必须增加额外的参数:

参数 含义 例子 补充说明
–add-opens java.base/java.lang=ALL-UNNAMED 开放java.lang的成员保护 –add-opens java.base/java.lang=ALL-UNNAMED 此问题来源是spring。spring 4.x中的已知bug(spring 5.x已解决,但spring 5.x不兼容java 8以下的环境,所以未被eight所采用),源头是spring使用的cglib通过反射直接访问java.lang中私有函数,目前仍没有解决,所以必须开放此包的成员保护模式
–add-opens java.base/java.io=ALL-UNNAMED 开放java.io的成员保护 –add-opens java.base/java.io=ALL-UNNAMED 非必要选项,开启该选项后,eight会对内存使用有所优化

使用java 17的一个例子:

java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED -Dframework.boot.scanner.node=centos9 -Dfile.encoding=UTF8 -Dframework.web.user=xxxx -Dframework.web.password=pppp -Dframework.web.url=https://www.yeeyaa.net/api -jar eight-seat-1.0.0.jar

如果出现提示Invalid CEN header的异常,这是由于基础库默认进行了Zip64的额外信息校验造成的,启动参数里关闭即可

参数 含义 例子 补充说明
jdk.util.zip.disableZip64ExtraFieldValidation 关闭默认Zip64校验 jdk.util.zip.disableZip64ExtraFieldValidation=true openjdk11以上在64bit环境下默认启动ExtraFieldValidation,对于基于老版本的jar包可能会校验异常

以上就是启动节点的配置。当节点启动完毕后,会自动连接发布服务器,此时,我们可以在操作面板上看见当前节点,如图:

节点

同时也可以查看该节点的一些简单信息:

节点信息

发布系统

此时,节点已经处于被管状态,但管理端尚未向节点下发应用模块。所以,此时应该在应用管理里导入系统。如图:

导入系统

演示系统预制了三套测试应用,建议全部导入。然后,可以在节点管理里选择一套系统配置给当前节点。如图:

配置应用

也可以在应用管理对应的应用下选择节点。

配置应用

发布应用之后,应用的各个模块会被节点所加载。随后,随着底座的控制台不断输出,一套新的系统就加载到底座上运行了。

运行应用

几点说明

  • 系统的刷新周期默认是5分钟(300秒),可以在配置参数里调整。考虑到可能给服务器带来的压力,目前不公开该配置参数。所以,任何修改都请耐心等待至多5分钟。
  • 通过http(https)在广域网上提供系统的发布与运维仅仅是Eight系统发布管理的其中一种模式。事实上Eight可以在任何Resource(资源)上进行配置、管理和发布。如文件系统、redis、memcahce、mangodb、数据库等等。在不同应用场景中Eight的集群化部署将显得非常灵活(例如,线上系统是通过redis进行发布和运维的集群应用)。
  • 线上系统是为了说明Eight的核心思想和技术目标,为避免体系复杂化和学习成本过高,仅展示了Eight平台一部分控制和管理能力,诸如节点的监控、数据跟踪、远程调试等等会在未来正式环境中提供。
  • 考虑到试用用户的系统安全,目前的系统并不开放用户自行上传组件模块和搭建系统,仅提供预设的演示系统。并且为了防止难以恢复的操作,演示系统不提供模块的删除,但用户可以禁用模块来达到disable的效果。
  • 原理上一个节点可以配置多种应用,但考虑到应用间可能存在的资源和名称冲突,目前只允许一个节点绑定一套应用。多个应用可以在解决潜在冲突后,组成一套应用进行发布。事实上,演示系统中的example,就是由demo和search组合而成,运行时是两套独立的应用。
  • 线上系统看起来有些复古,但我有充分的理由这样做。后续会对Eight管理平台的UI选型和技术实现做详细介绍(Eight演示系统UI专题),在此之前可以先看看Eight可能的应用环境:

示例

注意浏览器地址栏的localhost

示例

在各种环境和设备上均具有良好的兼容性和一致性

示例

未来,Eight将渗透到前所未有的领域,在前所未有的环境中以前所未有的方式延伸企业的触角。