InvoiceMall-スタジオおよびフリーランサー向けのSaaS請求サービス

インボイスモール こんにちは 私の名前はイグナットです。 私は、 InvoiceMall顧客関係管理サービスを開発した会社であるCloudMillの従業員です。 この記事は、彼に関する一連の資料の最初の記事です。 この記事では、プロジェクトの技術的な部分の問題に取り組み、使用される技術と開発プロセスについて説明します。 次の資料は、招待キーを使用したサービスの使用に専念します。



最初に、サービスは当社のニーズに合わせて作成されました。 時間が経つにつれて、ブレーンストーミングと競合他社の作業の分析の結果として現れた最も成功したアイデアを使用して、その機能をいくらか拡張することに決めました。 コンセプトの開発には約2か月かかりました。 最善を尽くして収集し、豊富な機会を持つユニークなサービスを作成しました。



基本的な機能は、請求サービスと顧客ベースで構成されていました。 プロジェクトの骨の折れる作業の結果、次の追加機能が登場しました。

サービスを完全なCRMシステムにするために、いくつかの追加セクションを開発しています。 さらに、ソーシャルサービスと多言語機能を導入する予定です。 上記の機能はすべて、お客様の好みに応じてモジュールとして接続されます。 したがって、SaaSプロジェクトでアカウントを作成するだけのユーザーには、サービスのシンプルさを維持します。



職場でのその他のSaaSサービス。



私たちは常に他のチームがどのように機能するかに興味を持っていたので、自分自身について少し話しましょう。 最初はBaseCampを使用していましたが、何らかの理由ですぐにそれを放棄しました。 さまざまなプロジェクト管理/コラボレーションサービスから選択する長いプロセスの後、次のように切り替えました。

アイロンとホスティング



2年間、私たちはThe Planetの顧客でした。 現時点では、3つのサーバーをレンタルしています。

これは、お客様をホストし、プロジェクトを機能させるのに十分です。 私たちは当初、いくつかの理由でクラウドを放棄しました。

ただし、S3&CloudFront(CDN)を使用してコンテンツを保存および配信します。 現在、IntzMallをドイツのサイトに転送するために、Hetznerにインフラストラクチャをセットアップしています。 これにより、レイテンシが220ミリ秒から70〜80ミリ秒に短縮されます。 応答をさらに高速化するために、MDNS(Zerigo)を使用するオプションも検討しています。



安全性



プロジェクトの安全性に多くの注意を払いました。 このため、フレームワークが再設計されました。 現在、すべての受信データは事前​​にフィルタリングおよびクリーンアップされており、開発者の起こりうる間違いを回避しています。 さらに、SQLクエリに該当するすべてのデータも消去されます。 次のステップは、CSRF保護をフォームに接続することです。



バックアップテーブルを1日に1回アーカイブサーバーに送信する前に、実際に暗号化します。 ソフトウェアは常に更新されます。 さらに、内部サーバーの最適化を実施しました。 ipfwおよびautobahnボットが含まれています。 サーバーとネットワークの負荷は常に監視されています。



これらすべてのおかげで、サーバーが応答していないという不満の声から3晩目が覚めることなく、静かに眠ることができます。 DDoS攻撃に打ち勝つ方法に頭を悩ます必要はありません。



ソフトウェア



明らかになったように、サービスはPHPで記述されています。 Kohana 3.0に基づく独自のフレームワークを使用します。 大幅に書き直されました。 PHP> 5.3でのみ起動でき、memcachedとmysqliが必要です。 また、H2Oテンプレートエンジンを接続することでKohanaのViewモデルを放棄しました。これにより、強力な対応が行われました。 Twigは脱落し、H2Oパフォーマンスが低下しました。 ORMは除外され、セッションと承認はそれで書き直されました。 ORM例外は必要な手段です すべての要求はプロファイルされ、最適化されます。



すべてのフレームワークコードがプロファイルされました。 私たちは、関数の繰り返し呼び出しを削除し、サイクルを渡し、コンテンツを転送するために、すべてを最適化しようとしました。



その結果、APCとマルチレベルキャッシングを使用して、最大ページ生成時間が0.007秒、メモリ消費が800kbに​​達しました(テストは運用サービスで実行されました)。



新しいバージョンをデプロイすると、フレームワークを1つのファイルに結合するスクリプトが起動します。 ロギングとキューはMongoDBに送られるため、プロジェクトを安全にスケーリングできます。 現時点では、NoSQLに切り替える予定はありません。



アーキテクチャに関するいくつかの言葉



製品を公開し、競合他社の能力を分析することを決定した後、数十万人のユーザー向けにサービスの設計を開始しました。 選択した国に応じて、さまざまなフィールド、請求書のタイプ、事前定義された設定などが定められました。 テンプレートとスクリプトからすべてのテキストが削除され、言語ファイルに移動されました。これらのファイルは常にキャッシュからアクセスできます。 したがって、新しい言語を追加するために必要なことは、その言語ファイルを追加することだけで、システムはそれ自体を接続します。



特徴



請求書モールの承認




ヤフー、Yandex、Google、Google Appsを使用した承認は可能です。 まもなくFaceBookを接続します。 OpenIDは使用しません(作業のロジックは少し異なります)。 このメールに既に登録されている場合にのみ承認が行われます。



請求書モールの承認 現在、Google AuthSubを介してインポート連絡先を実装しています。 ボタンをクリックし、サイトの権限を確認して、追加するものを選択するだけです。



両方のクラス(OpenID、oAuth)には独自のクラスがあります。 1つのJanrain接続で約0.3秒追加されました。 実行してメモリを1MB増やします。 リファクタリングを行うのは無意味であったため、各サービスに対してラッパーが作成されました。 基本クラスは、ZFからOpenIDを取得しました。



HTML / JS



JSフレームワークはよく知られたjQueryであり、ベータ期間中、CSSを最適化または圧縮しません。 将来的には、以前に最適化されたソースとgzipバージョンの両方をすぐにCloudFrontにアップロードするスクリプトが作成されます。



プロジェクトはIE6の部分的なサポートを実装しています。 たとえば、丸い角はありませんが、フロートはなく、スクリプトは必要に応じて機能します。 また、JavaScriptを最適化して、DOMでの読み込みとすべてのアクションがすべてのブラウザーで遅延なく発生するようにしました。 将来的には、HTML5への完全な移行とIE6のサポートの放棄を計画しています。



API



現在、APIに取り組んでいます。 サイトの各機能は、APIを介して利用できます。 シンプルで簡単な統合方法になります。 たとえば、店舗の業務で当社のサービスを使用すると、美しいアカウントの設定、便利な統計の保持、顧客へのマーケティングメールの送信、さまざまな商人による支払いの受け取りが可能になります。 APIの使用を想像力のみに制限しようとします。



これで終わります。 すべてのご質問にお答えし、製品をテストするための招待者を提供させていただきます。 エラーの可能性を理解していただくようお願いしますが、お客様のご協力により、迅速に、そして最も重要なこととして、正しい方向でベータテストフェーズを完了し、自信を持ってリリースできるようになると考えています。



よろしく、CloudMillチーム



All Articles