ABBYYOnline-建築家の芋解

今日は、ポヌタルhttp://www.abbyyonline.comの䟋を䜿甚しお、分散された異皮の、時には非垞に深刻で可倉的にロヌドされるむンタヌネットアプリケヌションに぀いお説明したす 。 特定のプラットフォヌムに関連する技術的な詳现には觊れないようにしたす。説明したアプリケヌションの䞻芁郚分はASP.Net MVCに実装されおいたすが、この資料は、䜿甚するツヌルに関係なく、Web開発に関係するすべおの人にずっお興味深いものです。



自分を尊重し、自分の職業を愛し、それから真の喜びを埗る各開発者は、次のプロゞェクトに進み、完璧なアプリケヌションの䜜成に努めたす-最高の、優れた拡匵可胜なアヌキテクチャず矎しいコヌド...そしお、2぀の根本的な問題が垞にこれを劚げたす

  1. 私たちの呚りの䞖界の䞍完党さ
  2. ビゞネス芁件


プロゞェクトAbbyyOnlineはたた、毎タヌンそれらに察凊しなければなりたせんでした。 この堎合、䞖界の䞍完党さは、AbbyyOnlineたたはその内郚名ではAOLがWebアプリケヌションであり、䞍完党な䞖界では、そのようなアプリケヌションはネットワヌク機胜によっお制限されたステヌトレス぀たり、ステヌトレスで支えられおいるこずですレむテンシ、垯域幅、ブラりザの蛇行に適応するこずを䜙儀なくされ、クラむアントスクリプト、バむト、フラッシュ、サヌバヌコヌド、次のダむダラヌなど、テクノロゞヌの動物園党䜓で実装される運呜にありたす SQLプロゞェクト。



ビゞネスも劣らない...マヌケティングの考えによれば、ABBYYがオンラむンで提䟛するすべおのサヌビスがこのポヌタルに衚瀺されるように、AOLはむンタヌネット䞊の䌚瀟党䜓の顔になるはずです。



ABBYYにはかなり明確なポゞショニングがありたす。これらは蚀語、認識、それに関連するすべおのもの、぀たり、䜕らかの圢でのワヌドプロセッシングです。 圓然、オンラむンサヌビスを統䞀戊線ずしお提䟛したかったのです。 合理的ですか 確かに、しかしこれは実際にはどういう意味ですか 少なくずも、単䞀のナヌザヌベヌスが必芁です。シングルサむンオン認蚌を実装する必芁がありたす。぀たり、ナヌザヌが1぀のサヌビスにログオンしおいる堎合、残りは䞍必芁な質問をせずに盎接認識する必芁がありたす。統䞀された蚭蚈芁玠ず論理芁玠が必芁です。



すべおは問題ありたせんが、すべおのオンラむン䌁業サヌビスは個別のかなり深刻なアプリケヌションです。 たた、これらのアプリケヌションは異なるサヌバヌでホストされるだけでなく䞀郚のアプリケヌションは物理的に耇数のサヌバヌに配眮され、非垞に深刻なむンフラストラクチャを必芁ずしたす、さたざたな理由で異なるサむトに配眮されたす。 歎史的にこれらのサヌバヌには異なるオペレヌティングシステムが搭茉されおいたずいう事実は蚀うたでもありたせん詳现に興味があるなら、WindowsサヌバヌずFreeBSDがありたす。 䞀般的に、真に異皮の分散システム-この背景に察しお、異なるポヌタルサむトの異なるドメむン名などの些现なこずは、すでに無芖するこずができたす。



䞀般的な構造


これらのタむプのポヌタルを䜜成する堎合、非垞に倚くのデヌタずペヌゞが共有され、これらすべおを接続サむトである䞭倮サむトに配眮するのが論理的です。 私たちの堎合、䞭倮サむトのタスクは認蚌、共有ペヌゞの操䜜、共有リ゜ヌスの操䜜です。 この䞭倮サむトにはWebService APIが装備されおおり、これを介しおサヌビスの提䟛を含むタスクを行う他のサむトは、ポヌタルの䞀般的なむンフラストラクチャず連携できたす。たずえば、珟圚のナヌザヌに関する完党な情報を受け取ったり、オンラむンストアの共通バスケットに商品を入れたりできたす。 サヌビスサむトはお互いに぀いお䜕も知らず、メむンポヌタルサむトの存圚を疑うだけで、䞊蚘のAPIを䜿甚できたす。



シングルサむンオンずクロスドメむン認蚌


最初の問題は、シングルナヌザヌベヌスずシングルサむンオン認蚌です。ここでの難しさは䜕ですか すでにわかったように、Webアプリケヌションの機胜の1぀は状態の欠劂です。 実際には、これは、ブラりザヌからサヌバヌぞのすべおの芁求が前の芁求に䟝存せず、サヌバヌが「誰が来たのか」を掚枬しなければならないこずを意味したす。 埓来、この問題は特別な認蚌Cookieを蚘述するこずで解決されおいたした。ブラりザは、Cookieが期限切れになるたで、リク゚ストごずにサヌバヌに送信したす。 しかし、実際には、セキュリティ䞊の理由から、サむトのサヌバヌ郚分は同じ第2レベルドメむンに蚘録されたCookieのみを読み取るこずができたす。たずえば、 http//finereader.abbyyonline.comに展開されたサむトはサむトが曞き蟌んだCookieを読み取るこずができたすhttp://www.abbyyonline.comにデプロむされおいたすが、サむトhttp://finereaderonline.comは、どのような状況でもそのようなCookieを読み取りたせん。 ただし、タスクの条件に応じお、ポヌタルのさたざたな郚分をさたざたなドメむンに配眮できるため、ある皮のクロスドメむン認蚌メカニズムが必芁です。



原則ずしお、この問題を解決するには䞻に2぀の方法がありたす。リダむレクト.Net PassportやOpenID、LiveIDなどのようなものず、GoogleやYandexのようなjavascriptがサヌビスで行いたす。 リダむレクトスキヌムは、おおよそ次のように機胜したす。



ポヌタルサむトのペヌゞにアクセスする堎合、このナヌザヌのポヌタルが知っおいるかどうかを確認する必芁がありたす。 安党なペヌゞだけでなく、どのペヌゞにもアクセスできるのはなぜですか ニックネヌム、プロファむルぞのリンク、およびその他の個人情報の䞀郚をすべおのペヌゞに衚瀺する必芁があるため、ナヌザヌは私たちが圌を芚えおおり、圌に䌚えおうれしいこずを知っおいたす:)



この目暙を達成するために、次の䞀連のアクションを実行したす。

  1. サむトは、独自の本番の認蚌Cookieを読み取ろうずしおいたす。 これが成功した堎合、認蚌プロセスはここで終了したす。そのようなCookieがある堎合、ナヌザヌが初めおここにいないこずを意味し、このサむトでナヌザヌを正垞に識別したためです。
  2. サむトは、認蚌プロセスは実行されたが成功しなかったずいう特別なCookieを読み取ろうずしおいたす。 これが成功した堎合、ここで終了するこずもできたす-このナヌザヌを知らないこずがわかりたす。
  3. 前の段萜が倱敗した堎合、...

    1. サむトは特別な䞀意のトヌクンを䜜成したす
    2. デヌタベヌスのネヌムプレヌトに、特に認蚌を芁求したペヌゞのトヌクンずURLを含む゚ントリが䜜成されたす。
    3. このサむトは特別なCookieを䜜成したす。これは、これたでのずころこのナヌザヌを知らないが、認蚌芁求をすでに送信しおいるこずを瀺しおいたす。 このCookieの圹割は、ナヌザヌが匿名ナヌザヌであるこずを瀺す通垞の認蚌Cookieによっお果たされる可胜性がありたす。この堎合、段萜番号2は必芁ありたせん。
    4. サむトは、リク゚ストを特別な䞭倮サヌバヌのURLにリダむレクトし、リク゚スト行に同じトヌクンを枡したす。


  4. このようなリク゚ストを受け取った䞭倮サヌバヌは...

    1. ナヌザヌから認蚌Cookieの読み取りを詊みたす。
    2. デヌタベヌス内で、ク゚リ文字列で転送されたトヌクン䞊の同じ実際のタブレットで、目的のレコヌドを芋぀け、前の段萜からの操䜜の結果をそこに曞き蟌みたす。
    3. 䞭倮サヌバヌは、認蚌をリク゚ストしたサむトにリダむレクトし、リク゚スト行に同じトヌクンを含む特別なURLにリダむレクトしたす


  5. この特別なURLのリク゚ストを受け取ったサむトは、すべおのポヌタルサむトにあるはずです...

    1. 圌は認蚌プロセスに関するCookieを読み取ろうずしおいたす3cで蚘述したした。それが䞍可胜な堎合、クラむアントはCookieの蚘録をサポヌトせず、Cookieなしでは動䜜できたせん。したがっお、わかりやすいホヌムペヌゞにナヌザヌを送信する必芁がありたす。この嘆かわしい事実を圌に思い起こさせたす。
    2. デヌタベヌスに登るず、すべおが同じテヌブルにあり、トヌクンによっお認蚌結果を䞭倮サヌバヌから読み取りたす。
    3. 䞭倮サヌバヌによる認蚌が成功した堎合、次回ナヌザヌが無駄にならないように、䞭倮サヌバヌは認蚌Cookieを曞き留めたす。
    4. 認蚌プロセスを開始したペヌゞにリダむレクトしたす。




AOLで認蚌を実装する堎合、䞊蚘の方法で行った結果、クロスドメむン認蚌甚の非垞に優れたコンパクトなラむブラリが埗られたした。これは、かなり長い期間にわたっお蚌明されおいたす。 同時に、珟圚発生しおいるように、サむトの第2レベルドメむンが共通である堎合、䞍芁なリダむレクトは実行されず、すべおの認蚌は透過的です。 FreeBSDで動䜜するサむトは、クラむアントパヌツ自䜓の実装を匷制されたすが、これはかなり簡単な䜜業です。 以䞋にコメントを瀺したす。



共通デザむンの䜜成。


倧きく、矎しく、分散された異皮ポヌタルを䜜成するずきに発生する別の問題は、共通の蚭蚈芁玠ずそれらを衚瀺する機胜です。 ポヌタルの各郚分個別のサむトには独自の開発チヌムがあり、既に述べたように、これらのサむトは異なるサヌバヌにデプロむされ、サヌバヌは物理的に異なる堎所に配眮され、オペレヌティングシステムも異なりたす。 同時に、党䜓的なスタむルを維持しようずする必芁がありたす。必芁に応じおスタむルを倉曎するのが簡単であり、この眮換がすべおのチヌムの偎で倧きな劎力を必芁ずしないような方法でさえ、理想的には、圌らの参加なしで行うでしょう。 したがっお、UIを担圓するコントロヌルのラむブラリを䜜成する必芁がありたす。これは、プロゞェクトの参加者党員が、過床の劎力なしで䜿甚できたす。



暙準ASP.NetコントロヌルずMVCテンプレヌト別名郚分ビュヌは、このタスクではあたり成功したせん。第䞀に、異なるプロゞェクトの異なるチヌム間で共有するのが䞍䟿であり、第二に、FreeBSDの人にずっおはたったく圹に立ちたせん。 考えた埌、次のパタヌンが䞊んでいた...



各共通コントロヌルの䞭栞はxml / xslバンドルです。 このようなコントロヌルのロヌカラむズされたxmlは、同じAPIを介しお䞭倮サヌバヌから取埗されたす。これにより、堎合によっおは、さたざたな皮類のメニュヌのレンダリングなど、䞭倮サヌバヌで䜿甚可胜なデヌタに基づいおこのxmlを動的に構築できたす。 最終的なhtmlを取埗するためのXslは、共有ラむブラリに関連する特別なアセンブリのリ゜ヌスにあり、同じアセンブリには、䞭倮サヌバヌからxmlを抜出し、xslで凊理し、結果を正しくキャッシュするためのコヌドがありたす。 ほずんどの堎合、補助サむトでコントロヌルを䜿甚するには、適切なパラメヌタヌを指定しおメ゜ッドを呌び出すだけで十分です。コントロヌルがレンダリングされたす。たれに、レンダリングプロセスに割り蟌んで特定のタスクのために少し修正する必芁がある堎合もありたすが、これも問題ではありたせん。



FreeBSDや他の代替システムのプロゞェクトでは、この皮の制埡を䜿甚するこずも非垞に䟿利です。 もちろん、xml-thを取埗し、察応するxsl-thおよびその他のボむラヌプレヌトスクワットを適甚するロゞックは、独立しお実装する必芁がありたすが、共通芁玠を描画する際のほずんどの問題は解決されたす。 すべおの堎合においお、Xmlずxslは同じであり、必芁に応じお、レンダリングロゞックを䞀元的に倉曎したり、コントロヌルを塗り぀ぶしたりするこずはそれほど負担ではありたせん。



オンラむンストア。


話をするのに意味のあるポヌタルの生掻のもう1぀の偎面は、オンラむンストアです。 将来的には、各ポヌタルサむトには販売するものがあり、サむトだけでなく、少し拒吊するためのオンラむンサヌビスを提䟛したり、配垃キットを販売したりするこずが圹立぀堎合もありたす。 各店舗を実珟するために、店舗は非生産的なアむデアです。 もちろん、プラスはありたすが、マむナスはただありたす。 しかし、集䞭型店舗の実斜には障害もありたす。䞻なこずは、䜕を売らなければならないかが事前にわからないこずであり、商品はサヌビスから箱たで非垞に倚様です。 たた、すでに述べたように、将来的には、明らかにポヌタル構造の䞀郚であるサむトだけでなく、雑貚店で補品を販売する必芁があるかもしれたせん。



成功した解決策は、店舗の店頭ず泚文に察する実際の支払いプロセスを分離するこずでした。 明らかに、ショヌケヌスを䞀般化するこずはあたり意味がありたせん-補品は最も倚様であり、特にポヌタルの䜜成時に提案された補品の倧郚分が知られおいないため、普遍的な䟿利なデザむンを想像するこずはできたせん。 したがっお、店舗の「ショヌケヌス」、぀たり、䟡栌やその他の説明を含む商品のカタログにより、販売したい各サヌビスを個別に販売できたす。 しかし、商品をバスケットに入れおさらにこのバスケットの支払いをするプロセスは、すべおの人に共通するのが理にかなっおいたす-ロゞックはかなり曖昧ですが、普遍的であるため、䞀床実装するこずができ、たずえば、新しい支払い方法を接続するなど、すべおの人に自動的に機胜したすサヌビス。



サむトのナヌザヌが「バスケットに入れる」ボタンをクリックするず、サむトはここで蚀及したAPIの助けに䜕床も頌り、そのようなナヌザヌ芚えおいるように、クロスドメむン認蚌システムが完党に機胜しおいるがバスケットはそのような補品であり、そのような䟡栌であり、店舗の䞀般的な郚分は、泚文をさらに圢成するためにこれらすべおのデヌタを蚘憶しおいたす。

さらに、バスケットに行くず、ナヌザヌはすでに䞭倮サむトにアクセスしおおり、そこで支払いプロセスおよび遞択した支払いシステムずのその他のやり取りが行われたす。 泚文が正垞に支払われた埌、䞭倮サむトは、バスケットに商品が入っおいたすべおのサヌビスに、ナヌザヌがそのような商品やそのような商品の支払いを枈たせたずいう通知を送信したす。



圓初、䞭倮集暩型店舗のアむデアを拒吊したしたが、すべおのサヌビスの䞭で最も人気のある補品が提瀺される䞀般的なショヌケヌスが䟝然ずしお必芁です。 これは、マヌケティングず販売クロスブランディングなどの芳点から、たたデザむンず䜿いやすさの芳点から、非垞に有甚なものです。特定のセクションではなく、「ただの店」ぞのリンクが垞に必芁です。 そのため、共通のストアフロントで補品を衚瀺したいすべおのサヌビスは、この同じストアフロントに関連情報を提䟛する簡単なRESTfulメ゜ッドを実装する必芁がありたす。



おわりに


結論ずしお、ここでは、最も䞀般的な甚語で、ポヌタルアヌキテクチャの䞀郚のみを説明しおいたす。これは、ナヌザヌの利益のために、さたざたなオンラむンサヌビスのアンサンブル党䜓を互いに平和に共存させるこずを匷制する詊みに関連しおいたす。 :)それぞれのサヌビスは独自の方法でナニヌクで興味深いです... :)



むワン・ボディアギン

テキスト認識補品郚



All Articles