百度貼吧10億量級LAMP架構分享

導讀:天下武功,唯快不破。對日益激烈的互聯網競爭你所擁有的利器就是快!本文來自百度貼吧的LAMP解決方案介紹,摘錄至此旨在研究分享,看看其是如何全面支持快速迭代的。

文章內容如下:

貼吧是功能性產品,唯快不破是永恒的準則,這一特點決定了快速迭代是需要解決的關鍵性問題。快速迭代,分解開來有如下部分:開發階段,快速開發;測試階段,包含了環境快速搭建、自動化測試工具;運維階段,包含了集群管理技術、自動化運維工具;同時,這三方面的工作需要一個整體性的解決方案銜接起來。

早期的貼吧,作為一個高性能社區,功能相對單一,全部采用C語言開發,系統可重用程度低,開發、測試效率低,運維方面的積累也很少。為了提高效率,開始嘗試LAMP架構,經過幾年的發展,貼吧已全部遷移到了LAMP。隨著產品規模急劇膨脹,30+子系統,150+模塊,500+機器,10億+流量,在LAMP架構方面積累了很多經驗,逐漸形成了快速迭代的一體化方案。如下圖所示:

該解決方案由開發階段、測試階段、運維階段組成。開發階段又分成接入層、業務邏輯層、存儲層。該解決方案支撐大規模的線上應用,同時保持了快速迭代的特性。基于該解決方案,開發人員能專注于業務邏輯開發,測試人員能專注于持續集成,運維成本能大大降低。

開發

開發方面分為接入層、業務邏輯層、存儲層。

接入層處于瀏覽器和后端服務之間,用來解析http協議并組織成相應的協議格式,完成客戶端和服務器之間的通信,還包括攻擊防范、頁面緩存、負載均衡等多種功能。Web server是其核心組成部分。接入層的目標是通過統一的方案提供簡單可依賴的接入層架構,經過全面調研nginx具有通用性強、效率高、功能全面、配置靈活等特點,是webserver未來發展的主力軍,確定采用nginx統一接入層。

業務邏輯層包含了PHP框架、業務邏輯、LIB庫、交互層。業務邏輯層常常包含一些開發規范,這些規范就像法律一樣,我們不僅要有法可依,還要有法必依。在我們的解決方案中,PHP框架=規范+庫,規范比如目錄部署規范、URL規范、配置規范等,這些規范通過相應的庫實現,以達到有法必依的目的。 LIB庫封裝常用的功能。基于這個解決方案,開發者開發應用,只需完成業務邏輯部分。

中間層,如下圖所示,包含在業務邏輯層中,對于業務邏輯層的快速迭代非常重要。中間層對下做交互抽象,支持各種協議屏蔽協議細節;通過資源定位屏蔽部署細節;通過負載均衡提高系統穩定性。中間層對上做接口抽象,支持服務整合、接口適配、公共邏輯。中間層首先建立系統–子系統–模塊的體系,進行服務整合,圖中的API-LIB就是根據子系統劃分,將各模塊的接口(MIDL: Module IDL)轉化為子系統接口(SIDL: Service IDL);接口適配,SERVICE的接口通過SIDL描述,讓接口描述、接口文檔、線上代碼等自動同步,可維護性大大提高,同時通過元數據規范保證全系統的接口一致,易用性大大提高;收斂公共邏輯,對于公共邏輯,比如權限邏輯,收斂起來可維護性大大提高。

存儲層,提供各種通用服務、組件。其中的通用數據存儲框架提供通用的數據存儲和訪問解決方案,以一種統一的設計模式來支持大多數數據存儲模塊的設計和實現;統一數據訪問接口,對外部屏蔽數據拆分和存儲的細節;做到數據存儲的良好擴展性,通過通用的數據拆分模式來應對數據增長;將具有共性的需求抽象成通用服務或通用庫,以簡化設計和開發。

基于該解決方案,開發一個應用只需要:在接入層配置相應的分流,在業務邏輯層開發業務邏輯,使用存儲層合適的服務或基于框架完成數據模塊開發。能大大的提高開發效率,支持快速迭代。

測試

測試方面,為了支持快速迭代,必須提高自動化程度。而影響自動化的首要因素就是環境自動構建,常見的問題有:環境復雜,比如關聯關系復雜;環境搭建代價過大;環境功能不完整等。采用基準環境能解決這一問題,項目上線后自動從scmpf更新到基準環境;測試環境/開發環境從基準環境同步。基于基準環境,系統級別的持續集成也成為可能,同時可以集中大量測試工具。

運維

運維方面面臨著很多問題:服務遷移成本高,環境不一致帶來各種回滾,機器利用率不均衡,運維自動化程度低。為了解決這些問題,提出PHP系統運維方案。環境同步方面,主要是代碼同步的問題,采用運維規范+監控的方案;性能監控方面,基于交互層完成請求狀態、交互性能監控,基于調度中心獲取機器狀態;機器調度方面,通過調度中心完成動態/半自動機器調度。如下圖所示:

展望

通過該LAMP解決方案,在開發、測試、運維方面都能極大的提高效率。未來在LAMP架構方面,需要更多的在規范化、平臺化上下功夫。規范之后才能開展這種自動化的工作提高效率;平臺化可以把各種規范固化下來,提供自動化的支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452031.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452031.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452031.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python基礎-PyYaml操作yaml文件

yaml語法 格式 它的基本語法規則如下 大小寫敏感 使用縮進表示層級關系 縮進時不允許使用Tab鍵,只允許使用空格。 縮進的空格數目不重要,只要相同層級的元素左側對齊即可 YAML 支持的數據結構有三種 1、對象:鍵值對的集合,又稱為映…

N1CTF 塞題vote分析

N1CTF 塞題vote分析:這個題是一個uaf的漏洞題,我們先看看漏洞(如下圖),這兩部分是很明顯的對比的啊。當單獨的一個count數組的數據和堆里的數據相同時候,就會釋放堆,堆釋放后的count還會有指針指…

String.valueOf()方法與toString()方法的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 兩者都是把ObJect對象轉化為String 類型。 2.string.valueof()方法有作非空判斷,在內部也是調用的toString()方法&#…

網絡爬蟲--11.XPath和lxml

文章目錄一. XML1. XML 和 HTML 的區別2. XML文檔示例3. HTML DOM 模型示例4. XML的節點關系二. 什么是XPath?1. 選取節點2. 謂語(Predicates)3. 選取未知節點4. 選取若干路徑5. XPath的運算符三. lxml庫1. 初步使用2. 文件讀取四. XPath實例…

實體與屬性間的劃分原則

為了簡化E-R圖的處置,現實世界的事物能作為屬性對待的,盡量作為屬性對待。 兩條準則: (1)作為屬性,不能再具有需要描述的性質。屬性必須是不可分的數據項,不能包含其他屬性。 (2&…

編程開發之--java多線程學習總結(5)

4、對繼承自Runnable的線程進行鎖機制的使用 package com.lfy.ThreadsSynchronize;import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class TicketSellSolution4 implements Runnable {private static int num 50;//創建一個…

軟件測試不是一個功能

今天在工作中我對一個同事說,PyDev 2.5.0現在對TDD(測試驅動開發)提供了很酷的支持了。我并不是一個對TDD很癡迷的倡導者,對其它事物也一樣,但仍不免激起了一場討論。這個家伙,讓我們暫叫他約翰&#xff0c…

Linux 操作系統基礎知識

1.操作系統總體介紹 ?CPU: 就像人的大腦,主要負責相關事情的判斷以及實際處理的機制。查詢指令: cat /proc/cpuinfo?內存: 大腦中的記憶區塊,將皮膚、眼睛等所收集到的信息記錄起來的地方,以供CPU進行判斷…

Transaction 那點事兒,Spring事務管理

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Transaction 也就是所謂的事務了,通俗理解就是一件事情。從小,父母就教育我們,做事情要有始有終&…

網絡爬蟲--12.【XPath實戰】獲取百度貼吧中的圖片

用XPath來做一個簡單的爬蟲,我們嘗試爬取某個貼吧里的所有帖子,并且將該這個帖子里每個樓層發布的圖片下載到本地。 #codingutf-8 import requests from lxml import etree import jsonclass Tieba:def __init__(self,tieba_name):self.tieba_name tie…

合并分ER圖產生的沖突

合并分E-R圖 各個局部應用所面向的問題不同,各個子系統的E-R圖之間必定會存在許多不一致的地方,稱之為沖突。 子系統E-R圖之間的沖突主要有三類: ①屬性沖突 ②命名沖突 ③結構沖突①屬性沖突 屬性域沖突,即屬性值的類型、取值范圍…

8.類定義、屬性、初始化和析構

類定義 類 是一個獨立存放變量(屬性/方法)的空間 封裝: 類可以把各種對象組織在一起,作為類的屬性,通過 . (點)運算符來調用類中封裝好的對象 屬性: 變量在類中稱為屬性,但是類中的屬性不僅僅只包含變量&#x…

GPL以及Copyleft協議使用率下降明顯

根據最新的協議數據分析,不光是GPL,另外一些copyleft(AGPL,LGPL 等等)協議的使用率在不斷下降,并且下降的速度越來越快。 這結果是在意料之中的,因為GPL非常的復雜。越來越多的個人和企業將選擇…

概念模型和關系模型

ER模型(邏輯模型) ER模型的基本元素是:實體、聯系和屬性 實體:是一個數據對象,指應用中可以區別的客觀存在的事物。(ER模型中的實體往往是指實體集) 實體集:指同一類實體構成的集合…

iOS AutoLayout使用技巧

關于ContentCompressionResistance, ContentHugging運用 如下圖效果圖,兩個Label并列在同一排上,左邊label自適應,右邊label(紅色)要使得內容全部展示,如果左邊label內容很少,那么右…

網絡爬蟲--13.數據提取之JSON與JsonPATH

文章目錄一. 前言二. JSON三. json.loads()四. json.dumps()五. json.dump()六. json.load()七. JsonPath八. JsonPath與XPath語法對比九. 案例分析一. 前言 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時…

vs2017生成sqlserver 2017項目出現.Net SqlClient Data Provider: Msg 10343

一、使用vs2017生成sqlserver 2017項目時由于添加的程序集(CLR集成,可以參考后面給出的鏈接進行理解) ,由于安全權限的配置不正確引發以下的問題: SQL72014: .Net SqlClient Data Provider: Msg 10343, Level 14, State 1, Line 1 針對帶有 SAFE 或 EXT…

數據庫系統常用的存取方法

1. B樹索引存取方法 2. Hash索引存取方法 3. 聚簇存取方法

創建型模式二:工廠方法模式

1. 工廠模式介紹 工廠模式(Factory Pattern)的意義就跟它的名字一樣,在面向對象程序設計中,工廠通常是一個用來創建其他對象的對象。工廠模式根據不同的參數來實現不同的分配方案和創建對象。 在工廠模式中,我們在創建…

spring 的4種事務管理(1種編程式+3種聲明式)

見:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4種事務管理(1種編程式事務三種聲明事務) 一、Spring事務的介紹 二、編程式事務xml的配置 注入后直接在service層調用模板的方法使用 三、基于AOP方式的聲明式事務…