新しい投稿

検索

記事
· 2025年2月4日 3m read

Como ejecutar vuestra solución de InterSystems en un entorno de Kubernetes con garantía de calidad de servicio

Todos los pods reciben una asignación de Calidad de Servicio (QoS). Existen tres niveles de prioridad dentro de un nodo:

  1. Guaranteed: Alta prioridad
  2. Burstable: Prioridad media
  3. BestEffort: Baja prioridad

Es una forma de indicar al kubelet cuáles son vuestras prioridades en un nodo si es necesario recuperar recursos. Este fantástico GIF de Anvesh Muppeda lo explica.

Si es necesario liberar recursos, primero se expulsarán los pods con QoS BestEffort, luego los Burstable y, por último, los Guaranteed. La idea es que, al eliminar los pods de menor prioridad, se recuperen suficientes recursos en el nodo para evitar la expulsión de los pods Guaranteed.

Por ello, queremos que nuestras aplicaciones críticas se ejecuten con Guaranteed Quality of Service, y los pods de InterSystems definitivamente entran en esta categoría.

Consultad la aplicación de Open Exchange o el repositorio de GitHub adjunto para encontrar una plantilla que os ayude a actualizar vuestro IrisCluster y garantizar QoS Guaranteed para todos los pods de InterSystems.

Hasta ahora, es posible que hayáis estado desplegando mediante recursos específicos en el podTemplate:

podTemplate:
  spec:
    resources:
      requests:
        memory: "8Gi"
        cpu: "2"
      limits:
        memory: "8Gi"
        cpu: "2"

Pero, suponiendo que estáis utilizando lo siguiente en vuestro archivo values.yaml de IKO (este es el comportamiento predeterminado):

useIrisFsGroup: false 

Entonces, estaréis ignorando los initContainers y cualquier posible side-car, lo que hará que vuestro pod tenga únicamente Burstable QoS.

Según la documentación de Kubernetes sobre QoS:
Para que un pod reciba la clase de QoS Guaranteed, deben cumplirse las siguientes condiciones:

  • Cada contenedor dentro del pod debe tener un límite de memoria y una solicitud de memoria.
  • Para cada contenedor, el límite de memoria debe ser igual a la solicitud de memoria.
  • Cada contenedor dentro del pod debe tener un límite de CPU y una solicitud de CPU.
  • Para cada contenedor, el límite de CPU debe ser igual a la solicitud de CPU.

Esto incluye tanto los initContainers como los side-cars. Para especificar los recursos del initContainer, debéis sobrescribirlo:

      podTemplate:
        spec:
          initContainers:
          - command:
            - sh
            - -c
            - /bin/chown -R 51773:51773 /irissys/*
            image: busybox
            name: iriscluster-init
            resources:
              requests:
                memory: "8Gi"
                cpu: "2"
              limits:
                memory: "8Gi"
                cpu: "2"
            securityContext:
              runAsGroup: 0
              runAsNonRoot: false
              runAsUser: 0
            volumeMounts:
            - mountPath: /irissys/data/
              name: iris-data
            - mountPath: /irissys/wij/
              name: iris-wij
            - mountPath: /irissys/journal1/
              name: iris-journal1
            - mountPath: /irissys/journal2/
              name: iris-journal2
          resources:
            requests:
              memory: "8Gi"
              cpu: "2"
            limits:
              memory: "8Gi"
              cpu: "2"

Consultad un ejemplo completo de IrisCluster, incluyendo initContainers y side-cars, en la aplicación de Open Exchange adjunta.

Como alternativa, podéis considerar cambiar el comportamiento predeterminado de IKO en el archivo values.yaml a:

useIrisFsGroup: true 

para evitar initContainers en algunos escenarios, aunque pueden surgir complicaciones. Además, useIrisFsGroup realmente merece un artículo propio. Planeo escribir sobre ello próximamente.

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年2月4日 4m read

整合性チェックの各方法の違いについて

これは InterSystems FAQ サイトの記事です。
 

整合性チェックを行う場合、管理ポータルやタスクマネージャーから行う方法と、ターミナルから ^Integrity ユーティリティを使用して行う方法があります。

こちらのトピックでは、それぞれの違いをご説明します。
 


管理ポータル、整合性チェックタスク、
および SYS.Database の IntegrityCheck メソッドから行う方法


こちらの方法は、選択した複数のデータベースや、1 つのデータベースに格納された選択可能な複数のグローバルを対象に整合性をチェックを行います。

管理ポータル
[システムオペレーション] > [データベース] 整合性チェック・ボタン
※チェックを行いたいネームスペース、必要に応じてグローバルを選択し、実行・ボタンをクリック

整合性チェックタスク
[システムオペレーション] > [タスクマネージャー] > [タスクスケジュール] 整合性チェック・タスク 


SYS.Database クラスの IntegrityCheck メソッド:

%SYS>do ##class(SYS.Database).IntegrityCheck($LB("c:\intersystems\iris\mgr\user\"))  // DB指定
%SYS>do ##class(SYS.Database).IntegrityCheck()      // 全データベース

 

これらの方法では、エラーが検出されたすべてのグローバルを自動的に再テストします。
誤検出対策のための再チェックを行うため、余分に時間がかかる場合があります。

2回目のパス以降でもエラーが検出された場合、エラーメッセージが出力されます。

詳細は以下のドキュメントをご覧ください。
整合性チェックの誤検出


メリット:誤検出対策のための自動再チェックを行える、グローバル単位でチェックを行える(※管理ポータル)
デメリット:エラー検出の際には再チェックを行うため、余分な時間がかかる場合がある
 


^Integrity ユーティリティを使用して行う方法


こちらの方法は、ターミナルより手動でチェックを行えます。複数データベースを指定することも可能です。

管理ポータル等で行う上記方法と異なり、誤検出対策のための再チェックは行いません。

つまり、1 回目のパスでエラーが検出されたグローバルの再チェックは行わないため、エラーが報告されたグローバルをご自身で再チェックして誤検出を排除することが重要になります。

実行手順は、ターミナルを開き、%SYS ネームスペースに切り替えて、do ^Integrity と入力します。

また、^Integrity エントリポイントを用いることで、プログラムによる使用も可能です。
こちらの方法は、使用する並列処理の最大数を指定することが可能なため、整合性チェックのパフォーマンスを調整することが可能です(プロセス数の既定は8)。
以下の ^Integrity エントリポイント(CheckList^Integrity)を使用して行います。
 

Do CheckList^Integrity(outputglobal,dirlist,stopafteranyerror,listofglolist,maxproc,partialcheck)

outputglobal:結果を格納するグローバル
dirlist:チェックするすべてのディレクトリの $LIST 
stopafteranyerror:エラー発生時の整合性チェックの動作
                            (1:エラー検出でディレクトリのチェック停止、0:既定値。エラー発生時にチェック続行)
listofglolist:グローバル名を指定した $LIST を複数含む $LIST
maxproc:使用する並列処理の最大数(既定値は8)
partialcheck:既定値 0 (この値は予期しない問題が発生した場合のフォールバックとしてのみ提供)

 

 

// 以下は、5 つのプロセスを使って 3 つのデータベースをチェックしている例
set dblist=$listbuild(“/data/db1/”,”/data/db2/”,”/data/db3/”)
set sc=$$CheckList^Integrity(,dblist,,,5)
do Display^Integrity()
kill ^IRIS.TempIntegrityOutput(+$job)


メリット:エントリポイントを用いる場合、maxprocを指定することでパフォーマンスの調整が可能、
     再チェックを行わないので余分なチェックは行わない(時間短縮)、結果をファイルやターミナルに即座に出力
デメリット:自動再チェックは行わないためエラーの場合は独自に再チェックを行う必要がある、グローバルの選択はできない


enlightened【ご参考】
整合性チェック: 高速化と低速化
整合性チェックのパフォーマンスの調整
整合性チェックの目安の時間や動作状況の確認、途中で停止する方法について

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2025年2月3日 2m read

第十四章 I - J 开头的术语

第十四章 I - J 开头的术语

InterSystems IRIS 存储 (InterSystems IRIS storage)

对象(Objects)

持久对象的默认存储类型。如果你使用 IRIS 存储,则无需指定任何存储数据的细节,并且你的类会自动投射到 SQL

InterSystems SQL

SQL

SQLIRIS 的高级关系接口。SQL 完全集成了IRIS 的对象功能,共享其类字典用于表定义,并使用作为类定义的高级数据类型。

InterSystems SQL 服务器 (InterSystems SQL server)

SQL

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
質問
· 2025年2月3日

trying to put the SYSMGR global into a readable string

I'm trying to put this global into a readable list. any suggestions
The nested $bl's are giving me a problem.

SYSMGR("Task","TaskD",1046)=$lb("","",0,0,"","0","","Import data to PROG namespace OS.SarD",$lb("63735","1"),,,0,"","<ENDOFFILE>Import+30^PROG0","%SYS.Task.RunLegacyTask",0,"","","",0,"63735,40372","","63735,40320","ImportD","PROG2",,0,"","",0,0,,"",64117,"0 "_$lb($lb(5001,"<ENDOFFILE>Import+30^PROG0",,,,,,,,))/* ERROR #5001: <ENDOFFILE>Import+30^PROG0 */,1,"",5,"","",2,,,1,"123-123-123-ABCD-12345A789A","","SMITH1",$lb("ExecuteCode","q  ; D Import^PROG0()"),3,0)

5 Comments
ディスカッション (5)2
続けるにはログインするか新規登録を行ってください
質問
· 2025年2月3日

Py fails in Win Terminal - fixed

USER>do $System.Python.Shell()
 
ERROR #5002: ObjectScript-Error: <OBJECT DISPATCH>Shell+16^%SYS.Python.1 
*Failed to Load Python: Check documentation and messages.log, 
Check CPF parameters:[PythonRuntimeLibrary,PythonRuntimeLibraryVersion], 
Check sys.path setup in: $INSTANCE/lib/python/iris_site.py
02/03/25-18:27:39:497 (13156) 1 [Generic.Event] CPF settings (PythonRuntimeLibraryVersion) do not specify python correctly - Python can not be loaded
02/03/25-18:27:39:498 (13156) 1 [Generic.Event] CPF settings (PythonRuntimeLibrary) do not specify python correctly - Python can not be loaded

my iris.CPF just shows nothing. what is the correctly formatted content ?

^CONFIG("config","PythonPath")=""
^CONFIG("config","PythonRuntimeLibrary")=""
^CONFIG("config","PythonRuntimeLibraryVersion")=""

next from iris_site.py:

>>> print(get_win_python_install_dir())
C:\Program Files\Python313

>>> print( __sitegetsitepackages([get_win_python_install_dir()]))
['C:\\Program Files\\Python313', 'C:\\Program Files\\Python313\\Lib\\site-packages']

>>> print(sys.path)
['', 'C:\\Program Files\\Python313\\python313.zip', 'C:\\Program Files\\Python313\\DLLs', 'C:\\Program Files\\Python313\\Lib', 'C:\\Program Files\\Python313', 'C:\\Program Files\\Python313\\Lib\\site-packages']

Various attempts to set iris.CPF according to docs / examples manually failed
What else can I check?

PythonPath=C:\Program Files\Python313
PythonRuntimeLibrary=C:\Program Files\Python313\python3.dll
PythonRuntimeLibraryVersion=3.13

Also downgrade to Python 3.9.13 didn't improve anything.

9 Comments
ディスカッション (9)1
続けるにはログインするか新規登録を行ってください