paint-brush
目的主導のマイクロサービス設計by@johnjvester
1,502
1,502

目的主導のマイクロサービス設計

John Vester2022/06/30
Read on Terminal Reader
Read this story w/o Javascript

目的主導型のマイクロサービスを作成することは、常に目標にする必要があります。 Render Blueprints が再現可能なマイクロサービス戦略をどのように提供できるかをご覧ください。

Company Mentioned

Mention Thumbnail
featured image - 目的主導のマイクロサービス設計
John Vester HackerNoon profile picture

流行語は、私がキャリアを始めたときに期待したものではありません。当時、テクノロジー ニュースのほとんどは、InformationWeek や Network World などの紙ベースの週刊誌に掲載されていました。 「ああ、彼らは毎週同じ言葉を何度も使っている」と思ったのを覚えています。


それは、流行語を使用している人々に翻訳されました…常に。当時、私のお気に入りの 2 つの流行語は、「ワールド ワイド ウェブ」と「情報スーパーハイウェイ」としてのインターネットへの言及でした。ある時点で超大型高速道路ができるのではないかといつも思っていました。


しかし、最近、流行語が意味をなさないプレースホルダーとして使用されていることに気付きました。マイクロサービス、イベント駆動型アーキテクチャ、AI、ML などの用語は文脈で使用されているため、多くの人がこれらの用語をよく理解していないと結論付けています。これも予想外だった…


誤解された質問に関連する次の簡単な会話を想像してみてください。


Person #1:フライトは何時に出発しますか?

人物 #2:今年後半に。


人物 2 は間違っていない回答を提供しますが、返信は人物 1 の質問に対して実際には何の価値ももたらしません。


同じように、マイクロサービスへの移行の探求も同様の課題に耐えてきました。多くの場合、私は「マイクロサービス」の設計が単一のモノサービスになったクライアントや企業と仕事をしてきました。基本的に、モノリシック アプリケーションは非常に大きな RESTful API に置き換えられました。


この出版物では、目的主導型のマイクロサービス設計を作成する例を説明するのは楽しいだろうと思いました...正しい方法.

目的主導のマイクロサービス設計

目的主導のマイクロサービスは、それ自体で自立できるサービスであり、必要に応じて専用の永続ストアを含めることができます。マイクロサービスは目的主導型であるため、焦点を絞った一連の情報を提供し、関連する API 内で管理されるデータの記録システムになります。


目的主導のマイクロサービス アプローチを採用することで、ユーザーはノードを追加したり、既存のノードを縮小したりして、その時点での API のニーズを満たすことができます。


例として、所得税の側面に焦点を当てた目的主導型のマイクロサービスは、年の前半に使用率が最も高くなり、後半に実行する必要のあるインスタンスが少なくなる可能性があります。


非常に単純な例を使用して、目的主導のマイクロサービス設計の作成に焦点を当てましょう。

Docker ベースのマイクロサービスの作成

中国の性別予測子出生時の赤ちゃんの性別を予測するために使用されるグリッド システムです。これは、受胎月と受胎時の母親の現在の年齢を提供することによって行われます。


噂によると、清王朝の皇室は、家族のために提供できる仕事とお金、および家系を引き継ぐために、息子の性別選択にこの同じグリッドに依存していたという.


以下は、中国の性別予測グリッドの図です。



例として、1 月に子供を妊娠した 18 歳の母親は、女性の赤ちゃんを産みます。


この出版物では、同じ基準に基づいて性別予測を返す目的主導のマイクロサービスを作成します。上記の例の結果のペイロードは、次のようになります。


 { "month": 1, "age": 18, "gender": "female", "errorMessage": null }


このマイクロサービスは Java と Spring Boot を利用し、マルチステージの Dockerfile を使用してサービスをコンパイルし、出生予測 API をホストできる Docker イメージを構築します。


サービスのコードは、GitLab の次のアドレスにあります。

https://gitlab.com/johnjvester/birth-predictor

Render ブループリントを使用して再現可能なパターンを作成する

以下の出版物で __ Render __platform について書いています。


Render で実行する個人用インスタンスには、Go プログラミング言語、静的サイト、および Postgres インスタンスを使用しました。今回はJava/Spring Bootでサービスを書きました。 Java のネイティブ サポートはまだありませんが、Render プラットフォームには、Docker コンテナーで実行されるすべてのものがサポートされています。


出生予測サービスにはマルチステージの Dockerfile が含まれているため、Docker ベースのサービスを Render プラットフォームにデプロイするのがいかに簡単かを知りたいと思いました。しかし、私が気づいたのは、ブループリントの仕様また、それがどのように機能するかを見たいと思っていました。

ブループリントとは何ですか?

ブループリントは、Render の Infrastructure as Code (IaC) の実装です。 IaC は、「* as Code」と呼ばれるより大きな概念にグループ化するものでもあります。複数のサービスの展開を管理する必要がある組織、または多くのオプションを必要とするサービスを持っている組織は、Render インフラストラクチャ (サービス、データベース、および環境グループ) を render.yaml ファイルのコードとして定義できます。

レンダー ブループリントの使用

提供されたブループリントの例に基づく構築ここ、Docker コンテナーを介して実行される Spring Boot サービスのブループリントをすばやく作成することができました。


 services: - type: web name: restful-api-spring-boot env: docker region: ohio # optional (defaults to oregon) plan: free # optional (defaults to starter) branch: master # optional (uses repo default) numInstances: 1 # optional (defaults to 1) healthCheckPath: /actuator/health envVars: - key: SERVER_PORT value: 443


そこから、以下に示すように、生年予測サービスの YAML データをカスタマイズして、name プロパティを更新し、repo プロパティを追加しました。


 services: - type: web name: birth-predictor env: docker repo: https://gitlab.com/johnjvester/birth-predictor region: ohio # optional (defaults to oregon) plan: free # optional (defaults to starter) branch: master # optional (uses repo default) numInstances: 1 # optional (defaults to 1) healthCheckPath: /actuator/health envVars: - key: SERVER_PORT value: 443


この情報は、 birth-predictorリポジトリのルートにあるrender.yamlというファイルに保存されていました。この変更をコミットしてマージすると、サービスを Render プラットフォームにデプロイする準備が整いました。


レンダリング ダッシュボードから、[ New | ] を選択しました。ブループリントオプション:


次に、見つかった手順を使用して GitLab アカウントに接続した、生年予測リポジトリを選択しました。ここ.


ブループリントを使用していたので、新しいサービスのサービス グループ名を指定するだけで済みました。


[適用] ボタンを押すと、展開プロセスが開始されました。


数分後、サービスは問題なくデプロイされました。


実際の出生予測器

出生予測サービスが実行されている状態で、次の cURL コマンドを発行して、新しい予測を取得できます。


 curl --location --request POST 'https://birth-predictor.onrender.com/predict' \ --header 'Content-Type: application/json' \ --data-raw '{ "conceptionMonth" : 11, "conceptionAge" : 43 }'


結果の応答ペイロードは次のようになります。


 { "month": 11, "age": 43, "gender": "male", "errorMessage": null }


この情報はたまたま受胎月と、息子 (フィニー) が受胎したときの妻の年齢と一致しています。 2017年8月、彼は到着しました!


彼らが清王朝の時代に行ったのと同じように、私たちは Chinese Gender Predictor を利用して、子供の性別を正しく予測することができました。

結論

2021 年以来、私は次のミッション ステートメントに従って生きようとしてきました。これは、どの IT プロフェッショナルにも当てはまると思います。


「知的財産の価値を拡張する機能を提供することに時間を集中してください。他のすべてのフレームワーク、製品、およびサービスを活用してください。」

- J.ベスター


Render による Blueprints 仕様は、機能チームとサービス チームが、DevOps 関連のことを心配することなく、確立された目標とターゲットの実現に集中できるようにすることで、私のミッション ステートメントに準拠しています。


サービス、コンポーネント、またはアプリケーションの準備ができたら、チームは render.yaml ファイルをリポジトリのルートに含め、Blueprint オプションを使用して Render プラットフォームで新しいサービスを作成するだけです。今後、接続されたリポジトリへの更新は、コードを指定されたブランチにコミットした数分後に自動デプロイされます。


Render プラットフォームはゼロ DevOps の考え方に基づいており、これはブループリントのコンセプトの起源からも明らかです。機能とサービスの開発者は、利害関係者に最大の価値を提供する更新と機能を提供することに集中したいと考えており、集中する必要があります。 Render は、この現実を真に理解しています。


流行語は常にテクノロジー空間の一部であると確信しています。しかし、これらの流行語の背後にある真の意図を理解して採用することは、技術者が追求してほしいものです。


この出版物のソース コードに興味がある場合は、次のアドレスの GitLab で見つけることができます。


https://gitlab.com/johnjvester/birth-predictor


本当に素晴らしい一日を!