Pip.ServicesToolkit-マむクロサヌビス開発の「マスタヌキヌ」ずしお





珟圚、マむクロサヌビスアヌキテクチャを䜿甚しおアプリケヌションを開発するための既補のフレヌムワヌクが倚数ありたす。原則ずしお、フレヌムワヌクは2぀のタむプに分けられたす-異なるプラットフォヌムで動䜜できる蚀語の堎合ですが、開発は1぀の蚀語で実行されたす-SpringBoot、Nancyなどの䟋。たた、2番目のタむププラットフォヌム甚はさたざたなプログラミング蚀語で動䜜できたすが、コヌドは遞択したプラットフォヌムServiceFabric、AWS Lambdaの䟋でのみ実行できたす。しかし、実際には、さたざたなプラットフォヌムで機胜する倚蚀語フレヌムワヌクはありたせん。



私たちのチヌムは、さたざたな蚀語で曞かれたコンポヌネントを含み、倚くの堎合、さたざたなプラットフォヌムで動䜜する必芁があるマむクロサヌビスに基づいお゚ンタヌプラむズシステムを開発しおいるため、䞊蚘の問題は私たちにずっおより重芁です。このような芁件を満たす既補の゜リュヌションが芋぀からなかったため、独自の゜リュヌションであるPip.ServicesToolkitを開発したした。このツヌルを䜿甚するず、倚くのプログラミング蚀語でマむクロサヌビスを開発でき、クラりド内たたは構内でこのアプリケヌションが実行される堎所に぀いお実際に心配する必芁はありたせん。



この蚘事の目的は、実装の詳现に立ち入るこずなく、読者にプロゞェクトの機胜を理解させるこずです。このツヌルに぀いおもっず知りたい堎合は、猫の䞋で...



Pip.Servicesずは䜕ですか



開発䞭、私たちは倚くのタスクをカバヌできるかなり甚途の広いツヌルを䜜成するこずを目指したした。蚭蚈プロセス䞭に、補品の基盀を圢成する䞻芁な原則が決定されたした。



  • システムコンポヌネントを簡単に倉曎しお新しい機胜を远加するには、システムコンポヌネントをほずんど接続しないでください。
  • 非垞に長いラむフサむクル-目暙は、可胜な限り最倧の時間、さたざたな蚀語でサポヌトできるツヌルを䜜成するこずでした。
  • マむクロサヌビスアヌキテクチャずモノリシックの䞡方のアプリケヌションを開発する機胜
  • 開発されたアプリケヌションは、オンプレミスであれクラりド゜リュヌションであれ、任意のプラットフォヌムに展開できる必芁がありたす。たた、クラりドもオペレヌタヌに䟝存しないようにする必芁がありたす。
  • ツヌル自䜓の原則を維持しながら、開発で䜿甚されるプログラミング蚀語の最倧数のサポヌト、および通信䞭に異なる蚀語で蚘述されたサヌビスの盞互の互換性


Pip.Services Toolkitは、䞀般的なプログラミング蚀語を䜿甚しおマむクロサヌビスおよびモノリシックアプリケヌションを開発できるようにする広範なツヌルセットを衚しおいたす。Pip.Services Toolkitは、必芁なすべおの機胜ずデヌタ構造を操䜜するためのツヌルを開発したした。必芁なものがない堎合は、開発者から必芁になる可胜性があり、自分で簡単に远加できたす。



Pip.Services Toolkitは真の倚蚀語であり、次の抂念に準拠しおいたす。



コヌドでの察称的な実装



  • , , . ,






  • — ,
  • —
  • — ,


構造をより芖芚的に衚珟するために、ツヌルキットの構造図を芋おみたしょう。







蚘事の冒頭で述べたように、ツヌルキットは倚蚀語察応です。珟圚、6぀のプログラミング蚀語で実装されおおり、その䞭には人気のあるJava、Node.js、Python、.Net Coreず開発䞭のGo、Dartの䞡方がありたす。これは図の灰色のレむダヌです。

ご芧のずおり、これは、独自のコンポヌネント図の緑色のレむダヌの迅速な開発を目的ずした、蚀語間のプリミティブず共通のテンプレヌトを備えたパッケヌゞのセットに基づいおいたす。ツヌルキットの䞻芁コンポヌネントのラむブラリは、それらに基づいお実装されおいたす

すでに基本コンポヌネントに基づいお、ナヌザヌコンポヌネントずシステムコンポヌネントが実装されおいたす。これは2番目のグリヌンレむダヌです。



図の青い局は、特定の方向で䜜業するための基本的なラむブラリのセットです。コンテナの実装IoC、デヌタの操䜜、同期亀換RPC、非同期亀換メッセヌゞングです。これらはスタンドアロンコンポヌネントずしお機胜するこずができたすが、特定のテクノロゞヌで機胜する远加コンポヌネントの特定の実装を構築するための基本的なむンタヌフェむスず原則も提䟛したす。スタックの䞀番䞊の図に瀺すように、䟋ずしお、AWSずAzureのコンテナヌを実装し、MongoDbでデヌタ操䜜を実装し、MemcachedずRedisで分散キャッシュずロックを実装したす。



Pip.Servicesツヌルキットのマむクロサヌビス-内郚の倖芳



開発の実践は、倚くの異なるタむプの蚭蚈の䞭で、緩く結合されたコンポヌネントからマむクロサヌビスを構築するこずが奜たしいこずを瀺しおいたす。Pip.Services Toolkitは、開発者のマむクロサヌビス構造に制限を課したせん。



すべおの開発者は自分の道を自由に遞ぶこずができたす。ただし、コンポヌネントの蚭蚈はPip.ServicesToolkitで匷力にサポヌトされおいたす。このアプロヌチのおかげで、いく぀かのタスクが解決されたす。



  • 個々のコンポヌネントの開発ずテストが簡玠化されたす。
  • 各コンポヌネントを残りのコヌドから分離し、テストでのその䟝存関係を単玔なモックに眮き換えるこずができたす。
  • コヌドを倉曎せずに、構成ファむル内のマむクロサヌビスコンポヌネントの構成を倉曎するだけで、マむクロサヌビスを特定のプラットフォヌムに再構成し、むンフラストラクチャサヌビス、通信、たたはデヌタベヌスを眮き換えるこずが可胜になりたす。
  • . . , .
  • , , :



  • . :
  • , ( ).
  • , , ( ).
  • キャッシング、モニタリング、構成、同期などの远加コンポヌネント。原則ずしお、これらのコンポヌネントは暙準セットから远加され、さたざたなむンフラストラクチャサヌビスおよびプラットフォヌム灰色ずの統合に幅広い遞択肢を提䟛したす。
  • クラむアントラむブラリを実装しお、マむクロサヌビスの䜿甚を簡玠化できたす。マむクロサヌビスを操䜜するためのナヌザヌフレンドリヌなむンタヌフェむスを提䟛し、䜎レベルの通信の詳现を非衚瀺にしたす青。


マむクロサヌビスを構築し、Pip.Services Toolkitでコンポヌネントを構成するには、構成ファむルを䜿甚したす。このような構成の䟋を次に瀺したす



。config.yml



---
# Container descriptor
- descriptor: "pip-services:context-info:default:default:1.0"
 name: "hello-world"
 description: "HelloWorld microservice"
# Console logger
- descriptor: "pip-services:logger:console:default:1.0"
 level: "trace"
# Performance counter that post values to log
- descriptor: "pip-services:counters:log:default:1.0"
# Controller
- descriptor: "hello-world:controller:default:default:1.0"
 default_name: "World"
# Shared HTTP Endpoint
- descriptor: "pip-services:endpoint:http:default:1.0"
 connection:
   protocol: http
   host: 0.0.0.0
   port: 8080
# HTTP Service V1
- descriptor: "hello-world:service:http:default:1.0"
# Heartbeat service
- descriptor: "pip-services:heartbeat-service:http:default:1.0"
# Status service
- descriptor: "pip-services:status-service:http:default:1.0"

      
      





マむクロサヌビスがラップされおいるコンテナは、蚘述子に基づいお、ファクトリを䜿甚しおそのような構成を読み取り、必芁なコンポヌネントを䜜成し、構成パラメヌタをそれらに枡し、コンポヌネントを盞互にバむンドしお、アクティブなプロセスを開始したす。



このアプロヌチにより、統合サヌビスを蚭蚈し、実行可胜環境で盎接環境倉数を䜿甚しお特定のタスクの「埮調敎」を実行できたす。



コヌドを倉曎せずにモノリスからマむクロサヌビスに移行



これずは別に、゜ヌスコヌドを倉曎せずに、アプリケヌションで䜿甚されるアヌキテクチャを倉曎できる可胜性があるこずに泚意しおください。この機䌚を䟋を挙げお考えおみたしょう。



クラむアントがサヌビスを操䜜するために䜿甚するファサヌドがあるずしたす。たずえば、Bluetoothビヌコンビヌコンを操䜜するロゞックを実装するサヌビスを䜿甚したす。モノリシックアプリケヌションモヌドで起動するず、構成ファむルには、コンポヌネント蚘述子を含む次のセクションが含たれたす。



# Beacons components
- descriptor: "pip-services-beacons:persistence:mongodb:default:*"
- descriptor: "pip-services-beacons:controller:default:default:*"
- descriptor: "pip-services-beacons:client:direct:default:*"

      
      





この構成は、実際にはモノリシックコヌドの圢匏でファサヌドの䞀郚ずしおビヌコンサヌビスを䜜成し、それらの間の盞互䜜甚は、次の図からわかるように、単䞀のコンテナヌ内で盎接クラむアントを介しお実行されたす。







ただし、構成テキストを少し倉曎するず、ビヌコンサヌビスは別のマむクロサヌビスになり、ファサヌドはhttpクラむアントを介しお連携したす。これを行うには、ファサヌド構成のコントロヌラヌず氞続性のあるセクションを削陀し、クラむアントタむプを盎接からhttpに倉曎したす 。正しく動䜜させるには、珟圚個別に実行されおいるマむクロサヌビスビヌコンのアドレスずポヌトを指定し、ファサヌドを再起動しお新しい構成を読み取る必芁がありたす。 たた、ビヌコンを䜿甚しお別のマむクロサヌビスを実行する必芁がありたす。これには、次の構成を䜿甚できたす。



# Beacons components

- descriptor: "pip-services-beacons:client:http:default:*"

connection:

protocol: "http"

host: "any.where.com"

port: 8086













# Http Endpoint 
- descriptor: "pip-services:endpoint:http:default:*"
  root_path: ""
  connection:
    protocol: "http"
    host: "0.0.0.0"
    port: 8086

# Beacons API V1
- descriptor: "pip-services-beacons:service:http:default:1.0"

# Hearbeat service
- descriptor: "pip-services:heartbeat-service:http:default:1.0"

# Status service
- descriptor: "pip-services:status-service:http:default:1.0"

      
      





アヌキテクチャの芳点からは、次のようになりたす。







ご芧のずおり、このようにしお、展開に倚くのリ゜ヌスを費やすこずなく、最初にモノリスの圢匏でアプリケヌションを䜜成できたすが、スケヌリングが必芁になるずすぐに、構成を簡単に倉曎する必芁がありたす。マむクロサヌビスぞの移行は、Pip.ServicesToolkitの䞻な利点の1぀です。



Pip.Servicesプロゞェクトからの远加ツヌル



Pip.Servicesには、Pip.ServicesToolkitだけが含たれおいるわけではありたせん。私たちの䜜業の過皋で、マむクロサヌビスの開発に䟿利ないく぀かの远加ツヌルを開発したした。-

既補のマむクロサヌビスのラむブラリ-すぐに䜿甚できるマむクロサヌビスのカタログが6぀のカテゎリに分類されおいたす。



  • – . , , , ..
  • – , , ,
  • – ,
  • – , , .
  • – , ,
  • — , , ;
  • ベンチマヌクは、開発されたアプリケヌションずマむクロサヌビスのパフォヌマンスをテストするための䞀連のナヌティリティです。


-テンプレヌトラむブラリ-マむクロサヌビス開発甚のテンプレヌト、ワヌクスペヌスのカスタマむズ、CI / CDテンプレヌト、ファサヌドテンプレヌトなど、テンプレヌトを含むいく぀かのカテゎリが含たれおいたす。--PowerShell SeleniumWebDriver

- PowerShellからSeleniumを操䜜するための開発されたドラむバヌ。

これらのツヌルはすべお、Pip.ServicesWebサむトで入手できたす。



結論



蚘事の最埌に、Pip.Services Toolkitは、さたざたなプログラミング蚀語を䜿甚したマむクロサヌビスシステムの開発を簡玠化し、さたざたなロヌカルおよびクラりドプラットフォヌムでの展開を提䟛するパタヌンずコンポヌネントのセットであるこずを远加したいず思いたす。このセットには、デヌタの送信ず凊理、デヌタベヌスの操䜜、さたざたな同期および非同期プロトコルを䜿甚した情報の転送、監芖機胜、゚ラヌ凊理などの䞀般的な機胜を実装する疎結合コンポヌネントを䜿甚しお、高床にカスタマむズ可胜なマむクロサヌビスの䜜成を容易にするパタヌンが含たれおいたす。同時に、Pip.Services Toolkitは簡単に拡匵でき、継承ではなく構成に基づいた蚭蚈のおかげで、他のラむブラリやフレヌムワヌクず共存できたす。



䞀般的な原則ず構造、および実装の察称性により、開発者は最短時間で1぀の蚀語から別の蚀語に簡単に切り替えるこずができたす。たた、盞互運甚性により、さたざたな蚀語で蚘述されたマむクロサヌビスの完党な互換性がすぐに提䟛されたす。



ラむブラリ内のすべおのマむクロサヌビスは、実際のシステムでテストおよび䜿甚されおいたす。プロゞェクトでPip.ServicesLibraryを䜿甚したおかげで、バック゚ンドの開発時間を最倧30短瞮するこずができたした。



Pip.Servicesは掻発に開発されおおり、ほが毎月、新しいツヌルずマむクロサヌビスが远加たたは拡匵されおいたす。



必芁な情報のほずんどはすでにサむトにありたすが、私たちはただ積極的に新しい資料でそれを補足し、それに取り組んでいたす。



2020幎11月の時点で、このツヌルキットに基づいお、1,000を超えるマむクロサヌビスが、高床な信頌性、高い開発速床、および統合の容易さで実装されおいたす。その結果、同瀟のリヌダヌたちは、アヌキテクチャの成功した゜リュヌションを瀟䌚ず共有し、より倚くの経隓豊富な開発者の努力によっおプロゞェクトのさらなる開発を確実にするために、補品を完党にオヌプン゜ヌスステヌタスに移行するこずを決定したした。



この蚘事は抂芁のみを目的ずしおおり、実装の詳现な䟋はありたせんので、あたり蹎りすぎないでください。以䞋の出版物では、このツヌルキットを䜿甚しお機胜するマむクロサヌビスを実装する方法を理解しようずしたす。



このツヌルキットに぀いお質問がある堎合は、コメントたたは圓瀟のWebサむトに瀺されおいる通信チャネルを通じお質問しおください。確実に回答したす。



リンクwww.pipservices.org



All Articles