オンライン自動車部品店向けのHighLoadプラットフォーム

画像



最後のトピックでは、プラットフォームwww.abcp.ru (SaaSソリューション)の内部構造について話すことを約束しました。 今日は、プラットフォームの最も興味深いモジュールである価格表を保管する倉庫についてお話します。



最初はどうでしたか?



プラットフォームの運用の2年目には、データベースに保存する必要のある価格表の行数に対する顧客のニーズの高まりに直面していました。 この時点で、データは通常のMySQLの1つのテーブルに単純に保存されていました。 典型的な店舗は、700万個の商品を店舗に接続したいが、月に5,000ルーブル以上支払うことはできないことが判明しました。 技術的にも経済的にもこのような転換の準備ができていなかったため、可能な限り顧客を制限し、当時は大量のデータ(最大500億件のレコード)に耐えられるストレージシステムを開発しました。



データの増加に伴うシステムパフォーマンスを抑えるために、多くのソフトウェア最適化を実行し、25,000ユーロで本格的なHewlett-Packard StorageWorksストレージシステムを購入し、MySQLデータベースを配置しました(ディスクシステムの高速性に基づいて)が、これらの改善はしばらくの間十分ではありませんでした続けた。



判明したように、チームのストレスフェーズは2年以上続きます。 実際の開発スケジュールを知っていれば、それが私たちのモチベーションに大きな打撃を与えるでしょう。 しかし、私たちは知りませんでした:)したがって、私たちは成功しました。



画像



ソリューションを選択する



入力はこれでした。システムは多くのレコード(500億で十分であると判断しました)を保存する必要があり、このデータの約半分は毎日更新できます。 データストレージの分散化を実現し、機器に問題が発生した場合に部分的な劣化を許容する必要があります。



当時、私たちはHighLoadが非常にクールであり、このテーマに関する会議がいくつかあり、インターネットが興味深い記事でいっぱいであることを知っていました。 NoSQLプロジェクトでソリューションを使用するのは流行でした。「シャーディング」などの言葉を言うと。 また、Oracleは非常に強力なデータベースであり、スケーリングも可能であることもわかっていたため、このオプションを検討しました。



多くの苦痛の後、私たちは拒否しました:



  1. 強力なOracleサブ。 なぜなら 高価で難しいです。
  2. 多くの異なる実際のNoSQL。 なぜなら 当時は、十分な信頼性がなかったか、読み取り/更新の混合ロードの要件に耐えることができませんでした。


その結果、おなじみのMySQL(innoDB)が勝ちました。 実績のあるソリューション、無料、多くの専門家。 すでにすべてのレーキを踏んでいるので、チームにとってこのDBMSは、宣言された特性を持つ価格表のストレージの新しいバージョンを作成するのに理想的でした。 「シャーディング」という言葉も役立ちました。



そして、これは私たちが得たものです



価格表用の新しいストレージシステムは、NoSQLモードで使用するシンプルで安価で理解しやすいMySQLに基づく分散バージョンです。 INSERT、UPDATE、DELETE、およびSELECTだけです。 JOINを使用せず、WHEREに最小限の条件を設定します。



画像



現時点では、サービスは販売された商品の約7億5,000万件のレコードを保存します。 日中、売り手は情報の3分の1(約2億5千万件のレコード)を完全に更新します。 UPDATE操作の数は、SELECT操作の数の約10倍です。 現時点でのサービスの価格の充填/更新のレートは1秒あたり30,000ポジションです。これにより、1日の時間の10%で上記の約2億5,000万を更新できます。



このスキームは、データベースの水平スケーリングの参照例のように見えますが、もちろん、新しいサービス内では、すべてがはるかに複雑です。 更新を高速化するために、「zoo」価格表を標準形式に変換するための個別のモジュールも開発され(シャーディング形式でも)、価格表間の差異を計算する個別の差分サービス(これは価格表の完全更新よりも高速に動作します) ) 完全に証明された別のソリューションは、RabbitMQサーバーをシステムの「中心」として導入したことです。 非同期キューを非常に使用することで、システムを大幅に高速化できる多くのアイデアがチームにもたらされました。



もちろん、優れた経済指標を達成しています。 たとえば、倉庫にポジションを保管するためのサブシステムを大幅に拡張した場合、100万のポジションを保管/使用する月額費用は100ルーブルになります。 現在の為替レートでも。



また、作成したモジュールに最適な機器を選択すると、約10〜20%の追加の経済的利益が得られました。



自動車部品取引の分野でプロジェクトを開発している場合は、APIを使用して価格表を保存し、それらを検索できます(リクエストに応じてアクセスを提供します)。



今日はこれで終わりです。次のトピックでお会いしましょう!



All Articles