<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Skype 計劃 PostgreSQL 擴展到 10 億用戶 > 原文: [http://highscalability.com/blog/2008/4/5/skype-plans-for-postgresql-to-scale-to-1-billion-users.html](http://highscalability.com/blog/2008/4/5/skype-plans-for-postgresql-to-scale-to-1-billion-users.html) Skype [使用 PostgreSQL 作為后端數據庫](https://developer.skype.com/SkypeGarage/DbProjects/SkypePostgresqlWhitepaper)。 PostgreSQL 在數據庫世界中沒有得到足夠的運行,因此我很高興地看到 PostgreSQL 如何被用作“滿足[Skype]大部分業務需求的主要數據庫”。 他們的方法是使用傳統的存儲過程接口來訪問數據,并在該層代理服務器之上,該代理服務器將 SQL 請求散列到一組實際執行查詢的數據庫服務器上。 結果是他們認為水平擴展的系統可以擴展到可處理 10 億用戶。 * Skype 的目標是一種可以處理 10 億以上用戶的體系結構。 使用一臺真正的大型計算機實際上無法解決此級別的縮放問題,因此我們的蒙版超級英雄水平縮放可以解決。* 硬件是帶有 SCSI RAID 的雙或四皓龍。* 遵循常見的數據庫進度:從一個 DB 開始。 添加按功能劃分的新數據庫。 復制以只讀為主的數據,以實現更好的讀取訪問。 然后跨多個節點水平分區數據。* 無論如何,在此博客的第一篇文章中,Skype 使用傳統的數據庫體系結構,其中所有數據庫訪問都封裝在存儲過程中。 這使他們可以在不影響前端服務器的情況下進行后臺性能調整。 而且它很適合使用 PL / Proxy 進行分區的策略。* [PL /代理](https://developer.skype.com/SkypeGarage/DbProjects/PlProxy)用于通過創建水平分區的集群來擴展其系統的 [OLTP](http://en.wikipedia.org/wiki/OLTP) 部分: -數據庫查詢由代理跨 一組數據庫服務器。 代理根據字段值(通常是主鍵)創建分區。 -例如,您可以根據用戶名通過散列在整個群集中對用戶進行分區。 根據哈希將每個用戶放入一個碎片中。 -遠程數據庫調用使用一種稱為 plproxy 的新 PostgreSQL 數據庫語言執行。 來自[的示例 Kristo Kaiv 的博客](http://kaiv.wordpress.com/category/plproxy/): ``` First, code to insert a user in a database: CREATE OR REPLACE FUNCTION insert_user(i_username text) RETURNS text AS $$ BEGIN PERFORM 1 FROM users WHERE username = i_username; IF NOT FOUND THEN INSERT INTO users (username) VALUES (i_username); RETURN 'user created'; ELSE RETURN 'user already exists'; END IF; END; $$ LANGUAGE plpgsql SECURITY DEFINER; Heres the proxy code to distribute the user insert to the correct partition: queries=# CREATE OR REPLACE FUNCTION insert_user(i_username text) RETURNS TEXT AS $$ CLUSTER 'queries'; RUN ON hashtext(i_username); $$ LANGUAGE plproxy; Your SQL query looks normal: SELECT insert_user("username"); ``` -查詢的結果與在遠程數據庫上執行的查詢完全相同。 -當前,他們可以將 Dual Opteron 服務器上的 1000-2000 請求/秒路由到 16 個分區集群。* 他們喜歡 OLTP 的 PL /代理方法,因為: -PL /代理服務器形成可伸縮且統一的“ DB 總線”。 代理服務器很健壯,因為在冗余配置中,如果一個服務器出現故障,您可以直接連接到另一個服務器。 而且,如果代理層變慢,則可以添加更多代理并在它們之間進行負載平衡。 -可以添加更多分區以提高性能。 -故障轉移期間,只有故障分區上的數據不可用。 所有其他分區均正常運行。* [PgBouncer](https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer) 用作 PostgreSQL 的連接池。 PL /代理“在打開每個后端進程與每個分區的連接時會浪費一些連接”,因此池管理器有助于減少連接數量。* 使用 [WAL(預寫日志)傳送](http://www.postgresql.org/docs/8.1/static/wal-intro.html)創建熱備用服務器。 這些服務器似乎不能用于只讀操作。* 更復雜的組織通常使用 OLTP 數據庫系統來處理高性能事務需求,然后創建單獨的系統來滿足更多非事務性需求。 例如, [OLAP(在線分析處理)](http://en.wikipedia.org/wiki/Online_analytical_processing)系統通常用于處理復雜的分析和報告問題。 這些在模式,索引等方面與 OLTP 系統不同。 Skype 還將單獨的系統用于 Web 應用程序的表示層,發送電子郵件和定價發票。 這要求將數據從 OLTP 移至其他系統。 -最初 [Slony1](http://slony.info/) 用于將數據移至其他系統,但是“隨著復雜性和負載的增加,Slony1 開始給我們帶來越來越大的痛苦。” -為解決此問題,Skype 開發了他們的輕量級排隊和復制工具包,稱為 [SkyTools](https://developer.skype.com/SkypeGarage/DbProjects/SkyTools) 。 代理方法很有趣,并且是我們之前從未見過的架構。 它的力量來自使問題解決間接化的另一個層次,它具有以下優點:* 應用程序獨立于數據庫服務器的結構。 封裝在代理服務器中。* 應用程序無需響應分區,映射或其他更改而進行更改。* 負載平衡,故障轉移和讀/寫拆分對于應用程序是不可見的。 的缺點是:* 性能降低。 添加了另一跳,必須解析查詢才能執行所有透明的魔術。* 無法跨分區執行聯接和其他數據庫操作。* 增加了處理代理服務器的代理配置和 HA 的管理復雜性。 容易看出優勢大于弊端。 在不更改應用程序的情況下,您可以滑入代理層,并以低價獲得很多非常酷的功能。 如果您是 MySQL 用戶,并且對這種方法感興趣,那么請查看 [MySQL 代理](<A HREF=),它以另一種方式完成了類似的工作。 ## 相關文章 * [數據庫設計的非傳統方法:碎片](http://highscalability.com/unorthodox-approach-database-design-coming-shard)的來臨* [PostgreSQProducts-使用 PL / Proxy](http://www.postgresql.at/english/pr_pl_proxy_postgresql_e.html) 無限擴展* [PL /代理](https://developer.skype.com/SkypeGarage/DbProjects/PlProxy)* [Heroku](http://highscalability.com/heroku-simultaneously-develop-and-deploy-automatically-scalable-rails-applications-cloud) 也使用 PostgreSQL。* [MySQL 代理](http://forge.mysql.com/wiki/MySQL_Proxy)* [PostgreSQL 群集:使用 Kristo Kaiv'使用 plproxy 進行分區(第一部分)](http://kaiv.wordpress.com/2007/07/27/postgresql-cluster-partitioning-with-plproxy-part-i/)。* [PostgreSQL 集群:用 Kristo Kaiv'使用 plproxy 進行分區(第二部分)](http://kaiv.wordpress.com/2007/09/02/postgresql-cluster-partitioning-with-plproxy-part-ii/)。* [Skype 上的 PostgreSQL](https://developer.skype.com/SkypeGarage/DbProjects/SkypePostgresqlWhitepaper) 。* [Kristo Kaiv'撰寫的 Skytools 數據庫腳本框架& PgQ](http://kaiv.wordpress.com/2007/10/19/skytools-database-scripting-framework-pgq/) 。* [PostgreSQL 高可用性](http://www.postgresql.org/docs/8.3/static/high-availability.html)。 通過散列,Skype 如何處理重新分區(例如,添加或獲取數據庫時) 我認為是這樣的: [http://tinyurl.com/5fl8hu](http://tinyurl.com/5fl8hu) plProxy 支持任何哈希算法。 根據先前的注釋,這些示例使用默認的 PostgreSQL hashtext()函數。 但是,如果您愿意,可以自己動手。 plProxy 本質上非常靈活。 配置和利用都通過存儲過程/功能完成。 因此,他們將自己的數字帶給了十億用戶。 我想大約 5 年后,隨著互聯網的發展,Skype 肯定會達到一萬億甚至更多。 ----- [http://underwaterseaplants.awardspace。 com“](<a rel=) >海洋植物 [http://underwaterseaplants.awardspace.com/seagrapes.htm”](<a rel=) >海葡萄... [http:// underwaterseaplants。 awardspace.com/plantroots.htm“](<a rel=) >植物根 上面關于萬億用戶的評論很有趣,因為目前世界上只有 67 億人,而問題不是 Skype 是否可以支持一萬億用戶,而是我們的星球是否可以支持一萬億人:D 好文章 我們現在有 2 個 PgBouncer,12 個節點和 12 個 WAL 備份服務器,并且一切正常。 服務器是 1u 雙胞胎,雙四核 Intel xeon,具有 32GB 內存和 2 x sas,每個雙胞胎上的硬件 raid1。 --- [http://www.unixvps.com](http://www.unixvps.com) 我想知道為什么您選擇 PostgreSQL 而不是 MySQL? 如果您需要任何事務性的東西(而不是 MyISAM),那么 PostgreSQL 的伸縮性要好于使用 InnoDB 的 MySQL。 我還猜想 Skype 中的某些人比 MySQL 更了解 PG,而 MySQL 和 PG 對存儲過程,觸發器等的支持要好得多, 里斯
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看