Pesquisar

Artigo
· Jul. 4 3min de leitura

Exécutez votre solution InterSystems dans votre environnement Kubernetes avec une qualité de service garantie

Une qualité de service (QoS) est attribuée à tous les pods. Trois niveaux de priorité sont attribués aux pods d'un nœud. Ces niveaux sont les suivants :

1) Garanti : Priorité élevée

2) Évolutif : Priorité moyenne

3) Meilleur effort : Priorité faible

Il s'agit d'indiquer au kubelet quelles sont vos priorités sur un nœud donné si des ressources doivent être récupérées. Ce superbe GIF d'Anvesh Muppeda ci-dessous l'explique.

Si des ressources doivent être libérées, les pods avec une QoS « Meilleur effort » seront d'abord évincés, puis ceux avec une QoS « Évolutif », et enfin ceux avec une QoS garantie. L'idée est qu'en évinçant les pods de priorité inférieure, nous récupérerons suffisamment de ressources sur le nœud pour éviter d'avoir à évincer les pods avec une QoS garantie.

Nous souhaitons donc que nos applications critiques fonctionnent avec une qualité de service garantie, et les pods InterSystems en font sans aucun doute partie.

Consultez Open Exchange Application / Github Repo ci-joint pour obtenir un modèle expliquant comment mettre à niveau votre cluster IrisCluster afin de bénéficier d'une qualité de service garantie pour tous vos pods InterSystems.

Jusqu'à présent, vous avez peut-être déployé en spécifiant les ressources dans le podTemplate :

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

mais en supposant que vous utilisez les éléments suivants dans votre fichier IKO values.yaml (c'est le comportement par défaut) :

useIrisFsGroup: false 

Vous ignorez alors les initContainers et un éventuel side-car, et votre pod ne bénéficiera que d'une QoS évolutive.

Conformément à la documentation Kubernetes sur la QoS, pour qu'un pod obtienne une classe de QoS garantie :

  • Chaque conteneur du pod doit avoir une limite de mémoire et une demande de mémoire.
  • Pour chaque conteneur du pod, la limite de mémoire doit être égale à la demande de mémoire.
  • Chaque conteneur du pod doit avoir une limite de CPU et une demande de CPU.
  • Pour chaque conteneur du pod, la limite de CPU doit être égale à la demande de CPU.

Cela inclut les initContainers et les side-cars. Pour spécifier les ressources de l'initContainer, vous devez le remplacer :

      podTemplate:
        spec:
          initContainers:
          - command:
            - sh
            - -c
            - /bin/chown -R 51773:51773 /irissys/*
            image: busybox
            name: iriscluster-init
            resources:
              requests:
                memory: "1Gi"
                cpu: "1"
              limits:
                memory: "1Gi"
                cpu: "1"
            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"

Consultez un exemple complet d'IrisCluster incluant initContainers et side-cars dans l'application Open Exchange ci-jointe.

Vous pouvez également modifier le comportement par défaut d'IKO dans values.yaml comme suit :

useIrisFsGroup: true 

pour éviter les initContainers dans certains cas, mais des complications peuvent survenir et useIrisFsGroup mériterait un article à part entière. Je compte en parler prochainement.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Jul. 4 3min de leitura

¡Opciones para desarrolladores Python + Encuesta!

Estoy escribiendo esta publicación principalmente para recopilar un consenso informal sobre cómo los desarrolladores están utilizando Python junto con IRIS, ¡así que por favor responded a la encuesta al final del artículo! En el cuerpo del artículo, daré un poco de contexto sobre cada una de las opciones proporcionadas, así como sus ventajas, pero si lo preferís, podéis hacer una lectura rápida y simplemente responder la encuesta.

Como muchos de vosotros probablemente ya sabéis, Python es actualmente el lenguaje de programación más popular entre los desarrolladores en todo el mundo —y con buena razón. Python es intuitivo, fácil de leer, cuenta con una gran cantidad de bibliotecas y paquetes, y ofrece numerosos recursos para resolver casi cualquier problema. Por estas razones y muchas más, Python suele ser la primera opción natural para los desarrolladores.

Entonces, cuando un desarrollador comienza a trabajar con InterSystems IRIS, puede surgir una pregunta común: “¿Puedo usar Python y aún así aprovechar al máximo IRIS?” ¿La respuesta? “¡Sí!” Este artículo presentará algunas de las formas más comunes en las que se puede usar Python junto con InterSystems IRIS.

Opciones para usar Python con IRIS:

1. Python embebido:
Presentado en 2021, Python embebido permite escribir y ejecutar código Python directamente dentro de ObjectScript. Esto permite el uso conjunto de Python y ObjectScript, integrando Python en el entorno de IRIS sin salir de él. Es una excelente opción para quienes desean aprovechar Python sin abandonar el ecosistema de IRIS.

2. Conectividad ODBC mediante pyODBC:
También podéis conectar aplicaciones externas de Python a IRIS usando ODBC, al estilo de una arquitectura cliente-servidor tradicional. Este es probablemente el método de integración más utilizado, ya que se basa en flujos de trabajo SQL familiares para los desarrolladores Python. El paquete pyODBC es compatible con la especificación DB API 2.0 y permite ejecutar consultas SQL sobre bases de datos IRIS.

3. API Nativa de InterSystems y External Language Server (ELS):
Estas dos opciones ofrecen una integración más flexible entre Python e IRIS:

  • a. API Nativa para Python: permite el acceso directo a características centrales de IRIS como clases persistentes y estructuras globales. Es ideal cuando se necesita trabajar con constructos específicos de IRIS de forma programática desde Python.
  • b. External Language Server (ELS): permite que IRIS invoque código Python que se ejecuta en un proceso separado, o incluso en un servidor distinto. Es especialmente útil cuando el código Python consume muchos recursos (CPU o memoria), o cuando se necesita aislar la ejecución para garantizar estabilidad y escalabilidad.

En resumen:
Python e InterSystems IRIS se complementan muy bien. Ya sea que tengáis poca experiencia con ObjectScript, queráis aprovechar el rico ecosistema de Python, o simplemente prefiráis programar en este lenguaje, existen múltiples caminos de integración. Cada opción ofrece beneficios distintos según tu arquitectura y caso de uso.

¡Gracias por leer este breve resumen sobre cómo usar Python con InterSystems IRIS!

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Jul. 4

How to export a project XML file for deploy with Visual Studio Code?

Hello everybody, 

I would like to export project contents using Visual Studio Code, as well as I do with InterSystems Studio.

However, while attempting the export through the InterSystems extension I get the following error:

- There are no folders in the current workspace that code can be exported to.

These are the step to reproduce my error:

  1. Create and save a new VSCode workspace
  2. Open a local directory 
  3. Go to the InterSystems extension
  4. Open "Projects" panel and right-click on the project you want to export
  5. Click on "Export Project Contents"

Anyone can help me solving this issue?

Thank you in advance 

7 Comments
Discussão (7)4
Entre ou crie uma conta para continuar
Anúncio
· Jul. 4

¡Chatea con la IA de la Comunidad de Desarrolladores!

¡Hola comunidad!

¡Estamos emocionados de presentar una nueva forma de interactuar con la IA de la comunidad de desarrolladores! - Ahora podéis tener una conversación real con ella.

En lugar de hacer preguntas aisladas, podéis chatear con la IA de la comunidad (DC AI) de una forma más natural y fluida. Así, ya sea que estéis explorando tecnologías de InterSystems, depurando código o aprendiendo algo nuevo, la DC AI está aquí para ayudaros, como lo haría cualquier otro desarrollador.

Y al igual que la versión original de preguntas y respuestas, esta experiencia de chat está impulsada por InterSystems IRIS Vector Search, lo que hace que vuestras conversaciones sean rápidas, con conciencia del contexto y altamente relevantes.

👉 ¡Probadla y contadnos qué os parece!

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Jul. 3 4min de leitura

文字コードが不明なファイルや文字列を正しく処理する方法

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

InterSystems 製品では、ファイルオープン時に文字コードを指定すれば指定の文字コードで正しくファイルの中身を処理できます。

文字コードを指定しない場合、InterSystems 製品をインストールした OS に合わせて設定されたファイル I/O 用文字コードを利用してファイルをオープンします(Linux 系は UTF8、Windows は SJIS)。

また、文字列については文字コードが判明していれば $ZCONVERT() 関数を使用して指定文字コードで文字列を処理することができます。

 例)$ZCONVERT(文字列,"I","IRIS内文字コード")

文字コードが不明な場合、残念ながら InterSystems 製品だけでそのコードを判別することができないため、例えば Embedded Python で Python の chardet パッケージを使用して文字コード判別し、IRIS 内文字コードを取得しファイルオープン、文字列の文字コード変換をすることができます。

chardetパッケージについては、外部サイトですが参考となります。ぜひご参照ください。

参考ページ:[解決!Python]テキストファイルのエンコーディングを調べて、その内容を読み込むには(chardetパッケージ)

以下、具体的な処理内容です。文字コードが不明なファイルに対する処理例として記載しています(文字列に対する処理例は末尾にあります)。

IRIS のクラス定義に以下のように language=python を設定したクラスメソッドを用意します。

/// ファイルのエンコードを確認して返す
/// 第1引数:ファイル名(フルパス)
/// 戻り値:エンコード
/// 事前準備:Pythonのchardetパッケージをインストールしておく必要があります
/// 参考URL:https://atmarkit.itmedia.co.jp/ait/articles/2105/11/news015.html
ClassMethod GetEncode(filename As %String) As %String [ Language = python ]
{
import iris
from chardet import detect  # chardetパッケージからdetect関数をインポート
with open(filename, 'rb') as f:  # バイナリファイルとして読み込みオープン
    b = f.read()  # ファイルから全データを読み込み
    enc = detect(b)  # 読み込んだデータdetect関数に渡して判定する
#print(enc)
return enc["encoding"]
}

 

ターミナルで単体テストを行った結果は以下の通りです。

例:ECU-JPで保存されているファイルを確認した場合

この後、IRIS 内ユーティリティメソッドを利用して IRIS 用文字コードを入手しファイルオープン時の文字コードに指定します。

set TranslateTable=##class(%Net.Charset).GetTranslateTable(ここにPythonで確認したエンコード)

 

コード詳細は以下の通りです。

ClassMethod test(filename As %String)
{
    if $Get(filename)="" {
        write "第1引数にファイル名をフルパスで指定してください",!
        return
    }
    // Pythonのchardetパッケージを利用したエンコード調査を実行します
    set encode=..GetEncode(filename)
    if $get(encode)="" {
        write filename," のエンコードが入手できませんでした",!
        return
    }
    // エンコードが返った来た場合、IRIS内の文字コードを調査
    set TranslateTable=##class(%Net.Charset).GetTranslateTable(encode)
    
    write "IRISの文字コードは:",TranslateTable,!
    write "ファイルの中身は以下==",!
    set fs=##class(%Stream.FileCharacter).%New()
    set fs.TranslateTable=TranslateTable
    do fs.LinkToFile(filename)
    while fs.AtEnd=0 {
        write fs.ReadLine(),!
    }
    kill fs
}

 

実行例は以下の通りです。

USER>do ##class(FAQ.Utils).test("/data/sample1.txt")
IRISの文字コードは:EUC
ファイルの中身は以下==
あいうえお
かきくけこ
さしすせそ

USER>

 

ファイルではなく文字列に対して操作する場合は、以下の手順で実行します。

1、Python の chardetパッケージを利用してエンコードを入手

set encode=##class(FAQ.Utils).GetEncode("/data/sample1.txt")

 

2、IRIS 用文字コードを入手

USER>set TranslateTable=##class(%Net.Charset).GetTranslateTable(encode)

USER>write TranslateTable
EUC
USER>

 

3、$ZCONVERT()関数を使用してコードを変換

USER>write $ZCONVERT(reco,"I",TranslateTable) // recoに対象文字列が含まれているとします
あいうえお
USER>
Discussão (0)1
Entre ou crie uma conta para continuar