搜索​​​​

771 个结果
文章
Qiao Peng · 四月 14, 2022

InterSystems 数据平台与三级等保 - 第三篇

8. 应用安全 InterSystems数据平台上可能运行着多种应用,例如Web网页应用、SOAP服务、REST API、HL7 接口、SQL服务等等。这些应用种类繁多,面临的安全风险也是巨大的,例如代码注入攻击和HTTP的跨站请求伪造攻击等。 这其中代码注入攻击和针对Web应用的攻击尤其需要重视。 8.1 代码注入攻击 代码注入攻击通常和我们编写的程序相关,需要在程序编写时注意避免。 8.1.1 SQL注入攻击 SQL注入攻击是典型的代码注入攻击,通过从外部注入恶意SQL语句获得数据权限并获得敏感数据。关系型访问方式都是通过客户端SQL语句传入执行的,因此它是数据库重点需要防范的。 InterSystems数据平台并不支持以分号分割的多条SQL语句作为一个SQL命令执行,因此它本身免疫了主要的SQL注入攻击手段。 InterSystems数据平台支持动态SQL,即允许SQL命令作为方法的字符串参数传入,这会给SQL注入攻击留有隐患。在编程时,应避免开放服务用于接受完整的SQL语句作为参数,而是通过SQL动态传参来构建运行时SQL。 InterSystems数据平台支持行级安全,这有助于避免在SQL注入攻击时,将所有数据返回给攻击请求。 8.1.2 $ZF InterSystems数据平台提供了系统函数$ZF,用以调用外部命令。其中$ZF(-1)和$ZF(-2)用以调用服务器操作系统的命令。这可能会成为代码攻击的隐患。 在使用$ZF开发服务时,应避免把完整的操作系统命令作为字符串参数传入来执行,而应仅传入必要的数据,由服务器端方法来组成需要执行的操作系统命令,避免注入攻击。 8.2 Web应用安全管理 InterSystems数据平台提供多种Web应用,都是基于HTTP/HTTPS协议的,例如InterSystems数据平台的管理门户网页、用户自定义的网页、开放的SOAP服务、RESTful API。 既然走HTTP/HTTPS,所以首先应该部署专用Web服务器,并配置HTTPS来提供这些Web服务,在传输通道上保障安全。 除了传输通道,要得到更安全的生产环境,还有其它的安全设置需要检查和配置。 8.2.1 CSP/ZEN用户自定义网页应用 每个InterSystems数据平台等命名空间默认都有一个Web应用,可以通过它提供用户自定义网页应用。也可以创建一个新的Web应用提供用户自定义的网页应用。 第一个要检查的项目,是要看看这些默认创建的Web应用是否需要。如果不需要,应该禁用 – 取消选中“Enable Application”。 第二个要检查的项目,是这个Web应用使用的身份认证方式。在生产环境上,不应该使用“未验证”方式,所以应该取消选中该选项。 第三个要设置合适的“必要的资源”,它是对网页应用的资源权限要求。必须具有该资源的使用权限的用户,才能访问该网页应用。 第四个要决定是否开启防CSRF攻击,建议开启“Prevent Login CSRF attack”。 8.2.2管理门户 InterSystems数据平台的管理门户就是CSP/ZEN开发的网页应用,它具有大部分系统管理和监控能力,例如安全配置、高可用配置等。 除了8.2.1提到的对网页应用的安全配置项目之外,InterSystems数据平台预置了一系列系统角色和系统资源,用于让不同用户对管理门户的不同功能页面具有不同的权限。例如操作员角色(%Operator)不具有创建、修改用户的权限。 这些用户权限检查是通过配置给管理页面的系统资源来判断的,只有对这些页面系统资源有权限的用户才能访问该管理页面。 为了提供更细颗粒度的管理,除了配置给管理门户页面上的系统资源,用户可以将自定义资源加到管理门户页面上。这样,用户需要同时具有系统定义的页面资源权限和用户自定义资源权限才能访问和使用管理页面。 如何查看系统预置的管理页面资源和配置自定义资源?在每个管理门户页面菜单项上,都有链接,点击它就可以查看该管理页面分配的系统资源和自定义资源。如果要添加自定义资源,点击“分配”,就可以在弹出的页面中进行配置。 通过配置自定义资源,可以实现任意颗粒度的管理门户权限控制。 如果您在管理互操作产品,想了解系统提供的预定义安全资源,可以参考文档 8.2.3 SOAP服务 除了SQL服务,SOAP服务是InterSystems数据平台经常要开放的服务类型之一。如果您的生产环境上开放了SOAP服务,应该检查它的安全配置。 开启SOAP服务 InterSystems数据平台的SOAP服务也是通过Web应用开放的。默认情况下,Web应用是没有开放“入站Web服务”的,也就是说默认Web应用是不能提供SOAP服务的。如果需要开放SOAP服务,需要选中对应Web应用的“入站Web服务”。 注意:如何仅是查看WSDL,并不需要开启此选项。 开启SOAP服务测试页功能 InterSystems数据平台还提供SOAP服务测试页功能,该功能可以使用Web页面来测试SOAP服务,而不需要通过SOAPUI等工具。 为了安全,默认SOAP服务测试页功能是未开启的。如果需要开启,需要通过系统安全设置项开启: SET ^SYS("Security","CSP","AllowPrefix",<SOAP应用路径>,"%SOAP.")=1 注意: 1. <SOAP应用路径>最后需要加"/",例如 "/csp/user/" 2. 该设置项不影响SOAP服务,仅影响测试页 SOAP认证与权限 在生产环境上,不应该发布无需认证的SOAP服务。因此也需要取消选中“未验证”方式。 同时通过“必要的资源”设置,可以为SOAP服务指定需要的权限。 SOAP安全协议 另外,SOAP本身有很多安全协议,例如WS-Security, WS-Policy, WS-SecureConversation, WS-ReliableMessaging... 它们提供SOAP消息头及消息体加密、数字签名等机制保障SOAP服务安全。 InterSystems数据平台支持这些SOAP安全协议,可以通过这些协议加强SOAP服务的安全。 8.2.4 RESTful API RESTful API越来越多的用于轻量化的服务提供。与SOAP服务类似,InterSystems数据平台的RESTful API也是通过Web应用提供的。 因此上面介绍的Web服务的安全检查项也适用于RESTful API应用。 另外,如果部署了InterSystems API管理器,它本身也提供了安全相关的功能,例如用户认证、权限控制等。因此也要检查InterSystems API管理器的安全设置。 8.3 安全建议 不要拼接SQL语句,而是通过传参数构建运行时的SQL 避免使用动态SQL 启用行级安全 将$ZF调用封装在方法中,避免将操作系统命令通过字符串传入 部署独立的Web服务器,并启用HTTPS 禁用"未验证"的身份验证方式 选择"密码"或"Kerberos" 开启防跨站请求伪造(CSRF) 攻击 增加必要的资源权限要求 对"应用程序角色"配置合适的角色 为SOAP服务建立独立的Web应用,不使用命名空间默认的Web应用发布SOAP服务 不应该发布不需要用户认证的SOAP服务和RESTful API! 使用合适的认证策略,例如密码或用户名令牌 使用合适的SOAP安全协议,例如消息加密、数字签名 在部署了InterSystems API管理器时,通过它进一步约束安全选项 9. 安全审计 InterSystems数据平台提供审计能力,提供防篡改的审计数据库,用于记录审计事件。审计数据可以查看、搜索和导出。 通过管理门户 > 系统 > 安全管理 > 审计 可以开启和配置审计。 InterSystems数据平台预置了一系列系统审计事件,例如用户登录事件、登录失败事件等。并非所有的预置系统审计都默认开启,用户可以在系统审计事件配置页面进行配置,决定审计哪些系统事件。 除了系统预置的审计事件,InterSystems数据平台运行用户自定义审计事件,例如谁修改了特定的类。通过管理门户 > 系统 > 安全管理 > 用户定义的审计事件 可以创建自定义审计。 9.1 安全建议 开启审计 对重要的用户级事件建立自定义审计事件 定期分析审计的用户行为模型,识别发现异常请求 10. 备份与恢复 数据平台的备份与恢复是保障数据安全的另一项机制。定期的备份保障在意外发生时数据可以最大限度的恢复。例如是误删除了数据和代码,InterSystems数据平台的镜像高可用也无法恢复这些误删除的内容,因为误删除也会在备机上重做。这时,备份是唯一可以恢复误删除数据的希望。 所以应该有备份恢复的自动化策略,定期地执行备份,并将备份保存在与生产环境隔离的地点妥善保存。 InterSystems数据平台支持多种备份工具和备份策略。 备份工具: 冷备份 – 卸载数据库,拷贝数据库文件,加载数据库。冷备份需要计划宕机时间 联机热备份 – InterSystems数据平台提供的在线备份,无需计划宕机时间。数据规模很大时,备份时间较长 外部备份(快照备份) – 在线备份,无需计划宕机时间。通常速度很快,但需要外部备份工具 InterSystems数据平台使用内建的联机热备份工具时,支持这些备份策略: 全备份 – 备份全部数据 增量备份 – 备份上次备份之后修改的所有数据 补充备份 - 备份上次全备份之后修改的所有数据 可以使用这些备份方式,组合成一个自动的备份计划,例如:周日执行全备份、周一周二执行增量备份、周三执行补充备份、周四周五周六执行增量备份。 这些备份文件和备份之后的所有日志文件(Journal文件)和数据平台配置文件,以及项目相关的静态文件一起,例如网页文件,才是完整的生产环境备份集。完整的备份集才能保证恢复到指定的时间节点上。 有了备份并不是万无一失,需要验证备份是否可用。应该建立备份集恢复测试的环境,定期对备份集进行恢复测试,以确保备份集是可用的。 10.1 安全建议 建立自动的备份任务 备份应保存在独立的存储和隔离的物理位置 定期检查备份集的可用性 11. 正确安装InterSystems数据平台 在InterSystems数据平台安装时,会提示选择安全级别。因此在安装时,就应该选择正确的安全级别,避免后期大量的安全配置检查和调整。 InterSystems数据平台安装时会提供3个安全级别选择:Minimal、Normal和Locked Down。 Minimal:是针对于本机开发环境安装的安全级别、也是最低的安全级别,通常是被用于开发者在自己的笔记本电脑上安装InterSystems数据平台的开发实例。它几乎没有安全限制,例如允许无认证登录、匿名用户拥有%All的权限。因此绝不应该在生产环境上以此级别安装。如果您已经以Minimal安全级别安装了生产环境,那应该立刻修改安全配置。 Normal:是针对通常用途的安全级别,收紧了安全策略,可以作为大多数生产环境的初始安全配置。建议生产环境安装时,以此级别进行安装,并在安装之后按需调整安全配置。 Locked Down:是针对高安全需求的生产环境的安全级别。它禁用了多数服务、收紧了服务策略,因此安装后就已经提供了一个较为安全的实例。 Minimal Normal Locked Down 安全设置 密码模式 3.32ANP 3.32ANP 8.32ANP 不活动禁用天数* 0 90天 90天 启用_SYSTEM用户 是 是 否 分配给用户UnknownUser的角色 %All 无 无 服务策略 Use 权限为公共权限 是 是 否 需要认证 否 是 是 服务 %Service_Bindings 启用 启用 禁用 %Service_CacheDirect 启用 禁用 禁用 %Service_CallIn 启用 禁用 禁用 %Service_ComPort 禁用 禁用 禁用 %Service_Console* 启用 启用 启用 %Service_ECP 禁用 禁用 禁用 %Service_Monitor 禁用 禁用 禁用 %Service_Telnet* 禁用 禁用 禁用 %Service_Terminal† 启用 启用 启用 %Service_WebGateway 启用 启用 启用 12. InterSystems 数据平台的安全建议工具 InterSystems数据平台提供安全检查和建议工具。通过管理门户 >系统 > 安全管理 > 安全顾问 即可使用该工具。 安全建议工具会提示安全建议,点击“详细信息”链接,会自动跳到对应安全配置页面。在生产环境上线前,建议使用该工具进行检查。 13. InterSystems 数据平台三级等保检查清单 针对三级等保合规,检查清单如下: 1. 配置基于TLS的数据加密通道** 所有对InterSystems 数据平台的连接方式都配置使用加密通道 2. 部署独立的Web服务器 配置Web服务器应用HTTPS,并禁用不安全的 HTTP 方法 3. 服务配置 关闭不必要的服务 对必要开启的服务,选择安全的认证方式 禁用“未验证”方式 进一步限定允许接入的IP地址 4. 加强认证 系统级禁用 “无认证” 选用更安全的认证方式 5. 收紧授权** 数据库应该设置自己独立的资源,而非使用%DB_%DEFAULT 谨慎使用公共权限 创建自己需要保护的新资源** 6. 用户与角色 仅管理员有%All角色 要求用户账号更安全的密码模式 设置密码错误数次后停用账号 7. 数据安全 对敏感数据进行全数据库加密 合理的数据读写权限 必要时,添加行级和列级安全** 8. 应用安全 不要拼接SQL语句,而是通过传参数构建运行时的SQL** 避免使用动态SQL** 启用行级安全** 将$ZF调用封装在方法中,避免将操作系统命令通过字符串传入** 禁用不必要的Web应用 ** 对Web应用,禁用"未验证"的身份验证方式 对Web应用,开启防跨站请求伪造(CSRF) 攻击 对Web应用,对"应用程序角色"配置合适的角色,不应随意赋予%All ** 为SOAP服务建立独立的Web应用,不使用命名空间默认的Web应用发布SOAP服务 ** 不应该发布不需要用户认证的SOAP服务和REST API! 使用合适的SOAP安全策略,例如消息加密、数字签名 9. 审计 开启审计 对重要的用户级事件建立自定义审计事件 ** 定期分析审计的用户行为模型,识别发现异常请求 ** 10. 备份与恢复 建立自动的备份任务 备份应保存在独立的存储和隔离的物理位置 定期检查备份集的可用性 注:**项目不是三级等保的必查项,但建议进行检查和配置。
文章
Qiao Peng · 四月 11, 2022

InterSystems 数据平台与三级等保 - 第一篇

数据平台不仅要安全,还要合规,三级等保是我们要符合的主要安全规范。InterSystems的数据平台和集成平台产品都和三级等保有关。如果没有正确配置它们的安全选项,就会影响到整个系统的安全,影响到合规性。 在生产环境上,如何配置安全的InterSystems的数据平台,并达到三级等保的要求? 这个系列文章,针对InterSystems 数据平台的安全架构,围绕对三级等保的合规性展开,介绍如何配置出一个安全、合规的数据平台。 注:本文提到的InterSystems的数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。 三级等保的要求 三级等保要求 对数据平台的要求 身份鉴别 确保用户身份是真实、准确的 访问控制 控制:谁、以什么方式、从什么设备可以访问什么数据和功能? 入侵防范 防范静态数据、传输中的数据、日志和备份中的数据被入侵 恶意代码防范 防止恶意代码被植入和执行,例如SQL注入 可信验证 数据完整性 保证数据完整性和一致性的能力 数据备份恢复 对数据的备份与恢复能力和策略 InterSystems数据平台安全架构 InterSystems数据平台提供了一个完善的安全架构,用以保护从接入到数据保存的各个层面的数据安全: InterSystems数据平台提供丰富的安全相关特性,用以保障系统安全性和合规性: 我们按数据的流向逐一展开,看看应该如何加强InterSystems数据平台的安全。 1. InterSystems数据平台连接通道安全 客户端可以使用多种技术连接到InterSystems数据平台,包括ODBC/JDBC、Java、.net、TCP、Telnet、HTTP、SOAP、REST等。除了客户端的连接,InterSystems数据平台之间也有很多连接通道,例如高可用镜像成员之间、数据平台和Web网关之间… 这些连接通道都应该考虑使用SSL/TLS进行通讯加密,从而保护数据的安全和一致性。 1.1配置InterSystems数据平台的超级服务器接入通道加密 除了通过HTTP、SOAP、REST之外的客户端,其它的客户端都连接到InterSystems数据平台的超级服务器。InterSystems数据平台在系统范围内使用SSL/TLS协议为超级服务器端口通道加密。 配置步骤如下: 在管理门户中,通过路径 系统 > 安全管理 > SSL/TLS 配置,建立名为%SuperServer的SSL/TLS配置项。参考文档 在管理门户中,通过路径 系统 > 安全管理 > SSL/TLS 配置,在超级服务器SSL/TLS支持 选项上选中“要求”。它的三个选项分别为: 禁用(默认选项)- 拒绝使用TLS的客户端连接 启用 - 允许使用TLS的客户端连接,但不必要 要求 – 仅接受使用TLS的客户端连接 如果Telnet也要通过TLS加密传输,将上面配置的基础上,再建立一个名为%TELNET/SSL的SSL/TLS配置项,然后将上图的Telnet server SSL/TLS support 设置为“要求”。具体配置 1.2 配置客户端使用SSL/TLS连接到InterSystems数据平台的超级服务器 不同的客户端技术配置SSL/TLS的方式不同,具体的配置详见: Java .net ODBC/Studio/Windows Terminal Windows配置 这里以ODBC为例,看看Windows客户端上ODBC设置的步骤: 1. 在Windows客户端上下载IRIS服务器上的CA证书文件,并保存在指定目录。例如:c:\InterSystems\certificates\certificateSQLaaS.pem 2. 在Windows客户端上编辑并保存C:\Program Files (x86)\Common Files\InterSystems\IRIS\SSLDefs.ini,其中[IRISServer]是你起的SSL/TLS配置名,后面的Address和Port是 InterSystems数据平台的服务器地址和超级服务器端口号。[TLSConfig]是SSL/TLS的配置项,注意其中的CAfile是第一步得到的CA证书文件路径。 [IRISServer] Address=172.168.3.10 Port=1972 SSLConfig=TLSConfig [TLSConfig] TLSMinVersion=16 TLSMaxVersion=32 CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2 Ciphersuites=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 KeyType=2 VerifyPeer=1 Password= CAfile=c:\InterSystems\certificates\certificateSQLaaS.pem 3. 配置Windows的ODBC DSN,选中“Password with SSL/TLS", 并在“SSL/TLS Server Name”中填写SSLDefs.ini中特定的配置名,例如:IRISServer 之后ODBC客户端就可以使用这个DSN通过TLS加密传输连接到InterSystems数据平台了。 1.3 安全建议 虽然不是三级等保必须的,建议配置和开启InterSystems数据平台的超级服务器SSL/TLS连接。 2. Web服务器 InterSystems 数据平台在安装时,可以选择安装一个私有的Apache,用于访问管理门户和基于HTTP的开发、测试,例如网页应用、SOAP和RESTful API。 这个私有Apache并不是全功能的,因此不应作为生产环境的Web服务器,尤其是生产环境有基于HTTP的服务、应用或接口时。这时,应该部署独立的Web服务器和InterSystems Web网关,连接到InterSystems的数据平台。并且应该配置HTTPS,而非使用无加密的HTTP。 InterSystems的数据平台支持Apache、IIS和Nginx等Web服务器。 2.1 独立Web服务器的配置 如何配置独立的Web服务器和InterSystems Web网关,如何配置Web服务器的HTTPS?请参考这篇非常棒的社区系列文章: WebGateway系列 2.2 安全建议 生产环境上,部署独立的Web服务器,而非使用InterSystems 数据平台的私有Web服务器。 Web服务器应使用HTTPS,而非HTTP,提供Web服务。 3. 服务与接口 InterSystems数据平台提供一系列服务和接口,用于各种外部系统和技术的接入,例如常见的ODBC/JDBC的SQL客户端、开发者使用的Studio、管理员常用的Telnet。另外,InterSystems数据平台组件和实例之间的连接也是通过服务实现的,例如Web网关和InterSystems数据平台之间的连接、配置为镜像高可用的多台InterSystems数据平台之间的连接。 3.1 InterSystems数据平台的服务 下表列出了InterSystems数据平台的服务和它们服务的对象: 服务名称 描述 %Service_Bindings 控制 SQL 或对象访问方式,包括Studio、XDBC客户端、Java、C++、ActiveX %Service_CacheDirect 控制 Caché 直连访问方式 %Service_CallIn 控制使用CallIn的C/C++应用的访问 %Service_ComPort 控制从Windows系统COM端口的访问 %Service_Console 控制Windows本地服务器上 CTERM (TRM:pid) 和 Windows 控制台访问 %Service_Terminal 控制UNIX, Linux, Mac本地服务器上的控制台访问 %Service_DataCheck 控制实例间数据一致性检查DataCheck时,作为数据源的访问 %Service_DocDB 控制文档数据库的访问 %Service_ECP 控制是否ECP %Service_Login 控制通过 SYSTEM.Security.Login的登录访问 %Service_Mirror 控制镜像成员访问 %Service_Monitor 控制 SNMP 和远程监视命令 %Service_Shadow 控制此系统是否可以是shadow来源 %Service_Sharding 控制是否可以作为分片服务器访问 %Service_Telnet 控制来自于Windows 服务器的本地或远程Telnet 会话访问 %Service_CSP %Service_WebGateway %Service_CSP(Caché/Ensemble)或%Service_WebGateway(IRIS)控制通过Web网关的访问,也就是web应用 %Service_Weblink 控制旧有的WebLink应用访问 3.2 InterSystems数据平台服务的安全选项 这些向外开放的服务和接口有多种机制保护安全: 是否启用 是否是公用服务(意味着所有用户都有权限) 身份认证的方式 接入客户端的IP限制 其它特殊限制 在管理门户>系统>安全管理>服务,可以对每一项服务进行单独的安全配置: 3.3 安全建议 关闭不必要的服务。 对开启的服务,应选择安全的认证方式,不应使用“未验证”方式。 进一步限定允许接入的客户端IP地址。 4. 用户认证 用户认证是保障数据安全的核心之一。 4.1 InterSystems数据平台的用户认证机制 InterSystems数据平台支持多种用户认证机制,包括: Kerberos 基于操作系统的认证 IRIS用户名/密码 LDAP 代理认证 – 用户自定义认证 无认证 – 无需用户认证,进来的用户自动为UnknownUser 二阶段认证 它同时可以开启和使用多种用户认证,允许用户使用不同的认证方式接入数据平台。在启用多种用户认证机制时,InterSystems数据平台会以一定优先顺序来应用用户认证机制: Kerberos > 基于操作系统的认证 > IRIS用户名/密码 >无认证 LDAP > 代理认证 >无认证 4.2 用户认证方式的设置 这些用户认证方式,可以在系统层面开启或禁用,也可以在服务/接口层面进行选择。对于InterSystems数据平台提供的Web应用,例如网页应用、SOAP服务和RESTful API,还可以在Web应用层面进行用户认证方式的配置。 系统层面的配置,在管理门户>系统>安全管理>Authentication/Web Session Options ; 服务层面的配置,见3.2; 应用层面的配置,将在后面的应用安全章节详细介绍。 4.3 安全建议 系统级禁用 “无认证”,和其它不需要使用的认证方式 系统级,采用更安全的认证方式 5. 用户授权 InterSystems数据平台提供一套基于角色的权限控制机制,它可以保障细颗粒度的数据与服务安全。 5.1基于角色的权限控制机制 在这套机制下,被保护的数据与服务被称之为资产。资产可以是任何具体事物,例如数据库、服务、平台应用、管理工具,甚至可以是抽象的事物,例如工作身份、“对患者联系方式的权限”。 权限控制机制是: InterSystems数据平台定义资源,对应一个或多个资产;系统已经定义了一系列系统资源,同时用户可以自定义资源。 对资源的许可,例如读、写、使用,就是权限; 将权限分配给InterSystems数据平台定义的角色和/或用户; 用户就具有了相应的资产权限。 5.2资源的权限配置 通过管理门户>系统>安全管理>资源,管理可以创建新资源、配置已有资源的权限。 以%开头的资源是系统已经创建好的资源,例如: %Admin_* 是工作身份资源 %DB_* 是数据库资源 %Service_* 是服务资源 %Ens_* 是互操作相关的资源 其中,对资源的权限可以被设置为“公有权限”,即所有用户都有相应的权限。 5.3 安全建议 用户自定义的数据库应该设置自己独立的资源,而非使用%DB_%DEFAULT 谨慎使用公共权限 创建自己需要保护的新资源
公告
Michael Lei · 四月 29, 2022

InterSystems 2022年度编程大奖赛投票开始!

年度InterSystems IRIS开发者大赛来了,我们特别兴奋能够邀请大家参加我们今年的年度大奖赛,利用InterSystems IRIS数据平台创建开源解决方案! 🏆 InterSystems2022年度编程大奖赛 🏆 时间: 2021年5月9日 - 6月5日(美东时间) 总奖金超过$22,000美金,比去年提高37%!!! 主题 InterSystems 编程大奖赛是我们的年度编程大赛,旨在寻找使用InterSystems IRIS的最佳应用。 我们欢迎任何主题的申请! 提交任何使用InterSystems IRIS作为后端(API或数据库)的应用程序,以及任何类型的InterSystems IRIS API或数据模型。 我们欢迎您改进您去年在InterSystems竞赛系列中展示的应用程序,并提交给大奖赛。也欢迎您提交一个100%的新应用。 要求: 参赛作品申请:新加入Open Exchange的应用程序或现有的应用程序,但要有明显的改进。我们的团队将审核所有参赛申请后决定是否批准参赛. 该应用应在IRIS社区版或IRIS for Health社区版或IRIS高级分析社区版上运行. 该应用程序应是开源的,并在GitHub上发布 应用程序的README文件应该是英文的,包含安装步骤,并包含视频演示或/和应用程序如何工作的描述。 每位开发者最多可提交三个应用。 奖项设置(2022年总奖金比去年增长37.5%!!!): 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名- $7,000 🥈 第二名- $5,000 🥉 第三名- $3,000 🌟 第四到二十名- $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名- $3,000 🥈 第二名- $2,000 🥉 第三名- $1,000 ✨ 所有获奖者都将授予Global Masters奖章! 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。 重要参赛时间安排 🛠 5月9日-29日(美东时间): 应用程序开发和注册阶段(在此期间,您可以持续编辑自己的项目) ✅ 5月30日(美东时间): 开启投票阶段(在此期间,您可以持续编辑自己的项目) ✅ 6月5日(美东时间): 投票截止 谁能参加? 除了InterSystems员工以外的所有社区成员. 快来加入吧! 开发者可以组队参加,每队2-5人。 不要忘记在您的应用程序的README中标明你的团队成员--开发者社区用户资料。 您可以使用的资源 ✓ 如何使用 InterSystems 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 代码示例: objectscript-docker-template rest-api-contest-template native-api-contest-template integratedml-demo-template PythonGateway-template iris-fhir-template iris-fullstack-template iris-interoperability-template iris-analytics-template 如何把您的APP提交给大赛: 如何在 InterSystems Open Exchange 上发布应用程序 如何把参赛APP提交给大赛 需要帮助吗? 欢迎在本帖下留言或联系您熟悉的InterSystems员工。 万分期待你的精彩项目!祝大家好运 👍 参加本次比赛,即表示您同意这里规定的比赛条款。请在进行比赛前仔细阅读这些条款。
公告
jieliang liu · 四月 18, 2022

[视频] InterSystems Globals与灵活的数据建模

各位开发者们好, InterSystems IRIS 数据平台的最大特点之一是它允许您创建自己的自定义,您可以使用InterSystems IRIS 中支持的所有其他模型,例如对象和关系结构,而无需创建任何自定义结构。 ⏯ InterSystems Globals与灵活的数据建模 Globals 请各位开发者关注我们的Bilibili 频道InterSystems Bilibili 主页!
文章
Michael Lei · 十一月 2, 2022

InterSystems IRIS医疗版的“专精特新”

门为医疗行业打造,深度整合国内外医疗行业标准,专有技术服务医疗行业44年,可能是全球最早从事医疗信息化的公司; 耕细做打磨数十年的稳定、可靠、易用、可扩展的数据平台; 色鲜明,不唯技术、终生负责、以解决客户问题为核心的特色企业文化; 一代混合一体化架构,一个平台同时支持混合事务处理、传统架构、容器化、云原生等多种应用场景;
文章
Nicky Zhu · 八月 10, 2022

InterSystems 数据平台互操作功能运行维护管理基础 - 互操作消息管理

InterSystems 数据平台的互操作功能与久经考验的Ensemble和HealthConnect集成引擎产品一脉相承。事实上,使用IRIS的典型客户不但应用了IRIS提供的多模型数据存储、分布式存储等数据存储特性,也广泛地应用如可视化数据转换,可视化数据流程编辑和可视化规则引擎等一系列互操作能力构建异构系统间或组织机构间的数据流程。 那么,在生产环境上,如何监控与评估数据流程的运行状况,在发生问题时如何快速定位并解决故障,就是用户的运维团队需要考虑的问题。 本系列文章将围绕IRIS互操作功能中核心的互操作消息管理,Production管理与优化及互操作告警与通知三个方面介绍互操作功能的运维基础知识和常用技巧,希望能够帮助客户平稳、高效地运用数据平台。 注:本文提到的InterSystems数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。 互操作消息管理 消息是互操作功能中各组件间通信的基本方法,在互操作Production业务服务、业务流程和业务操作之间广泛使用。 除承担信息传递的基本功能外,由于常常需要在生产环境中查看消息内容或重发消息以解决问题,消息检索就是大家最常用到的功能,而IRIS特有的结构化消息存储也为开发和运维团队使用和管理消息创造了便利。用户能够通过消息的内容,某项具体属性,来源/目标和发生时间等条件检索和过滤消息,迅速找到自己感兴趣的信息。 我们先回顾下消息的结构与关联的上下文。 消息结构 如图所示,消息分为消息头与消息体两部分。其中消息头(标头)主要用于记录消息发生的来源、趣向、时间和消息类型等上下文信息,而消息体(正文)则为消息的具体内容。 而在消息的上下文中,会话是一个比较重要的概念,它用于表达一次交互过程中,从初始的输入所触发的所有消息。在使用时,需要注意: Message Trace将显示一个会话的所有信息 消息查看器默认只列出会话开始的信息(绿色消息) 消息检索 下图即为平台自带的消息查看器,可通过Ensemble > 查看 > 消息导航访问(Ensemble菜单项在IRIS和HealthConnect产品中的名称为Interoperability,位置,含义均相同,下文中将不再赘述)。 可见其中包含若干预制条件及可灵活扩展的查询条件以应对不同场景的需求。 需要注意的是,对检索所需的消息体或头属性建立索引很重要。因为在生产环境中,production中的消息存量可以轻易达到百万、千万甚至亿级,对于海量数据不经过索引进行检索就性能而言不可行。 应用SQL检索消息 如果需要,也可以使用SQL语句进行搜索 系统资源管理器SQL执行查询。 在运行前切换到正确的命名空间。 可以参考消息查看器使用的SQL语句来修改 在Terminal中,在执行搜索的命名空间中运行以下代码。 Set ^Ens.Debug("UtilEnsMessages", "sql")=1 在消息查看器中执行搜索 根据需要从消息查看器复制、修改和执行SQL。 需要SQL知识 用户可直接运用平台提供的SQL示例检索消息,这样的SQL也为用户学习和掌握IRIS持久话消息的结构和辅助函数等概念提供了基础。 用户在熟悉消息结构,并了解SQL的条件下,配合Search Table、索引等特性,可以实现更复杂的基于消息内容的查询。 其中,关于Search Table的应用,用户也可参考我们的另一篇文章《互操作消息统一管理系列:SearchTable加速检索》。此处不再赘述。 异常消息的处理 重发消息 借助消息的持久化,当通信异常导致消息传递失败时,用户也可通过重发消息重新触发业务 挂起消息 如果业务组件运行错误,可能会挂起消息 手动停止消息 队列查看页 > 选择业务组件 > 挂起按钮 组件配置页 > 作业 > 挂起按钮 挂起后消息保持静止,等待手工处理 用户也可有针对性地查看和处理被挂起的消息。 查看挂起消息 Ensemble > 查看 > 已挂起的消息 重发已挂起消息 从已挂起消息页重发将发送被挂起的这条消息 从消息查看器重发将复制并发送一条新的消息 中断消息 IRIS的业务组件有自动重发消息的能力。但但运维团队明确远端故障已发生,短期内重发消息没有意义时,也可下达指令丢弃消息,不再进行后续处理。 业务组件处于重试状态时 组件配置页 > 作业 > 放弃按钮 Ensemble > 监视器 > 队列 > 点击业务组件 > 选择活动的消息 > Abort 或 Abort All 按钮 中断被堆积的消息 Ensemble > 监视器 > 队列 > 点击业务组件 > 选择排队的消息 > Abort 或 Abort All 按钮
文章
Nicky Zhu · 八月 10, 2022

InterSystems 数据平台互操作功能运行维护管理基础 - Production管理与优化

Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件: 业务服务(Business Service) 业务流程(Business Process) 业务操作(Business Operation) 三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标: 优化业务组件运行效率 Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。 私有运行池 业务组件的CPU作业的数量 默认为1即可工作 通过性能测试确定最佳的池大小 拥有私有池的业务组件从私有队列中处理消息 无适配器业务服务的池大小需设置为0 需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理 整个消息流中的所有业务组件的池大小都不应大于1 参与者池 Production级的参与者池设置 用于处理公共队列中的请求的CPU作业的数量 由使用公共队列的所有业务流程共享。 业务流程和业务操作的池大小设置。 0 - 使用参与者池和公共队列 非0--使用私人队列,有指定的CPU作业数 对于FIFO,设置池大小=1 参与者池与业务流程的启停 任何一个池大小为0(仅使用公有池)的业务流程被禁用时,所有的参与者都不会启动 防止任何池大小为0的业务组件从公共队列中处理消息 要保障其他参与者正常工作 将要被禁用的组件的Pool Size改为大于0并应用 如果已经禁用,要启动其他参与者 保持组件禁用,但将其Pool Size为大于0并应用 Production的运行维护 Production本身具备一系列的运行状态管理功能,帮助运维团队在生产环境上处理Production运行的一系列任务,包括 Production运行维护 – 自动启动 Ensemble > 管理 自动启动Production > 选择要自动启动的Production 在Ensemble启动时自动启动Production 如果需要的话,会自动调用RecoverProduction()方法,恢复Production状态 系统级启用开关 系统管理 > 配置 > 其他设置 > 启动 > EnsembleAutoStart 默认情况下为 "真"。 在排除故障时,可能需要禁用。 Production运行维护 – 强制关闭 如果Production关闭得太慢 等待关闭超时 显示强制关闭按钮 Production运行维护 – 更新 运行的组件与它的底层类代码不同步,需要Production来更新 业务组件进程因错误而意外关闭,需要重新启动 设置的改变需要业务组件重新启动 更新按钮出现在Production配置页面。 Production运行维护 – 恢复 在非正常关机和一些错误之后出现 如果需要,自动启动Production将在启动前自动恢复 Production运行维护 – 中断 在配置页面上显示 Production被关闭时如果满足如下条件之一: 有同步消息在等待响应。 或者,队列非空,意味着Production还没处理完消息 或者,消息仍在被组件处理 或者,有级别较高的告警请求 Production中断后的选项 重新启动Production以完成消息的处理 如果启动后消息仍然被组件不断重试(提示故障未排除) 修复导致重试的问题 挂起消息 中断消息 在测试系统中(决不能是生产系统),如果你决定必须完全清除所有队列,请调用Ens.Director类的CleanProduction()方法 do ##class(Ens.Director).CleanProduction() Production的配置 Production本身是基于InterSystems的大量预制组件经开发或直接部署产生的软件包,因此将包含大量不需要在代码中固定写好的配置项,例如远程连接的地址,扫描数据表使用的SQL等。运维团队的工作之一,就是在外部环境发生变化,例如第三方系统部署地址发生变化时,通过调整Production的设置来应对变化,而无需更改已部署的代码。 凭据 用于登录远程系统。 在出站适配器的凭据设置中指定 在Ensemble > 配置 > 凭据中设置 Production配置数据的来源 导出Production 配置页 > Production设置 > 操作选项卡 > 导出 创建与类/部件相关的XML文件 验证是否需要额外的类 可用于 部署到另一个实例中 部署到另一个命名空间 保存Production 部署Production Ensemble à 管理 à 部署变化 à 部署 会创建回滚文件及部署日志 导出与部署的当前限制 除业务组件外,组件配置、规则、DT等组件运行依赖的部件不会自动被识别,需要人工选取并导出 DSN, 凭据等含安全信息的配置不会被导出(实例级配置,非Production级配置),需要手动在部署端配置。产品化研发中需要考虑通过自定义任务定期同步到备机或其他实例。 清除Production数据 当Production在生产中运行较长时间后,往往会累积大量的告警,事件日志和互操作消息等运行数据。用户可选择定期删除一部分不再需要的数据,保证磁盘空间的充裕。 直接执行 Ensemble > 管理 > 清除管理数据 直接执行清除任务受限于浏览器进程超时设置,如在清除过程中触发超时,将导致清除进程失效退出,中断消息清除过程。 对于大量消息累积的场景,请使用后台任务周期性执行确保清除效果。由于删除数据时也将产生大量的journal,删除前应在journal所在存储上保留充裕的空间。 后台任务 系统操作 > 任务管理器 > 新任务 空闲超时设置 组件被标记为不活动,如果 组件在给定的#秒内没有活动 黄色表示不活动的组件 Production监控 配置页面 Production运行监控 IRIS平台为用户提供了一系列工具展现组件的运行状态。运维团队需要频繁地使用这些工具用于定位和诊断故障,识别性能瓶颈等。 Production监视器 一页式监控业务服务、业务操作、队列和错误。 点击单个组件了解详情 提供对队列和事件日志的访问 事件日志 检索、过滤和清除日志 联合使用事件日志和可视化追踪 错误、警报和警告事件日志条目显示在可视化追踪中 点击图标可以查看事件日志详情 业务规则日志 Ensemble > 查看 > 业务规则日志 每次尝试匹配规则时的条目 空原因表示没有匹配的规则 日志内容 I/O 记录 组件配置 除了Production信息外,还对输入和输出数据进行存档 TCP输入输出 文件输入输出 输入和输出数据显示在可视化跟踪窗口中 组件状态指示器 状态指示器提供业务组件健康状况的可视化 绿色 – 正常 黄色 – 不活动(项目空闲时间超过其空闲超时设置) 红色 - 错误。 灰色 - 禁用。 暗绿色或暗灰色 -- Production目前没有运行 紫色 - 遇到失败但在重试的信息 消息队列 要查看队列 Ensemble > 监视器 > 队列 > 在队列中点击消息查看详情 Production配置页 > 选择组件 > 队列Tab 组件在给定的#秒内没有活动 可以查看、挂起和中断整个队列的消息处理 消息队列与性能调优 消息队列的变化常常可以用于评估组件性能及识别性能瓶颈,运维团队可以根据瓶颈所在位置和上下游组件队列的变化情况调整Pool Size获得优化性能。 忽然暴增的队列 如果发生在业务操作 通常由外部系统导致 连接中断 暴增的业务高峰 如果发生在业务流程 业务流程可能出现错误,导致它以某种方式 "卡住” 长期堆积的队列 如果发生在业务操作 可能是在向外部应用程序发送消息时出现持续延迟 看看外部系统的性能问题是否能得到解决。 如果不能,考虑增加池子的大小设置(除非需要FIFO) 如果发生在业务流程 考虑增加池(私有池或参与者池)大小的设置(除非需要FIFO) 可能有算法缺陷,考虑优化 多个队列长期堆积 潜在的原因 主机容量不够(内存/CPU/IO) Ensemble需要更多的资源(内存、CPU) 底层的Caché实例可能需要调整(内存、IO) 永远不要低估低速存储的影响 作业 提供关于CPU作业运行配置项的信息 Job # = 操作系统进程ID 状态 Dequeuing - 等待信息被处理(最常看到的) Running - 工作,重试或无限循环 Quiescent - 生产关闭期间的状态 Error 能够按照日程周期运行的作业非常适合用于执行系统运维任务 周期性清除过期Production数据 按照备份策略周期性执行全量、累积和增量备份 定期清除过期的数据库journal 定期对数据库进行一执行检查 定期对数据库执行压缩截断释放空间(慎用) 定期将无法通过mirror同步的配置推送到备机(例如DSN、凭据等) 活动量监控 活动量和持续时间监视器显示每个接口的统计数据 Ensemble > 监视器 > 活动量和持续时间。 按时间段过滤(分钟、小时、天、周、月、年) 可以根据需要建立自己的仪表盘来显示所需数据 也可通过SQL查询 启用活动量收集 将Ens.Activity.Operation.Local Business Operation添加到Production中 为统计数据指定存储命名空间 为Production启用统计数据收集 do ##class(Ens.Util.Statistics).EnableStatsForProduction() 为命名空间的Web应用程序启用DeepSee 系统管理 > 安全 > 应用程序 > Web应用程序 使用PurgeActivityData任务进行清理。 使用作业控制周期任务
文章
Nicky Zhu · 八月 10, 2022

InterSystems 数据平台互操作功能运行维护管理基础 - 互操作告警与通知

在互操作功能运行过程中,IRIS可以识别异常情况的发生,自动生成告警事件并通过预制的互操作组件将告警转发给干系人;另外,IRIS也内建了告警工作台,可供运维团队基于工作流实现对告警的管理。 告警设置与转发 Production告警设置 在Production级别可以设置对连接异常的告警设置,及告警组件设置 组件告警设置 控制何时触发警报。 队列计数警报。 队列中的信息数量 队列等待警报。 消息在队列中停留的秒数 不活动超时。 业务组件不活动的秒数 在v2012.1之前,不会触发告警 警报宽限期 与外部连接有关的错误可以有宽限期设置 设置重新建立连接的时间,超时且连接不成功才会发出告警 业务服务 警报宽限期 业务操作 再次发出警报宽限期 转发告警 EnsLib.EMail.AlertOperation 内置告警转发组件 通过Email转发 路由到其他接口转发 REST - 短信 REST - 钉钉 用户需要执行的规划 什么样的告警需要即时通知 告警的通知是否应该成为一个应用 包含告警组件的Production 包含告警组件与业务组件的Production形态如下 其中,用于告警的业务组件包括 告警托管 在互操作功能中产生的告警可以选择转发到第三方系统触发告警运维工作流,也可以在IRIS中进行托管,通过IRIS提供的较为简单的工作流定义实现对告警的统一存储及管理。 工作原理 告警管理BP 决定是否产生新的托管告警 可以设置告警的所有者 通知管理BP 决定如何发送告警 决定谁将收到通知 将告警通知发送到指定组件 告警监视BS(可选组件) 可以将过期告警升级 决定是否发出提醒 典型的告警数据流如下 其中,告警数据产生后经过平台自动丰富,最终形成可供运维人员操作的托管告警 托管告警流程 告警处理流程可能的选择: 告警仅写入日志文件,没有自动通知。 一个简单的告警通知系统,所有告警都通过Email发给用户 根据告警类型和生成告警的组件,将选定告警通过路由发送给不同的用户 实现告警管理框架,用于发送告警通知、升级未解决的告警,并记录当前状态和为解决告警而采取的操作的历史记录 告警路由规则 在告警管理器中可以应用规则,通过路由规则来定义告警的流向。 来源 允许根据不同的故障组件采取不同的行动 消息类 Ens.AlertRequest或无 目标 其他消息路由,用于进一步的路由 业务操作作为最终目标 可以通过数据转换根据传递目标定制告警 托管告警管理 通过Ensemble > 监视器 > 我的托管警报可进入告警管理页 该功能基于IRIS自身的用户设置。告警责任人的分配、告警级别管理、后续操作时限等,都可以在该页上进行操作。 也可通过SQL查询和操作已产生的告警 对于需要自定义工作流的用户,也可以考虑在此基础上实现流程。
公告
Michael Lei · 九月 17, 2022

InterSystems Docker 桌面扩展正式发布

好消息, InterSystems 容器镜像仓库Docker桌面扩展已正式发布供大家 下载 . 大家可以在Docker桌面版的marketplace 下载.下载后需要重启 Docker Desktop to 欢迎在github repository中给我们反馈, 点击这里
文章
Lilian Huang · 九月 1, 2022

InterSystems IRIS 中的数据模型

在我们开始谈论数据库和现有的不同数据模型之前,我们最好先谈谈什么是数据库以及如何使用它。 一个数据库是以电子方式存储和访问的有组织的数据集合。 它用于存储和检索通常与主题或活动相关的结构化、半结构化或原始数据。每个数据库的核心至少存在一个用于描述其数据的模型。 并且根据它所基于的模型,一个数据库可能具有略微不同的特征并存储不同数据类型。 要写入、检索、修改、排序、转换或打印数据库中的信息,需要使用称为数据库管理系统 (DBMS) 的软件。 数据库及其各自的数据库管理系统的大小、容量和性能增加了几个数量级。 各个领域的技术进步使之成为可能,例如处理器、计算机内存、计算机存储和计算机网络。 一般来说,数据库技术的发展根据数据模型或结构分为四代:导航型、关系型、对象型和后关系型。 与以特定数据模型为特征的前三代不同,第四代包括许多基于不同模型的不同数据库。 它们包括列、图、文档、组件、多维、键值、内存等。所有这些数据库都由一个单一的名称 NoSQL 联合起来(没有 SQL,或者现在更准确地说不仅仅是 SQL)。 而且,现在出现了一个新的类,叫做NewSQL。 这些是现代关系数据库,旨在为在线事务处理工作负载(读写)提供与 NoSQL 系统相同的可扩展性能,同时使用 SQL 和维护 ACID。 顺便说一下,在这些第四代数据库中,有那些支持上述提及的多种数据模型的数据库。 它们被称为多模型数据库。 这种类型的数据库的一个很好的例子是 InterSystems IRIS。 这就是为什么我将使用它来给出不同类型模型的示例。 第一代数据库使用分层或网络模型。 前者的核心是一个树形结构,即每条记录只有一个所有者。 您可以在 InterSystems IRIS 的示例中看到其工作原理,因为它的主要模型是分层的,并且所有数据都存储在globals(即 B*-trees)中。 您可以在此处here.阅读有关globals的更多信息。 我们可以在 IRIS 中创建这棵树: Set ^a("+7926X", "city") = "Moscow" Set ^a("+7926X", "city", "street") = "Req Square" Set ^a("+7926X", "age") = 25 Set ^a("+7916Y", "city") = "London" Set ^a("+7916Y", "city", "street") = "Baker Street" Set ^a("+7916Y", "age") = 36 在数据库中查看: 在 Edgar F. Codd 于 1969 年提出他的关系代数和他的数据存储理论之后,使用关系原理。之后,关系型数据库产生了。 关系(表)、属性(列)、元组(行)以及最重要的事务和 ACID 要求的使用使这些数据库非常流行,并且现在仍然如此。 例如,我们有架构: 我们可以创建和填充表: 如果我们编写查询: select p.ID, p.Name, a.Country, A.City from My.Person p left join My.Address a on p.Address = a.ID 我们将收到答案: 尽管关系数据库具有显着优势,但随着对象语言的普及,将面向对象的数据存储在数据库中变得很有必要。 这就是为什么 1990 年第一个面向对象(object-oriented )和对象关系数据库产生原因。 后者是在关系数据库的基础上通过添加附加组件来模拟对象工作而创建的。 前者是在 OMG(对象管理组)联盟的建议和 ODMG(对象数据管理组)之后从头开始开发的。 这些面向对象数据库的主要思想如下: 可以使用以下方式访问单个数据仓库: • 对象定义语言——模式定义,允许类定义、它们的属性、关系和方法, • 对象查询语言——声明性的,几乎类似于 SQL 的语言,允许从数据库中获取对象, • 对象操作语言——允许修改和保存数据库中的数据,支持事务和方法调用。 该模型允许使用面向对象的语言从数据库中获取数据。 如果我们采用与前面示例相同的结构但采用面向对象的形式,我们将拥有以下类: Class My.Person Extends %Persistent { Property Name As %Name; Property Address As My.Address; } Class My.Address Extends %Persistent { Property Country; Property City; } 我们可以使用面向对象的语言创建对象: set address = ##class(My.Address).%New() set address.Country = "France" set address.City = "Marseille" do address.%Save() set person = ##class(My.Person).%New() set person.Address = address set person.Name = "Quouinaut, Martin" do person.%Save() 不幸的是,对象数据库并没有成功地从其主导地位与关系数据库竞争,结果出现了许多对象关系映射技术。 无论如何,随着 2000 年代 互联网的普及和对数据存储的新要求的出现,其他数据模型和 数据库管理系统开始出现, 其中,IRIS 中使用了这些模型中的两个,即是文档模型和列模型。 面向文档的数据库用于管理半结构化数据。 这是不遵循固定结构并在其中携带结构的数据。 这种数据库中的每个信息单元都是一个简单的对:一个密钥和一个特定的文档。 该文档通常采用 JSON 格式并包含信息。 由于数据库不需要一定的模式,所以也可以在同一个仓库中集成不同类型的文档。 如果我们再看前面的例子,我们可以有这样的文档: { "Name":"Quouinaut, Martin", "Address":{ "Country":"France", "City":"Paris" } } { "Name":"Merlingue, Luke", "Address":{ "Country":"France", "City":"Nancy" }, "Age":26 } 这两个字段数不同的文档存储在 IRIS 数据库中没有任何问题。 2022.2 版中将提供的模型的最后一个示例是列模型。 在这种情况下,数据库管理系统是按列而不是按行存储数据表。 列方向允许更有效地访问数据以查询列的子集(无需读取不相关的列),并提供更多数据压缩选项。 当列中的数据相似时,按列压缩也更有效。 但是,它们在插入新数据时通常效率较低。 您可以这样创建此表: Create Table My.Address ( city varchar(50), zip varchar(5), country varchar(15) ) WITH STORAGETYPE = COLUMNAR 在这种情况下,类是这样的: Spoiler 然后我们插入数据: insert into My.Address values ('London', '47000', 'UK') insert into My.Address values ('Paris', '54000', 'France') insert into My.Address values ('Kyiv', '03000', 'Ukraine') 在globals里我们看到: 如果我们用city names打开globals,我们将看到 : 如果我们写一个查询: select City from My.Address 我们收到数据: 在这种情况下,数据库管理系统 只需读取一个全局变量即可获得整个结果。 并且在阅读时节省时间和资源。 因此,我们讨论了 InterSystems IRIS 数据库支持的 5 种不同的数据模型。 这些是层次模型、关系模型、对象模型、文档模型和列模型。 希望您在尝试找出可用的模型时会发现这篇文章很有用。 如果您有任何问题,请随时在评论中提出。
公告
Michael Lei · 一月 27

InterSystems IRIS 持久化类审计包

大家好, 我在 OEX 上加载了一个新软件包,我也计划在本月参加比赛。 简而言之,它为您提供以下内容。 用于 InterSystems IRIS 的持久(表)类以保存记录历史的基类 这些类允许在touch时将持久类记录历史化到另一个持久类中。 这提供了任何记录的完整历史记录。 它允许记录回滚到特定版本。 它可以自动清除旧的历史记录。 请检查一下。 谢谢你们。
文章
Michael Lei · 五月 12, 2021

InterSystems 最佳实践系列之数据平台和性能 – 第 9 篇 InterSystems IRIS VMware 最佳实践指南

本贴提供了在 VMware ESXi 5.5 及更高版本的环境中部署 Caché 2015 及更高版本时,关于配置、系统规模调整和容量规划等方面的指南。 我假定您已经了解 VMware vSphere 虚拟化平台,所以直接给出推荐。 本指南中的推荐不特定于任何具体硬件或站点特定的实现,也不应作为规划和配置 vSphere 部署的全面指南,而是一份您可以做出选择的最佳实践配置清单。 我希望您的 VMware 专家实施团队能针对具体站点对这些推荐进行评估。 [这里是 InterSystems 数据平台和性能系列的其他帖子的列表。](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章) _注:_本帖更新于 2017 年 1 月 3 日,强调必须为生产数据库实例设置虚拟机内存预留,以保证 Caché 有足够内存可用,并且不会出现内存交换或膨胀而对数据库性能产生负面影响。 更多详细信息,请参见下面的*内存*部分。 ### 参考 本文中的信息基于经验和对公开的 VMware 知识库文章及 VMware 文档(例如 [VMware vSphere 性能最佳实践](https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/vsphere-esxi-vcenter-server-67-performance-best-practices.pdf))的研究以及对 Caché 数据库部署要求的反映。 ## ESXi 支持 InterSystems 的产品吗? 针对处理器类型和操作系统(包括虚拟化操作系统)验证和发布 InterSystems 产品是 InterSystems 的策略和程序。 有关详情,请参见 [InterSystems 支持策略](http://www.intersystems.com/services-support/product-support/virtualization/)和[版本信息](http://www.intersystems.com/services-support/product-support/latest-platform/)。 > 例如,在 x86 主机上的 ESXi 中,支持在 Red Hat 7.2 操作系统上运行 Caché 2016.1。 注:如果您不编写自己的应用程序,还必须检查应用程序供应商支持策略。 ### 支持的硬件 在配合使用当前服务器和存储组件的情况下,VMware 虚拟化很适合 Caché。 使用 VMware 虚拟化的 Caché 已在客户站点成功部署,并且性能和可伸缩性已在基准测试中得到验证。 在配置正确的存储、网络和搭载较新型号的英特尔至强处理器(具体为英特尔至强 5500、5600、7500、E7 系列和 E5 系列,包括最新的 E5 v4)的服务器上使用 VMware 虚拟化不会对性能产生明显影响。 通常,Caché 和应用程序在客户机操作系统上的安装和配置方式与裸机操作系统上的安装和配置方式相同。 客户有责任查看 [VMware 兼容性指南](http://www.vmware.com/resources/compatibility/search.php),以了解所使用的特定服务器和存储。 # 虚拟化架构 VMware 常用于 Caché 应用程序的两种标准配置: - 主生产数据库操作系统实例在“裸机”集群上,而 VMware 只用于其他生产和非生产实例,如 Web 服务器、打印、测试、训练等。 - 所有操作系统实例(包括主生产实例)均已虚拟化。 本帖可用作任一方案的指南,不过重点是第二个方案,即包括生产实例在内的所有操作系统实例均已虚拟化。 下图显示了该配置的典型物理服务器设置。 _图 1. 简单的虚拟化 Caché 架构_ 图 1 显示了一个常见的包含至少三台物理主机服务器的部署,可通过 VMware HA 集群中的主机服务器提供 N+1 容量和可用性。 要扩展资源,可能要向集群添加额外的物理服务器。 备份/还原媒体管理和灾难恢复也可能需要额外的物理服务器。 有关特定于 _VMware vSAN_、VMware 的超融合基础架构解决方案的推荐,请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity)。 本贴中的大部分推荐可以应用于 vSAN,除了下面的“存储”部分有一些明显差异。 # VMWare 版本 下表给出了针对 Caché 2015 及更高版本的主要推荐: vSphere 是包括 vCenter Server 在内的产品套件,允许通过 vSphere 客户端对主机和虚拟机进行集中系统管理。 > 本帖假定将使用 vSphere,而不是“免费的”ESXi Hypervisor 单独版本。 VMware 有多种授权模式;最终选择取决于哪个模式最适合您当前和将来的基础架构规划。 我通常推荐“企业版”,因为它增加了功能,例如让硬件得到更有效利用的动态资源调度 (DRS),以及用于存储阵列整合(快照备份)的存储 API。 VMware 网站给出了版本比较。 还有高级套件,允许捆绑 vSphere 的 vCenter Server 和 CPU 许可证。 套件有升级限制,因此通常只推荐给不期望增长的小型站点。 # ESXi 主机 BIOS 设置 ESXi 主机是物理服务器。 在配置 BIOS 前,您应该: - 向硬件供应商核实服务器是否正在运行最新的 BIOS - 检查是否有服务器/CPU 型号特定的 BIOS 设置专门用于 VMware。 服务器 BIOS 的默认设置对于 VMware 可能不是最佳设置。 以下设置可以用来优化物理主机服务器以获得最佳性能。 并非下表中的所有设置在所有供应商的服务器上都可用。 # 内存 内存分配应考虑以下关键规则: 在单台物理主机上运行多个 Caché 实例或其他应用程序时,VMware 有多种技术可以实现高效的内存管理,如透明页共享 (TPS)、膨胀、交换和内存压缩。 例如,当多个操作系统实例在同一主机上运行时,TPS 可去除内存页的冗余副本,从而允许内存过载而不会降低性能,这使得虚拟机运行所占用的内存少于物理机所需内存。 > 注:必须在操作系统中安装 VMware Tools,才能利用 VMware 的这些功能和许多其他功能。 虽然这些功能的存在是为了允许内存过载,但建议务必先调整所有虚拟机的 vRAM 大小,以适应可用的物理内存。 在生产环境中,尤其重要的是要仔细考虑内存过载的影响,只有在收集数据以确定可能的过载量后,才能进行内存过载。 要确定给定 Caché 实例的内存共享有效性和可接受的过载程度,请运行工作负载并使用 Vmware 命令 `resxtop` 或 `esxtop` 来观察实际的内存节省情况。 在规划 Caché 实例内存要求时,建议回顾一下[本系列中关于内存的第四个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-part-4-looking-memory)。 尤其是“VMware 虚拟化注意事项”部分,其中的重点是: > 在生产系统上设置 VMware 内存预留。 您想要*必须*避免任何共享内存交换,所以将生产数据库虚拟机内存预留设置为至少是 Caché 共享内存的大小加上 Caché 进程和操作系统及内核服务的内存。 如果有疑虑,则**预留整个生产数据库虚拟机内存(100% 预留)**,以保证 Caché 实例有足够内存可用,这样就不会出现内存交换或膨胀而对数据库性能产生负面影响。 注:较大的内存预留将影响 vMotion 运行,因此在设计 vMotion/管理网络时必须考虑到这一点。 只有目标主机的可用物理内存大于或等于预留内存的大小时,才能使用 Vmware HA 实时迁移虚拟机或在另一台主机上启动虚拟机。 这对于 Caché 生产虚拟机特别重要。 例如,要特别注意 HA 准入控制策略。 > 确保容量规划允许在 HA 发生故障转移时分配虚拟机。 对于非生产环境(测试、训练等),可以应用更积极的内存过载,但不要让 Caché 共享内存过载,而是通过减少全局缓冲区来限制 Caché 实例的共享内存。 当前的英特尔处理器架构具有 NUMA 拓扑。 处理器有自己的本地内存,并且可以访问同一主机中其他处理器上的内存。 毫无疑问,访问本地内存的延迟要低于远程内存。 有关 CPU 的讨论,请查看[本系列的第三个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-3-focus-cpu),_评论部分_中包括了关于 NUMA 的讨论。 如上面的 BIOS 部分所述,实现最佳性能的策略是,在理想情况下,将虚拟机规模调整为只达到单个处理器支持的最大核心数和内存量。 例如,如果容量规划显示最大的生产 Caché 数据库虚拟机将具有 14 个 vCPU 和 112 GB 内存,则考虑具有 2 个 E5-2680 v4(14 核处理器)和 256 GB 内存的服务器集群是否合适。 > **理想情况下**,调整虚拟机规模以使内存在 NUMA 节点本地。 但不要太过执着于此。 如果需要一个比 NUMA 节点大的“怪兽虚拟机”,那也没问题,VMware 将管理 NUMA 以获得最佳性能。 合理调整虚拟机的规模并且分配的资源不超过所需资源也很重要(参见下文)。 ## CPU 虚拟 CPU 分配应考虑以下关键规则: Caché 生产系统的规模应根据实际客户站点的基准测试和测量结果来确定。 对于生产系统,使用一开始就将系统规模调整为与裸机 CPU 核心数相同的策略,并根据最佳实践进行监测,看是否可以减少虚拟 CPU (vCPU)。 ### 超线程和容量规划 根据物理服务器的规则调整__生产数据库__虚拟机规模的一个良好起点是,针对启用了超线程功能的目标处理器计算物理服务器 CPU 要求,然后简单地进行转换: > 一个物理 CPU(包括超线程)= 一个 vCPU(包括超线程)。 一个常见的误解是,超线程以某种方式使 vCPU 容量增加了一倍。 这对于物理服务器或逻辑 vCPU 来说并不正确。 裸机服务器上的超线程可能会比没有超线程的相同服务器提升 30% 的性能,但这也会根据应用情况的不同而有所不同。 对于初始规模调整,假定 vCPU 具有完整的内核专用资源。 例如,如果您有一台 32 核(2 个 16 核)E5-2683 V4 服务器 – 总共多达 32 个 vCPU 的容量规模,且可能还有余量。 此配置假定在主机级别启用了超线程。 VMware 将管理主机上所有应用程序和虚拟机之间的调度。 在您花时间监测应用程序、操作系统和 VMware 在峰值处理期间的性能后,您可以决定是否进行更高度的整合。 ### 授权 在 vSphere 中,可以为虚拟机配置一定数量的插槽或核心。 例如,如果有一个双处理器虚拟机(2 个 vCPU),则可以将其配置为两个 CPU 插槽,或一个具有两个 CPU 核心的插槽。 从执行的角度看,并没有多大区别,因为虚拟机监控程序将最终决定虚拟机是在一个还是两个物理插槽上执行。 但是,指定双 CPU 虚拟机实际有两个核心而不是两个插槽,会对软件许可证产生影响。 注:Caché 许可证以核心数为准(而非线程数)。 # 存储 > 本部分适用于更为传统的使用共享存储阵列的存储模型。 有关 _vSAN_ 的建议,另请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity) 对于存储,应考虑以下关键规则: ## 针对性能调整存储大小 存储瓶颈是影响 Caché 系统性能的最常见问题之一,对于 VMware vSphere 配置也是如此。 最常见的问题是简单地按 GB 容量来调整存储大小,而不是分配足够多的磁盘主轴来支持预期的 IOPS。 在 VMware 中,存储问题可能更加严重,因为可能有更多主机通过相同的物理连接访问同一存储。 ## VMware 存储概述 VMware 存储虚拟化可以分为三层,例如: - 存储阵列是底层,由物理磁盘组成,以逻辑磁盘(存储阵列卷或 LUN)的形式呈现给上面的层。 - 下一层是 vSphere 占用的虚拟环境。 存储阵列 LUN 以数据存储的形式呈现给 ESXi 主机,并格式化为 VMFS 卷。 - 虚拟机由数据存储中的文件组成,所包含的虚拟磁盘以磁盘的形式呈现给客户机操作系统,可以对这些磁盘进行分区并在文件系统中使用。 VMware 为管理虚拟机中的磁盘访问提供了两种选择 — VMware 虚拟机文件系统 (VMFS) 和原始设备映射 (RDM),两者的性能相似。 为了简化管理,VMware 通常推荐 VMFS,但在某些情况下可能需要 RDM。 作为一般建议 – 除非有特别的理由使用 RDM,否则请选择 VMFS,_VMware 的新开发针对 VMFS 而非 RDM_。 ### 虚拟机文件系统 (VMFS) VMFS 是 VMware 开发的一种文件系统,专门针对集群虚拟环境(允许从多个主机进行读/写访问)和大型文件存储进行优化。 VMFS 的结构使虚拟机文件可以存储在一个文件夹中,从而简化了虚拟机管理。 VMFS 还支持 vMotion、DRS 和 VMware HA 等 VMware 基础架构服务。 操作系统、应用程序和数据存储在虚拟磁盘文件(.vmdk 文件)中。 vmdk 文件存储在数据存储中。 一个虚拟机可以由分布在几个数据存储上的多个 vmdk 文件组成。 如下图中的生产虚拟机所示,一个虚拟机可以包括分布在多个数据存储上的存储。 对于生产系统,每个 LUN 使用一个 vmdk 文件可实现最佳性能,对于非生产系统(测试、训练等),多个虚拟机 vmdk 文件可以共享一个数据存储和一个 LUN。 虽然 vSphere 5.5 支持的最大 VMFS 卷大小为 64TB,VMDK 大小为 62TB,但在部署 Caché 时,通常使用映射到不同磁盘组上的 LUN 的多个 VMFS 卷来分离 IO 模式并提高性能。 例如,随机或顺序 IO 磁盘组,或者将生产 IO 与其他环境的 IO 分开。 下图显示了与 Caché 一起使用的 VMware VMFS 存储示例的概览: _图 2. VMFS 上的 Caché 存储示例_ ### RDM RDM 允许将原始 SCSI 磁盘或 LUN 作为 VMFS 文件来进行管理和访问。 RDM 是 VMFS 卷上的特殊文件,用作原始设备的代理。 对于大多数虚拟磁盘存储,推荐使用 VMFS,但在某些情况下可能需要使用原始磁盘。 RDM 仅适用于光纤通道或 iSCSI 存储。 ### 用于阵列集成的 VMware vStorage API (VAAI) 为获得最佳存储性能,客户应考虑使用支持 VAAI 的存储硬件。 VAAI 可以在几个方面(包括虚拟机置备和精简置备的虚拟磁盘)提高性能。 对于较旧的阵列,可以向阵列供应商索取固件更新来支持 VAAI。 ### 虚拟磁盘类型 ESXi 支持多种虚拟磁盘类型: **厚置备** – 在创建时分配空间。 进一步分为: - 快速置零 – 将 0 写入整个驱动器。 这会增加创建磁盘所需的时间,但可获得最佳性能,即使是第一次写入每个块。 - 延迟置零 – 首次写入每个块时写入 0。 延迟置零缩短了创建时间,但第一次写入块时会使性能降低。 不过,后续写入的性能与快速置零的厚磁盘相同。 **精简置备** – 在写入时分配空间并置零。 对未写入的文件块进行第一次写入时,会有较高的 I/O 成本(类似于延迟置零的厚磁盘),但在随后写入精简置备的磁盘时,性能与快速置零的厚磁盘相同。 _在所有磁盘类型中,VAAI 都可以通过将操作卸载到存储阵列来提高性能。_某些阵列还在阵列级别支持精简置备,请勿在精简置备的阵列存储上精简置备 ESXi 磁盘,因为置备和管理可能存在冲突。 ### 其他备注 如上文所述,为了符合最佳实践,请使用与裸机配置相同的策略;生产存储可以在阵列级别分成多个磁盘组: - 随机访问 Caché 生产数据库 - 顺序访问备份和日志,但也可以放置其他非生产存储,如测试、训练等 请记住,数据存储是存储层的抽象表示,因此,它是存储的逻辑表示而不是物理表示。 创建专门的数据存储以隔离特定的 I/O工作负载(无论是日志还是数据库文件),并且不隔离物理存储层,并不会对性能产生预期的影响。 虽然性能是关键,但共享存储的选择更多取决于站点现有或计划的基础架构,其次才是 VMware 的影响。 与裸机实现一样,FC SAN 的性能最好,推荐使用。 对于 FC,建议至少使用 8Gbps 的适配器。 只有在适当的网络基础架构到位的情况下,才能支持 iSCSI 存储,这包括:服务器和存储之间的网络中的所有组件上都必须支持至少 10Gb 的以太网和巨型帧 (MTU 9000),并且与其他流量分开。 对于数据库虚拟机或具有高 I/O 负载的虚拟机,使用多个 VMware 准虚拟 SCSI (PVSCSI) 控制器。 PVSCSI 可以提高整体存储吞吐量,同时降低 CPU 利用率,从而带来显著效益。 通过使用多个 PVSCSI 控制器,可以在客户机操作系统内执行多个并行 I/O 操作。 此外,建议通过单独的虚拟 SCSI 控制器将日志 I/O 流量与数据库 I/O 流量分开。 作为最佳实践,您可以将一个控制器用于操作系统和交换,另一个控制器用于日志,另外一个或多个控制器用于数据库数据文件(取决于数据库数据文件的数量和大小)。 众所周知,对齐文件系统分区是针对数据库工作负载的存储最佳实践。 物理机和 VMware VMFS 分区上均对齐分区可以防止因 I/O 跨越磁道边界而导致的 I/O 性能下降。 VMware 测试结果显示,将 VMFS 分区与 64KB 磁道边界对齐,可降低延迟并提高吞吐量。 按照存储和操作系统供应商的建议,使用 vCenter 创建的 VMFS 分区应与 64KB 边界对齐。 # 网络 对于网络,应考虑以下关键规则: 如上文所述,VMXNET 适配器比默认的 E1000 适配器具有更好的性能。 VMXNET3 允许 10Gb,并且使用更少的 CPU,而 E1000 只支持 1Gb。 如果各主机之间只有 1 Gb 的网络连接,那么客户端与虚拟机的通信不会有太大变化。 但是,VMXNET3 将允许同一主机上的虚拟机之间建立 10Gb 网络连接,这确实会带来改变,特别是在多层部署或者实例之间有高网络 IO 要求的情况下。 在计划关联性和反关联性 DRS 规则以将虚拟机保持在相同或不同的虚拟交换机上时,也应考虑此功能。 E1000 使用可用于 Windows 或 Linux 的通用驱动程序。 在客户机操作系统上安装 VMware Tools 之后,即可安装 VMXNET 虚拟适配器。 下图显示了一个典型的具有四个物理网卡端口的小型服务器配置,在 VMware 中配置了两个端口用于基础架构流量:用于管理和 vMotion 的 dvSwitch0,两个端口用于 VM 使用的应用程序。 使用网卡绑定和负载平衡来实现最佳吞吐量和 HA。 _图 3. 典型的具有四个物理网卡端口的小型服务器配置。_ # 客户机操作系统 推荐如下: > 将 VMware Tools 加载到所有虚拟机操作系统中并保持该工具为最新是非常重要的。 VMware Tools 是一套实用工具,可增强虚拟机的客户机操作系统的性能,并改进对虚拟机的管理。 如果客户机操作系统中未安装 VMware Tools,则客户机性能会缺乏重要功能。 在所有 ESXi 主机上正确设置时间至关重要 - 这最终会影响客户机虚拟机。 虚拟机的默认设置是不将客户机的时间与主机同步 - 但在某些时候,客户机还是会与主机同步时间,并且如果超时,则已知会导致重大问题。 VMware 建议使用 NTP 而不是 VMware Tools 定期进行时间同步。 NTP 是行业标准,可确保客户机的计时准确。 可能需要开放防火墙 (UDP 123) 才能允许 NTP 流量。 # DNS 配置 如果 DNS 服务器托管在虚拟化基础架构上并且不可用,它会阻止 vCenter 解析主机名,使虚拟环境无法管理 - 然而虚拟机本身保持运行,没有问题。 # 高可用性 高可用性由 VMware vMotion、VMware Distributed Resource Scheduler (DRS) 和 VMware High Availability (HA) 等功能提供。 Caché 数据库镜像也可以用于增加正常运行时间。 为 Caché 生产系统设计 n+1 个物理主机是非常重要的。 在单个主机发生故障时,必须有足够的资源(例如 CPU 和内存)让其余主机上的所有虚拟机都能运行。 在服务器发生故障时,如果 VMware 无法在其余服务器上分配足够的 CPU 和内存资源,VMware HA 将不会在其余服务器上重新启动虚拟机。 ## vMotion vMotion 可以与 Caché 一起使用。 vMotion 允许以完全透明的方式将一个正常运行的虚拟机从一台 ESXi 主机服务器迁移到另一台。 虚拟机中运行的操作系统和 Caché 等应用程序没有服务中断。 使用 vMotion 进行迁移时,只有虚拟机的状态和内存(及其配置)会移动。 虚拟磁盘不需要移动;它保留在相同的共享存储位置。 虚拟机迁移后,它将在新的物理主机上运行。 vMotion 只能在共享存储架构(如共享 SAS 阵列、FC SAN 或 iSCSI)下工作。 由于 Caché 通常配置为使用大量共享内存,因此为 vMotion 提供充足的网络容量是非常重要的,1Gb 网络可能还可以,但也可能需要更高带宽,或者可以配置多网卡 vMotion。 ## DRS 分布式资源调度器 (DRS) 是一种通过在集群中的不同主机服务器之间共享工作负载来在生产环境中自动使用 vMotion 的方法。 DRS 还具有对虚拟机实例实施 QoS 的能力,通过阻止非生产虚拟机过度使用资源来保护生产虚拟机的资源。 DRS 会收集有关集群主机服务器使用情况的信息,并通过在集群的不同服务器之间分配虚拟机工作负载来优化资源。 这种迁移可以自动或手动进行。 ## Caché 数据库镜像 对于要求最高可用性的任务关键型一级 Caché 数据库应用实例,还应考虑使用 [InterSystems 同步数据库镜像](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror#GHA_mirror_set_bp_vm)。同时使用镜像的其他优势包括: - 最新数据的单独副本。 - 故障转移在数秒内完成(比先重启虚拟机再重启操作系统再恢复 Caché 要快)。 - 在应用程序/Caché 发生故障(VMware 未检测到)时进行故障转移。 # vCenter Appliance vCenter Server Appliance 是基于 Linux 的预配置虚拟机,针对 vCenter Server 和相关服务的运行进行了优化。 我一直建议拥有小型集群的站点使用 VMware vCenter Server Appliance 作为在 Windows 虚拟机上安装 vCenter Server 的替代方案。 在 vSphere 6.5 中,建议将该设备用于所有部署。 # 总结 本帖是在 VMware 上部署 Caché 时应考虑的关键最佳实践的综述。 这些最佳实践大多不是 Caché 独有的,而是可以应用于 VMware 上的其他一级业务关键型部署。 如果您有任何问题,请通过下面的评论告诉我。
公告
Claire Zheng · 八月 19, 2021

InterSystems开发者竞赛:InterSystems IRIS Analytics

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 🏆 InterSystems开发者竞赛:InterSystems IRIS Analytics 🏆 竞赛时间:2021年8月23日-9月12日 奖金总额: $8,750 登录页面即可参赛: https://contest.intersystems.com 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 8月23日 - 9月5日: 应用开发、提交阶段 ✅ 9月 6日 - 12日: 投票阶段 注意:在整个参赛期间(开发与投票期间,即8月23日-9月12日),开发者可持续编辑、提升其应用 主题 💡 应用InterSystems IRIS开发分析解决方案(Analytics Solution) 💡 使用一个或多个InterSystems IRIS分析功能,如: Adaptive Analytics 自适应分析(AtScale) InterSystems Reports (Logi) InterSystems BI (DeepSee) InterSystems NLP (iKnow) 创造一个简单的、引人注目的、清晰的可视化产品和/或故事。 以下是参赛须知: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用应该在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上工作。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 资源助力 1. 示例应用程序和说明: 1.1. Adaptive Analytics(自适应分析): Adaptive Analytics in Action (视频) 1.2 InterSystems报告: A look at InterSystems Reports (视频) InterSystems Reports Resource guide Running InterSystems Reports in containers IRIS reports server demo (OEX) 1.3 IRIS BI 案例: IRIS Analytics Template Samples BI Covid19 analytics Analyze This Game of Throne Analytics Pivot Subscriptions Error Globals Analytics Creating InterSystems IRIS BI Solutions Using Docker & VSCode (视频) The Freedom of Visualization Choice: InterSystems BI (视频) InterSystems BI(DeepSee) Overview (线上课程) InterSystems BI(DeepSee) Analyzer Basics (线上课程) 1.4 InterSystems NLP (iKnow): iKnow Source Code Samples Aviation Set Analysis iKnow First Look (线上课程) 2. Sample数据: Hole Foods database for IRIS BI (与SamplesBI包一起安装) Adventure Works, zip Synthea 3. 将数据导入IRIS的工具: CSVGEN and CSVGENUI S3 External Table 4. IRIS初学者 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 5. 如何将您的APP提交给大赛 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 参赛评比 投票规则即将发布,敬请期待! So! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖 ❗️ 点击此处,查看 官方竞赛条款解读❗️
公告
Nicky Zhu · 一月 8, 2021

InterSystems 系统警报和监视 (SAM) 预览版本已发布

现在,InterSystems **系统警报和监视**(简称 InterSystems _SAM_)第 1 版 (v1.0) 发布了预览版本。    InterSystems SAM v1.0 为基于 InterSystems IRIS 的产品提供现代化的监视解决方案。 其可对集群进行高级别查看,并且能够以单节点方式可视化深入探视指标,同时提供警报通知。 该第 1 个版本提供对一百多个 InterSystems IRIS 内核指标的可视化,并且用户可以根据自己的喜好扩展默认提供的 Grafana 模板。 V1.0 旨在成为简单直观的基准。 请进行尝试并向我们发送反馈,帮助我们使其变得更棒! 从版本 2019.4 开始,SAM 可以显示来自基于 InterSystems 的实例中的信息 SAM 仅以容器格式提供。 您将需要 SAM 管理器容器,以及一小组额外的开源_组件_(Prometheus 和 Grafana),它们由组合文件自动添加。 可从以下位置获取 SAM 组件和 SAM 管理器社区版 * [WRC 预览页面](https://wrc.intersystems.com/wrc/coDistPreview.csp):分别为“SAM 组件”和“SAM 管理器” * 如果您要在 docker-compose 运行之前下载,可通过外部源[SAM 组件 Github repo](https://github.com/intersystems-community/sam) & [Docker Hub 上的 SAM 管理器](https://hub.docker.com/_/intersystems-system-alerting-and-monitoring)(后一个链接可能在几个小时内不可用,但容器是可获取的)   如果您正在旅行,或偏爱通过语音收听有关什么是 SAM 方面的提问与回答,我们为您准备了以下播客: 可在[此处](https://docs.intersystems.com/sam/csp/docbook/Doc.View.cls?KEY=ASAM)找到 SAM 文档  
文章
Nicky Zhu · 一月 8, 2021

InterSystems 最佳实践之 Ensemble 孤立消息

在本文中,我们将讨论孤立消息。 ## 什么是孤立消息 每个消息正文都与一个保存元数据的消息标头相关联。 标头保存源配置名称、目标配置名称、创建时间、处理时间、关联的消息正文引用、会话信息、消息正文类名、消息状态等信息。 当有消息正文记录没有相应的标头记录时,这些消息正文称为孤立消息正文。 我们将讨论可能导致孤立消息正文产生的原因。 ### 仅清除标头 在清除任务设置中,**BodiesToo** 设置用于指定是否将消息正文与消息标头一起清除。 如果**关闭**此设置,清除任务将只删除消息标头,而保留消息正文。 这些消息正文将成为孤立记录,因为所引用的标头已被删除。 如果清除消息标头但保留消息正文,则管理门户将无法清除孤立消息正文。 在这种情况下,必须以编程方式清除消息正文。 ![](/sites/default/files/inline/images/purgetask_1.jpg)   请参阅有关清除任务的文档 [http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG\_purge#EGMG\_purge_basic](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG_purge#EGMG_purge_basic) ### 复杂的消息正文类(对象值属性) 当 Ensemble 清除某条消息正文时,不一定删除该消息正文的对象值属性。 具体来说,只有当其他对象是序列对象或子对象(由关系定义)时,才会删除这些对象。 对于其他对象,必须通过在消息正文类中定义删除触发器或实现 **%OnDelete()** 方法来适当地处理删除。 OnDelete 实现的示例代码 Class Sample.Address Extends %Persistent{ /// The street address. Property Street As %String(MAXLEN = 80); /// The city name. Property City As %String(MAXLEN = 80); /// The 2-letter state abbreviation. Property State As %String(MAXLEN = 2); /// The 5-digit U.S. Zone Improvement Plan (ZIP) code. Property Zip As %String(MAXLEN = 5); } Class Sample.Person Extends %Persistent{ /// Person's name. Property Name As %String [ Required ]; /// Person's Social Security number. This is validated using pattern match. Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ]; /// Person's Date of Birth. Property DOB As %Date; /// Person's home address. Property Home As Address; /// Person's office address. Property Office As Address; ///Callback for object deletion ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status [ Private ]{ // Delete the property object references. Set tSC = $$$OK, tThis = ##class(Sample.Person).%Open(oid) If $ISOBJECT(tThis.Home) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Home.%Id()) If $ISOBJECT(tThis.Office) Set tSC = ##class(Sample.Address).%DeleteId(tThis.Office.%Id()) Quit tSC } ///Callback/Trigger for SQL delete Trigger OnDelete [ Event = DELETE ]{ // Delete the property object references. {%%ID} holds the id of the record being deleted. Set tID={%%ID} Set tThis = ##class(Sample.Person).%OpenId(tID) If $ISOBJECT(tThis.Home) Do ##class(Sample.Address).%DeleteId(tThis.Home.%Id()) If $ISOBJECT(tThis.Office) Do ##class(Sample.Address).%DeleteId(tThis.Office.%Id()) Quit } } ### 已创建但从未发送到其他主机的消息对象 当一条消息被发送/转发到其他主机时,Ensemble 会创建一个新的消息标头,并关联相应的消息正文。 如果在业务服务/流程中创建的消息正文/对象实例已保存到磁盘/数据库,但从未在生产过程中发送到其他主机,它将没有关联的标头,并保留为孤立消息正文。 最佳实践是不创建消息正文,除非它将被转发,或者不对该对象实例调用 %Save()(在将消息放入目标配置队列之前,SendRequestSync/SendRequestAsync API 将保存该对象实例)。 这样,除非将消息正文对象发送到其他主机,否则它将不会持久化。 此问题的最常见原因是开发人员: 克隆了消息正文,且从未转发克隆的消息正文 在上下文变量 (BPL) 中创建了消息正文对象,且从未转发。 ## 孤立消息的影响 孤立消息不会被清除任务清除。 这些消息将占用磁盘空间,并且随着它们数量的增长,磁盘使用量也会成比例增加。 不仅消息正文数据使用磁盘空间,每条孤立消息正文记录的任何索引/搜索表条目也都占用磁盘空间。 ## 识别孤立消息 可以通过查询消息标头和正文来确定孤立消息是否存在。 每个消息标头都引用相应的消息正文。 消息正文对象 Id 引用存储在标头的 MessageBodyId 属性中,消息正文类名存储在标头的 MessageBodyClassName 属性中。 在 HL7 消息表中查找孤立消息的示例查询: SELECT HL7.Id  FROM EnsLib_HL7.Message HL7    LEFT JOIN Ens.MessageHeader hdr    ON HL7.Id=hdr.MessageBodyId    WHERE hdr.MessageBodyId IS NULL 上面的查询将返回所有没有相应标头的 HL7 消息。 可以将该查询修改为查询任何其他消息类型,只需替换消息正文表名即可。 ## 清除孤立消息 管理门户无法提供清除孤立消息正文的方法。 在这种情况下,必须以编程方式清除消息正文。 在 **ENSDEMO** 数据库中,类 **Demo.Util.CleanupSet** 提供了一个如何执行此操作的示例。 该例程也执行深度清除,同时处理对象属性引用。 还可以参考另一个例程来清除孤立消息,但该例程不执行深度清除,只对删除消息正文有帮助。 我在下面附上可下载源码的 github 链接: 最佳做法是始终: 1. 避免编程错误(如前面所讨论)以防止出现孤立消息 2. 只有需要正文并且知道只能以编程方式清除这些消息正文时,才将清除任务设置成关闭 BodiesToo 设置。 3. 实施关系或针对持久对象属性实现 OnDelete。 我希望本文对您构建生产环境有所帮助。 如果您有任何问题或疑虑,请联系我们。 谢谢。