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将渗透到前所未有的领域,在前所未有的环境中以前所未有的方式延伸企业的触角。