通知センタヌ。 200以䞊のニュヌスレタヌを䜿いこなす

みなさんこんにちは この蚘事では、通知センタヌの䜜成方法を説明したす。通知センタヌは、10幎にわたる倧芏暡なシステムのフレヌムワヌク内でナヌザヌずのコミュニケヌションの質を解決するシステムです。



圓瀟のシステムは、9぀の方法で35のシステムから206の異なる通知を送信したす。 これが仕事の最前線です。 この巚人のために、単䞀の通信プラットフォヌム-通知センタヌ-を䜜成したした。









あらゆる情報システムが開発され、たすたすナヌザヌず連絡を取り始めたす。 最近泚文したオンラむンストアを考えおみおください。 圌は泚文に関する情報、ニュヌスレタヌ、新しいプロモヌションのプッシュ通知、SMSを含む手玙を送信し、゜ヌシャルネットワヌクでも掻躍しおいたす。 そしお、おそらくこれらのメッセヌゞの構成が異なるこずに気づいたでしょう。 そしお、音質ず品質がどれほど異なる可胜性があるか-゜ヌシャルネットワヌクにはきちんずしたテキストずハッシュタグがありたすが、私はそれを読たずにスパムに手玙を送りたいです。







タスク認識



たず、次のパラメヌタヌを䜿甚しおこれらすべおのメッセヌゞを分析したした。



•これらのメッセヌゞの受信者は誰ですか。

•どの配送戊略即時、スケゞュヌル、集蚈、

•メッセヌゞのテンプレヌトがありたすか、

•送信の信頌性、

•コヌポレヌトアむデンティティず䞀臎するかどうか、

•倚蚀語のサポヌトがありたす。



蚀い換えれば、私たちは䜕を誰に送るのかを知りたかったのです。 そしお、ここに我々が埗た結果がありたす。







私たちは、メッセヌゞが効率的に配信され、その意味を保持する通知の単䞀のコンベダヌに来たいず思いたした。



通知を送信し、「サブスクリプション」、「ロヌカリれヌション」などの゚ンティティを理解するためのビゞネスシステムからの負担ず責任を取り陀きたいず考えおいたす。



私たちのコンセプトでは、情報システムは、メッセヌゞの件名/タむプによっお、どのように、い぀、誰に、どのチャネルを介しお配信する必芁があるかを認識するスマヌトパむプラむンを備えた集䞭型ミニ゚ディションになる必芁がありたす。 そしお配垃したす。



具䜓的には、これらが私たちの䞻な目暙です。



1.ゲヌムのルヌルに同意し、すべおの通知を単䞀の品質にしたす。 すべおの通知を分析し、5぀のシステムが同じ情報を異なるデザむンでナヌザヌに送信した堎合の状況を削陀したす。 UIず通知リテラシヌ、通知送信の保蚌、ビゞネスシステム開発者からの送信通知の監芖に察する責任を取り陀きたす。 代わりに、単䞀の蚭蚈ず機胜を備えたすべおの通知テンプレヌトず、これらの問題に察凊する別のチヌムが保存される集䞭システムになりたす。



2.タむムリヌな出荷を確保したす。 情報を送信する頻床ず送信する通知のタむプを構成できたす。 ビゞネスのリク゚ストに応じお新しい通知をすばやく远加できるようにしたす。 たずえば、泚文のキャンセルに関する情報はできるだけ早く配信する必芁がありたすが、販売や新しいコレクションに぀いおは週に1回話すこずができたす。



3.保蚌された送信情報を提䟛したす。 最も倚くのオンラむンチャネルを送信するための重芁なメッセヌゞ-これはSMS、むンスタントメッセンゞャヌです。 たたは䞀床に。 反応がない堎合は、同じチャネルたたは他のチャネルで監芖および耇補したす。



4.単䞀のコミュニケヌションスタむルを維持したす。 コミュニケヌションシステム手玙ずメッセヌゞのテンプレヌトを䜜成し、それに固執したす。 これは統䞀されたUIず線集ポリシヌです 。



5.コミュニケヌションをパヌ゜ナラむズしたす。 私たちが個人ず通信するずき、および法人ず通信するずき、圌が䜏んでいるタむムゟヌンを区別したす。



6. Vigil、぀たり、監芖ずセキュリティを蚭定したす。 添付ファむルを盎接送信するのではなく、開いたずきにセキュリティチェックが実行され、ダりンロヌド統蚈が収集される添付ファむルぞのリンクを送信したす。 保蚌された送信を提䟛し、誰に送信されたかを監芖したす。



既補の゜リュヌションはどうですか



垂堎には、必芁な機胜の䞀郚を実行するボックス化された゜リュヌションがありたす。 たずえば、BizTalkでは、むベント通知を埋め蟌み、最終的にこのメッセヌゞを構成する特別なパむプを構成できたす。 Dynamics CRMおよびSharePointには、むベントに応答する蚭定がありたす。 原則ずしお、これは誰かがどこかでボタンをクリックしたずいう事実に芁玄され、その結果、メヌルが送信されたした。 集玄ポリシヌや矎しいUIなど、より耇雑なものは問題倖です。



AzureずAWSには、既補のコンテンツを取埗しおニュヌスレタヌを電子メヌルに送信できる倚くのサヌビスがありたす。 すべおのコンテンツを手動で準備する必芁があるこずがわかりたした。 そしお、通知センタヌの目的は、コンテンツを正確に準備するこずです。



そのため、この堎合、UIを構成する必芁のあるすぐに䜿甚できる゜リュヌションに䟝存しないようにし、システム自䜓がどこかに接続しお必芁なものすべおを匕き出すようにしたした。 そのようなこずはそのたたでは機胜したせん。それらはあなたの手で行われる必芁がありたす。 このような堎合のボックス化された゜リュヌションには、メタ蚀語ず構成の䜿甚が含たれ、最終的には構成の問題になりたす。 しかし、私たちはビゞネスの特定のニヌズに察応した゜リュヌションを埗たした。 新しいタスクの構成ず远加は簡単です。



コンベアを組み立おたす。 通知センタヌのアヌキテクチャ



私たちにはビゞネスシステムがありたす-これらはビゞネスの䞻なタスクを解決するシステムです。 これらは通知センタヌずは別に機胜し、ナヌザヌずの通信を凊理すべきではありたせん。



理想的には、そのようなシステムは、䜜業や他のシステムずの盞互䜜甚に必芁なビゞネスむベントを生成するだけであり、通知センタヌは単に近くに自分自身を接続し、これらのビゞネスむベントの別のリスナヌになり、必芁最小限の入力でアクションのシグナルずしおそれらに反応したす情報。 さらに、通知センタヌはむベントに必芁な情報を远加しお凊理し、出力で1぀たたは耇数の通知を送信する準備ができたす。各通知は、適切な蚀語で、必芁なすべおの情報で、関心のあるナヌザヌに個別に察応したす。



技術的には、これはすべお、次のような情報凊理コンベダヌに配眮されたす。







1.むベントの組み立お



すべおは、ビゞネスシステムからデヌタをむンタヌセプトたたは意図的に収集し、さらに凊理するためにむベントの「生の」ストリヌムずしお保存するむベントアセンブリから始たりたす。



開発の芳点から芋るず、むベントコレクタは、別のタむプのむベントの凊理を非垞に迅速に远加できるように蚭蚈されたホストシステムです。



圓初から、デヌタ収集甚のメガシステムずいう抂念を攟棄したした。これには、独自のメタ蚀語ず奇跡のUI蚭定があり、あらゆるシステムに接続しお組み立おるこずができたす。 代わりに、システムの基盀を利甚可胜な最も柔軟なツヌルであるプログラミング蚀語にし、次のビゞネスむベントの凊理を、むベントをどこで䜕に倉えるかを知っおいる小さな叀兞を曞くこずに枛らすこずに焊点を圓おたした。 次に、このクラシックはデヌタ収集のホストシステムにスロヌされ、パむプラむンの別の芁玠ずしお機胜し始めたす。



デヌタ収集時に、それらは「暙準圢匏」に削枛されたす-各むベントは䞀意の識別子を受け取りCorrelationIdが取埗され、ビゞネスシステムで既にむベントに割り圓おられおいたす、むベントの日付が決定されたすDateTime.Nowたたは到着したビゞネスデヌタの日付はケヌスによっお異なりたす 、むベントのタむプなど、およびすべおのむベントは、さらなる凊理のためにむベントの䞀般的なストリヌムに保存されたす。 コレクタヌは、むベントデヌタに盎接興味はありたせん。圌は、比data的に蚀えば、むベントデヌタを゚ンベロヌプでラップしたす。 封筒の圢匏は暙準的ですが、内容は異なりたす。



2.デヌタを保存する堎所は むベントストア



䞊で曞いたように、むベントの収集時に、それらはさらなる凊理のために共通のストリヌムに保存されたす。 デヌタを保存する方法の問題を解決するために、 EventStoreず呌ばれる、広く知られおいる狭いサヌクル補品を遞択したした。 ずころで、EventStoreのむデオロギヌ家の1人はGreg Youngで 、その名前はCQRSやむベント゜ヌシングなどの抂念ず密接に関連しおいたす。



メむンペヌゞの定矩によるず、EventStoreは「JavaScriptでの耇雑なむベント凊理を備えた機胜的なデヌタベヌス」です。 EventStoreを自由圢匏で定匏化しようずするず、これはデヌタベヌスずメッセヌゞブロヌカヌの非垞に興味深いハむブリッドであるず蚀えたす。



ブロヌカヌから埗られる利点は、EventStoreが新しいむベントに関するリスナヌぞの通知、メッセヌゞ配信の保蚌、競合凊理、どのサブスクラむバヌがすでに読んだメッセヌゞを远跡するなど、リアクティブシステムを構築できるこずです。



ただし、メッセヌゞブロヌカヌずは異なり、デヌタは受信者によっお読み取られた埌、EventStoreから削陀されたせん。 これにより、アトミックむベントでの事埌䜜業だけでなく、デヌタベヌスのように履歎デヌタの配列でも䜜業できたす。 ずころで、むベントストアの最も高床な機胜の1぀は、時間の経過に䌎うむベントのシヌケンスを分析できる䞀時ク゚リを䜜成する機胜です。これは通垞、「埓来の」デヌタベヌスを䜿甚しお行うのは困難です。



通知センタヌの堎合、EventStoreの䞡方の可胜性が需芁があるこずが刀明したした。 リアクティブサブスクリプションモデルを䜿甚しお、即時通知の生成ずむベントデヌタの充実以䞋に぀いおを実装したした。 そしお、 予枬の助けを借りお、むベントのシヌケンスの分析を敎理したした。



a。 「 の抂芁/週/月/幎」の粟神で集玄むベントを生成したす。

b。 さたざたなタむプのむベントのシヌケンスを分析し、それらの間の興味深いパタヌンを芋぀け、むベントのピヌクを远跡し、䞀般的に。



3. BLOBストレヌゞ



通知センタヌの開発䞭に発生したデヌタストレヌゞに関連する別の問題は、ファむルの操䜜です。 倚くの堎合、通知のファむルをナヌザヌに送信する必芁がありたす。



最も簡単な䟋は、レポヌトをメヌルで送信するこずです。 そしお、あなたができる最も簡単なこずは、添付ファむルずしおメヌルにファむルを添付するこずです。 しかし、シナリオを開発するず、そのような゜リュヌションにはいく぀かの制限がすぐにありたす。



  1. 送信埌、ファむルの運呜に぀いおは䜕も知りたせん。 開かれたかどうか、䜕回、誰が開いたか。
  2. メヌルではすべおが簡単ですが、SMS通知にファむルを添付するこずはできたせん。
  3. ファむルを添付ファむルずしお送信するずきのメヌルサヌバヌの远加負荷。
  4. 同じファむルが倚くのナヌザヌの関心を匕く可胜性がありたす。


これらすべおの問題に察する最も簡単な解決策は、ファむルではなくリンクを送信するこずです。 そのため、メヌルサヌバヌも読み蟌たず、ファむルで䜕が起こっおいるかを監芖し、セキュリティチェックを実行しお、ナヌザヌがこのファむルを本圓に芋るこずができるこずを確認するこずもできたす。



䞀方、これには玔粋に実甚的な意味がありたす。 ファむルは、むベントが発生した瞬間からむベントに添付できたす。 たずえば、ビゞネスむベントの本質が特定の日付の航空茞送の予玄システムから亀換ファむルである堎合。 たたは、たずえば先月にむベントのパケットを凊理した結果ずしおファむルを生成できたす。



䞀般に、ファむルはむベントの存続期間の最初から存圚する可胜性があり、通知センタヌのコンベダヌ党䜓に倧量のコンテンツを「ドラッグ」しおも意味がありたせん。 最初にファむルを特別なサヌビスに保存し、むベントでその識別子を保存できたす。 たた、通知を送信するずきに必芁なファむルを取埗できたす。



そのため、別の非垞にシンプルなサヌビス-Blob Storageが生たれたした。このサヌビスでは、POSTリク゚ストでファむルを保存し、応答でGUIDを取埗できたす。 たた、受信したGUIDを䜿甚しおGETリク゚ストをサヌビスに送信するこずもできたす。その代わりに、ファむルが返されたす。 そしお、すべおのセキュリティチェック、統蚈収集など-これらはすでにBlob Storageサヌビスの内郚問題です。



4.デヌタの充実



そのため、珟時点では、むベントアセンブリの段階ず、むベントずファむルに関する情報の保存方法に぀いお怜蚎したした。 デヌタの凊理が始たる段階、぀たり匷化段階に進みたしょう。



以前に収集された「暙準的な」むベントは、このステヌゞの入力に入りたす。 出力では、既に受信者、特定の蚀語のメッセヌゞのテキストが含たれおいる0からN個の準備完了通知が埗られ、通知を送信する必芁があるチャネル電子メヌル、電報、SMSなどは既に明確になっおいたす。



この段階で、初期むベントに次の操䜜を行うこずができたす。



元のデヌタセットぞの远加



基本的に、この操䜜のおかげで、ステヌゞ党䜓が「゚ンリッチメント」ず呌ばれたした。 デヌタ远加の最も単玔な䟋-「暙準的な」むベントで、ナヌザヌIDが来たした。 この段階で、通知テキスト内の名前でナヌザヌにアクセスできるようにするために、ナヌザヌのIDでナヌザヌの名前を芋぀け、芋぀かった情報で元のむベントを補足したす。



各「゚ンリッチメント」は個別の小さなクラスであり、むベントコレクタヌずの類掚により迅速に曞き蟌たれ、共通のパむプラむンに「投げ蟌たれ」たす。これにより、必芁な情報がすべお入力に送信され、結果が必芁な堎所に保存されたす。



集玄、むベントシヌケンス凊理、時間分析



ここではすべおが非垞に簡単です。 アプロヌチは匷化の堎合ず同じですが、アグリゲヌタヌクラスはスケゞュヌルに埓っお起動され、ストリヌム内の新しいむベントに応答したせん。 䞀般的な堎合、このようなハンドラヌを実行するず、異なるタむプの新しいむベントが生成されたす。このむベントは、生成元のデヌタに基づいお同じ暙準ストリヌムに分類されたす。 さらに、この新しいむベントも同様に匷化、集玄などを受ける可胜性がありたす。



匷化埌、むベントの䜜業の最終段階が始たりたす。



5.通知の生成



通知は、JSONデヌタだけでなく、既知の受信者、送信チャネル電子メヌル、SMSなど、および通知テキストを含む完党に特定のメッセヌゞであるずいう点で、むベントずは異なりたす。



通知の生成は、必芁なすべおの匷化が適甚された盎埌に開始されたす。



本質的に、これは、このタむプのむベントにサブスクラむブし、1぀たたは別のテンプレヌト゚ンゞンを介しお元のJSONデヌタを実行し、サブスクリプションで指定されたチャネルのメッセヌゞテキストを生成するナヌザヌずの着信むベントの単玔な結合です。 その結果、1぀のむベントから0〜N個の通知を受け取りたす。



次に、簡単なこずは、受信した通知を察応するストリヌムに抌し蟌むこずです。そこから、レタヌ、SMSメッセヌゞなどの送信に関係するマむクロサヌビスによっお枛算されたす。 しかし、これらはすべお明癜で面癜くないものであり、読者の泚意を無駄にしないでしょう。



6.サブスクリプション



怜蚎するモゞュヌルの最埌のモゞュヌルは、ナヌザヌによるサブスクリプションをセットアップするためのモゞュヌルです。



アむデアは簡単です-誰がどのタむプの通知に興味があるか、カスタマむズ甚のUIに぀いおの情報を保存するデヌタベヌスです。







ナヌザヌが賌読を垌望する堎合、ナヌザヌは興味のある通知の皮類を遞択し、蚭定りィンドりを開きたす。 通知のタむプごずに、1぀以䞊の送信チャネルを䜿甚できたす。 ここでは、ナヌザヌは蚭定の最小数を瀺したす。電子メヌルの堎合は電子メヌル、Telegramの堎合は電話番号、必芁に応じおテストメッセヌゞを送信しお、すべおが正しく構成されおいるこずを確認したす。



それだけです これで、特定のタむプのナヌザヌのサブスクリプションがあり、パむプラむンには同様のタむプのむベントがありたす。 むベントずサブスクリプションを暪断し、出口で準備完了通知を受け取りたす。



7.アクセス制埡



以前に考慮しなかったもう1぀の点は、アクセス制埡です。 䟋で説明したしょう。 取匕盞手が商品の代金を支払う時期になったずいう通知があるずしたす。 この通知は特定の取匕盞手に適甚され、すべおの取匕盞手ではなく、圌だけが受信する必芁がありたす。 したがっお、䞊蚘の皮類の通知だけでは、むベントの察象者を特定するには䞍十分です。



最も単玔だが最も倱敗した解決策は、カりンタヌなどの抂念を通知センタヌのロゞックに導入するこずです。通知センタヌには、たずえばコヌドがありたす。 たた、むベントの受信者を決定するずきは、むベントのタむプだけでなく、取匕先コヌドによっおも遮断したす。



なぜこれが悪いのですか 通知センタヌは、通知を送信するタスクからビゞネスシステムを保存するための独立したシステムずしお登堎したした。 しかし、そのような詳现を通知センタヌに導入するこずで、最終的には通知センタヌにビゞネスシステムからの倚くの知識を远加したす。



この堎合のこの問題の正しい解決策は、非垞にシンプルでありながら柔軟性がありたす。



システムの承認には、ADFS、぀たりクレヌムベヌスの承認を䜿甚したす。 クレヌムは基本的に単なる識別子ず倀のペアです。 定矩枈みのクレヌムセットがありたす-ナヌザヌ名、ナヌザヌロヌルを持぀クレヌムセットなど。 これらの皮類のクレヌムのキヌは事前に知られおおり、すべおのアプリケヌションの暙準です。 たた、カスタムクレヌムプロバむダヌを䜿甚しお、承認時にナヌザヌにさたざたな特定の属性を割り圓おたす。



たずえば、䞊蚘の取匕先コヌドは、ナヌザヌが取匕先である堎合、独自のキヌを持぀クレヌムずしお保存できたす。 たたは、ナヌザヌがいる地域のコヌド。 たたは、どのデバむスを所有しおいるのか、iPhoneたたはAndroid。 この方法で、意味のあるマヌカヌを保存できたす。



これはすでに問題の半分の解決策です。各ナヌザヌに䞀連のクレヌムがあるため、サブスクリプションがありたす。



むベントにクレヌムを远加するず、タむプだけでなくむベントずサブスクリプションを比范できるだけでなく、同じキヌを持぀むベントクレヌムずサブスクリプションクレヌムの䞡方が同じ倀を持぀こずも確認できたす。



「Yの倀を持぀クレヌムXを持぀むベント」の抂念は、「盞手方Yを察象ずしたむベント」よりもはるかに抜象的なものであるこずに泚意しおください。 通知センタヌにビゞネスシステムの詳现を远加する必芁はありたせん。



問題は、むベントに察するこれらの申し立おをどこで埋めるかです。 クレヌムの生成は、「支払いが必芁な堎合は取匕盞手のクレヌムを持たなければならない」ずいう粟神で、ビゞネス特有のものであるため、このロゞックをデヌタ収集段階に配眮したした。 コレクタヌは、少なくずもむベントずその構造を取埗する堎所を知っおいたす。 ぀たり、圌はすでにいく぀かのビゞネスコンテキストを持っおいたす。



支払いの必芁性に関するむベントの䟋では、カりンタヌパヌティコヌドは、ほずんどの堎合、コレクタヌが傍受した支払いの必芁性に関するビゞネスむベントの契玄で芋぀かりたす。 したがっお、コレクタヌは、契玄の目的のフィヌルドからカりンタヌパヌティコヌドを取埗し、むベントを通知センタヌパむプラむンに送信する前に、「キヌXず倀Yのクレヌム」の抂念に抜象化したす。



合蚈



これは、システムのさたざたなモゞュヌルで発生したさたざたなむベントに぀いお、さたざたなナヌザヌグルヌプに通知するプロセスを統合する問題を解決する方法です。 コンベダヌは単䞀であり、オムニチャネルを通知し、出荷は保蚌され安党です。たた、プラットフォヌム自䜓は開発に察しおオヌプンです。



All Articles