整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          HTML中圖像分區響應-Day4

          設計網站時,經常需要做圖標響應,例如用戶點擊圖標,后臺響應用戶的操作。本文對圖像分區響應的設計方式進行介紹。

          圖像響應一般是通過在圖像上設置超鏈接實現的,代碼示例如下:

          <a href="這里寫鏈接地址 "> //設置超鏈接
          
          <img src="圖片名稱.圖片格式" > //定義圖像
          
          </a>

          例如圖像示例如下:

          圖標示例

          這種情況,沒有對圖像分區處理,因此只要點擊頁面中的任意位置(包括圖像上的任意位置或者頁面的空白處),均會跳轉到對應的鏈接。

          但是有時候一張圖,可能在用戶點擊不同的位置,需要不同的響應,此時需要進行分區響應,具體代碼示例如下:

          <img src="圖像名稱.圖片格式" usemap="#名稱1"> //定義圖像,以及圖像的名稱
          
          <map name="名稱1"> //引用前文中的圖像
          
          <area href="鏈接地址1" shape="rect" coords="a1,b1,a2,b2"> //定義圖像區域的超鏈接和在圖像中的像素位置
          
          <area href="鏈接地址2" shape="rect" coords="c1,d1,c2,d2">//同上
          
          </map>

          其中,shape表示圖像區域的形狀,例如rect/circle等等。圖像中某個圖像分區的位置可以通過前文form實現,例如:

          <form>
          
          <input type="image" src="圖像名稱.圖片格式">
          
          </form>

          當顯示圖像之后,可以點擊圖像的任意位置,此時鏈接處會顯示該點擊位置在圖像中的像素位置,例如:

          像素位置

          TML是一種用來描述網頁的標記性語言。學習HTML可能并不難,主要是要記一些HTML標簽和標簽代表的含義。下面PHP程序員雷雪松根據使用的情況,整理出平時常用的HTML標簽。

          HTML基礎之HTML常用標簽-PHP程序員雷雪松的博客

          1、最基本的HTML結構

          <!--<!DOCTYPE> 是HTML5聲明,<!DOCTYPE> 必須是 HTML 文檔的第一行,位于 <html> 標簽之前。<!DOCTYPE>是指示 web 瀏覽器關于頁面使用哪個 HTML 版本進行編寫的指令。-->

          <!DOCTYPE html>

          <html>

          <!-- head標簽是所有頭部元素的容器。head標簽內的元素可包含腳本、樣式表和提供頁面的元信息等等。以下標簽都可以添加到 head 部分:title、base、link、meta、script 以及style。頭部的內容不會顯示在瀏覽器的。 -->

          <head>

          <!-- 設置字符集,如果字符集不對,可能導致亂碼。一般建議utf-8國際編碼 -->

          <meta http-equiv="Content-Type" content="text/html; charset=gb2312或utf-8或gbk" />

          <!-- SEO相關標簽,title定義文檔的標題,百度建議一般不要超過32位,meta定義頁面關鍵詞和頁面的描述-->

          <title>網頁標題</title>

          <meta name="keywords" content="PHP程序員,技術博客,個人博客,雷雪松" />

          <meta name="description" content="PHP程序員,雷雪松(Raykaeso)的博客是一個優秀的個人技術博客。PHP程序員雷雪松的博客記錄了Linux學習,PHP開發與編程,Web前端開發,MySQL學習和教程,NoSQL數據庫教程以及個人的人生經歷和觀點。" />

          <link rel="stylesheet" type="text/css" href="main.css" />

          <script type="text/javascript" src="main.js"></script>

          </head>

          <!-- 正文部分,所有在瀏覽器上可見的內容必須寫在body標簽內部 -->

          <body>

          </body>

          </html>

          2、最常用的HTML標簽

          a、布局標簽

          div標簽定義文檔中的分區或節(division/section),可以把文檔分割為獨立的、不同的部分,主要用于布局。

          aside標簽的內容可用作文章的側欄,<span style="color: #ff0000;">html5新增標簽</span>。

          header標簽定義頁面的頭部(介紹信息),<span style="color: #ff0000;">html5新增標簽</span>。

          section標簽定義文檔中的節(section、區段)。比如章節、頁眉、頁腳或文檔中的其他部分,<span style="color: #ff0000;">html5新增標簽</span>。

          footer 標簽定義文檔或節的頁腳,通常包含文檔的作者、版權信息、使用條款鏈接、聯系信息等等,<span style="color: #ff0000;">html5新增標簽</span>。

          article標簽規定文章獨立的其他內容,比如:標題、內容、評論,<span style="color: #ff0000;">html5新增標簽</span>。

          b、文本標簽

          h1-h6標簽可定義標題

          p標簽定義段落

          b/strong標簽加粗

          em標簽來表示強調的文本,斜體

          strong標簽表示重要文本

          u標簽下劃線

          s標簽刪除線

          br標簽表示回車換行

          hr標簽表示水平線

          span標簽被用來組合文檔中的行內元素。

          blockquote標簽表示塊引用

          pre標簽可定義預格式化的文本,保持原有格式的一種標簽。

          sub標簽下標,

          sup>標簽上標

          &nbsp;表示一個空格

          &copy;表示版權符

          &lt;表示<

          &gt;表示>

          c、a標簽定義超鏈接,指定頁面間的跳轉。鏈接可以指向外部鏈接或者頁面內部id錨點,可以在當前頁面打開,新開窗口。

          <a href="指向的鏈接地址或者網址#ID名" target="_blank|_self|_top|_parent">百度</a>

          d、多媒體標簽

          img標簽主要在網頁中插入圖像,可以定義圖片替換文本、顯示寬度和高度、是否帶邊框,建議等比例設置,否則圖像會變形。

          <img src="圖片地址" alt="替換文本,圖片打不開的時候顯示" width="圖片寬度" height="高度" border="0" />

          audio標簽定義聲音,比如音樂或其他音頻流。<span style="color: #ff0000;">html5新增標簽</span>。

          <audio src="someaudio.wav">您的瀏覽器不支持 audio 標簽。</audio>

          video標簽定義視頻,比如電影片段或其他視頻流。<span style="color: #ff0000;">html5新增標簽</span>。

          <video src="movie.ogg" controls="controls">您的瀏覽器不支持 video 標簽。</video>

          e、序列化標簽

          ul和li無序列表標簽

          <ul>

          <li>HTML</li>

          <li>JS</li>

          <li>PHP</li>

          </ul>

          ol和li有序列表標簽,可以使用type屬性規定有序列表符號的類型。1 按數字有序排列,為默認值,(1、2、3、4);a 按小寫字母有序排列,(a、b、c、d);A 按字母大寫有序排列,(A、B、C、D)。i 按小寫羅馬字母有序,(i, ii, iii, iv);I 按小寫羅馬字母有序,(I, II, III, IV)。

          <ol>

          <li>HTML</li>

          <li>JS</li>

          <li>PHP</li>

          </ol>

          dl標簽定義了定義列表(definition list),dl標簽用于結合 dt(定義列表中的項目)和 dd(描述列表中的項目)。

          <dl>

          <dt>計算機</dt>

          <dd>用來計算的儀器 ... ...</dd>

          </dl>

          f、表格標簽

          table標簽和tr標簽,th標簽和td標簽,合并單元格。

          <table width="100%" height="193" border="1" cellpadding="0" cellspacing="0" bordercolor="#FF0000" bgcolor="#000000" background="">

          <tr>

          <th>標題</th>

          <th>標題</th>

          </tr>

          <tr>

          <!-- 合并橫向單元格 -->

          <td colspan="2" nowrap="nowrap">&amp;nbsp;</td>

          </tr>

          <tr>

          <td></td>

          <!-- 合并縱向單元格 -->

          <td rowspan="2"> </td>

          </tr>

          <tr>

          <td height="16"> </td>

          </tr>

          </table>

          g、表單標簽

          form標簽定義提交方式、提交地址、表單字符集以及如何對其進行編碼,需要提交的表單一定要放在form標簽內。

          <form id="form1" name="form1" method="post|get" enctype="multipart/form-data" action="提交到的地址"></form>

          input標簽用于搜集用戶信息

          <input name="userName" type="text" maxlength="5" size="100" value="asdfasdfasfd" />

          密碼,輸入的字符會被掩碼(顯示為星號或原點)

          <input name="pwd" type="password" maxlength="5" size="100" value="" />

          文件類型的表單,上傳文件時,form表單一定要設置為enctype="multipart/form-data"

          <input type="file" name="file" />

          隱藏表單

          <input type="hidden" name="country" value="China" />

          提交

          <input type="submit" name="Submit" value="提交" disabled="disabled" />

          重置

          <input type="reset" name="Submit2" value="重置" />

          radio單選

          <input name="sex" type="radio" value="1" />男

          <input name="sex" type="radio" value="2" checked="checked" />女

          checkbox多選

          <input name="skill" type="checkbox" value="1" checked="checked" />PHP

          <input name="skill" type="checkbox" value="2" />前端

          <input name="skill" type="checkbox" value="2" />數據庫

          <span style="color: #ff0000;">注:checked="checked"可以簡寫成checked</span>

          label標簽為input元素定義標注,如果您點擊label元素文本,就會觸發此input控件。

          textarea標簽,設置文本區內的可見行數和寬度

          <textarea name="content" cols="30" rows="10">大段文本輸入框</textarea>

          button標簽定義一個按鈕

          提交按鈕

          <button type="submit" value="提交">提交</button>

          重置按鈕

          <button type="reset" value="重置">重置</button>

          select標簽和option標簽下拉列表

          單選菜單列表框

          <select name="user">

          <option value="1">ray</option>

          <option value="2" selected="selected">raykaeso</option>

          </select>

          多選列表下拉框,shift加鼠標單擊,可以連續選擇多個選擇,CTRL+鼠標點擊,可以點擊多個。

          <select name="user" size="10" multiple="multiple">

          <option value="1">雷雪松</option>

          <option value="2" selected="selected">ray</option>

          <option value="3">raykaeso</option>

          </select>

          注:selected="selected"可簡寫成selected,表示選中

          3、其他HTML事項

          a、HTML標簽和屬性是不區分大小寫的,建議HTML標簽和屬性都小寫,屬性值必須用雙引號包圍。

          b、HTML標簽都是以開始標簽起始,以結束標簽終止。大部分HTML標簽都是成對出現的,稱為雙標簽,比如:p標簽、div標簽,也有的HTML標簽在開始標簽中結束的標簽,稱為單標簽,比如:hr標簽、br標簽。大多數 HTML 元素可擁有屬性,文本內容都是寫在開始標簽與結束標簽之間。

          c、HTML標簽之間盡量縮進與換行,每行代碼不要過長,方便閱讀和維護。

          d、HTML標簽使用必須符合標簽嵌套規則。禁止a標簽嵌套a標簽,p標簽嵌套div標簽。

          e、建議不使用HTML已經廢棄的或者不贊成使用的標簽,少使用table布局、iframe框架嵌套以及flash播放器。

          來源:PHP程序員雷雪松的博客 -HTML基礎之HTML常用標簽(http://www.leixuesong.cn/2045)

          作者 | Trung Anh Dang

          譯者 | 彎月

          出品 | CSDN(ID:CSDNnews)

          設計一個能夠支持數億用戶的系統并非易事,對軟件架構師來說是一個很大的挑戰。

          以下是本文涵蓋的一些主題:

          • 從最簡單的開始:一個服務器搞定一切。

          • 可擴展性的藝術:向外擴展,向上擴展。

          • 擴展關系數據庫:主從復制、主主復制、聯合、分片、反規范化和 SQL 調優。

          • 使用哪個數據庫:NoSQL 還是 SQL?

          • 高級概念:緩存、CDN、geoDNS.等。

          本文不打算討論高性能計算中常見的問題,例如容錯、可靠性、高可用性等。

          下面,我們開始。


          從零開始

          下圖是我設計的一個最基本的應用。最簡單的方法是將整個應用程序部署在一個服務器上。這可能也是我們大多數人入門時期采用的方式。

          • 一個網站(包括 API)在Apache(或 Tomcat)之類的Web服務器上運行。

          • 一個Oracle(或 MySQL)之類的數據庫。

          同一臺物理機器上同時擁有網絡服務器和數據庫服務器

          但是,這樣的架構存在以下缺點:

          • 如果數據庫出現故障,系統就會出現故障。

          • 如果網絡服務器出現故障,整個系統就會出現故障。

          在這種情況下,我們沒有故障轉移和冗余。一旦服務器宕機就會導致整個系統宕機。

          使用 DNS 服務器解析主機名和 IP 地址

          在上圖中,為了獲取托管系統的服務器IP地址,用戶(或客戶端)需要連接到 DNS系統。在獲得 IP 地址后,請求將直接發送到我們的系統。

          每次訪問網站時,計算機都會執行 DNS 查找。

          通常,域名系統(Domain Name System,DNS)服務器都會使用托管公司提供的付費服務,無需在自己的服務器上運行。


          可擴展性的藝術


          由于數據量、工作量(例如交易數量)以及用戶數量的增加等多種原因,我們的系統必須具備可擴展性。

          可擴展性通常意味著能夠通過添加更多資源來處理更多用戶、客戶端、數據、事務或請求,同時還不會影響用戶體驗。

          我們必須決定如何擴展系統。在我們的這個例子中,有以下兩種擴展類型:向上擴展(scale-up)和向外擴展(scale-out)。

          向上擴展 vs 向外擴展

          向上擴展:向現有服務器添加更多內存和 CPU

          向上擴展也稱為“垂直擴展”,指的是系統的資源最大化,以擴展其處理不斷增加的負載的能力。例如,我們可以通過添加內存和CPU來增強服務器的能力。

          如果我們的服務器擁有8GB內存,則只需更換或添加硬件就可以輕松升級到32GB甚至128GB。

          垂直擴展的方法有很多,如下所示:

          • 通過向 RAID 陣列添加更多硬盤來增加 I/O 容量。

          • 通過使用固態硬盤(SSD)來改善 I/O 的訪問時間。

          • 使用具有更多處理器的服務器。

          • 通過升級網絡接口或安裝其他接口來提高網絡吞吐量。

          • 通過增加內存來減少 I/O 的操作。

          對于小型系統來說,垂直擴展是一個不錯的選擇,因為硬件升級的成本較低,但這種方式也有如下限制:

          • 不可能無限擴展單個服務器的能力。主要取決于操作系統以及服務器的內存總線寬度。

          • 在升級系統的內存時,必須關閉服務器,因此,如果系統只有一臺服務器,停機是不可避免的。

          • 功能強大的計算機通常比流行的硬件貴很多。

          向上擴展不僅適用于硬件,同時也適用于軟件,例如,優化查詢和應用程序代碼。

          承受不了的一臺服務器?

          隨著用戶數量的增長,一臺服務器是遠遠不夠的。這時,我們需要考慮將單個服務器分成多個服務器。

          隨著用戶數據增長,一臺服務器永遠都不夠

          這種架構有以下優點:

          • Web 服務器和數據庫服務器可以分別調優;

          • Web 服務器需要更好的 CPU,而數據庫服務器則需要更多內存;

          • Web 層和數據層可以使用單獨的服務器,并獨立地擴展。

          向外擴展:添加任意數量的硬件和軟件實體

          向外擴展也稱為“橫向擴展”,我們可以向資源池添加更多實體(機器、服務)。水平擴展比垂直擴展更難實現,因為我們需要在構建系統之前考慮好。

          通常,水平擴展的初始成本較高,因為即使是最基本的功能也需要多臺服務器來處理,但后期的回報更豐富。因此,我們需要權衡利弊。

          • 增加服務器數量意味著需要維護的資源也更多。

          • 需要修改系統的代碼,以實現在多臺服務器上的并行處理和工作負載分攤。

          使用負載均衡器來平衡所有節點之間的流量

          負載均衡器是一種專門的硬件或軟件組件,可將流量分散到服務器集群中,以提高系統(包括但不限于應用程序、網站或數據庫)的響應能力和可用性。

          使用負載均衡器來平衡所有節點之間的流量

          通常,負載均衡器位于客戶端與服務器之間,接收傳入的網絡和應用程序流量,并通過各種算法在多個后端服務器之間分配流量。所以,它也可以用在多種地方,例如;Web 服務器與數據庫服務器之間,以及客戶端與 Web 服務器之間。

          HAProxy 和 NGINX 是兩種流行的開源負載均衡軟件。


          負載均衡技術是一種保證容錯的方法,可按如下方式提高可用性:

          • 如果服務器 1 離線,所有流量都將路由到服務器 2 和服務器 3。網站不會離線。此時你需要向服務器池添加一個健康的新服務器,以平衡負載。

          • 當流量快速增長時,你只需要在 Web 服務器池中添加更多服務器,負載均衡器就會將流量路由到新的服務器上。

          負載均衡器采用各種策略和工作分配算法來優化負載的分配,如下所示:

          • 輪轉:在這種情況下,每個服務器按先進先出 (FIFO) 的順序接收請求。

          • 最少連接數:請求將被定向到連接數量最少的服務器。

          • 最快響應時間:請求將被定向到響應時間最快(最近或頻繁)的服務器。

          • 加權:更強大的服務器收到的請求比較弱的服務器更多。

          • IP Hash:在這種情況下,根據計算的客戶端 IP 地址的哈希值將請求重定向到服務器。

          平衡多個服務器間請求的最直接的方法是使用硬件設備:

          • 直接向共享 IP 添加服務器,或刪除服務器。

          • 可以根據需要進行負載平衡。

          軟件負載平衡比硬件負載平衡器更為廉價。這里的負載均衡在第 4 層(網絡層)和第 7 層(應用層)運行。

          • 第 4 層:負載均衡器使用網絡層的 TCP 協議提供的信息。這一層的負載均衡在選擇服務器時通常不會查看請求內容。

          • 第 7 層:可以根據查詢字符串、cookie 或任何頭部信息平衡請求,也可以使用源地址、目標地址等常規的層信息來平衡請求。


          擴展關系數據庫


          在簡單的系統中,我們可以使用Oracle 或 MySQL之類的關系型數據庫來保存數據項。但是關系數據庫系統有其自身的挑戰,尤其是當我們需要擴展它們時。

          有許多技術可以擴展關系數據庫:主從復制、主主復制、聯合、分片、非規范化和 SQL 調優。

          • 復制指的是一種將相同數據的多個副本存儲在不同的機器上的技術。

          • 聯合(或功能分區)會按功能拆分數據庫。

          • 分片是一種與分區相關的數據庫架構模式,可以將不同的數據放在不同的服務器上,不同的用戶可以訪問不同的數據。

          • 反規范化可以將數據寫入多個表,從而避免昂貴的連接,以犧牲部分寫入性能為代價來提高讀取性能。

          • SQL 調優。

          主從復制

          主從復制技術能夠將數據從一臺數據庫服務器(主服務器)復制到一臺或多臺數據庫服務器(從服務器),如下圖所示。

          主節點更新

          • 更新數據時,客戶端需要連接到主服務器。

          • 接著,數據會被復制到從服務器,直到所有數據在服務器之間保持一致。

          這種方法仍然存在一些瓶頸:

          • 如果主服務器由于某種原因宕機,仍然可以通過從服務器讀取數據,只不過無法寫入新數據了。

          • 我們需要額外的算法來將從服務器提升為主服務器。

          下面是一些解決方案,可以實現只有一臺服務器處理更新請求的情況。

          • 同步解決方案:數據修改事務需要等到所有服務器都接受后才提交(分布式事務),因此不會在故障轉移時丟失數據。

          • 異步解決方案:提交 -> 延遲 -> 復制到的其他服務器,因此在故障轉移時可能會丟失一些數據更新。

          如果同步解決方案太慢,則可以改為異步解決方案。

          主主復制

          每個數據庫服務器都可以與其他服務器同時擔任主服務器。在某個時間點,所有主服務器進行同步,以確保它們保存了正確以及最新的數據。

          節點讀寫數據庫

          主主復制的優勢在于:

          • 如果某個主服務器出現故障,其他數據庫服務器可以正常運行,而且還可以擔負起主服務器的責任。當數據庫服務器重新上線后,可以通過復制來更新數據。

          • 主站可以位于多個物理站點,并且可以分布在整個網絡中。

          但服務器的更新能力受限于主服務器。

          聯合

          聯合(或功能分區)會按功能拆分數據庫。例如,你可以擁有三個數據庫,分別用于論壇、用戶和產品,這樣就可以減少每個數據庫的讀寫流量,從而減少復制延遲。

          按功能拆分數據庫

          更小的數據庫可以將更多的數據保存在內存中,這樣可以改善緩存的局部性,進而提高緩存命中率。由于沒有單一的中央主序列化寫入,你可以實現并行寫入,從而提高吞吐量。

          分片

          分片(也稱為數據分區)是一種將大數據庫分成許多小塊的技術,每個數據庫只能管理數據的一個子集。

          在理想情況下,每個用戶都使用不同的數據庫節點。這種方式助于提高系統的可管理性、性能、可用性和負載均衡。

          • 每個用戶只需與一臺服務器對話,因此可以快速獲得服務器的響應。

          • 服務器之間的負載均衡更好,例如,如果我們有五臺服務器,則每臺服務器只需處理 20% 的負載。

          在實踐中,有許多不同的技術可以將數據庫分解為多個小塊。

          水平分區

          這種技術會將不同的行放入不同的表中。例如,如果我們將用戶的個人資料存儲在一個表中,則可以將ID小于1000的用戶存儲在一個表中,同時將ID大于1001且小于2000的用戶存儲在另一個表中。

          不同行放入不同表中

          縱向分區

          在這種情況下,我們根據服務器中保存的與特定功能相關的表來劃分數據。例如,如果我們正在構建一個類似 Instagram 的系統,我們需要在數據庫中存儲與用戶、上傳的照片以及他們關注的人相關的數據,我們可以將用戶個人資料信息放在一個數據庫服務器上,將好友列表放在另一個服務器上,而第三個服務器上則保存照片。

          把劃分數據存儲在相應的表中

          基于目錄的分區

          如果想以松散耦合的方式解決這個問題,則需要創建一個查找服務,該服務知道當前的分區模式,并擁有一份每個實體到其所屬的數據庫分片的映射。

          當數據存儲的擴展超出單個存儲節點的可用資源,或者需要通過減少數據存儲的競爭來提高性能時,我們就可以采用這種方法。但請記住,分片技術存在以下一些常見問題:

          • 多表連接會變得更加昂貴,并且在某些情況下無法實現。

          • 分片會損害數據庫參照完整性。

          • 數據庫架構變更可能會變得非常昂貴。

          • 數據分布不均勻,有些分片的負載很高。

          反規范化

          反規范化會以犧牲部分寫入性能為代價來提高讀取性能。數據的冗余副本會被寫入多個表,以避免昂貴的多表連接。

          當數據的分布采用聯合和分片等技術之后,跨數據中心的管理連接會進一步增加復雜性。反規范化可以規避這種復雜的連接。

          在大多數系統中,讀取的次數大大超過了寫入的次數,比例為 100:1,甚至 1000:1。因此,每當讀取涉及復雜的數據庫連接時,就可能會非常昂貴,并在磁盤操作上花費大量時間。

          有些關系數據庫,比如 PostgreSQL 和 Oracle 支持物化視圖,它們會存儲冗余信息,并保持冗余副本一致。

          使用哪個數據庫?

          在數據庫領域,有兩種主要的解決方案:SQL 和 NoSQL。二者的構建方式、存儲信息的類型以及使用的存儲方法都不同。

          SQL

          關系數據庫以行和列的形式存儲數據。每一行包含關于一個實體的所有信息,每一列包含所有的單獨數據點。

          最流行的關系數據庫包括 MySQL、Oracle、MS SQL Server、SQLite、Postgres 以及 MariaDB等。

          NoSQL

          NoSQL又稱為非關系數據庫。這些數據庫通常分為五個主要類別:鍵值數據庫、圖數據庫、列數據庫、文檔數據庫以及 Blob 數據庫。

          鍵值存儲數據庫

          數據存儲在鍵值對數組中。“鍵”是鏈接到“值”的屬性名稱。常見的鍵值存儲包括 Redis、Voldemort 和 Dynamo。

          文檔數據庫

          在這些數據庫中,數據存儲在文檔中(而不是表中的行和列),并且這些文檔歸類成集合。每個文檔可以具有完全不同的結構。

          常見的文檔數據庫包括 CouchDB 和 MongoDB。

          寬列數據庫

          列式數據庫中,沒有“表”,只有列,它們是行的容器。與關系數據庫不同,我們不需要預先知道所有的列,每一行也不必具有相同的列數。

          列式數據庫最適合分析大型數據集,常見的有 Cassandra 和 HBase。

          圖數據庫

          這些數據庫常用于存儲關系最適合用圖表示的數據。數據保存在擁有節點(實體)、屬性(關于實體的信息)和線(實體之間的連接)的圖結構中。

          常見的圖數據庫包括 Neo4J 和 InfiniteGraph。

          Blob 數據庫

          Blob 數據庫就好像文件的鍵/值存儲,可通過API訪問,如 Amazon S3、Windows Azure Blob Storage、Google Cloud Storage、Rackspace Cloud Files 或 OpenStack Swift 等。


          如何選擇數據庫?


          數據庫技術的選擇沒有統一的標準。這就是為什么許多企業同時使用 SQL 和 NoSQL 數據庫來滿足不同需求的原因。

          如何選擇?

          水平擴展 Web 層

          以上,我們談到了數據層的擴展,下面我們來看看Web層的擴展。為了擴展Web層,我們需要將用戶會話(狀態)的數據存儲在關系數據庫或 NoSQL 等數據庫中,將用戶會話(狀態)的數據移出 Web 層。這也稱為無狀態架構。

          無狀態系統很簡單

          不要使用有狀態的架構。

          我們必須盡可能選擇無狀態架構,因為狀態的實現限制了可擴展性,降低了可用性,并增加了成本。

          在上述情況下,負載均衡器的效率最高,因為它可以選擇任何服務器來處理請求。


          高級概念


          緩存

          負載均衡可以幫助你在數量不斷增加的服務器上進行水平擴展,但緩存能夠更好地利用現有資源,在后續請求期間更快地提供數據。

          如果數據不在緩存中,則從數據庫中獲取,然后將其保存到緩存中并從中讀取

          通過向服務器添加緩存,我們可以避免直接從服務器讀取網頁或數據,從而減少響應時間,并降低服務器的負載。這也有助于提升應用程序的可擴展性。

          緩存可以應用于許多層,例如數據庫層、Web 服務器層和網絡層。

          內容交付網絡(Content Delivery Network,CDN)

          CDN 服務器保存著內容(如圖像、網頁等)的緩存副本,并選擇地理位置最近的服務器處理請求。

          使用CDN 可以縮短了用戶的頁面加載時間,因為數據都是從地理位置最近的服務器上加載的。這也有助于提高內容的可用性,因為數據存儲在多個位置。

          CDN 的使用縮短了用戶的頁面加載時間,因為數據是在最接近它的位置檢索的

          CDN 服務器向Web 服務器發出請求以驗證緩存的內容,并在需要時更新緩存。緩存的內容通常是靜態的,例如 HTML 頁面、圖像、JavaScript 文件、CSS 文件等。


          進軍全球市場


          當應用開始進軍全球市場時,你需要在世界各地建立和運維數據中心,以確保產品可以全天候不間斷地提供服務。傳入的請求被路由到基于 GeoDNS 的“最佳”數據中心。

          當應用走向全球

          GeoDNS 是一項 DNS 服務,允許根據客戶的位置將域名解析為 IP 地址。從亞洲連接的客戶端獲得的IP地址可能不同于從歐洲連接的客戶端。

          綜合


          通過迭代應用本文中的技術,例如無狀態架構、應用負載均衡器、盡可能多地使用緩存數據、支持多個數據中心、在 CDN 上托管靜態資產、通過分片擴展數據庫規模等。我們就可以輕松地將系統擴展到 1 億用戶。

          縮放是一個迭代過程

          原文鏈接:https://levelup.gitconnected.com/how-to-design-a-system-to-scale-to-your-first-100-million-users-4450a2f9703d

          參考鏈接:

          • https://httpd.apache.org

          • http://tomcat.apache.org

          • https://www.oracle.com/database/

          • https://www.mysql.com

          • https://en.wikipedia.org/wiki/Domain_Name_System

          • https://www.facebook.com/note.php?note_id=10150468255628920


          主站蜘蛛池模板: 亚洲日韩一区二区一无码| 亚洲AV无一区二区三区久久| 久久国产精品最新一区| 三上悠亚亚洲一区高清| 精品一区二区三区高清免费观看| 精品国产日韩亚洲一区| 亚洲一区二区三区四区在线观看 | 亚洲AV成人一区二区三区观看| 日韩精品区一区二区三VR | 国产精品 视频一区 二区三区| 无码乱人伦一区二区亚洲一| 亚洲一区二区三区免费视频| 亚洲第一区视频在线观看| 亚洲熟妇AV一区二区三区宅男| 99热门精品一区二区三区无码 | 在线|一区二区三区四区| 日本免费一区尤物| 精品国产AⅤ一区二区三区4区 | 国产亚洲一区区二区在线 | 欧洲精品码一区二区三区免费看| 美女AV一区二区三区| 三上悠亚国产精品一区| 久久精品道一区二区三区| 亚洲综合av一区二区三区不卡| 一区二区三区在线看| 少妇无码一区二区三区免费| 精品久久久中文字幕一区| 国模大尺度视频一区二区| 日韩一区二区视频| 亚洲A∨精品一区二区三区 | 国产精品合集一区二区三区| 国产免费私拍一区二区三区| 国产AV午夜精品一区二区三区| 精品无码综合一区二区三区| 国精品无码A区一区二区| 性色av闺蜜一区二区三区| 日本一区二区在线| 波多野结衣中文字幕一区二区三区 | 夜夜添无码一区二区三区| 亚洲愉拍一区二区三区| 美女福利视频一区|