みなさんこんにちは! 私の名前はYura Buylovで、CarPriceの開発を担当しています。 同社は動的に開発しているため、実験の速度が重要な役割を果たしています。 今日は、外部サービスとの統合のために、同じタイプの単純なタスクの無限のストリームから開発者を救う単純なツールについてお話したいと思います。
モチベーション。 なぜフギン
市場には、管理者がアクションの単純なチェーンを構築できるサービスが多数あります。たとえば、次のとおりです。
- 顧客の苦情
- 事実を日記に記録する
- Telegramにメッセージを送信します
私たちはすでにそのようなタスクにZapierを積極的に使用していますが、セルフホスティング、スケーラビリティ、および処理されたタスクの数の制限がないことが重要です。 そこで、マネージャーと開発者の両方に役立つ、シンプルで迅速な統合のためのツールを探し始めました。 アプローチ自体は新しいものではなく、EIP(エンタープライズ統合パターン)の単純化された実装に似ています。 当然、「流血の企業」の世界からいくつかのソリューションを試しました(Mulesoft、Jboss Fuse、WSO2、Servicemix、Corezoid)。 専有ソフトウェアのベンダーと交渉しました。 それはそうではありません:長く、高価で、複雑で、不快です。
それで私たちはフギンに来ました。
- オープンソース-githubの16,000以上の星。
- RoRで記述されています-独自のコンポーネントを変更して記述できます。
- 展開と拡張が簡単です。
- エントリのしきい値が低い。
Huginnを使用する場所
資本の統合のために、システムパフォーマンスに不可欠な各サービスのアダプターを備えたRabbitMQを使用します。
キューサイズ、サービスの可用性、およびコンポーネントの状態の監視が構成されています。 ただし、このようなスキームで変更を加えてドキュメントを最新の状態に保つことは有益ではありません。
Huginnを使用して、高い信頼性を必要としない実験とシンプルで高速な統合を実現しています。
- 内部電報チャネルでのオークションの公開、
- 通知のトリガー:苦情、違反、メトリックのピークとドローダウン、
- exponea、expertender、piwikなどの外部システムにデータをプッシュします。
フギンとは
当初、Huginnは、インターネット上でタスクを実行するエージェントを起動するために考案されたプラットフォームです。 ページの解析、イベントの追跡、およびユーザーに代わってアクションを実行します。 エージェントはイベントを作成および受信し、チェーンに沿って互いにイベントを渡します。
Huginnは、Pipelineのカスタム要素として使用できる多くの組み込みエージェントを提供します。 エージェントはスケジュールに従って実行したり、他のエージェントからイベントを受信したり、結果を処理してチェーンのさらに下に転送したりできます。
- Webhookエージェント -外部ソースからのPOSTリクエストを受け入れます。
- ポストエージェント、ウェブサイトエージェント -指定されたURL、JSON、HTMLまたはXML解析にリクエストを送信します。
- DeDuplication Agent-一意のキーで重複イベントを渡しません。
- Event Formatting Agent-メッセージ内のフィールドを再マッピングできます。
- JavaScriptエージェント -任意のJSコード(V8、therubyracer)を実行します。
完全に統合するには、データベース内の変更を追跡できるエージェントのみが必要であり、Huginnでエージェントを作成するのが非常に便利なので、自分で作成しました。
huginn_mysql2_agent
判明したように、3つのエージェントでほとんどのケースをカバーしています。
- Mysql2Agent -pollimデータベースの変更。 サンプルラインごとにイベントが生成され、チェーンを通過します。
- EventFormatting- 液体テンプレートを使用して着信メッセージをフォーマットします。
- JsonAPIAgent-外部または内部APIを呼び出して、データを送受信します。
使用例
Telegramチャネルでの新しいオークションの公開
以下は、実装された最初のチェーンの1つです。 エージェントはcreated_atを使用してデータベース内の新しいオークションを毎分チェックし、内部APIを介して車に関するすべての情報を受信し、Telegramにメッセージを送信します。
最も注目すべきことは、インターフェースが直観的であり、現在の構成がグラフの形で視覚化されることです。 したがって、そのような統合は開発リソースを必要とせず、管理者とインターネットマーケティング担当者の努力によって行われます。
パーソナルSMSの推奨事項
以下は、smsによって個人向けの推奨事項をディーラーに提供する実験の例です。 新しいオークションごとに、内部推奨システム(LSTM RNN)のAPIに従ってディーラーのリストを取得し、データベースから電話番号を取得し、urlshortenerを使用してオークションへのリンクを短縮し、外部メールサービス経由でSMSを送信します。
マーケティングツールとの統合
以下は、マーケティングツールとの統合スキームの一部である、exponeaサービスです。 その実装中に、単一の開発者が傷つけられることはありませんでした-単一のマネージャーによる実装とサポート。
展開して試してください
Huginnを試す最も簡単な方法は、Dockerにデプロイすることです。
docker run -it --name huginn \ -p 3000:3000 \ -e ADDITIONAL_GEMS="huginn_mysql2_agent(git: https://github.com/yubuylov/huginn_mysql2_agent.git),huginn_jsonapi_agent(git: https://github.com/yubuylov/huginn_jsonapi_agent.git)" \ huginn/huginn
http:// localhost:3000 /
ログイン:admin、パスワード:password
外部MySQLデータベースを使用し、Webインターフェースとイベントハンドラー用に異なるインスタンスを個別に実行できます。これにより、拡張が容易になります。
ご清聴ありがとうございました。 この投稿が役に立つことを願っています。そして、Huginnが誰かがクールなプロジェクトのために少し時間を空けるのを助けるでしょう!
便利なリンク
→ Of.repository
→ ドッカーへのインストール
→実稼働環境
→ エージェントのリスト