清除过滤器
公告
Claire Zheng · 八月 22, 2022
亲爱的开发者们!
到了展示互操作性技术的时候了!来参加我们最新的竞赛吧!
🏆 InterSystems开发者大赛:以互操作性技术为可持续发展构建解决方案 🏆
时间: 8月29日-9月19日(北京时间)
奖金更高: $13,500 – 请留意,奖金分配跟以往有所不同!
主题
💡 基于InterSystems IRIS和InterSystems IRIS医疗版的互操作性解决方案 💡
基于InterSystems IRIS数据平台或InterSystems IRIS医疗版开发互操作性解决方案,或为开发/维护互操作性解决方案提供帮助的解决方案。
此外,我们邀请开发者尝试解决一个全球性问题,这次我们提出的是“可持续发展问题”。
我们鼓励您参与此次竞赛,构建旨在解决可持续发展问题的解决方案:
1) 如果您的应用对解决可持续发展问题、ESC、可替代能源、最佳利用等问题有帮助,您将获得特别奖励。2) 如果您准备并提交了一个与可持续发展、ESG、可替代能源、最佳利用等问题相关的数据集,您将获得更多额外奖励。
基本要求
有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。
该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。
该应用需开源并在GitHub上发布。
该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。
🆕 奖品:
如您所愿!我们这次提高了奖金,优化了奖金分配机制!
1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第1名 - $5,000
🥈 第2名 - $3,000
🥉 第3名 - $1,500
🏅 第4名 - $750
🏅 第5名 - $500
🌟 第6-10名 - $100
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第1名 - $1,000
🥈 第2名 - $750
🥉 第3名 - $500
✨ 所有获奖者都将获得Global Masters徽章!
注意:如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金
关键参赛节
🛠 应用开发、提交阶段
2022年8月29日 (12:00PM 北京时间):竞赛启动。
2022年9月12日 (11:59AM 北京时间):提交截止。
✅ 投票阶段
2022年9月12日 (12:00PM 北京时间): 投票开始。
2022年9月19日 (11:59AM 北京时间): 投票结束。
注意:在整个参赛期间(开发与投票期间),开发者可持续提升其应用
谁可以参加?
任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个!
👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。
请注意,要在您的README文件中标注您的团队成员——社区用户profile
资源助力:
✓ 示例应用:
interoperability-embedded-python
IRIS-Interoperability-template
ETL-Interoperability-Adapter
HL7 and SMS Interoperability Demo
UnitTest DTL HL7
Twitter Sentiment Analysis with IRIS
Healthcare HL7 XML
RabbitMQ adapter
PEX demo
✓ 在线课程:
Interoperability for Business
Interoperability QuickStart
Interoperability Resource Guide - 2019
✓ 视频:
Intelligent Interoperability
Interoperability for Health Overview
✓ IRIS初学者:
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
✓ ObjectScript Package Manager (ZPM) 初学者:
How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and ZPM
✓ 如何将您的APP提交给大赛:
如何在InterSystems Open Exchange上发布应用程序
如何把参赛APP提交给大赛
需要帮助?
加入InterSystems的 Discord server频道,或跟帖评论提出您的问题!
期待您的精彩提交!祝好运 👍
参与此次竞赛,您同意 遵守相关条款,请认真阅读。
公告
Claire Zheng · 七月 7
InterSystems 发布了新的点式更新,该更新解决的缺陷问题影响以下受支持的产品线的最新先前版本 2025.1.0、2024.1.4、2023.1.6 和 2022.1.7:
InterSystems IRIS
InterSystems IRIS for Health
HealthShare Health Connect
此问题可能导致在使用以下功能时出现意外的 <PROTECT> 错误或访问异常:
隐式命名空间
对数据库的混合只读/读写访问
用于列出例程和全局变量的管理门户页面
症状包括:
命名空间创建故障
在列出例程时,间歇性出现“访问被拒”错误
对于具有只读权限的用户,全局显示页面不返回数据
虽然这些问题并不影响访问控制或用户权限,但它们会在多种场景下影响预期的系统行为。
问题得到解决的版本
以下点式版本中修复了该问题:
2025.1.0.230.2
2024.1.4.516.1
2023.1.6.810.1
2022.1.7.116.1
建议使用受影响版本的客户应用相关更新,以确保系统正常运行。
如果您有任何问题或需要支持,请联系 InterSystems 全球响应中心 (WRC)。
文章
Claire Zheng · 六月 8, 2023
医院管理者、信息中心、业务骨干,每个角色都有独特的业务诉求,InterSystems IRIS医疗版互联互通套件专为国内用户设计,可助力医院用户释放数据价值,推动应用创新!截至目前,InterSystems技术已助力150余家医院通过四级及以上医院信息互联互通标准化成熟度评测,其中,五级乙等用户近30家。
文章
Qiao Peng · 三月 29, 2021
InterSystems IRIS/Caché的CDC
InterSystems IRIS/Caché未提供开箱即用的变更数据捕获(CDC)工具,而且由于其多模型建模能力和底层的多维存储模型,相对于关系型数据库的单一模型,针对于SQL的CDC在InterSystems IRIS/Caché上会更复杂一些。例如通过Journal日志记录的是底层持久化多维数组的数据变更,而不是SQL table的变更。
通常,在应用层面实现变更数据捕获是更灵活和简单的方式,例如通过设置触发器、类的DSTIME参数。但如果无法在应用层做CDC,可以考虑使用InterSystems IRIS/Caché的Journal和强大的开发能力获取数据变更。
这里介绍使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。
Dejournal 过滤器
InterSystems IRIS/Caché的 Dejournal 过滤器用于在Reporting类型的异步镜像成员上过滤Journal记录。当配置了Dejournal 过滤器后,异步镜像成员在redo journal前会自动调用Dejournal过滤器类的方法RunFilter,并传入以下参数: 1. MirrorDBName:镜像数据库名称; 2. GlobalReference:Global节点(包括下标); 3. RecordType:操作类型,为S(Set)和K(Kill); 4. Address:Journal记录在Journal文件中的偏移量。
我们可以利用自定义的Dejournal过滤器,捕获持久化多维数组(Global)的数据变化,并输出给外部系统。
注意:1. 如果仅为实现CDC,并不需要配置镜像备机。2. Dejournal过滤器只能配置在Reporting类型的异步镜像成员上。3. 镜像配置不在本文内容里,请参考文档:[IRIS] https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror[Caché] https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror
编写Dejournal过滤器
InterSystems IRIS/Caché提供镜像Dejournal系统类 - SYS.MirrorDejournal。对于用户自定义过滤逻辑,通过继承于SYS.MirrorDejournal的子类来实现。
在Reporting异步镜像成员的%SYS命名空间(IRISLIB数据库)下创建SYS.MirrorDejournal的子类,命名应以Z或z开头,以避免升级时被覆盖,例如命名为ZCustom.MirrorDejournal。注意: IRISLIB数据库默认是只读的,需要先将其修改为可读写。
Override该类的RunFilter方法,将数据变更捕获的逻辑放在该方法里,并根据需要返回1或0。1代表这个global变更需要dejournal,0代表不需要。即便仅仅是为实现CDC,建议在Reporting异步镜像成员恢复所有数据,即让该方法返回1,从而不需要影响生产系统,直接从Reporting异步镜像成员上获取所有的变更数据。
例如,将global的数据变更记录在^CDCLog中:
Class ZCustom.MirrorDejournal Extends SYS.MirrorDejournal
{
Method RunFilter(
MirrorDBName As %String,
GlobalReference As %String,
RecordType As %String,
Address As %Integer) As %Integer
{
Set ^CDCLog( $$I ($^CDCLog))=$lb(MirrorDBName,GlobalReference,RecordType,Address)
Quit 1
}
}
配置Dejournal过滤器
在Reporting异步镜像成员上,配置其镜像Dejournal过滤器为上面创建的过滤器类的名称。
后记
今天有人问到,如何获取变更的值和变更前的值。可以使用`$$$JRNNEWVAL(Address) 、$$$JRNOLDVAL(Address)`在上面的RunFilter方法中获取变更后和变更前的数据。注意,`$$$JRNNEWVAL(Address) 、$$$JRNOLDVAL(Address)`这2个宏定义在%syJrnRecord.inc文件里,因此需要将这个include文件加入ZCustom.MirrorDejournal类定义:Include %syJrnRecord
又,在InterSystems IRIS上修改并编译dejournal过滤器类后,需要重启异步镜像成员的Mirror,以使更改生效。
CDC系列
更多的CDC选项实现,请参考:
1. CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能
2. CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC
3. CDC系列之三 :建立InterSystems IRIS/Caché的Global数据变更与SQL表记录的对应关系
4. CDC系列之四:使用DSTIME特性在InterSystems IRIS/Caché上实现CDC功能
很好的文章 学习一下
公告
Michael Lei · 二月 8, 2023
InterSystems 宣布其首个开发人员预览版,作为2023.1 版开发人员预览计划的一部分。 2023.1 中添加了许多更新和增强功能,还有全新的功能,例如对列存储Columnar Storage 的生产就绪支持、使用Bulk FHIR 的能力以及对MacOS 13 Ventura的支持。当前的开发人员预览版可能不提供其中一些功能或改进。
未来的预览版本预计每两周更新一次,我们将在功能准备就绪时添加它们。请通过开发者社区分享您的反馈,以便我们共同打造更好的产品。
可以在下面的这些链接中找到初始文档。它们将在接下来的几周内更新,直到正式宣布发布(一般可用性 - GA):
InterSystems IRIS
InterSystems IRIS医疗版
HealthShare HealthConnect
此外,查看此链接以获取与此版本相关的升级信息。
与往常一样,扩展维护 (EM) 版本附带适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器映像。有关完整列表,请参阅支持的平台文档。
安装包和预览密钥可从 WRC 的预览下载站点或通过评估服务网站获得(使用标记“显示预览软件”以访问 2023.1)。
InterSystems IRIS 和 IRIS for Health 的企业版和社区版的容器镜像以及所有相应的组件都可以从新的InterSystems Container Registry Web 界面获得。有关 docker 命令的更多信息,请参阅这篇文章: 宣布 InterSystems Container Registry Web 用户界面。
此开发人员预览版的内部版本号为2023.1.0.185.0 。
有关可用图像的完整列表,请参阅ICR 文档。或者,所有容器镜像的 tarball 版本都可以通过 WRC 的预览下载站点获得。
文章
姚 鑫 · 九月 17, 2022
# 第三十五章 在 Windows 上使用 IRIS(二)
# IRIS 启动器
`Microsoft Windows` 平台上的主要`IRIS` 界面是 `IRIS` 启动器。从 `IRIS` 启动器,可以启动所有 `IRIS` 配置和管理工具。还可以从快捷方式或命令行调用每个启动器命令。
相应地,可以从 `Windows` 程序菜单中启动许多 `IRIS` 工具,方法是指向 `IRIS` 文件夹,然后指向启动 `IRIS` 以获得适当的 `IRIS` 实例名称。
当在基于 `Windows` 的系统上启动 `IRIS` 时, `IRIS` 启动器图标会出现在任务栏的系统托盘中。
当单击 `IRIS` 启动器时,会出现一个菜单,其中包含使用 `ObjectScript` 实用程序和编程环境的命令。
下表描述了 IRIS 启动器菜单中可用的命令。
IRIS 启动器命令| 描述
---|---
`Getting Started`|显示教程、发行说明、文档和其他相关信息的链接
`Start IRIS`|启动菜单项后方括号中指定的默认实例,例如 `[ii2081]`。如果 `IRIS` 服务器已经启动,这个选项会变暗——它不可用。
`Stop InterSystems`|关闭或重新启动本地 `IRIS` 实例。如果 `IRIS` 服务器已停止,此选项将显示为灰色——它不可用。
`Studio`|创建、编辑、删除和编译 `IRIS` 类定义和例程。
`Terminal`|调用 `IRIS` 的命令行解释器。
`Management Portal`|执行常见的系统管理任务。创建数据库和命名空间,并调整所有 `IRIS` 配置设置。显示类、全局变量和例程,以及用于管理它们的函数。显示表和视图,执行查询和 `SQL` 管理功能。
`Documentation`|显示 `IRIS` 在线文档。
`Preferred Server [server name]`|显示远程服务器列表并使用子菜单上的“添加/编辑”命令维护服务器连接。首选服务器出现在括号中,并且在服务器列表中旁边有一个复选标记。
`About`|显示 `IRIS` 版本和构建信息。
`Exit`|从系统托盘中删除`IRIS` 启动器图标;这不会停止 `IRIS`。当实例重新启动时,启动器会重新出现。
# 启动 IRIS
要启动 `IRIS`,请在系统级别运行启动程序。此过程使用默认配置文件或指定的配置文件运行。
**注意:如果在启动 `IRIS` 时遇到任何问题,请按照“监控指南”的“监控日志文件”部分中的说明查看 `messages.log` 文件。**
要在 `Windows` 平台上启动 `IRIS`,请从 `IRIS` 启动器中选择启动 `IRIS`。这将使用指定的配置文件启动 `IRIS` 实例。当 `IRIS` 未运行时, `IRIS` 启动器图标显示为灰色。
如果 `IRIS` 启动器不在系统托盘中,请从 `Windows` 程序菜单中选择 `IRIS` 文件夹并为该实例启动 `IRIS`。要将启动器返回到系统托盘,请转到 `install-dir/bin` 目录并双击 `iristray.exe` 文件。
或者,可以从“开始”菜单上“运行”命令的“打开”框中的 `install-dir/bin` 目录输入这些命令。例如,要从 `MyIris\bin` 目录启动名为 `MyIris` 的实例,请输入以下命令:
```
c:\MyIris\bin\iris start iris
```
# 停止 `IRIS`
通常让 `IRIS` 系统保持运行。但是,如果操作系统需要重新启动,请在关闭系统之前停止 `IRIS`。诸如备份和数据库修复实用程序等维护任务不需要停止 `IRIS`。
从 `IRIS` 启动器菜单中单击停止 以关闭或重新启动本地 `IRIS` 实例。默认情况下,此选项使用默认关闭例程立即关闭(或重新启动) `IRIS`。但是,它还提供了设置延迟关闭的计时器、运行用户定义的关闭例程、向服务器上的用户广播警告消息以及关闭而不进行故障转移的选项。可以从 `Windows` 程序菜单运行相同的过程。为该实例名称选择 `IRIS` 文件夹并停止 `IRIS`。一旦倒计时达到 `0` 并且关机程序已开始,将无法取消关机。

**重要提示:`InterSystems` 建议运行 `Stop IRIS` 来关闭 `IRIS` 以确保其正确关闭。**
## 删除 `Stop InterSystems` 命令
为防止意外执行 `Stop InterSystems` 命令,可以通过从相应 `IRIS` 实例的 `install-dir/bin` 目录中删除 `irisstop.exe` 文件来从 `IRIS` 启动器中删除该命令。还可以从“开始”菜单中的相应 `IRIS` 实例中删除停止 `InterSystems` 快捷方式。指向 `Programs` 和 IRIS 实例名称,然后右键单击 `Stop` 并单击 `Delete`。
# 从命令提示符控制 `IRIS`
可以通过运行 `install-dir\bin` 目录中的 `iris.exe` 程序从 `Windows` 命令提示符控制 `IRIS` 实例。
要显示此命令的最新帮助信息,请从 `IRIS install-dir\bin` 目录调用 `iris` 帮助。例如:
```java
C:\InterSystems\IRISHealth\bin>iris help
usage:
iris start []
to start instance , optionally using the specified .cpf file.
An optional /EmergencyId=Username,Password can be used to start
InterSystems IRIS in emergency mode. When the EmergencyId argument
is supplied, the system starts up in emergency mode in which only the
baseline databases are mounted and access to InterSystems IRIS is
governed by InterSystems IRIS login using that username and password.
Emergency mode is supplied to give access in the event that privileged
users are not available or their password is forgotten. Emergency
startup is only available from an administrator account.
When InterSystems IRIS is started in emergency mode, the IRIS control
service is not used. This means that if you log out of Windows, all
the InterSystems IRIS processes will immediately exit.
or: iris startnostu
to start instance without running ^STU.
or: iris stop
to shut down instance .
or: iris stopnoshut
to shut down instance without running user shutdown routines.
or: iris stopstart
to shut down and restart instance .
Note: An optional /nofailover argument can be specified for stop,
stopnoshut, or stopstart to not trigger a mirror failover.
or: iris force
to force down instance .
or: iris [ run OR console OR terminal ]
to run InterSystems IRIS in programmer mode with
[ no-device OR console OR terminal ] for $Principal.
or: iris [ run OR console OR terminal ]
to run InterSystems IRIS routine in application mode with
[ no-device OR console OR terminal ] for $Principal.
or: iris [ run OR console OR terminal ]
to run InterSystems IRIS routine in in application
mode with [ no-device OR console OR terminal ] for $Principal.
or: iris runw []
to run InterSystems IRIS routine in application mode with
no input/output device for $Principal using the optional namespace.
When run from a batch script, iris will wait for the InterSystems IRIS
process to terminate before returning. The exit code from the InterSystems
IRIS process will be returned by iris.
Note: An optional /Title="Title string" can specify the console
or terminal title bar text.
or: iris iristraystart
to start IRISTray for instance .
or: iris iristraystop
to stop IRISTray for instance .
or: iris licmanagerstop
to stop licmanager running in instance .
or: iris all [> outputfile]
to list all installed instances.
or: iris allw [> outputfile]
to list (wide format) all installed instances.
or: iris list [] [> outputfile]
to list information about all installed instances or the
specified instance.
or: iris qlist [] [> outputfile]
to display a quick list of information about all installed
instances or the specified instance, in a format suitable
for parsing in command scripts.
The record for an instance contains fields separated by "^" (carats):
Field 1: instance name
Field 2: instance directory
Field 3: version identifier
Field 4: current status for the instance
Field 5: configuration file name last used
Field 6: SuperServer port number
Field 7: WebServer port number
Field 8: JDBC Gateway port number
Field 9: Instance status (e.g., ok, warn, alert)
Field 10: Product name of the instance
Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery)
Field 12: Mirror Status (e.g., Primary, Backup, Connected)
or: iris serverlist [> outputfile]
to list information about all defined servers.
Note: When [> outputfile] is present, output is redirected
to the file instead of being displayed on the terminal.
or: iris telnetstop
to stop the InterSystems IRIS TELNET daemon.
or: iris telnettrace
to toggle the TELNET trace state.
or: iris iristrmdstop
to stop the InterSystems IRIS terminal daemon.
Note: iris often displays error information in a message box.
You can suppress the message box containing error information
by adding "quietly" (without the quotation marks) as the
final argument to the iris command.
or: iris help [display]
to show this help. If display is specified the help
is displayed in a browser window.
```
`iris help` 命令将在终端中显示最新的帮助信息。还可以通过将 >outputfilename 添加到 `iris` 帮助命令,将帮助信息保存到 `intsall-dir\bin` 目录中的文件中。例如:
```
C:\MyIris\bin>iris help>helpinformation
```
# 在命令行上连接到 `IRIS`
可以使用 `iris` 终端命令在命令行上登录 `IRIS` 实例。
文章
姚 鑫 · 四月 4, 2021
# 第十六章 导入SQL Code
本章介绍如何将SQL代码从文本文件导入Intersystems SQL。导入SQL代码时,IntersystemsIris®数据平台使用动态SQL准备并执行每行SQL。如果遇到无法解析的代码行,则SQL导入跳过该行代码并继续准备和执行后续行,直到它到达文件的末尾。所有SQL代码导入操作导入到当前名称空间。
SQL导入主要用于导入数据定义语言(DDL)命令(例如`Create Table`),并使用`Insert`,`Update`和`Delete`命令填充表。 SQL导入确实准备并执行`SELECT`查询,但不创建结果集。
SQL导入可用于导入Intersystems SQL代码。它也可以用于代码迁移,从其他供应商导入SQL代码(`FDBMS`,`Informix`,`Interbase`,`MSSQLServer`,`MySQL`,`Oracle`,`Sybase`)。来自其他供应商的代码被转换为Intersystems SQL代码并执行。 SQL导入无法将所有SQL命令导入Intersystems SQL。它导入与SQL标准的Intersystems Iris实现兼容的那些命令和条款。不兼容的功能通常被解析,但忽略了。
SQL导入可以成功准备一个SQL查询 - 在适当的情况下创建相应的缓存查询 - 但它不会执行查询。
通过从`%system.sql.schema`类中调用相应的方法,执行SQL代码导入。导入SQL代码时,这些方法可以创建其他两个文件:`errors.log`文件,它记录解析SQL命令中的错误,以及一个不支持的。其中包含该方法无法识别为SQL命令的文字文本。
# 导入Intersystems SQL.
可以使用以下`%System.sql.schema`方法从文本文件中导入Intersystems SQL代码:
- `ImportDDL()`是一个通用的SQL导入方法。此方法运行作为背景(非交互式)进程。要导入Intersystems SQL,请将“IRIS”指定为第一个参数。
- `run()`是一个Intersystems SQL导入方法。该方法从终端交互方式运行。它会提示指定导入文本文件的位置,创建`Errors.log`文件和U`nsupported.log`文件以及其他信息。
注意:此导入和执行SQL DDL代码不应与管理门户SQL接口的Import语句操作混淆。该操作以XML格式导入SQL语句。
以下示例导入Intersystems Iris SQL代码文件`Pathname MySQLCode.txt`,在当前命名空间中执行该文件中列出的SQL命令:
```java
DO $SYSTEM.SQL.Schema.ImportDDL("IRIS",$USERNAME,"c:\temp\mysqlcode.txt",,1)
```
默认情况下,`ImportDDL()`创建错误日志文件。此示例在与SQL代码文件中创建名为`mysqlcode_errors.log`的文件。第五个参数是一个布尔值,指定是否创建列出不受支持的SQL命令的文件。默认值为0.在此示例中,第五个参数设置为1,在与SQL代码文件相同的目录中创建名为`mysqlcode_unsupported.log`的文件。即使没有写入它们时,也会创建这些日志文件。
从终端执行`ImportDDL()`时,它首先列出输入文件,错误日志文件和不受支持的日志文件。然后,对于每个SQL命令,它显示一个列表,例如以下内容:
```sql
SQL statement to process (number 1):
CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32),
StudentDOB DATE)
Preparing SQL statement...
Executing SQL statement...
DONE
```
如果在任何SQL命令中发生错误,则终端显示错误,如以下示例所示:
```sql
SQL statement to process (number 3):
INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name,
DOB FROM Sample.Person WHERE Age
公告
Claire Zheng · 八月 2, 2022
开发者们,大家好!
在此向您介绍开发者社区的一个新特性—— InterSystems开发者关键问题(Key Questions).
我们增加了一个新的 #Key Question 标签(#关键问题),用以显著标识与InterSystems数据平台有关的、影响重大的提问/问题。
每个月,InterSystems专家会选择一些这类问题,提出这些问题的社区成员将被授予荣誉奖励!
有哪些荣誉呢?详情如下!
什么是 #Key Question(#关键问题) ?
这个标签突出了关于如何使用InterSystems数据平台开发、测试、部署、管理等解决方案的问题,这些问题或富有洞察、或有趣、或最令人困惑等等。
谁来决定?
InterSystems 专家(Expert)会审阅开发者社区的问题,并决定将哪些问题归为 #Key Questions(#关键问题)。
哪些问题会被审阅?
开发者社区的所有问题都会被纳入审阅范围。
你多久可以在开发者社区上看到新的 #Key Questions(#关键问题)?
我们的专家每个月都会选取一些问题并赋予 #Key Question(#关键问题)标签。
你会获得什么荣誉?
在Global Masters,你会获得新增荣誉徽章 "Key Question"。
开发者社区亮点:我们会在被选为 #Key Question(#关键问题)的问题下面,以@DC.Administration 账号添加评论。
提问赢取奖励积分, 开发者社区探索之夏,或许你的问题就是我们专家选取的下一个 #Key Question(#关键问题)!
关注标签 ,时刻了解详情!
公告
Claire Zheng · 九月 23, 2022
亲爱的社区同学们!
2022年9月5日-10月24日,我们正在举办InterSystems开发者社区中文版首届技术征文大赛!
🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)!
2022年9月27日(下周二)11:00-11:30,我们将进行一次针对此次征文大赛的线上宣讲,欢迎您通过腾讯会议参加,了解关于此次征文大赛的信息,针对感兴趣的问题提问。
#腾讯会议信息
会议主题:InterSystems 社区技术征文大赛宣讲&解读会议时间:2022/09/27 11:00-11:30 (GMT+08:00) 中国标准时间 - 北京
点击链接入会,或添加至会议列表:https://meeting.tencent.com/dm/4UEzyh467wae
#腾讯会议:493-643-076
文章
Michael Lei · 五月 24, 2021
我本人和其他技术架构师经常需要向客户和供应商说明 Caché IO 要求以及 Caché 应用程序使用存储系统的方式。 在向客户和供应商说明典型的 Caché IO 配置文件和事务性数据库应用程序的要求时,下面的表格很有用。 原始表格由 Mark Bolinsky 创建。
在以后的帖子中,我将讨论更多关于存储 IO 的内容,所以现在贴上这些表格也作为将来文章的参考。
* * *
[本系列其他帖子的列表](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章)
* * *
拥有设置良好的存储(如存储阵列)以提供可预测的磁盘 IO 性能,支持高可用性功能并为应用程序提供存储冗余、可伸缩性和可靠性,这几点至关重要。
## Caché 存储 IO 配置文件
根据所选的存储阵列技术,物理层的磁盘存储可分为池或磁盘组。 如果可能,出于可用性和性能考虑,应根据预期的 IO 配置文件对存储进行分区。 例如,数据和日志(事务日志)应该在不同的物理磁盘组上,因为它们有不同的 IO 配置文件,这也是出于可用性考虑,因为数据磁盘组中的损坏可以通过与损坏隔离的单独磁盘组中的日志来恢复。
同样,备份应该在单独的磁盘组中。 存储配置有多种选择,具体取决于操作系统、存储供应商和阵列型号。 具体要求因应用程序而异,需要特别注意物理和逻辑配置,包括物理和逻辑组或池的分配、RAID 类型、文件系统类型和并发性、分配的 GB 空间等。
下表详细介绍了 Caché 的读写 IO 配置文件:

## Caché 存储 IO 要求
我发现存储瓶颈是影响数据库系统性能的最常见问题之一。 一个常见的问题是只针对 GB 容量来调整存储大小,而不是分配足够多的独立磁盘来支持预期的每秒输入/输出操作数 (IOPS)。 尽管 SSD 和分层存储现在更加常见,但必须小心以确保 IOPS 可用。
为了保证可被最终用户接受的响应时间,需要具有最低 IO 性能配置文件的磁盘阵列。 根据是否使用单独的应用程序 (ECP) 服务器,要求会略有不同。 下表详细说明了预期的存储响应时间和关于 IO 配置文件的备注。

## 缺少了什么?
在与供应商交谈之前,您需要估计您的应用程序预期将驱动的 IOPS ,以便配置存储选项以满足上述要求。 本系列的第 1 和第 2 部分给出了如何收集指标的示例。
文章
Michael Lei · 五月 12, 2021
在本帖中,我将展示使用_外部备份_来备份 Caché 的策略,以及与基于快照的解决方案集成的示例。 如今,大多数解决方案部署在基于 VMware 的 Linux 上,因此许多帖子都以展示解决方案如何集成 VMware 快照技术为例。
## Caché 备份 - 包括电池?
Caché 安装后即包含 Caché 在线备份,可提供不间断的 Caché 数据库备份。 但随着系统规模的扩大,您应该考虑更高效的备份解决方案。 集成了快照技术的_外部备份_是推荐的系统(包括 Caché 数据库)备份解决方案。
## 外部备份有特殊注意事项吗?
[外部备份](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCDI_backup#GCDI_backup_methods_ext)的在线文档包含了全部详细信息。 一个关键考虑事项是:
> “为确保快照的完整性,Caché 提供了在创建快照时冻结数据库写操作的方法。 在创建快照期间,只冻结对数据库文件的物理写入,从而允许用户进程继续在内存中不间断地执行更新。”
还需要注意的是,虚拟化系统上的部分快照过程会导致正在备份的虚拟机短暂暂停,这段时间通常称为关闭时间。 该时间通常不到一秒,因此不会被用户注意到,也不会影响系统运行,但在某些情况下,关闭时间可能较长。 如果关闭时间长于 Caché 数据库镜像的 QoS 超时时间,那么备份节点将认为主节点出现故障,并将进行故障转移。 在本帖的后面部分,我将说明在需要对镜像 QoS 超时时间进行更改时如何查看关闭时间。
[这里是 InterSystems 数据平台和性能系列的其他帖子的列表。](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章)
对于本帖,您还应该查看 Caché 在线文档中的[备份和还原指南](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCDI_backup)。
# 备份选择
## 最低限度的备份解决方案 - Caché 在线备份
如果您没有其他备份方案,可使用 InterSystems 数据平台附带的这一功能,以实现零停机时间的备份。 请记住,_Caché 在线备份_只备份 Caché 数据库文件,它将捕获数据库中为数据分配的所有块以及写入到顺序文件的输出。 Caché 在线备份支持累积备份和增量备份。
在 VMware 的上下文中,Caché 在线备份是一种客户机内备份解决方案。 与其他客户机内解决方案一样,无论应用程序已虚拟化还是直接在主机上运行,Caché 在线备份的操作都基本相同。 Caché 在线备份必须与系统备份配合使用,才能将 Caché 在线备份输出文件与应用程序使用的所有其他文件系统一起复制到备份介质中。 最低限度的系统备份必须包括安装目录、日志和备用日志目录、应用程序文件以及包含应用程序使用的外部文件的任何目录。
Caché 在线备份应被视为小型站点的入门级方法,这些站点希望实施低成本解决方案,只备份 Caché 数据库或临时备份,例如,该方案在设置镜像时非常有用。 然而,随着数据库规模的扩大,加上 Caché 通常只是客户数据环境的一部分,建议将_外部备份_与快照技术和第三方实用工具相结合来作为最佳做法。这样做的优点包括可备份非数据库文件、更快的还原时间、企业范围的数据视图以及更好的目录和管理工具。
## 推荐的备份解决方案 - 外部备份
以 VMware 为例;VMware 上的虚拟化为保护整个虚拟机增加了额外的功能和选择。 将解决方案虚拟化后,您就有效地将系统(包括操作系统、应用程序和数据)全部封装在 .vmdk(和其他一些)文件中。 需要时,可以非常方便地管理这些文件,并使用它们恢复整个系统,这与物理系统上的操作截然不同。在物理系统中,必须分别恢复和配置各个组件 - 操作系统、驱动程序、第三方应用程序、数据库和数据库文件等。
# VMware 快照
VMware 的 vSphere Data Protection (VDP) 和其他用于虚拟机备份的第三方备份解决方案(如 Veeam 或 Commvault)利用 VMware 虚拟机快照的功能来创建备份。 以下是 VMware 快照的高阶说明,有关更多详细信息,请参见 VMware 文档。
快照应用于整个虚拟机,操作系统和所有应用程序或数据库引擎都不知道快照的进行,记住这一点很重要。 此外,还要记住:
> VMware 快照本身不是备份!
快照_使_备份软件进行备份,但它们本身并不是备份。
VDP 和第三方备份解决方案将 VMware 快照过程与备份应用程序相结合来管理快照的创建及非常重要的删除。 从高级别看,使用 VMware 快照进行外部备份的过程和事件顺序如下:
- 第三方备份软件请求 ESXi 主机触发 VMware 快照。
- 虚拟机的 .vmdk 文件被置于只读状态,并且为虚拟机的每个 .vmdk 文件都创建一个子 vmdk 增量文件。
- 使用写入时复制机制,对虚拟机的所有更改都将写入增量文件。 任何读取都先从增量文件进行。
- 备份软件管理只读父 .vmdk 文件到备份目标的复制。
- 备份完成后,将提交快照(虚拟机磁盘恢复写入,并且增量文件中更新的块将写入父文件)。
- VMware 快照此时已删除。
备份解决方案还使用其他功能,如变更块跟踪 (CBT) 允许增量或累积备份,以提高速度和效率(对节省空间尤为重要),并且通常还增加其他重要功能,如重复数据删除和压缩、调度、挂载已更改 IP 地址的虚拟机以进行完整性检查等、完整的虚拟机和文件级恢复,以及目录管理。
> 管理不当或长时间不运行的 VMware 快照可能会占用过多存储(随着越来越多的数据被更改,增量文件会持续增长),还会拖慢虚拟机的速度。
在生产实例上运行手动快照之前,您应该非常仔细地考虑。 为什么要这么做? 如果*时光倒流*到创建快照的时候,会发生什么? 从创建到回滚之间的所有应用程序事务会发生什么?
如果您的备份软件创建和删除快照,没有问题。 快照应该只存在很短的时间。 备份策略的关键部分是选择系统使用率较低的时间,以最大程度地减少对用户和性能的影响。
## 快照的 Caché 数据库注意事项
拍摄快照之前,数据库必须处于静默状态,以便提交所有待处理的写入,并且数据库处于一致状态。 Caché 提供了方法和 API,以在创建快照时先提交对数据库的写入,再短时间冻结(停止)写入。 这样,在创建快照期间,只冻结对数据库文件的物理写入,从而允许用户进程继续在内存中不间断地执行更新。 触发快照后,将解冻数据库写入,备份继续将数据复制到备份介质。 冻结和解冻的间隔应该非常短(几秒钟)。
除了暂停写入,Caché 冻结还会处理日志文件的切换并向日志写入备份标记。 在物理数据库写入被冻结时,日志文件继续正常写入。 如果在物理数据库写入被冻结时系统崩溃,则在启动过程中,会照常从日志恢复数据。
下图显示了为创建具有一致数据库映像的备份,所执行的冻结和解冻以及 VMware 快照步骤。

> _请注意,冻结和解冻之间的短暂时间只是创建快照的时间,而不是将只读父文件复制到备份目标的时间。_
# 整合 Caché 冻结和解冻
vSphere 允许在创建快照的任一侧自动调用脚本,此时会调用 Caché 冻结和解冻。 注意:为了使此功能正常工作,ESXi 主机会请求客户机操作系统通过 _VMware Tools_ 静默磁盘。
> 客户机操作系统中必须安装 VMware Tools。
脚本必须遵守严格的名称和位置规则。 还必须设置文件权限。 对于 Linux 上的 VMware,脚本名称为:
# /usr/sbin/pre-freeze-script
# /usr/sbin/post-thaw-script
以下是我们团队对内部测试实验室实例进行 Veeam 备份时使用的冻结和解冻脚本示例,这些脚本应该也适用于其他解决方案。 这些示例已在 vSphere 6 和 Red Hat 7 上测试和使用。
> 虽然这些脚本可用作示例并说明了方法,但您必须针对您自己的环境进行验证!
### pre-freeze-script 示例:
#!/bin/sh
#
# Script called by VMWare immediately prior to snapshot for backup.
# Tested on Red Hat 7.2
#
LOGDIR=/var/log
SNAPLOG=$LOGDIR/snapshot.log
echo >> $SNAPLOG
echo "`date`: Pre freeze script started" >> $SNAPLOG
exit_code=0
# Only for running instances
for INST in `ccontrol qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5- | awk '{print $1}'`; do
echo "`date`: Attempting to freeze $INST" >> $SNAPLOG
# Detailed instances specific log
LOGFILE=$LOGDIR/$INST-pre_post.log
# Freeze
csession $INST -U '%SYS' "##Class(Backup.General).ExternalFreeze(\"$LOGFILE\",,,,,,1800)" >> $SNAPLOG $
status=$?
case $status in
5) echo "`date`: $INST IS FROZEN" >> $SNAPLOG
;;
3) echo "`date`: $INST FREEZE FAILED" >> $SNAPLOG
logger -p user.err "freeze of $INST failed"
exit_code=1
;;
*) echo "`date`: ERROR: Unknown status code: $status" >> $SNAPLOG
logger -p user.err "ERROR when freezing $INST"
exit_code=1
;;
esac
echo "`date`: Completed freeze of $INST" >> $SNAPLOG
done
echo "`date`: Pre freeze script finished" >> $SNAPLOG
exit $exit_code
### 解冻脚本示例:
#!/bin/sh
#
# Script called by VMWare immediately after backup snapshot has been created
# Tested on Red Hat 7.2
#
LOGDIR=/var/log
SNAPLOG=$LOGDIR/snapshot.log
echo >> $SNAPLOG
echo "`date`: Post thaw script started" >> $SNAPLOG
exit_code=0
if [ -d "$LOGDIR" ]; then
# Only for running instances
for INST in `ccontrol qall 2>/dev/null | tail -n +3 | grep '^up' | cut -c5- | awk '{print $1}'`; do
echo "`date`: Attempting to thaw $INST" >> $SNAPLOG
# Detailed instances specific log
LOGFILE=$LOGDIR/$INST-pre_post.log
# Thaw
csession $INST -U%SYS "##Class(Backup.General).ExternalThaw(\"$LOGFILE\")" >> $SNAPLOG 2>&1
status=$?
case $status in
5) echo "`date`: $INST IS THAWED" >> $SNAPLOG
csession $INST -U%SYS "##Class(Backup.General).ExternalSetHistory(\"$LOGFILE\")" >> $SNAPLOG$
;;
3) echo "`date`: $INST THAW FAILED" >> $SNAPLOG
logger -p user.err "thaw of $INST failed"
exit_code=1
;;
*) echo "`date`: ERROR: Unknown status code: $status" >> $SNAPLOG
logger -p user.err "ERROR when thawing $INST"
exit_code=1
;;
esac
echo "`date`: Completed thaw of $INST" >> $SNAPLOG
done
fi
echo "`date`: Post thaw script finished" >> $SNAPLOG
exit $exit_code
### 记得设置权限:
# sudo chown root.root /usr/sbin/pre-freeze-script /usr/sbin/post-thaw-script
# sudo chmod 0700 /usr/sbin/pre-freeze-script /usr/sbin/post-thaw-script
## 测试冻结和解冻
要测试脚本是否正确运行,可以在虚拟机上手动运行快照并检查脚本输出。 以下截图显示了“Take VM Snapshot”(拍摄虚拟机快照)对话框和选项。

**取消选中** -“Snapshot the virtual machine's memory”(拍摄虚拟机内存快照)。
**选中** -“Quiesce guest file system (Needs VMware Tools installed)”(静默客户机文件系统(需要安装 VMware Tools))复选框以暂停客户机操作系统上运行的进程,以便在拍摄快照时文件系统内容处于已知的一致状态。
> 重要! 完成测试后,记得删除快照!!!
如果静默标志为真,并且在拍摄快照时虚拟机已开机,将使用 VMware Tools 静默虚拟机中的文件系统。 静默文件系统是使磁盘上的数据进入适合备份的状态的过程。 此过程可能包括将脏缓冲区从操作系统的内存中缓存刷新到磁盘等诸如此类的操作。
以下输出显示了在运行将快照包括为操作一部分的备份后,上述冻结/解冻脚本示例中设置的 `$SNAPSHOT` 日志文件的内容。
Wed Jan 4 16:30:35 EST 2017: Pre freeze script started
Wed Jan 4 16:30:35 EST 2017: Attempting to freeze H20152
Wed Jan 4 16:30:36 EST 2017: H20152 IS FROZEN
Wed Jan 4 16:30:36 EST 2017: Completed freeze of H20152
Wed Jan 4 16:30:36 EST 2017: Pre freeze script finished
Wed Jan 4 16:30:41 EST 2017: Post thaw script started
Wed Jan 4 16:30:41 EST 2017: Attempting to thaw H20152
Wed Jan 4 16:30:42 EST 2017: H20152 IS THAWED
Wed Jan 4 16:30:42 EST 2017: Completed thaw of H20152
Wed Jan 4 16:30:42 EST 2017: Post thaw script finished
此示例显示,冻结和解冻之间经过了 6 秒 (16:30:36-16:30:42)。 在此期间,用户操作不会中断。 _您将必须从您自己的系统中收集指标_,但为说明起见,此示例来自在虚拟机上运行应用程序基准测试的系统,该虚拟机没有瓶颈,且平均指标为每秒超过 2 百万 Gloref、每秒 17 万 Gloupd、每秒 1100 次物理读取以及每个写守护进程周期 3000 次写入。
> 请记住,内存不是快照的一部分,因此在重启时,虚拟机将重启并恢复。 数据库文件将保持一致。 您不希望”恢复“备份,而是需要在某个时间点的文件。 恢复文件后,您可以前滚日志,并执行保持应用程序和事务一致性所需的任何其他恢复步骤。
为实现额外的数据保护,系统还可以自行完成[日志切换](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCDI_journal#GCDI_journal_util_JRNSWTCH "Journal switch"),并将日志备份或复制到其他位置,例如每小时备份一次。
以下是上述冻结/解冻脚本示例中的 `$LOGFILE` 的输出,其中显示了快照的日志详细信息。
01/04/2017 16:30:35: Backup.General.ExternalFreeze: Suspending system
Journal file switched to:
/trak/jnl/jrnpri/h20152/H20152_20170104.011
01/04/2017 16:30:35: Backup.General.ExternalFreeze: Start a journal restore for this backup with journal file: /trak/jnl/jrnpri/h20152/H20152_20170104.011
Journal marker set at
offset 197192 of /trak/jnl/jrnpri/h20152/H20152_20170104.011
01/04/2017 16:30:36: Backup.General.ExternalFreeze: System suspended
01/04/2017 16:30:41: Backup.General.ExternalThaw: Resuming system
01/04/2017 16:30:42: Backup.General.ExternalThaw: System resumed
# 虚拟机关闭时间
在创建虚拟机快照时以及完成备份和提交快照后,虚拟机需要短时间冻结。 这个短时间冻结通常指关闭虚拟机。 [这里](http://cormachogan.com/2015/04/28/when-and-why-do-we-stun-a-virtual-machine/ "Blog Post on stun times")是一篇不错的关于关闭时间的博客文章。 我在下面总结了细节,并将其放在 Caché 数据库注意事项的上下文中。
根据那篇关于关闭时间的文章:”要创建虚拟机快照,需要“关闭”虚拟机,以便 (i) 将设备状态序列化到磁盘,以及 (ii) 关闭当前正在运行的磁盘并创建快照点。进行整合时,“关闭”虚拟机是为了关闭磁盘并将其置于适合整合的状态。”
关闭时间通常是几百毫秒;但是,如果在提交阶段有非常高的磁盘写入活动,关闭时间可能为几秒。
> 如果虚拟机是参与 Caché 数据库镜像的主成员或备份成员,并且关闭时间长于镜像服务质量 (QoS) 超时时间,则镜像将报告主虚拟机故障并启动镜像接管。
**2018 年 3 月更新:** 我的同事 Peter Greskoff 向我指出,在虚拟机关闭期间或主镜像成员不可用的任何其他时间,备份镜像成员可以在稍微超过半个 QoS 超时的时间内启动故障转移。
有关 QoS 注意事项和故障转移方案的详细说明,请参见以下精华帖:[镜像服务质量超时指南](https://community.intersystems.com/post/quality-service-timeout-guide-mirroring),不过关于虚拟机关闭时间和 QoS 的简述是:
> 如果备份镜像在半个 QoS 超时的时间内未收到来自主镜像的任何消息,它将发送一条消息以确保主镜像仍处于活动状态。 然后,备份镜像将再等待半个 QoS 超时的时间,以接收来自主镜像的响应。 如果主镜像没有任何响应,则认为主镜像已关闭,备份镜像将接管。
在繁忙的系统上,日志不断从主镜像发送到备份镜像,并且备份镜像无需检查主镜像是否仍在运行。 但是,在安静的时间内(更可能发生备份),如果应用程序处于空闲状态,则主镜像和备份镜像之间可能在超过半个 QoS 超时的时间内没有消息。
以下是 Peter 的示例;考虑以下空闲系统时间框架,其中 QoS 超时为 :08 秒,虚拟机关闭时间为 :07 秒:
- :00 主成员使用保持连接信号 ping 仲裁器,仲裁器立即响应
- :01 备份成员向主成员发送保持连接信号,主成员立即响应
- :02
- :03 虚拟机关闭开始
- :04 主成员尝试向仲裁器发送保持连接信号,但没有发送成功,直到关闭完成
- :05 备份成员 ping 主成员,因为 QoS 已过半
- :06
- :07
- :08 仲裁器在整个 QoS 超时时间内未收到主成员的响应,因此关闭连接
- :09 备份成员没有收到主成员的响应,并与仲裁器确认连接丢失,因此开始接管
- :10 虚拟机关闭结束,太迟了!!
另请阅读上面链接的帖子中的“_配置服务质量超时时的陷阱和注意事项_”部分,以理解让 QoS 超时只有必要长度的这一平衡。 QoS 太长(尤其是超过 30 秒)也会导致问题。
**2018 年 3 月更新结束:**
有关镜像 QoS 的更多信息,另请参见[文档](https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror#GHA_mirror_set_tunable_params_qos)。
> 将关闭时间保持在最低限度的策略包括:在数据库活动较少并且存储设置良好时运行备份。
如上文所述,在创建快照时,有几个选项可以指定,其中一个选项是在快照中包含内存状态 - 请记住,_Caché 数据库备份不需要内存状态_。 如果设置了内存标志,则快照中会包含虚拟机内部状态的转储。 创建内存快照需要较长时间。 内存快照可用于恢复到拍摄快照时运行中的虚拟机状态。 数据库文件备份并不需要。
> 拍摄内存快照时,虚拟机的整个状态将关闭,**关闭时间是可变的**。
如前所述,对于备份,必须针对手动快照或通过备份软件将静默标志设置为真,以保证备份的一致性和可用性。
## 查看 VMware 日志以了解关闭时间
从 ESXi 5.0 开始,快照关闭时间会记录在每个虚拟机的日志文件 (vmware.log) 中,消息类似于:
`2017-01-04T22:15:58.846Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 38123 us`
关闭时间以微秒为单位,所以在上面的示例中,`38123 us` 为 38123/1000000 秒或 0.038 秒。
要确保关闭时间在可接受的限制范围内,或者要在怀疑关闭时间长而导致问题时进行故障排除,可以从您感兴趣的虚拟机文件夹中下载并查看 vmware.log 文件。 下载后,您可以提取日志并进行排序,例如使用下面的 Linux 命令示例。
### 下载 vmware.log 文件的示例
下载支持日志有几种方法,包括通过 vSphere 管理控制台或从 ESXi 主机命令行创建 VMware 支持包。 有关所有详细信息,请查阅 VMware 文档,但下面给出一个简单方法来创建和收集小得多的支持包,其中包括 vmware.log 文件,以便查看关闭时间。
您将需要虚拟机文件所在目录的长名称。 使用 ssh 登录到运行数据库虚拟机的 ESXi 主机,并使用命令:`vim-cmd vmsvc/getallvms` 列出 vmx 文件以及与它们唯一关联的长名称。
例如,本帖中使用的数据库虚拟机示例的长名称输出为:`26 vsan-tc2016-db1 [vsanDatastore] e2fe4e58-dbd1-5e79-e3e2-246e9613a6f0/vsan-tc2016-db1.vmx rhel7_64Guest vmx-11`
接下来运行命令以只收集和捆绑日志文件:
`vm-support -a VirtualMachines:logs`。
该命令将回显支持包的位置,例如:`To see the files collected, check '/vmfs/volumes/datastore1 (3)/esx-esxvsan4.iscinternal.com-2016-12-30--07.19-9235879.tgz'`。
您现在可以使用 sftp 将文件传输出主机,以进行进一步处理和查看。
在此示例中,解压缩支持包后,导航到与数据库虚拟机长名称相对应的路径。 例如,在此例中: `/vmfs/volumes//e2fe4e58-dbd1-5e79-e3e2-246e9613a6f0`。
您将看到几个已编号的日志文件,最新的日志文件没有编号,即 `vmware.log`。 该日志可能只有几百 KB,但是有很多信息,不过我们只关心关闭/取消关闭时间,使用 `grep` 可以轻松找到。 例如:
$ grep Unstun vmware.log
2017-01-04T21:30:19.662Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 1091706 us
---
2017-01-04T22:15:58.846Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 38123 us
2017-01-04T22:15:59.573Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 298346 us
2017-01-04T22:16:03.672Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 301099 us
2017-01-04T22:16:06.471Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 341616 us
2017-01-04T22:16:24.813Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 264392 us
2017-01-04T22:16:30.921Z| vcpu-0| I125: Checkpoint_Unstun: vm stopped for 221633 us
我们可以看到,示例中有两组关闭时间,一组来自快照创建,另一组是删除/整合快照(例如,备份软件复制只读 vmx 文件完毕后)45 分钟后每个磁盘的关闭时间 。 在上面的示例中,我们可以看到大多数关闭时间为亚秒级,尽管初始关闭时间刚刚超过一秒。
短暂的关闭时间对于最终用户来说并不明显。 但是,Caché 数据库镜像等系统进程会持续监视实例是否“活动”。 如果关闭时间超过镜像 QoS 超时时间,那么节点可能被视为不可联系并已“死亡”,并且将触发故障转移。
_提示:_要查看所有日志或进行故障排除,一个方便的命令是 grep 所有 `vmware*.log` 文件,并查找关闭时间接近 QoS 超时时间的任何异常值或实例。 以下命令将输出传输到 awk 进行格式化:
`grep Unstun vmware* | awk '{ printf ("%'"'"'d", $8)} {print " ---" $0}' | sort -nr`
# 总结
您应该在系统正常运行期间定期监视系统,以了解关闭时间以及它们可能对 HA(如镜像)的 QoS 超时有何影响。 如前所述,将关闭/取消关闭时间保持在最低限度的策略包括:在数据库和存储活动较少并且存储设置良好时运行备份。 要持续监视,可以使用 VMware Log insight 或其他工具处理日志。
我将在将来的帖子中重新讨论 InterSystems 数据平台的备份和还原操作。 但现在,如果您基于您的系统工作流程有任何意见或建议,请通过下面的评论部分分享。
公告
Claire Zheng · 一月 12, 2021
本报告介绍了ESG 集团对多个数据库管理软件产品进行的并发数据摄取和实时查询性能验证测试。测试结果表明,InterSystems IRIS 数据平台可在摄取上亿条记录的同时执行数百万条查询,响应时间达到微秒级,其性能优于其他传统产品和内存产品。
对许多企业而言,收集并实时分析数据是一项必备能力,有助于推动收入增长、提高知名度,并为战略和决策提供参考。例如,专注于金融交易、物联网、欺诈检测和实时个性化服务的应用程序必须摄取并实时分析海量数据。其中的挑战在于找到一个足够强大的数据库平台,以便同时处理大规模的数据摄取和查询且不降低性能。当ESG向数据库和分析专家询问数据分析支持技术的相关问题时,大家普遍认为最重要的能力之一是性能。
内存数据库可提供高性能,但其扩展成本高昂,而且具有内存硬限制,可能会引起可靠性问题和重启延迟。传统数据库可提供持久性和可靠性,但缺乏内存数据库的高性能。相比之下,InterSystems IRIS 可同时处理数据摄取和查询工作负载,其性能可匹敌甚至优于内存数据库,并且不存在内存数据库的限制。为了证明这一主张,InterSystems发布了一项开源测试,ESG 也在本报告中进行了验证。
点击获取完整白皮书:
ESG 白皮书 | InterSystems IRIS:处理并发数据摄取和实时查询的高性能数据管理软件
文章
Qiao Peng · 四月 7, 2021
如果看了前一篇InterSystems IRIS医疗行业版创建FHIR服务器,应该您已经搭建好了FHIR服务器和FHIR资源仓库。除了使用FHIR REST API来操作这个FHIR服务器,您还可以更直观地看看它的价值 - 使用SMART on FHIR应用。这次,基于上次建好的FHIR服务器,我们用10分钟把一个SMART on FHIR运行起来。
SMART on FHIR背景
SMART是Substitutable Medical Applications and Reusable Technology的缩写,它的目标是创建可以被替换、可以复用的医疗应用,简单说就是希望医疗应用可以像我们的手机应用一样:不喜欢当前的天气应用,那么就换一个。SMART,这个起于2011年的哈佛和波士顿儿童医院的合作项目,在2013年注意到并快速采用了FHIR,成就了今天的SMART on FHIR。
不再需要处理数据持久化、数据模型标准化等问题,SMART on FHIR应用相当的轻量级,因此也容易快速开发。它主要借助FHIR API和OAuth认证,连接到FHIR服务器上操作数据。SMART on FHIR应用都是Web应用,它可以独立运行,也可以嵌入到任何现有应用中,例如TrakCare(InterSystems的EMR产品)和HealthShare Personal Community (InterSystems的患者门户),快速丰富和提升这些应用的价值。
现在SMART on FHIR应用商店里已经有很多针对医生或者患者的应用可供免费下载和测试,初步实现了SMART目标。不论您是想借助SMART on FHIR理解FHIR、还是想开发SMART应用、亦或直接测试和使用应用商店里的现成应用,都希望这篇文章对您有所帮助。
测试SMART on FHIR应用
完整的SMART on FHIR应用涉及到OAuth认证,我们先从一个简单的、无需认证的环境开始,快速了解一下SMART on FHIR应用。在下一篇中,我们将在InterSystems IRIS搭建完整的支持环境:不仅是FHIR服务器和FHIR资源仓库,还包括OAuth认证服务器。
1. 下载SMART on FHIR应用
我们先下载一个SMART on FHIR应用,SMART on FHIR应用商店里有很多不错的应用,我们下载儿童生长发育分析的应用,虽然简单,但它很有代表性,也是波士顿儿童医院的杰作。它支持DSTU2和STU3的FHIR版本,不过因为它用的FHIR资源类型不多,因此实际上也支持FHIR R4。
将代码下载到本地后,解压并保存在您上一篇创建的InterSystems IRIS FHIR服务器上,建议您创建一个名为SMART的目录,存放解压后的SMART 代码。
之后,请记得打开命令行,在这个目录下执行:
npm install
它会下载需要的一系列文件到node_modules子目录下。
执行完这一步,您已经有一个完整的SMART on FHIR应用了。
2. 修改SMART on FHIR
要连接到我们上一篇创建的FHIR服务器,需要对应用的代码做一点点修改。需要修改的是launch.html文件,它负责OAuth认证并重定向到index.html。
找到您的launch.html文件,用任何文本编辑工具打开它:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Growth Chart SMART Application</title>
<script src="node_modules/fhirclient/build/fhir-client.js"></script>
<!--<script>
FHIR.oauth2.authorize({
"client_id": "growth_chart",
"scope": "patient/Observation.read patient/Patient.read offline_access",
// "client_id": "944d96a0-4caf-4a96-813e-bc38aadb1169" // HSPC
// "client_id": "5570f8be-6caf-4915-ae15-69545ab38e68" // Cerner
});
</script>-->
<script>
FHIR.oauth2.authorize({
"client_id": "growth_chart",
"scope": "patient/*.read",
"fhirServiceUrl": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4",
"patientId": 95,
"redirectUri":"index.html"
});
</script>
</head>
<body>Loading...</body>
</html>
找到FHIR.oauth2.authorize,我把原来的代码注释起来,用于比对。这里我们做了这些修改:
1. 增加fhirServiceUrl,用于指向FHIR服务器端点。增加它的原因是我们想在这篇文章中,跳过OAuth认证。请修改这个URL指向您的FHIR服务器端点。
2. 增加patientId,用于指定我们想打开的FHIR患者资源。增加它的原因是,我们不是通过其它应用打开这个SMART on FHIR,没有选中的患者上下文,因此我们在这里指定一个患者资源。请找一个您的FHIR资源仓库中,有身高、体重等信息的儿童患者资源,用它的FHIR资源id替换。上一篇中有介绍怎么使用API查找这样的患者。
3. 增加redirectUri,用于重定向页面。这里直接重定向到index.html。
如果您是开发者,FHIR.oauth2.authorize的API的文档在此,供参考。
3. 部署SMART on FHIR应用
将这个SMART on FHIR应用部署到Web服务器上。如果您的环境上没有安装Web服务器,可以使用InterSystems IRIS的私有Apache进行测试。
InterSystems IRIS安装时,会自动安装一个私有的Apache,用于提供管理门户的Web应用。这个私有Apache因为性能原因,不应作为提供外部服务的Web服务器,不过用于我们这次的测试是没有问题的。
在InterSystems IRIS的私有Apache上部署SMART on FHIR应用非常简单:
3.1 创建一个Web应用
打开InterSystems IRIS管理门户网页(http://<IRIS服务器地址>:<Web服务端口>/csp/sys/UtilHome.csp,例如http://localhost:52776/csp/sys/UtilHome.csp),然后在“系统管理>安全>应用程序>Web应用程序"中,点击"新建Web应用程序":
在名称中创建一个新的Web应用,例如/csp/gc;
在命名空间中,选则上一篇创建的FHIRSERVER,或者任何其它的命名空间,如USER;
选中启用“CSP/ZEN”;
“CSP文件设置>物理路径”中,选择您下载并解压的SMART on FHIR应用的路径。
其它默认值无需更改,点击保存按钮。
现在您已经部署成功了SMART on FHIR。
3.2 测试SMART on FHIR
您可以直接打开浏览器,输入网址http://<IRIS服务器地址>:<Web服务端口>/csp/gc/launch.html(用您的环境的IRIS服务器IP和端口号)。应该看到和下面类似的页面,它已经自动重定向到了index.html:
这是一个非常直观的FHIR数据可视化的应用,显示了儿童的生长发育曲线。您还可以下载并部署其它SMART on FHIR应用,用于学习或测试。 还有没有其他类似https://apps.smarthealthit.org/apps/ 这样的应用市场?可以给个列表? 目前这是最主要的SMART on FHIR应用市场。但不少厂商都推出了自己的SMART on FHIR应用,放在自己的官网里,有些是免费的,更多是收费的。
文章
Michael Lei · 二月 14, 2022
痴呆症是一个重大的全球性问题,困扰着5400万人,到2050年这个数字将上升到1.3亿。由英国剑桥大学的学者创立的Cognetivity Neurosciences公司设计了一个尖端的解决方案,以帮助缓解全球痴呆症的流行。
根植于先进神经科学的简单解决方案
在出现临床症状之前的早期检测,为专家干预和改变生活方式打开了大门,可以减缓痴呆症的发展,提高生活质量。生活方式的改变有可能将症状的出现推迟五年,进而将普通人群中的痴呆症发病率降低50%。
Cognetivity Neurosciences的综合认知评估测试(ICA)是基于人类对动物刺激的强烈反应,以及健康的大脑在不到200毫秒内处理动物图像的能力。
ICA将基于云的人工智能和神经科学的进展结合起来,进行快速的动物/非动物视觉分类测试,目的是在记忆症状出现之前发现疾病的迹象。它涉及在阿尔茨海默症的前症状阶段受到影响的大脑区域,并检测出信息处理速度的细微损伤。
ICA基于云的敏捷性使临床医生和用户能够在熟悉的硬件上进行ICA测试,如iPad和智能手机,并在任何有互联网连接的地方进行。
Cognetivity Neurosciences正在通过一个先进的、可扩展的解决方案,利用神经科学的进步、人工智能和InterSystems IRIS for Health云数据管理平台的力量,重新发明痴呆症检测。
核心需求是数据的互操作性
任何新的诊断技术的成功都在很大程度上受其与现有工作流程和信息系统的整合程度的影响。对于像ICA平台这样具有巨大全球潜力的解决方案,要想在临床上有效和可扩展,它必须与已有的临床数据整合。在大多数国家,这需要完全遵守强制性的医疗数据标准,如HL7® FHIR®和HL7 V2,这些标准规定了互操作性。
Cognetivity Neurosciences选择InterSystems作为其技术合作伙伴,以实现这一重要的数据管理和互操作性。InterSystems IRIS for Health™数据平台非常适合这一高要求的角色,它是专门为从医疗保健数据中提取洞察力而设计的。它完全云中立,支持在所有主要的公有云、多云和混合云环境中部署。InterSystems IRIS for Health还使该团队能够减少在创建平台时使用的不同技术的数量。结果是--关键信息在正确的时间流向正确的人,这是高效采用和有效决策所需的关键因素。
"Cognetivity Neurosciences的首席技术官Jonathan El-Sharkawy说:"InterSystems作为我们的互操作性和集成合作伙伴,选择是自然的。"从一开始,我们就对引进他们帮助我们发展的决定充满信心。InterSystems IRIS for Health的功能非常强大,经过验证并被英国国家卫生服务系统(NHS)完全接受,更重要的是,InterSystems团队在NHS环境中拥有丰富的经验。"
InterSystems IRIS for Health完全云中立,支持在公有云、多云和混合云环境中部署。
一个完全集成的、用户友好的、能发挥作用的测试
InterSystems IRIS for Health使Cognetivity Neurosciences能够与消费者设备和医疗级设备有效连接,并让患者使用现有的iPad和智能手机等硬件进行ICA测试。
随着Cognetivity Neurosciences公司向英国以外的地区扩展,与电子病历(EHR)的高度整合正在推动其技术的广泛采用。该公司还希望扩展到多发性硬化症等疾病的早期检测。
InterSystems IRIS for Health为Cognetivity Neurosciences提供了其尖端技术所需的互操作性和灵活性,以帮助改变整个NHS的痴呆症护理路径,并满足全球对远程测试、诊断和监测工具的广泛需求。
"El-Sharkawy说:"InterSystems IRIS for Health独特的数据管理和整合能力对我们的工作至关重要。"对我们来说,InterSystems IRIS for Health已经成功地与这么多医疗信息系统整合,包括最大的EHR供应商的系统,这对我们来说意义重大。随着我们的平台无缝协作,现在我们可以使用的国际应用程序的范围非常大。"
随着我们的平台无缝连接,我们现在可以使用的国际应用范围很广。
临床实施进展顺利,有可能使数百万人受益
ICA测试是早期痴呆症检测的一个重大进步,使其更快、更便宜、更可靠。它的简单性消除了语言、文化或教育障碍,使该解决方案几乎在世界任何地方都能得到采用。该平台得到了英国药品和保健品监管局的批准,并已在NHS精神健康专业机构North Staffordshire Combined Healthcare NHS Trust部署。它还在英国桑德兰的初级保健中使用。
ICA平台也被英国政府的G-Cloud所接受,并被选入美国德克萨斯医学中心秋季2020创新项目的最后一批小组。
其创新的力量,以及InterSystems IRIS for Health先进的云数据管理和整合能力,使Cognetivity Neurosciences能够大幅扩展,帮助全球数百万人。
"Cognetivity Neurosciences首席执行官Sina Habibi博士说:"我们与InterSystems的合作大有裨益,帮助我们实现了我们的愿景。"和我们一样,InterSystems的员工也热衷于利用技术对病人护理进行重大的、有影响力的改进。InterSystems IRIS for Health为我们提供了我们的尖端技术所需的互操作性和敏捷性,以帮助改变NHS和国际上的痴呆症护理路径。我们可以满足对更快、更准确和更有成本效益的诊断的加速需求。"
关于Cognetivity Neurosciences(https://cognetivity.com/about/)
Cognetivity Neurosciences是一家成立于英国剑桥大学的医疗技术公司,它开发了一种由人工智能驱动的五分钟认知功能测试。其综合认知评估(ICA)是一种易于使用、敏感、可靠和可扩展的测试,代表了监测大脑健康的重大进展。ICA通过触摸屏设备和网络提供,为测量认知能力提供了一个独特的端到端解决方案。它可以早期发现神经系统问题,为病人带来更好的结果,并降低医疗系统的成本。Cognetivity正在美国、欧洲、中东和其他地区的医疗和企业市场上将ICA商业化。预计到2026年,全球认知评估和训练的市场规模将达到114亿美元,以26.6%的年均增长率增长,美国、欧盟和中东地区有超过3.5亿的55岁以上人口,Cognetivity的独特技术有望改变测量大脑健康的方式,并服务数百万以上的人群。
文章
Hao Ma · 十一月 2, 2021
本文档将向您介绍 InterSystems IRIS®数据平台如何通过使用应用服务器进行分布式缓存,利用企业缓存协议(Enterprise Cache Protocol,ECP)来扩展用户容量(User Volume)。本指南介绍了如何使用分布式缓存架构进行扩展,并介绍了与部署 InterSystems IRIS 分布式缓存集群相关的一些初始任务。一旦您完成了本指南,您将对分布式缓存集群的工作原理和设置方法有一个基本的了解。这些活动被设计成只使用默认的设置和功能,这样您就可以熟悉该功能的基本原理,而不必处理细节(尽管这些细节在执行实现时可能很重要)。有关使用 InterSystems IRIS 分布式缓存和 ECP 的完整文档,请参见本指南末尾 " For More Information (更多信息)" 部分中的参考资料列表。要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
1 问题:扩展用户容量(User Volume) 当用户通过应用程序连接到您的 InterSystems IRIS 数据库时,他们需要快速、有效地访问数据。无论您的企业是小型、大型,还是介于两者之间,对数据库的大量并发用户请求——用户容量(user volume)——都会在托管数据库的系统上造成性能问题。这可能会影响更多用户,使他们等待更长时间才能收到所需信息。在一个动态业务中,用户容量(User Volume)可能会迅速增长,从而进一步影响性能。特别是,如果很多用户在执行许多不同的查询,这些查询的大小会超过缓存,这意味着,它们不能再存储在内存中,而是需要从磁盘上读取数据。这种低效的过程会导致瓶颈和性能问题。您可以增加系统的内存和缓存大小(垂直扩展),但这种解决方案可能是昂贵的、不灵活的,并最终受限于硬件的最大功能。将用户的工作量分散到多个系统上(水平扩展)是一种更加灵活、高效和可扩展的解决方案。
2 解决方案:分布式缓存(Distributed Caching)为了提高用户访问数据的速度和效率,InterSystems IRIS 可以使用分布式缓存(Distributed Caching)。这种技术允许 InterSystems IRIS 在多个应用服务器(application server)上存储数据库缓存。然后,用户容量(User Volume)可以分布在这些服务器上,从而提高缓存效率。使之成为可能的节点间通信是由 ECP,即企业缓存协议(Enterprise Cache Protocol)启用的。使用分布式缓存(Distributed Caching),您可以让进行类似查询的用户共享一部分缓存,该缓存托管在应用服务器集群中,与托管数据的数据服务器一起。实际数据保留在数据服务器上,但缓存保留在应用服务器上,以加快用户访问。数据服务器负责保持企业中每台应用服务器上的缓存数据是最新的。 分布式缓存是如何工作的?
有了分布式缓存集群,您可以根据需要添加或删除应用服务器,轻松地扩展您的解决方案。所有的应用服务器都会自动维护自己与数据服务器的连接,并在连接中断时尝试恢复连接。您可以在单个集群实例上使用管理门户(Management Portal)配置应用服务器及其相关的数据服务器,或使用 InterSystems 云管理器(InterSystems Cloud Manager,ICM)部署和配置集群。有关 ICM 的更多信息 ,请参见 First Look:ICM(《技术概要:ICM》)和 InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)。
3 分布式缓存是如何工作的?当您部署一个 InterSystems IRIS 分布式缓存集群时,指定一个实例为数据服务器,指定一个或多个实例为应用服务器。这些实例不需要在相同的操作系统或硬件上运行,它们只需要符合 InterSystems IRIS 系统的要求。• 数据服务器的执行方式与标准的 InterSystems IRIS 服务器一样,在命名空间中托管数据库,并根据请求向其他系统提供数据。• 应用服务器接收来自应用程序的数据请求。当用户打开一个应用程序时,它不是连接到数据服务器,而是连接到应用服务器。用户不会注意到有什么不同。应用服务器从数据服务器获取必要的数据并提供给用户。• 应用服务器将数据存储在自己的缓存中,这样,下次任何用户请求相同的数据时,应用服务器不需要再次联系数据服务器就可以提供。• 数据服务器监控所有的应用服务器,以确保其缓存中的数据是最新的。数据服务器还处理整个系统的数据锁。• 如果应用服务器和数据服务器之间的连接丢失,应用服务器会自动尝试重新连接并恢复任何需要的数据。• 您可以设计您的应用程序,将进行类似查询的用户引导到同一个应用服务器。这样一来,用户可以共享一个包含他们最需要的数据的缓存。例如,在医疗保健设置中,您可能会让临床医生运行一组特定的查询,而前台工作人员使用相同的应用程序和相同的底层数据运行不同的查询;这些用户组可以在不同的应用服务器上分组。再比如,如果集群处理多个应用程序,每个应用程序的用户可以被引导到他们自己的应用服务器上,以获得最大的缓存效率。
4 亲自尝试分布式缓存使用 InterSystems IRIS 建立一个分布式缓存集群很容易。这个简单的程序将引导您完成在几个实例上配置 ECP 的基本步骤。注意: 为了让您体验分布式缓存,而又不至于在细节上陷入困境,我们保持了简单的探索;例如,我们让您尽可能多地使用默认设置。不过,当您把这个功能带到您的生产系统时,您可能需要以不同的方式配置一些设置(例如,安全设置)。本文档末尾提供的参考资料将为您提供更多细节。 亲自尝试分布式缓存4.1 用前须知在这个示例中,您将设置一个InterSystems IRIS 实例作为数据服务器,再设置两个实例作为应用服务器。这意味着您将总共需要三个实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的实例;这些实例不需要由您正在工作的系统托管(尽管它们必须相互有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有三个实例可以使用),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying Licensed Instances(部署已授权的实例)。注意:InterSystems IRIS 数据平台(Data Platform)提供了几种自动部署分布式缓存集群的方法,这些集群在部署后可以完全运行;请参见 Scalability Guide(《可扩展性指南》)中的 Deploying a Distributed Cache Cluster Automatically(自动部署分布式缓存集群)。4.2 启用 ECP 服务器 首先,在三个实例上启用 ECP 服务器,如下所示:1. 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中URL described for your instance(为您的实例描述的 URL),在您的浏览器中打开实例的管理门户(Management Portal)。2. 进入 Services(服务器) 页面(System Administration(系统管理) > Security(安全) > Services(服务器))。3. 选择 %服务_ECP。在 Edit Service(编辑服务器)页面上,选择 Service Enabled(已启用的服务器)复选框,然后选择 Save(保存)。您现在已经在系统上启用了 ECP。只需要几个步骤就可以完成对数据服务器和两个应用服务器的设置。4.3 配置数据服务器 在将要成为您的数据服务器的系统上,只需要两个快速步骤就可以完成设置。首先,您需要将允许的应用服务器的数量从默认值增加一个。然后,您将创建一个新的数据库供应用服务器连接。当然,在生产环境中,您已经有一个正在使用的数据库。要完成数据服务器配置:1. 在管理门户(Management Portal)中,进入 ECP Settings(ECP 设置) 页面(System Administration(系统管理) > Configuration(配置) > Connectivity(连接) > ECP Settings(ECP 设置))。2. 在标有 This System as an ECP Data Server(本系统作为 ECP 数据服务器)的部分中,将 Maximum number of application servers(应用服务器的最大数量) 设置为 2。 选择 Save(保存)。3. 重新启动实例。
有关创建数据服务器和设置可用选项的更多细节,请参见 Scalability Guide(《可扩展性指南》)中 "Horizontally Scaling Systems for User Volume with InterSystems Distributed Caching(《使用 InterSystems 分布式缓存为用户容量水平扩展系统》)"一章中的 Preparing the Data Server(准备数据服务器)。要为这个练习创建一个新的数据库:1. 在管理门户(Management Portal)中,进入 Local Databases(本地数据库) 页面(System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Local Databases(本地数据库))。2. 选择 Create New Database(创建新的数据库)。3. 为新数据库输入一个名称。对这个练习来说,称它为 ECP。4. 选择 Next(下一步) ,然后 Finis(完成)。
您已经创建了新数据库,并且您的数据服务器也已经准备好了。 亲自尝试分布式缓存
在接下来的章节中,您将设置两个应用服务器,并配置它们使其能够与数据服务器进行通信。为此,您需要知道数据服务器的超级服务器端口号(superserver port number),如 InterSystems IRIS Basics:Connecting an IDE(《技术概要:连接一个 IDE》)中所述。
4.4 配置应用服务器 接下来,您将把另外两个实例设置为应用服务器。您将配置每个应用服务器以指向数据服务器,并在每个服务器上创建一个新的命名空间,映射到您在数据服务器上创建的数据库。请确保在每个应用服务器上执行以下两个程序。
4.4.1 设置应用服务器1. 登录管理门户(Management Portal),进入 ECP Settings(ECP 设置) 页面(System Administration(系统管理) > Configuration(配置) > Connectivity(连接) > ECP Settings(ECP 设置))。2. 选择 Data Servers(数据服务器) ,然后选择 Add Server(添加服务器)。3. 填写所需信息:• Server Name(服务器名称)——输入一个名称或标签来识别这个服务器。它不需要与实例名称或实例的主机名称相同。• Host DNS Name or IP Address(主机 DNS 名称或 IP 地址)——输入托管您在上一节配置的数据服务器实例所在系统的主机标识符。• IP Port(IP 端口)——输入数据服务器实例的超级服务器端口号(superserver port number)。
4. 选择 Save(保存)。您的数据服务器现在出现在列表中。应用服务器连接到数据服务器,验证连接可能需要一些时间。4.4.2 创建命名空间和远程数据库现在您已经将应用服务器连接到数据服务器,您需要在每个应用服务器上创建一个命名空间。这个命名空间将是应用服务器的本地命名空间,但它不是包含本地数据库,而是映射到远程数据库——也就是您在上一节创建的数据服务器上的 ECP 数据库。1. 在管理门户(Management Portal)中,进入 Namespaces(名称空间) 页面(System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置)> Namespaces(命名空间))。2. 选择 Create New Namespace(创建新的命名空间)。3. 在 Name of the namespace(命名空间名称) 字段中,输入 ECPNS。4. 对于 The default database for Globals in this namespace is a(这个命名空间中的 Globals 的默认数据库是一个),选择 Remote Database(远程数据库)。然后选择 Create New Database...(创建新数据库...) 按钮。 这将打开 Create Remote Database(创建远程数据库)窗口。5. 填写所需信息:• Remote Server(远程服务器)——使用下拉菜单来选择您在前面的程序中给数据服务器的 Server Name(服务器名称)。• Remote Directory(远程目录)——在数据服务器上,选择包含 ECP 数据库的目录。• Database Name(数据库名称)——输入一个数据库的名称。这可以与它在数据服务器(本例中是 ECP)上的名称相同,也可以不同。
6. 选择 Finish(完成)。窗口关闭,您会返回到 New Namespace(新的命名空间) 页面。 您应该看到,您刚刚创建的数据库现在显示在 Select an existing database for Globals(为 Globals 选择一个现有的数据库) 字段中。 亲自尝试分布式缓存
7. 由于这个命名空间中的例程(Routines)的默认数据库是 a(The default database for Routines in this namespace is a),选择 Remote Database(远程数据库)。现在您应该能够从下拉菜单中选择您刚刚创建的新数据库。8. 清除 Enable namespace for interoperability productions(为互操作性产品启用命名空间) 复选框。9. 选择 Save(保存)。现在新的命名空间出现在列表中。
有关创建命名空间及其相关数据库的更多细节,请参见 System Administration Guide(《系统管理指南》)中 "Configuring InterSystems IRIS(《配置 InterSystems IRIS》)"一章中的 "Create/Modify a Namespace(创建/修改命名空间)"。有关背景信息,请参见 Orientation Guide for Server-Side Programming(《服务器端编程指导手册》)中的"Namespaces and Databases(命名空间和数据库)"。您已经完成了! 一旦您在每个应用服务器实例上执行了这两个程序,您就成功地创建了一个集群 ,这个集群有一个数据服务器和两个应用服务器。在下一节中,您将测试这些连接,以确保所有三个实例都能正确地相互通信。
4.5 测试设置 现在您已经启用了 ECP 服务器,并设置了两个应用服务器,其命名空间指向数据服务器上的数据库,现在是时候做一个快速测试了,以确保这三个系统相互之间的通信。为了达到这个目的,您将在一个应用服务器上设置一个简单的 global,然后在第二个应用服务器上读取并改变它。要了解有关 globals 的更多信息,请参见 Using Globals(《使用 Globals》)。1. 在一个应用服务器上,使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的程序打开 InterSystems 终端(Terminal),并更改到您在上一节创建的命名空间。在这个示例中,命名空间被称为 ECPNS,因此您将执行以下操作:USER>set $namespace="ECPNS" ECPNS>
2. 创建一个 global,只需给它一个值即可:
ECPNS> set ^MyGlobal = "My Value"
3. 在另一个应用服务器上,登录到终端(Terminal),并按照上面的描述更改到 ECPNS 命名空间。4. 写入 global 的值:
ECPNS> write ^MyGlobal My Value
这表明两个应用服务器正在与数据服务器正常通信。您使用其中一个应用服务器来创建 global,但由于您是在包含远程数据库的命名空间中工作,global 实际上是在数据服务器上创建的。这就是为什么其他应用服务器可以读取它的原因。当然,这只是一个示例,但其机制是相同的,无论您是在终端(Terminal)上手动设置然后读取 global,还是有大量的用户通过十几台应用服务器在同一数据服务器前每秒发行数千个事务。ECP 将确保数据保持同步,并保证所有这些用户与系统交互的事务的一致性。5. 如果您愿意,可以在数据服务器实例上查看 global 作为最后检查。在管理门户(Management Portal)中,进入本地数据库(Local Databases)页面(System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Local Databases(本地数据库))。找到您的应用服务器所指向的数据库,并为该数据库选择 Globals。您应该会看到 MyGlobal 在列表中。 了解有关分布式缓存和 ECP 的更多信息
5 了解有关分布式缓存和 ECP 的更多信息 要了解有关使用 InterSystems IRIS 分布式缓存和 ECP 的更多信息,请参见以下参考资料:• Scalability Guide(《可扩展性指南》)的 "Horizontally Scaling Systems for User Volume with InterSystems Distributed Caching(《使用 InterSystems 分布式缓存为用户容量水平扩展系统》)"章节• Sample Mirroring Architecture and Network Configurations(《镜像架构和网络配置示例》)、Redirecting Application Connections Following Failover or Disaster Recovery(《故障转移或灾难恢复后重定向应用连接》)、Configuring Application Server Connections to a Mirror(《配置应用服务器到镜像的连接》),以及 High Availability Guide(《高可用性指南》)中"Mirroring(《镜像》)"章节中的其他分布式缓存和 ECP 相关章节