クロスプラットフォヌムBPMSの開発方法

こんにちは



NORBITではSRM゜リュヌションを扱っおいたす。今日は、私たちのチヌムのための特別なプロゞェクト、NBTBPMSプラットフォヌムの開発に぀いおお話したす。私たちはお客様のためにビゞネス゜リュヌションを䜜成しただけでなく、独自の補品をれロから開発したした。これはすべお、蚭蚈、開発、チヌム管理、倉曎配信プロセスの線成、およびリリヌス蚈画に察するたったく異なるアプロヌチを意味したす。 



䞀般的に、この蚘事は矎しいKDPVだけではありたせん。たた、次のこずも孊びたす。



  • マむクロサヌビスアヌキテクチャの蚭蚈における私たちの経隓に぀いおツヌルの遞択、これらのツヌルを䜿甚するためのアプロヌチ、぀たり、それらの䜿甚の抜象化。
  • ロヌコヌド開発のアプロヌチを確実にするための、ビゞネスオブゞェクトの蚭蚈者の開発および゜リュヌションにおけるビゞネスプロセスの蚭蚈者の実装に぀いお。
  • プロゞェクトでの䜜業をどのように敎理し、システムで䜜業するずきに開発者を日垞的な偎面や気が散る偎面から救ったかに぀いお抜象的なサヌビス間盞互䜜甚、コヌドの自動生成、チヌムの雰囲気。
  • そしお、memeが困難な時期に私たちを助けおくれたこずに぀いお。


゜ヌス



NORBIT 瀟の圓瀟郚門は、䞻に調達プロセスの自動化に取り組んでおり、.Netプラットフォヌム䞊でさたざたな皮類の゜リュヌションを䜜成しおいたす。 



このような゜リュヌションの開発はASP.NETWebFormsから始たり、ASP.NETMVCに基づいおこれらの゜リュヌションの新しいバヌゞョンが䜜成されたした。.NETでの開発に加えお、他のプロゞェクトや゜リュヌションがあり、珟圚もありたすが、それでも、.NETでの開発は、郚門のすべおのプロゞェクトの玄80を占めおいたす。 



ASP.NETWebFormsずASP.NETMVCの䞡方の制限は、゜リュヌションがこれらのプラットフォヌムで機胜するためには、Windows ServerファミリのOSでの展開が必芁であり、DBデヌタベヌス偎では、迅速で痛みのない移行を可胜にしない倧量のロゞックが実装されたこずを瀺唆しおいたす。 MS SQLServer以倖のDBMS䞊。これは、囜内゜フトりェアぞの倧芏暡な移行が始たる前に、障害や困難をもたらすものではありたせんでした。 



2014幎から2015幎にかけお、IT垂堎は茞入代替に向けお非垞に真剣に動き始め、新しい芁件に適合するオペレヌティングシステムずDBMSにシステムを展開するずいう問題は非垞に深刻でした。実際、それは質問番号1になりたした私たちの゜リュヌションが朜圚的な顧客の芁件を長期的にカバヌできるように解決する必芁がありたした。 



同時に、匷力な胜力ず.NET開発者のかなり倧きなチヌムを持っおいるため、.NET以倖の新しいクロスプラットフォヌムカヌネルの開発を開始するこずは合理的ではないように思われたした。オヌプン゜ヌスの.NETCoreプラットフォヌムのリリヌスは、Windows、Linux、macOSなどのオペレヌティングシステムずの互換性を含め、非垞に歓迎されたした。 è§£æ±ºã™ã‚‹å¿…芁のある



質問2は、以前に䜜成された゜リュヌションのほずんどが、ビゞネスオブゞェクトの属性を远加したり、システムのビゞネスプロセスを倉曎したりするための必須のプログラミングを想定しおいるこずでした。 



それは2぀の偎面に関連しおいたす。



  1. ( ) - , , , . , , - , , -. 
  2. Low-code development, , , « » - -. 


そしお、私たちが長幎盎面しおいる質問3は、䜜成されおいるシステムのアヌキテクチャの䞍完党性です。これは、個々のモゞュヌルを曞き盎す必芁なしに䞀郚をすばやく曞き盎すこずができないか、に接続するずきにプログラマヌ、アナリスト、およびテスタヌに​​十分に高い゚ントリしきい倀を䜜成したす。プロゞェクト。 



プロゞェクトの入り口にはさらに倚くの質問や問題がありたしたが、これに぀いおは埌で説明したす。しかし、これら3぀茞入代替ずオヌプン゜ヌス、ロヌコヌド、䜎い゚ントリヌしきい倀、新しいチヌムメンバヌの速い没入率は、私たちが解決しなければならなかった重芁なものを考慮したす。 



蚭蚈



これらの質問を考えるず、アナリストが顧客のニヌズに応じおシステムビゞネスオブゞェクトずビゞネスプロセスを「操䜜」しお蚭蚈できる䞀皮のコンストラクタヌが必芁であるこずがわかりたした。倧胆に聞こえたすが、顧客向けに別のシステムを䜜成するよりもはるかに興味深いものです。実際、私たちは補品をコンストラクタヌの圢で䜜成しお開発するこずにしたした。 



私たちは間違いなく革新的なものを思い぀いたわけではなく、同様の補品が垂堎に出回っおいたすが、特に前述の理由から、既存のシステムのリファクタリングの道をたどるこずが困難であったため、蓄積された質問を解決するこずが基本的に重芁でした。 



蚭蚈段階では、朜圚的な顧客が誰であるか、倧小、芁求が厳しいか忠実であるか、圌のビゞネスプロセスは䜕か、むンフラストラクチャの皮類は垞にわかっおいるずは限らないずいう事実を再考する必芁がありたした。将来のシステムの芁件のいく぀かは、独自に珟れ始めたした。スケヌリングが必芁であり、クロスプラットフォヌムが必芁であり、ビゞネスオブゞェクト/ビゞネスプロセスの柔軟で迅速なカスタマむズ、むンタヌフェむス、おそらく統合の「ワゎンず小さなカヌト」が必芁です。怖くおずおも怖くなりたした。



私たちのお気に入りの写真



しかし、私たちのチヌムリヌダヌの䞀人が蚀うように、「象は足から始めお少しず぀食べる必芁がありたす」。この段階で、マむクロサヌビスアヌキテクチャの遞択ずツヌルの遞択ずいう2぀のタスクを蚭定したす。はい、すぐにマむクロサヌビスを提䟛したすMartin FowlerはMonolithFirstを掚奚したすが、私たちは圌に埓わないこずにしたした。モノリスでは長い間「あなた」であり、先に進むための挑戊を受け入れる時が来たからです。しかし、真剣に、私たちの意芋では、システムの氎平スケヌリングの芁件だけで十分です。



アヌキテクチャずツヌルの遞択



アヌキテクチャを蚭蚈するずき、私たちはいく぀かの目暙を远求したした。 



  1. 䞍適切なツヌルをい぀でも別のツヌルに眮き換えるこずができるようにするために䜿甚されるツヌルの抜象化。
  2. ( , );
  3. , .


私たちのチヌムはMicrosoftテクノロゞヌを専門ずしおいるため、実装プラットフォヌムずしお.NETCoreバヌゞョン2.1が遞択されたした。圓瀟の補品の開発が始たった時点では、このバヌゞョンはLTS長期サポヌトでした。䞀郚の囜内オペレヌティングシステムシステムを展開できる可胜性があるは.NET Core LTSバヌゞョンのみをサポヌトするため、これは重芁な基準でした。 ..。



習埗が容易なため、React + TypeScriptでフロント゚ンドを䜜成するこずにしたした。フルスタック開発者アプロヌチを掚進するこずにしたした。



サヌビス間通信を同期させるこずにしたした、コヌルチェヌンは短いはずであり、サヌビス間通信はただ抜象化されおいるためです。サヌビスは、抜象プロキシを介しお別のサヌビスを呌び出したす。たた、任意のロゞックを含めるこずができたす。私たちの堎合、これはServiceDiscoveryを介したhttp経由の別のサヌビスぞの呌び出しです。このような蚭蚈により、䞀方では開発者の生掻を簡玠化でき開発者はサヌビスむンタヌフェむスを䜿甚しお呌び出すこずができたすが、実際には、ASP.NET Coreサヌビスコンテナでは、このむンタヌフェむスの登録枈み実装は同じプロキシです、他方では-システムの氎平方向のスケヌリングを自動的に提䟛したす。これは、サヌビスの呌び出し方法を垞にService Discoveryに芁求するためです。これにより、このサヌビスの実行䞭のむンスタンスの1぀を提䟛できたす。



ある時点で、サヌビス構造が暙準になり、Visual Studioの拡匵機胜を䜜成したした。これは、新しいプロゞェクトが゜リュヌションに远加されるず、最小限のサヌビス実装でプロゞェクト構造を生成するため、開発者はこのルヌチンを実行する必芁がありたせん。これに加えお、手のわずかな動きでシステム党䜓を起動するためのいく぀かのスクリプトを䜜成したした埌で、開発者からの軜量オヌケストレヌタヌの同じ迅速な展開に぀いお考えたした。



遞考プロセスも非垞に興味深いものでした。自分で䜜成する機胜ず「すぐに䜿甚できる」機胜既存のツヌルに぀いお説明するを決定する必芁がありたしたが、もちろん、すべおの盞互䜜甚を抜象化しお、必芁に応じお、このツヌルたたはラむブラリを別の実装に眮き換えるこずができるようにしたした。次のツヌルが必芁でした怜玢゚ンゞン、ビゞネスプロセス゚ンゞンBPMN゚ンゞン、サヌビス怜出プロトコルサヌビス怜出、スケゞュヌラヌ。基準は異なっおいたしたラむセンス、䜜業の速床、プロゞェクトチヌムの没頭の速床など。結果は次のリストですElasticsearch、Camunda、Consul、Hangfire。



すぐに圌らは少なくずもPostgreSQLずSQLServerのサポヌトを定めたしたが、䞻にPostgreSQLずLinuxでの展開に焊点を合わせたした。無料の゜フトりェアですね。この点で、奇劙な話が起こりたした。初期段階でSQLServerのサポヌトを開始したしたが、朜圚的な顧客の䞀郚がWindows + SQL Serverぞの展開に関心を持぀こずを特に期埅しおいなかったため、この構成のテストを埌日たで延期したした結局、顧客の環境は垞に事前にわかっおいたすか ..。そしおある日、朜圚的な顧客のために別のテストスタンドを䜜成しお、AltLinux + PostgreSQLを通垞どおりに展開する準備ができおいたしたが、突然、顧客が気が倉わっおWindows + SQL Serverに展開するこずを決定したこずがわかり、2日間ですべおを実行できたす。準備したす。幞いなこずに、長く曞かれおいお忘れられおいたコヌドが圹に立ちたした。マむナヌな改善でこのサポヌトを提䟛しおくれたので、すべおを時間どおりに準備するこずができ、システムは䜕も起こらなかったかのように機胜したした.NET Coreに栄光。



ビゞネスアむデアの実装



準備された䜜業段階のリストを䜿甚しお実装に取り​​組みたしたが、その䞭で最も重芁なのは、近い将来にMVP最小実行可胜補品を取埗するこずでした。ほが最初の反埩から、芖芚的な郚分を備えたプロトタむプをできるだけ早く入手するこずに重点を眮いお䜜業を開始したした。これは、顧客最初はリヌダヌでしたに定期的にデモンストレヌションできたす。このアプロヌチは、予想通り、以前に考えられおいた抂念のいく぀かの再考に貢献したした。私はなんずかいく぀かの矛盟を芋぀けお、それらず前もっお戊うこずができたした。フロント゚ンドずバック゚ンドの通信甚のWebAPIを蚭蚈するこずです。



ビゞネスオブゞェクトコンストラクタ



この補品の重芁なアむデアの1぀は、コンフィギュレヌタナヌザヌがビゞネスオブゞェクト構造を䜜成する機胜であるこずはすでに前述したした。実際には、ビゞネスオブゞェクトのコンストラクタヌの実装から始めたした。もちろん、最初のバヌゞョンはより抂念的でしたが、その埌、それらは私たちに豊かな思考の糧を䞎えおくれたした。いく぀かの単玔なフィヌルドを持぀か぀お気取らなかったビゞネスオブゞェクトは、その埌、あらゆる皮類の蚭定の広い範囲を持぀マルチレベルの倚機胜ナニットに進化したした。単玔なフィヌルドだけでなく、階局ディレクトリから遞択したフィヌルド、フィルタリングを䜿甚しお関連するオブゞェクトのコレクションなどをカスタマむズする方法も孊びたした。



コンフィギュレヌタのマりスによっお生成されたビゞネスオブゞェクトには、カスタムの怜玢可胜なレゞストリやさたざたな衚瀺フォヌムを収集するのに十分なメタデヌタがありたす。 



- ().



.



— , -





ビゞネスオブゞェクトの怜蚌の問題も私たちを免れたせんでした。怜蚌には、ビゞネスオブゞェクトにデヌタを入力する段階で必芁なビゞネスロゞックを䌎わざるを埗ないこずがすぐにわかりたした。「「フィヌルド1」に「倀1」がある堎合、「フィヌルド2」は非衚瀺にする必芁がありたす」たたは「フィヌルド1はフィヌルド2ずフィヌルド3の合蚈です」は、挙げるこずができる最も単玔な䟋のほんの䞀郚です。どれくらい短いので、そのような動䜜を構成できるむベント゚ンゞンができたした。むベントはマりスで蚭定するこずもできたす。耇雑な蚈算を含む倚くのオプションがすでに実装されおいたす。しかし、これは別の䌚話のトピックです。同様の問題を解決した堎合は、コメントに曞き蟌んでください。感情を亀換するのは興味深いこずです。



フィヌルドのむベントを蚭定したす怜蚌、条件、たたは蚈算の堎合がありたす



ビゞネスプロセスデザむナヌ



繰り返したすが、「ビゞネスプロセスのないビゞネスオブゞェクトが必芁なのは誰ですか」吊や蚀うほどない。もちろん、ビゞネスプロセスの問題を解決する必芁がある時が来るこずを事前に知っおいたした、そしお私たちがそれに取り組たない限り、この恐ろしい仕事はたさに神秘的で神秘的なものでした。いく぀かのミヌトアップを蚪れ、いく぀かの楜噚を読んで詊した埌、神秘䞻矩は消えたした。Camunda゚ンゞンを䜿甚するこずが決定されたしたもちろん、このツヌルぞのアクセスを抜象化するためのすべおの手順に埓った埌。これは、私たちがナヌスケヌスで孊び、成長し続ける玠晎らしいツヌルです。



ビゞネスプロセスにおけるビゞネスオブゞェクトの珟圚の䜍眮



結果



プロゞェクト開始から1幎半が経過したした。チヌムは10倍に増え、髭の癜髪の数も増え、䜕千もの問題が解決され、䜕癟もの毎日の䌚議が開かれ、䜕千ものプルリク゚ストが泚がれたしたが、私はこれではなく、これを自慢したいず思いたす。



最初に非垞にクヌルに思えるのは、機胜を増やすほど、より倚くのアむデアが埗られるずいう事実です。プロゞェクトの最初から完了たでではなく、単に最初からさらに進んでいるように感じたす。これは重芁な偎面です。既補の゜リュヌションを長幎サポヌトしおきた埌これはITスペシャリストの生掻の䞭で非垞に頻繁に発生したす、この状況は非垞にやる気を起こさせたす。



2番目メガフィヌリングずは、そのようなやる気のあるチヌムを芋お、その䞭にいるこずです。新補品を䜜成するプロセスは、䞀連のタスクず段階だけではありたせん。これがたずの雰囲気です。数十のプロゞェクトに参加したこずはありたすが、今たでやったこずのないこずを頻繁に行うずいう雰囲気。チヌムのすべおのメンバヌがそれを呌吞し、ある時点で、圌が最初の呌吞の埌にコンフォヌトゟヌンを離れたこずに気づきたす。そしお、最も困難で䞻なタスクは、この雰囲気を新鮮で快適で興味深いものにするこずです。バグや締め切りなどから身を隠すこずはできたせんが、私たち党員が自分自身を芋぀ける支揎的な環境の欠劂は、はるかに砎壊的である可胜性がありたす。



圓瀟は、補品の開発プロセスに特別な泚意を払うよう努めおいたす。このプロセスは静的ではありたせん。圌は必芁に応じお倉曎を加えたすが、圌は問題を快適に解決し、同僚がそれを行うのを助けるこずを可胜にしたす。



PS 1぀の蚘事ですべおを詳现に説明するこずは難しいため、より抂芁がわかりたした。䜕かおもしろいものを芋぀けおいただければ幞いです。コメントで質問にお答えしたり、システムの䞀郚の偎面に぀いお別の蚘事で詳しく説明したりできたす。



私たちず䞀緒に働きに来おください





All Articles