web-dev-qa-db-ja.com

プログラミングプラットフォームとしてO.Sレイヤー(コマンドとシェル)に依存するリスクは何ですか?

環境

会社の新しいプロジェクトを開始しようとしています1 どのアーキテクチャがいくつかの要素で構成されます。 2つのモバイルアプリケーション(AndroidとiOS)、Web API(Java)とETL(まだNodeJSとJavaのどちらを使用するかを決定しています)があります。

システムは、複数のOpenDataリポジトリ(Web APIS)からデータを抽出し、各データセットを一意のデータモデルに変換して、データを統合する必要があります。

結果のモデルは、Web APIを通じて公開されるモデルであり、モバイルアプリによって使用されるモデルです。さらに、Web APIは、ソーシャルネットワークで見つけたものと同様の機能を提供します(高評価、お気に入り、リンクの共有、提案など)。

システムはDockerコンテナーとしてデプロイされます。おそらくパブリッククラウドプラットフォームです。

根拠

以前に同様のシステムを構築したことがあり、常に高水準プログラミング言語(主にJava)でETLを構築していることに気づきました。 Javaシリアライゼーション/デシリアライゼーションおよびメモリ管理に関して)の弱点を認識しています。Javaが私のゴールデンハンマーになり、時にはそれがやり過ぎかもしれません(または不十分です)。

I/Oとデータ変換(JSON)の実行が非常に優れているNodeJSなどの他の言語を検討し始めました。私が考えているETLの種類は、これらの機能を利用して実装を容易にすることができます。

しかし、私は最近DevOpsのタスクを実行しており、Linuxシェルスクリプトに夢中になりました。全体的に、wgetawkgrepsedjqなどのコマンドを使用します。別のプログラミング言語を必要とせずに、これらの4つのコマンドでETLを構築することもできました。 O.Sレイヤーは非常に快適で、高速で、効率的であることがわかりました。

その結果、私はO.S機能を利用するというアイデアを試してみて、O.Sレイヤーにさらに広く敷く次のETLを構築するようになりました。

質問

私は似たようなものを構築したことがないため、私の質問は

  • プログラミングプラットフォームとしてO.Sレイヤー(コマンドとシェル)に依存することのリスク(少なくともより適切なもの)は何ですか?

  • 何に注意すべきですか?

  • それは私だけですか、それとも通常はOSの基本的な機能を利用しませんか?もしそうなら、なぜですか? 2


アイデアは、ユーザーが動的な(e)xtraction、(t)ransformations、(l)oadsをプログラムし、シェルスクリプトコードをテキスト領域に入力できる軽量のWebアプリケーションを実装することです。これらのテキスト領域を実行可能なshファイルに変換し、指定された順序で実行します。あなたがジェンキンスに精通しているなら、おそらく私が何を意味するか知っているでしょう。

抽出はwgetjq, awk and sedによる変換、および負荷に対処できます。UbuntuにMongoDB cliがあることを願っています。そうでない場合は、JavaまたはNodeJSでその部分を解決できます。


1:私がシニアソフトウェアエンジニアの役割を果たす場所。しかし、このプロジェクトでは、私が建築家であることが期待されています。できると思いますが、これまでこの役を完全に演じたことはありません

2:この質問は、データベースにビジネスロジックを配置することが悪であるかどうかという永遠の議論に(どういうわけか)似ているのでしょうか。

3
Laiv

両方の種類のツールを使用したので、これらのコマンドラインツールの利点と欠点のほとんどをすでに知っていると思います。主な利点は、ごく少数のコード行で多くの問題を解決できることです。不利な面では、

  • 制限されたエラー処理機能
  • データ構造またはOOコードを作成する可能性はほとんどない
  • (少なくとも私の経験では)入力サニタイズのようなものを実装するのは難しいです(ただしYMMV)
  • 非常に制限されたデバッグおよびプロファイリング機能
  • 非常に制限されたUI機能。
  • 各コマンドは新しいプロセスを生成し、これらのツール間の通信は、ファイルまたはパイプによってのみ行うことができます。これはパフォーマンスに影響を与える可能性があります。
  • シェルスクリプトの表記法は、経験の浅い開発者が実際に複雑にして保守するのが難しい場合があります。表現力と読みやすさの漏れ
  • 手続き型プログラミングとバッチプログラミングのすべての欠点を抱えている

OSの依存関係も問題になる可能性があり、Linux/Unixシェルスクリプトを使用するよりも、Javaを使用する方がコードOSを独立しておく方が簡単な場合があります。ただし、Javaプログラムでも、注意しないとOSに依存するようになり、Linuxシェルスクリプトは Cygwin

シェルスクリプトと同じくらい簡潔で、Javaと同じくらい移植性の高いプログラムを記述できるが、前述の欠点がない代替手段はありますか?

もちろん、いくつかあります。いくつかのスクリプト言語。たとえば、古き良きPerlはもともとこれのために正確に設計されたAFAIKでした。 www.cpan.org 。 Pythonエコシステムにも同様のプロパティがありますが、コア言語はよりすっきりしています。たとえば、wgetも標準のPythonパッケージであり、awkおよびgrepreモジュールの機能で置き換えることができます。 jq by pyjq

node.jsについて言及しましたが、PythonまたはPerlよりもはるかに新しいため、現在のところ、後者の言語のモジュールシステムほど完全なモジュールシステムではないと思いますが、私は専門家ではありませんこれについて、そしてそれがあなたのニーズに合っているなら、それは確かに賢明な選択肢です。

5
Doc Brown