バックエンドを開発して学んだこと

画像 Parallels Accessの開発には、世界各地のユーザーのコンピューターとモバイルクライアント間の通信を安全に確立できる地理的に分散したサービスの作成が必要でした。 それに取り組んでいるチームは、クライアント/サーバー製品の作成を計画している人々の運命を促進し、数十の成功したプロジェクトを持っている専門家のノスタルジアに飛び込むために、引用の形で得られた経験を共有したいと考えています:



  1. CDNでカバーされる可能性のあるパブリックアドレスごとに、サービスで直接使用するために2番目のアドレスを設定します。 それ以外の場合は、「CDNのサーキットブレーカー」をオンにすると、現象として自分自身について多くのことを学びます。
  2. DBMSでログスロークエリオプションをオンにします。 インデックスを超えてリクエストを「請求」するエンジニアが常に存在します。 または、バックアップを誤って構成した管理者。
  3. クラウド内の仮想マシンは消耗品です。 サーバーの展開を可能な限り自動化します。 1台のサーバーを失っても問題が生じないようにサービスを設計します。
  4. 学生寮としての仮想化:1つのパーティー(CPUまたはIOアクティビティの増加)がフロア全体に行き渡ることがあります。
  5. 実績のある技術を使用します。 クールなものには多くの落とし穴が含まれており、多くの場合、すでに生産段階で発見されています。
  6. NoSqlは、最初に参加する必要があるときに、馬車からカボチャに変わることができます。
  7. バックエンドAPIは、作成者が簡単に開発できるだけでなく、種類(Web /モバイル/デスクトップ)が異なり、同じ画面でバージョンごとに異なるデータを表示する習慣があるクライアントが使用するのにも便利です。
  8. エンジニア、覚えておいてください。コードがユーザーと顧客の利益に役立ったときに、タスクが完了します。 コミットはこのパスの最初のステップにすぎません。
  9. ルートサービスはセキュリティホールです。 極端な場合は、rootとして起動し、setuid()を使用して切り替えます。
  10. 過剰なロギングは、パフォーマンスに悪影響を与える可能性があります。 その場でログレベルを変更する方法を学びます。これにより、問題が発生したときに調査できます。
  11. SSLは暗号化だけでなく使用できます。 キーから証明書への移行により、インフラストラクチャ内のコンポーネントの承認と認証が可能になります。
  12. Linuxシステム管理者は、構成が/ etc / myappにある場合、ログが/ var / log / myappにある場合などに感謝の意を表します。 つまり、ファイルをOS固有のディレクトリに保存します。
  13. どのログファイルも制御不能に大きくなる可能性があります。 設計段階で、ログファイルとそれに含まれるデータのライフサイクルを計画します。
  14. 便利なサービスを使用して、すべてのコンポーネントの監視を構成します。 次に、マイナーなポジティブから夜に目が覚めないように、それを改善する準備をします。
  15. 証明書、サブスクリプション、キーを使用するための有効期限付きのカレンダーを作成します。 それ以外の場合、「何かが機能しなくなる」はまったく予想外です。
  16. パフォーマンスを改善する前に、適切なメトリックを選択する方法と、スループットと待機時間とは何かを学びます。
  17. サービスは、正しく処理できるデータの量を選択する必要があります。 それ以外の場合、リクエスト



    更新ユーザーセットhalyava_end_date = '2016-01-01'

    一致した行:300000変更:300000警告:0



    12月上旬に実行された場合、驚くかもしれません:



    2016-01-01 00:00:00メールサービスが300,000件のメールを送信しようとしています...

    2016-01-01 00:00:01メモリ不足エラー



  18. クライアントアプリケーションは、サービスが過負荷または使用不可になった場合に状況を正しく解決する必要があります。 ランダム性の要素が増加する間隔で接続するための後続の各試行を選択します。 そうしないと、更新/落下後の離陸が困難になります。
  19. アプリケーションサーバーには移行の履歴は必要ありません。最初から迅速かつ確実にロールバックできる方が良いでしょう。
  20. サードパーティライブラリのバージョンを正確に示します。 マイナーバージョンを変更すると、すべてが壊れる可能性があります。 パブリックリポジトリのライブラリを自動的に使用しないでください。
  21. エラーを探す場所がわからない場合は、まずシリアライザーで探し、次にデシリアライザーで探します。
  22. UNIXタイムスタンプを使用して日付を保存および処理できますが、UNIXタイムスタンプを使用することをお勧めします。
  23. 速度は製品の機能であり、高価ではありますが必要ではありません。
  24. 分散ストレージシステムは、一貫性がない、速度が遅い、またはその両方です。
  25. キューは監視ツールです。 キュー内の要素の数、それらの受信と処理の速度は、システムで何が起こっているかを明確にすることができます。
  26. コピーペーストからのコードの時期尚早な廃棄は、時期尚早な最適化です。
  27. 余分な操作を行う場合は、どれだけ速く実行しても関係ありません。




コメントでは、より具体的な質問に答える準備ができています。 さらに、今週はバックバック開発者のツイッター@backendsecret - http: //bit.ly/20mJ9GP-で 、役に立つことについて話し、質問に答えます。



All Articles