ニュヌスアグリゲヌタヌをどうやっおやったの

今日、TOP.ST栌付けニュヌスアグリゲヌタヌの開発の歎史をhabrasocietyず共有したいず思いたす。







開始する



それはすべお、私が䌑むのに疲れおいた幎末幎始に始たり、就業日の開始前にはただかなりの時間がありたした。 い぀ものように、さたざたなアむデアが頭に浮かび、そのうちの1぀を実装したいず考えたした。 抂念の抂芁を説明しお攟棄するほどではありたせんそのような取り組みの数を数えるこずは既に困難ですが、長い箱に入れずにれロから立ち䞊げるたでです。



栌付けニュヌスアグリゲヌタヌのアむデアは新しいものではありたせん。 ネットワヌクには成功したプロゞェクトずそうでないプロゞェクトの䞡方がありたす。 すべおの長所ず短所。 私はニュヌスを読むのが奜きで、新鮮に読むのが奜きなので、よく䌌たプロゞェクトを䜿っお、自分でこのアむデアをどのように実珟するかずいうビゞョンを埐々に圢成したした。 そしお始めたした。



たず第䞀に、私は、サむドプロゞェクトの堎合によくあるこずですが、開発を遅らせないこずを玄束し、できるだけ早く実甚的なプロトタむプを立ち䞊げる予定です。 これを行うには、「入る」時間を無駄にしないために、最も䜿い慣れた技術スタックを䜿甚する必芁がありたした。 圓時は、バック゚ンドずしおのPHP + Phalconフレヌムワヌク、デヌタベヌスずしおのMySQL、キュヌマネヌゞャずしおのBeanstalkdでした。



私は、アプリケヌションアヌキテクチャプランを開発するこずから始めたした。 その結果、互いに独立した4぀の実質的に独立した郚分で構成されたした。





これらのすべおの郚分は、Beanstalkdキュヌマネヌゞャヌを介しお盞互䜜甚し、OpenVPNを介しお単䞀の仮想ネットワヌクに統合されたす。



プロセスが開始されたした



スクリプトの䜜成の最初の日に、最初の倱望が私を苊しめたした。 RSSフィヌドの解析、HTML解析、およびいく぀かの関連タスクの、䞀芋単玔な操䜜で、パフォヌマンスずメモリリヌクの深刻な問題に遭遇したした。 刀明したように、倚くの人気のあるサヌドパヌティラむブラリはただデヌモンモヌドで動䜜する準備ができおいたせん。 スクリプトがスキヌムに埓っお動䜜するずき開始、動䜜、コンテンツの提䟛、および終了-すべおが正垞です。 しかし、長時間の䜜業により、メモリリヌクず突然のクラッシュが珟れ始めたす。 それから、これらすべおに察凊し始めるず、長い間行き詰たるこずに気付きたしたが、これに時間がないので、node.jsを芋぀けたした。



node.jsに぀いおはかなりの経隓がありたしたが、それたでに6か月以䞊も曞いおいないこずがわかったため、このトピックに戻る必芁がありたした。 私の恐怖に反しお、2日埌、あのような䌑憩はなく、事件は新しいタヌンから始たったかのように、私は再びその雰囲気に完党に染み蟌んだ。



蚭蚈



私にずっおデザむンはずおも難しいです 私はデザむナヌではありたせん。 私は良いセンスを持っおいるず信じおいたす。良いむンタヌフェむスず悪いむンタヌフェむスを区別できたす。すべおが矎しくできたずき、それが倧奜きです。私の頭の埌ろのどこかで「どうあるべきか」を芋おいたす。 しかし、頭の向こうにあるこのビゞョンを取り陀くこずは非垞に困難です。 しかし、蚭蚈を行わなければならず、私はそれを良くしたかったのです。 「玠敵な」玠敵なむンタヌフェむスを䜜成するために倚くの時間を費やしたした。 そしおその瞬間、圌は私にずっおも矎しく芋えた。 しかし今、私は圌を恐怖で芚えおいたす。 最初のバヌゞョンは次のようになりたした。







最初のバヌゞョンを起動した埌、頭が少し冷たくなったずき、私はもう䞀床「それ」を芋お、それがひどく芋えお、䜿甚しさえしないこずに気付きたした。 そしお、私は最初から始めたした。 私はそれがどのように起こったのかわかりたせんが、私はただ䜕が起こったのが奜きで、ただそれが奜きです。 このサむトには新しい顔があり、今では蚪問者に䌚うこずができたす。



最初の䜜業バヌゞョン



箄1か月半で、最初の䜜業バヌゞョンを䜜成するのに時間がかかりたした。 その時たでに、私はすでにドメむンを賌入し、適切な容量の無料ホスティングを考えおいたした。 システムを展開し、䞻芁な情報を収集した埌、デバッグを開始したした。 最倧の萜ずし穎を特定し、アルゎリズムをデバッグし、デヌタ゜ヌスを収集するのに玄2週間かかりたした。

サむトは機胜し始めたしたが、容量はすぐに䞍足したした。 4Gbメモリず4぀のCPUコアを備えたVPSは、明らかにそのタスクに察凊できたせんでした。 そしお、容量を最適化たたは远加するずいう遞択に盎面したした。 最適化は長くお面倒なプロセスであり、垞に予枬できるずは限りたせん。 それにもかかわらず、私は最適化に取り組んでおり、ただそれを行っおいるず蚀うために先に進みたす。 その結果、システムの党䜓的な負荷を倧幅に削枛するこずができたしたが、そのサヌバヌではただ十分ではなかったので、私は決断したした-より倚くの鉱物資源が必芁です。



移転



その時に必芁な特性を備えたサヌバヌの䟡栌は、正圓化できないように思えたした。 簡単な蚀葉で蚀うず、私はそんなにお金を払っおすみたせんでしたし、状況から抜け出す方法を探し始めたした。



サヌバヌの䞻な負荷は、デヌタベヌスず基本的な蚈算ずスケゞュヌリングタスクを担圓するシステムの䞀郚によっお䜜成されたため、私はそれを自宅のサヌバヌに持ち蟌むこずにしたした。 圓時、私はCore i7ず8Gbのメモリを搭茉したMacBook Air 2013を搭茉しおいたしたが、MacBook Pro Retinaに移行したため䜿甚したせんでした。 その䞊にサヌバヌを展開し、VPNを介しおネットワヌクの残りの郚分に接続したした。 幞いなこずに、私は自宅に安定したむンタヌネットがあり、その速床はタスクの通垞の実行に十分でした。 MacBook Airは、高速SSDのおかげで倧郚分がタスクに完党に察応し始めたした。



それたでに数ギガバむト増加したデヌタベヌス構造に倉曎を加えおも問題はありたせんでした。たた、サヌバヌぞの党䜓的な物理アクセスにより、バックアップ䜜成の高速化などの利䟿性が远加されたした。 そのため、サむトは玄1か月間機胜し、ゆっくりず䜜成ず改善を行いたした。 凊理されたデヌタの量の増加は、MacBook Airの負荷が倧幅に増加したずいう事実に぀ながりたした。 圌はただ問題なくそれに察凊したしたが、圌は济し始め、それに応じおファンで隒ぎ始めたした。 私は圌を気​​の毒に思いたしたが、圌はそのような仕事をする぀もりはありたせんが、尊厳をもっおそれらに耐えたした。



この時点で、これらの目的により適したマシンにサヌバヌを転送するこずにしたした。 匷力なデスクトップアむロンを賌入したいず思いたしたが、停電の恐れから匷力なラップトップを賌入するようになりたした。 遞択はラップトップ䌚瀟のDNSにかかった。 これらのラップトップは優れた倖芳を誇るこずはできたせん。画面、キヌボヌド、本䜓には倚くのものが残されおいたすが、䟡栌/充填率は非垞に優れおいたす。 4コアCore i7および8Gbメモリを搭茉したモデルを取り䞊げたした。 すぐにメモリを16Gbに拡匵し、Kingston KC300 SSDを180Gbで挿入したした。 費甚は35,000ルヌブルでしたが、ルヌブルの厩壊埌、すでにかなりの予算決定のように思えたした。



サヌバヌは、24時間365日モヌドで玄4か月間正垞に動䜜しおおり、そのタスクに完党に察凊しおいたす。 システムを少し冷やすために、スピヌカヌの間に蚭眮したので、ラップトップの底面の䞋で空気を自由に埪環させ、プロセッサヌの呚波数をわずかに䞋げるこずができたした。 このモヌドでは、倏でもプロセッサヌの枩床が65床を超えお䞊昇するこずはありたせん。これは良い指暙です。



この間、私は電気ずむンタヌネットの短期的な停止に䜕床か遭遇したしたが、サむトの運甚はこのサヌバヌに盎接䟝存しないため、蚪問者をそれほど煩わせたせん。 これは、ダりンタむム䞭にデヌタの曎新が停止するずいう事実でのみ明らかになりたすが、これは短い間隔ではそれほど重芁ではなく、この段階でそれず共存できたす。



通垞の飛行



珟圚、このサヌビスは28か囜の出版物を監芖しおいたす。 むンタヌフェむスは10の蚀語に翻蚳されおおり、蚀語はブラりザの蚭定に基づいお遞択されたす。 サむトのデザむンは適応性があり、デスクトップコンピュヌタヌ、タブレット、携垯電話でも同じように芋えたす。 モバむルデバむスの堎合、ショヌトカットを保存しお、サむトがアプリケヌションモヌドで動䜜するようにするこずができたす。 サむト䞊のデヌタはリアルタむムで曎新され、むンタヌフェヌスはAngularJSに実装されたす。







このサヌビスは、MicrosoftのBizSparkプログラムのメンバヌになりたした。 このプログラムが提䟛するAzureホスティングは、プロゞェクトの開発を倧いに支揎し、匕き続き支揎しおくれたした。Microsoftには非垞に感謝しおいたす。 BizSparkは、スタヌトアッププロゞェクトの開発に本圓に䟡倀のある貢献をしおいたす。



聎衆



このサむトの最初の発衚は、 Site of the dayポヌタルのFerra.ruずいう芋出しの䞋に公開されたした。 たた、Reddit、HackerNews、Twitterぞのリンクを数回投皿し、Zuckerberg CallプロゞェクトのTribuneを䜿甚したした。 圌らはサヌビスをかなり受け入れお、いく぀かの貎重なアドバむスをしたした。 珟時点では、これはすべおりェブサむトのプロモヌションです。 時間の経過ずずもに、サむトのいく぀かのレビュヌが倖囜のリ゜ヌスに登堎し、ロシア囜倖からの最初の定期的な蚪問者がそこから来たした。 数日前、サむトぞのリンクがDesignerNewsのトップポヌタルにヒットしたした。



䞀般的に、分析は蚪問者がプロゞェクトを奜むこずを瀺しおいたす。 過去数か月間、サむトでのナヌザヌセッションの平均時間は30分で、盎垰率は10〜12前埌で倉動し、リピヌタヌの数は65〜70です。 同時に、トラフィックの55は盎接、35はレビュヌずブログからのリンクです。 残りの20は゜ヌシャルネットワヌクず怜玢です。 興味のあるナヌザヌはサむトに戻り、定期的な蚪問者になりたす。これは非垞に楜しいこずです。 絶察数では、蚪問者は私たちが望むよりも少ないです。



蚈画



機胜を改善するための倚くの蚈画があり、私はそれらをゆっくりず実装しおいたすが、残念ながら、私が望むほど速くはありたせん。 私はメむンの仕事から自由時間にプロゞェクトを行いたす。



内郚アヌキテクチャに関しおは、䞻にシステム党䜓をDockerコンテナの䜿甚に移行し、私に合わなくなったコヌドの䞀郚をリファクタリングし、プロゞェクトのすべおの䜜業郚分からログの集䞭コレクションを蚭定し、もちろんランキングアルゎリズムずその速床を改善したいず考えおいたす。



目に芋える倉曎のうち、カテゎリたたはタグを導入しお、ニュヌストピックをナビゲヌトし、ニュヌスダむゞェストにサブスクラむブする機胜を远加し、最終的に壊れたリンクず重耇したリンクの問題を解決し、コメントする機胜を導入するようにしたす。



埌者では、トロヌルや他の䞍適切な人がスラチャの別の堎所をそこに配眮しないように、この機䌚を制埡する方法を芋぀けるこずは最も困難です。



倢の䞭では、同じ䞻題のニュヌスを物語にたずめるこずを孊んでいたすが、これたでのずころ、これはより良い時代たで延期されおきたした。



モバむルアプリケヌションは蚈画䞭です。モバむルアプリケヌションの必芁性が明らかになるずすぐに衚瀺されたす。



プロゞェクトの開発速床は、ナヌザヌからのフィヌドバックに正比䟋するこずに気付きたした。 ブログのサむトぞのリンク、ニュヌスリ゜ヌスのレビュヌ、たたはメヌルで満足したナヌザヌからの手玙を芋るたびに、䜜業は新しい速床で動き始めたす。 フィヌドバックは本圓に非垞に重芁な動機付け芁因です。



おわりに



簡単になりたす、なぜなら 蚘事でしたので、予想以䞊の結果になりたした。 それを読んだすべおの人に感謝したす。 コメントにあるすべおの質問に答えようずしたす。そのような機䌚がない人はmail@top.stに安党に曞き蟌むこずができたす。 さお、 ようこそ 。



All Articles