# 如何使用微服務建立財產管理系統集成
> 原文: [http://highscalability.com/blog/2016/2/10/how-to-build-your-property-management-system-integration-usi.html](http://highscalability.com/blog/2016/2/10/how-to-build-your-property-management-system-integration-usi.html)

*This is a guest post by Rafael Neves, Head of Enterprise Architecture at [ALICE](http://info.aliceapp.com),?a NY-based hospitality technology startup. While the domain is?**Property Management, it's also a good microservices intro.* 在零散的款待系統世界中,集成是必不可少的。 您的系統將需要與來自不同提供程序的不同系統進行交互,每個提供程序都提供自己的應用程序接口(API)。 不僅如此,而且當您與更多的酒店客戶整合時,將需要更多的實例來連接和管理此連接。 物業管理系統(PMS)是任何酒店的核心系統,隨著行業變得越來越緊密聯系,集成至關重要。
為了在酒店業提供軟件解決方案,您肯定需要與 PMS 提供者建立 2 路集成。 挑戰在于大規模建立和管理這些連接,并在多個酒店中使用多個 PMS 實例。 您可以采用幾種方法來實現這些集成。 在這里,我提出一種簡單的架構設計來構建集成基礎,隨著您的成長,該基礎將增加 ROI。 這種方法是微服務的使用。
## 什么是微服務?
企業軟件設計思想領袖 Martin Fowler 提供了微服務的全面定義[:](http://martinfowler.com/articles/microservices.html)
> 在過去的幾年中,出現了“微服務體系結構”一詞,用于描述將軟件應用程序設計為可獨立部署的服務套件的特定方式。 盡管沒有這種架構樣式的精確定義,但圍繞業務能力,自動部署,端點中的智能以及對語言和數據的分散控制,組織周圍存在某些共同特征。
本質上,微服務是很小的軟件組件,專注于真正做好一件事情。 不必編寫一個大型的整體應用程序,而是可以使用微服務將其分解,每個微服務在給定的域中管理一個集中的功能。
因此,它們是自治的,彼此獨立執行。 因此,對一項服務的更改不應要求對另一項服務的更改。 隨著您的成長和進行更改,您無需擔心會影響其他微服務。
微服務是:
* 小
* 專注于
* 松耦合
* 高內聚性
## 為什么微服務功能強大
微服務架構提供了很多好處。 主要優點包括:
### 可擴展性
* 您的單個系統將與具有不同屬性的多個 PMS 實例集成。 從規模上講,當與 1000 個屬性進行集成時,即使它們正在運行來自同一供應商的相同 PMS 系統,您也需要顯式管理不同的 1000 個集成。 為了增加復雜性,這些實例可以來自不同的提供程序。
* 隨著您添加許多 PMS 實例和屬性,它可以優雅地擴展。 如果您使用的是整體應用程序,則必須將所有內容擴展為一個大塊。 在流量高峰期間,可能很難理解性能瓶頸在哪里,而對于微服務而言,透明度要高得多。
* 當您擁有微服務時,很清楚哪些服務存在性能問題,您可以輕松調整其容量(底層硬件),而不必增加運行正常流量負載的其他服務的容量。
### 彈性
* 旅館中的 PMS 實例可能已關閉或出現性能問題,這不會影響系統的性能或正常運行時間。
* 您可以實現任意數量的微服務。 部署的次數越多,容錯和對更改的管理就越多。
### 技術堆棧獨立性
* 您可以具有多個技術堆棧; 每個服務都將擁有最適合的技術堆棧。 您的訪客配置文件可能在關系數據庫中,而他們的請求可能在 NoSQL 數據庫中。
* 對特定技術棧沒有長期的承諾; 畢竟,您可以擁有多個。
### 添加,更改或取消功能&重構 [
* 微服務非常小(通常只有幾百行代碼)。
* 由于代碼具有內聚性,因此更容易理解:它可以做一件事。
* 對其所做的更改不會直接影響其他服務。
* 刪除整個微服務更容易,并且不會對整個系統造成風險
### 部署方式
* 酒店希望提供卓越的服務。 如果您的系統已關閉或未提供其所有功能(例如,不將來賓入住請求推送到您的 PMS 或從中讀取更新),他們將無法交付。
* 回滾也更容易。 如果出了什么問題,回滾一個帶有自己數據庫的微服務要比回滾一個單個數據庫的整個系統要容易。
* 部署單片應用程序的下一版本時,總是很麻煩:即使您僅添加了一個功能,也必須立即部署整個應用程序。 一起部署所有內容都是有風險的。 ,
請記住,如果僅集成一個 PMS,則微服務是一個過大的殺傷力。 如果要與具有 1000 個不同屬性的 1000 個 PMS 實例集成,那么該體系結構的好處就顯而易見了。
## 傳統方法:單片應用程序
借助傳統方法(整體應用程序)開始您的業務并開始新產品是很有意義的,因為它更容易。 目前,您仍在學習域以及域如何集成。
整體更易于開發和部署,采用整體方法,則更容易回答諸如如何建模預訂服務以及如何在訪客配置文件微服務中實現訪客對帳操作之類的問題。
但是,就像您的公司一樣,整體式增長非常迅速,并且隨著系統的增長,很難擴展:
添加了新功能,推出了新的代碼行,并且當系統變得太大時,它變得難以馴服和理解。 更改系統需要進行嚴格的回歸測試,以確保新功能不會破壞系統的其他部分,因為整體應用程序通常不具有內聚力,也沒有松散耦合。
故障排除和調試更加困難,因為存在更多具有更多相互依賴性的代碼。 更新服務可能需要更改共享的基礎結構代碼,并且在引入錯誤時可能導致感染。 龐大的代碼庫使新手開發人員難以入職和培訓。
它影響部署:應用程序越大,啟動時間就越長。 是的,您可以簡單地添加更多服務器并在所有服務器上復制應用程序,但是您仍然只有一個數據庫。 不僅如此,系統的某些部分可能會更占用內存,而其他部分則需要大量 CPU。 那么,當您無法分別縮放每個組件時該怎么辦? 您添加更多服務器!
這是非常昂貴的。 這樣,一旦您對域有了更好的了解,就可能想要開始將系統分解為微服務。
## 架構概述
現在,我們已經解釋了采用微服務架構的長期好處,讓我們研究一下如何設計此微服務框架的一些細節:
這里的關鍵是隔離:集成的系統應該彼此獨立運行。 IE:您的核心系統獨立于在屬性 X 上運行的屬性管理系統,并且獨立于在屬性 Y 上運行的系統。
通過在核心系統和要與之集成的所有資產管理系統之間引入連接器(中間件),可以實現這種隔離。
中間件由消息隊列和后臺工作者組成:
* 可用于實現的服務示例:
* 消息隊列:RabbitMQ,IronMQ 等。
* 背景工作者:IronWorker,AWS Lambda 等。
消息隊列提供系統之間的異步通信。 發件人系統(例如您的系統)將消息發布到隊列中,并一直位于該隊列中,直到后臺工作人員(訂閱該隊列)在以后處理該消息為止。
然后,后臺工作人員負責處理消息(解析其內容),然后管理與 PMS API 的集成。 同樣,它將數據保存到中間件數據庫中。
請記住,后臺工作程序可以是像 AWS Lambda 這樣的云服務,也可以是內部用 Java 開發的應用程序,也可以是在 Windows 服務中開發的應用程序。 正如我們將在下面詳細介紹的那樣,微服務的技術堆棧并不重要。
請記住,一個消息隊列保證 FIFO(先進先出),因此隊列中的所有消息都按照它們進入的順序進行處理。如果您有多個隊列,則將一條消息發布到隊列中 可以比發布到隊列 Y 的消息更早地處理 X,這在您的設計中應予以考慮。
另外,雖然 PMS 可能位于酒店的內部,但您的系統也不一定要位于云中或內部。
請記住,此服務控制與預留關聯的所有生命周期事件,因此它不僅是 CRUD 包裝器。 如果您需要為該預訂分配房間,添加陪同客人或什至辦理入住手續,則可以將適當的請求發送給該同一工作人員。
現在讓我們根據 Martin 的描述來分析微服務的每個主要特征,以及我們的架構如何實現它們:
## 1-圍繞業務能力的組織
每個工作人員都實現了如何與 PMS 集成的邏輯。 您可以將多個工作人員插入到屬性中的同一 PMS 實例中,在其他酒店中添加更多連接到同一屬性管理系統(同一供應商)的工作人員,還可以在以下位置添加連接到不同屬性管理系統(不同供應商)的其他工作人員 其他屬性。
因此,假設您需要更改與某些 API 方法的交互方式,則只需將新版本部署到其中一個工作程序,而不會影響其他工作程序。 您可以讓一個工人來處理預訂,另一個可以來賓。
可以在 Linux crontab 中安排一些后臺工作程序,以按照給定的時間表重復執行。 其他消息始終在運行,在到達隊列時處理消息。 其他后臺工作人員也可以回調您的核心系統 API,以插入或更新從 PMS 收集到的新信息(即從 PMS 中獲取/讀取數據并將其加載到您的核心系統中)。
在薩姆·紐曼(Sam Newman)撰寫的 *Building Microservices* 一書中,他指出“從事較小代碼庫的較小團隊往往生產力更高。”這是通過微服務實現的
它不僅可以提高生產率,還可以使團隊或個人從一種微服務轉移到另一種(通用共享代碼庫)。
它也可以促進創新,因為長時間從事同一項目的個人或團隊可能只會提出有限范圍的新想法。 而如果您允許您的團隊在產品和項目之間切換,他們可能會提出成千上萬個新想法。
## 2-自動部署
微服務需要以自動化方式進行部署。 為什么? 首先,因為您有很多。 如果必須手動部署它們中的每一個,這將很容易出錯并且非常耗時。 這取決于您擁有的微服務數量。 您可以彼此獨立地分別釋放每個服務。
請注意,我的意思是在此處將新版本部署到微服務,而不是分解新的工作程序實例。 您已經在運行工作程序,但是您想部署新版本的代碼。 讓我們用一個例子說明一下:
* 假設您必須與 1000 個屬性集成,其中 500 個屬性使用供應商 1(PMS_1)的 PMS,其中 500 個屬性使用供應商 2(PMS_2)的 PMS。
* 由于無論 PMS 供應商如何,這里的域上下文都非常相似,因此每個 PMS 實例將很可能具有相似數量的工作線程,除非您想通過添加更多相同類型的工作線程來擴展給定的連接。 簡單來說,假設每個 PMS 實例有 5 個工作線程(一個用于保留,一個用于來賓配置文件,等等)。
* 由于 PMS_1 API 與 PMS_2 API 不同,因此與 PMS_1 集成的保留服務的代碼與與 PMS_2 集成的保留服務的代碼不同。
* 在 1000 個屬性上,您有 5000 個工作人員,然后:
* 2500 名 PMS_1 員工
* 500 名預訂工人,每個屬性中帶有 PMS_1 的一名
* 500 位訪客資料工作人員,每個屬性中帶有 PMS_1 的一名
* 500 名 X 工人,每個資產帶有 PMS_1 的一名工人
* 500 名 Y 工人,每個屬性為 PMS_1 的工人
* 500 名 Z 工人,每個屬性中帶有 PMS_1 的一名工人
* 2500 名 PMS_2 員工
* 500 名預訂工人,每個屬性為 PMS_2 的一名
* 500 位訪客資料工作者,每個屬性中帶有 PMS_2 的一名
* 500 名 X 工人,每個資產帶有 PMS_2 的一名工人
* 500 名 Y 工人,每個屬性為 PMS_2 的工人
* 500 名 Z 工人,每個資產中帶有 PMS_2 的一名工人
* 假設您對與 PMS_1 集成的 Reservation 服務的代碼進行了更改,它已經過測試并且可以發布。
* 假設您有一個源代碼存儲庫,并且每個微服務都內置有您選擇的持續集成工具,這是非常明智的選擇,那么您需要將代碼部署到 500 個工作程序(與 PMS_1 集成的 500 個保留工作程序)。
其次,微服務的目的之一是要具有敏捷性,并且要具有敏捷性,您需要自動化。 這就是持續集成(CI)和持續交付(CD)的神奇之處:
CI 是一種開發實踐,要求開發人員一天幾次將代碼集成到共享存儲庫中。 然后,提交觸發構建。 如果構建失敗,則每個人都會收到警報(原則上會發出偏差警報)。 此處的關鍵是盡早確定提交問題(即代碼問題)。 如果構建成功,則可以將其部署到您的應用程序服務器。 這導致我們實現持續交付:
連續交付是確保成功構建的工件可以快速部署到生產中的一種做法。 這是通過首先將您的應用程序部署到暫存環境(具有與生產環境相同的特征)來實現的。 只需按“部署”按鈕,就可以將應用程序部署到您的生產環境中。 最好的是,因為它只是一個按鈕,所以您無需中斷軟件工程師的工作。
* 可用于實現 CI / CD 的服務示例:Atlassian Bamboo,TeamCity,Jenkins 等。
雖然,請不要將持續交付與持續部署混淆。 我不會在這里詳細介紹它,但是我會留下 PuppetLabs 的[很棒的文章](https://puppetlabs.com/blog/continuous-delivery-vs-continuous-deployment-whats-diff)來介紹持續交付和持續部署之間的區別。
還應注意,微服務的部署要比單片應用程序安全得多,這應有助于自動化。
## 3-端點的智能
后臺工作人員封裝了如何與 PMS 集成的邏輯。 如果我們需要更改邏輯或 PMS API 已更改,我們只需要在一個地方進行更改-它不在您的主系統中(將其與對下游 API 的更改隔離開來)。
另外,每個 PMS 都有自己的 API,因此您可以隔離與核心系統中的每個 API 進行通信的邏輯。
## 4-語言和數據的分散控制
每個微服務可以擁有自己的技術堆棧。 讓您擁抱技術的異質性。
例如:如果我們需要提高特定組件的性能,則可以選擇能夠實現所需性能的其他技術堆棧。 新服務不依賴于較早的技術定義,而是在適當時利用新的語言或技術。
每個工作程序可以使用不同的技術構建:工作程序 1 可以使用 Java 開發,帶有 MySQL 數據庫以處理來賓配置文件,而工作程序 2 可以使用 C#開發,具有 NoSQL DB 來處理來賓消息。 記住:他們是獨立的。
您需要擔心它們的集成,即它們之間如何實際通信。 您將實現返回 JSON 的 RESTful API 還是使用 XML 的 SOAP API?
現在,讓我們更深入地研究中間件。
## 中間件
中間件提供了系統與要集成的多個屬性管理系統之間的隔離。 它由消息隊列和后臺工作者組成。
中間件不應保持狀態:兩端的系統(即您的系統和 PMS 系統)負責保持有關酒店,訪客資料,預訂等的狀態。中間件只是在兩者之間創建映射。 這樣做的原因是,您不想引入一個新的組件,該組件還存儲可能導致一致性問題的狀態:您將在 3 個不同的系統(酒店物業管理系統)中存儲相同的實體(例如,預訂)。 ,中間件和核心應用程序),并且由于集成中的某些錯誤,它們可能會有所不同。 在這種情況下,誰持有關于保留真實有效狀態的真相?
中間件必須提供允許您協調核心系統中的內容與 PMS 中的內容的方法。 因此,如果在核心系統中創建了新請求,但是由于某種原因(實例處于脫機狀態,軟件錯誤,網絡問題等),則該請求未保存到 PMS 中(例如,向來賓作品集收費) ),中間件應提醒用戶該問題并提供重新處理集成的方法。 它必須清楚地顯示每條消息在隊列中的位置以及每個后臺工作人員的狀態。 它必須允許您查看給定消息失敗及其失敗的原因,并提供重試(重新處理)給定消息的機制。
您可以在中間件數據庫的頂部具有一個緩存層,以便更快地訪問常見對象,例如城市代碼,信用卡類型等。 一些財產管理系統將此作為具有鍵-值對的枚舉來實現。 可用于提供緩存層的工具示例包括:自托管的 Redis,托管的 Redis 解決方案(例如 AWS Elasticache),Memcache。
## 使用微服務的挑戰
在構建任何軟件時,尤其是在大規模集成系統中,總是存在挑戰。
紐曼在《構建微服務》一書中提醒我們,“故障成為大規模的統計確定性”,而在實現微服務時(這是整體的)肯定是這種情況。
接受一切都會失敗(硬盤,網絡等)并接受這一事實,很難處理多個獨立服務的失敗。
分布式和異步體系結構難以實現且難以調試。 您需要查看散布在多個實例中的日志,并查看分布式事務性,以了解為什么最終會出現古怪的狀態。 如果在同步工作流的中間發生錯誤,則很難回滾狀態。 了解故障發生的位置非常困難,因為工作可能并行進行,并且可能引入了難以管理的競爭條件。
確保與微服務的大規模一致性是另一個挑戰。 想象一下,您有一個管理來賓個人資料的服務,另一個服務來管理預訂。 如果新客人首次在您的酒店預訂了預訂,則預訂微服務將創建新的預訂記錄,而客人資料微服務將需要創建新的客人資料。 如果訪客個人資料存在錯誤并且未成功創建新的訪客個人資料怎么辦? 如果管理不正確,最終將導致一個孤立的預訂,該預訂未綁定到任何訪客個人資料。 從規模上講,這可能很難跟蹤和管理。
異步分布式體系結構可能會導致其他問題。 讓我們想象一下系統發送到事務處理隊列的某種類型的請求會使您的工作人員崩潰。 另外,假設您添加了多個工作程序,它們從同一隊列中提取消息以加快處理速度。 第一個工作人員從隊列中提取消息,然后死亡。 當它死亡時,對請求的鎖定將超時,并將原始請求消息放回到隊列中。 然后,您的下一個工作人員將從隊列中提取相同的消息并獲得相同的結果:消息將死亡。
另一個挑戰是,您將不得不監視不斷重新部署的數百種服務。 這將促使需要專用的 DevOps 資源或團隊來管理大量服務。
您還需要考慮整體系統性能,因為您有很多通過網絡進行的遠程呼叫。 眾所周知,網絡不可靠:數據包可能會延遲,丟失等。此外,系統之間的消息不是實時流動的:您將消息發布到隊列中,然后在( 不久),它將得到處理。
最后,使用微服務很難有效地實現版本控制:您最終將更改服務的接口。 您將如何處理?
使用每種架構方法都需要權衡。 盡管微服務存在挑戰,但每種方法都存在挑戰。 當大規模管理多個 PMS 集成時,使用微服務的好處遠遠超過成本。
**考慮大規模實施的經濟性:**
以下是實現微服務時要考慮的一些比較成本:
* 大規模部署時,100 個不同的 PMS 集成可能需要 100 個服務器。
* 使用單片方法,這些服務器始終處于運行狀態。
* 在微服務世界中,微服務在需要時喚醒,在不需要時關閉。
* 借助 AWS Lambda 或 IronMQ 等云服務,您需要為 CPU 時間而非服務器時間付費。
* 當采用按需供應系統(如 Amazon Web Services 提供的系統)時,我們可以根據需要對需要的那些組件應用此擴展。 這使我們能夠更有效地控制成本。 ,
因此,隨著時間的流逝,微服務在為計算能力付費時會更具成本效益,因為有需求可以使您更緊密地管理成本并最終減少浪費。 很少有一種架構方法可以與幾乎立即節省成本緊密相關。
那么,從這里去哪里呢?
## 拆解整體結構
我經常聽到的一個常見問題是:“我已經構建了單片應用程序。我是否需要從頭開始重新構建它以實現微服務架構?”
簡短的答案是:**否**。
長的答案是,您可以將您的整體碎片分開。 它應該是一種漸進的方法,以便您可以了解有關核心功能以及它如何與其他核心功能交互的更多信息。 這對于您了解服務應該是什么以及它們如何相互通信至關重要。 采取“邊走邊學”的方法,逐步定義系統的哪些部分應成為微服務。 我將在以后的文章中保留有關如何設計和實現此策略的詳細信息。
我希望這可以解釋其好處或使用微服務方法來構建 PMS 集成。 隨著您的系統和微服務數量的增長,這種方法將幫助您以更靈活,高效和經濟高效的方式進行擴展。
## 相關文章
* [關于 HackerNews](https://news.ycombinator.com/item?id=11074151)
* [微服務-不是免費的午餐!](http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html)
* [偉大的微服務與 Monolithic Apps Twitter 近戰](http://highscalability.com/blog/2014/7/28/the-great-microservices-vs-monolithic-apps-twitter-melee.html)
* [來自 Google 和 eBay 的關于建立微服務生態系統的深刻教訓](http://highscalability.com/blog/2015/12/1/deep-lessons-from-google-and-ebay-on-building-ecosystems-of.html)
* [生產中的微服務-好的,壞的,有效的](http://highscalability.com/blog/2014/10/27/microservices-in-production-the-good-the-bad-the-it-works.html)
* [微服務中最討厭的七個反模式](http://highscalability.com/blog/2015/8/3/seven-of-the-nastiest-anti-patterns-in-microservices.html)
* [改變一切的融合:數據重力+容器+微服務](http://highscalability.com/blog/2015/3/25/the-convergence-that-changes-everything-data-gravity-contain.html)
* [我們如何構建更好的復雜系統? 容器,微服務和持續交付。](http://highscalability.com/blog/2015/4/27/how-can-we-build-better-complex-systems-containers-microserv.html)
諸如此類的技術是使物業管理更加有效和高效的好方法。 我們希望將來能看到更多諸如此類的技術創新。 感謝您分享本文,這是設置此集成的不錯的教程。
- LiveJournal 體系結構
- mixi.jp 體系結構
- 友誼建筑
- FeedBurner 體系結構
- GoogleTalk 架構
- ThemBid 架構
- 使用 Amazon 服務以 100 美元的價格構建無限可擴展的基礎架構
- TypePad 建筑
- 維基媒體架構
- Joost 網絡架構
- 亞馬遜建筑
- Fotolog 擴展成功的秘訣
- 普恩斯的教訓-早期
- 論文:Wikipedia 的站點內部,配置,代碼示例和管理問題
- 擴大早期創業規模
- Feedblendr 架構-使用 EC2 進行擴展
- Slashdot Architecture-互聯網的老人如何學會擴展
- Flickr 架構
- Tailrank 架構-了解如何在整個徽標范圍內跟蹤模因
- Ruby on Rails 如何在 550k 網頁瀏覽中幸存
- Mailinator 架構
- Rackspace 現在如何使用 MapReduce 和 Hadoop 查詢 TB 的數據
- Yandex 架構
- YouTube 架構
- Skype 計劃 PostgreSQL 擴展到 10 億用戶
- 易趣建筑
- FaceStat 的禍根與智慧贏得了勝利
- Flickr 的聯合會:每天進行數十億次查詢
- EVE 在線架構
- Notify.me 體系結構-同步性
- Google 架構
- 第二人生架構-網格
- MySpace 體系結構
- 擴展 Digg 和其他 Web 應用程序
- Digg 建筑
- 在 Amazon EC2 中部署大規模基礎架構的六個經驗教訓
- Wolfram | Alpha 建筑
- 為什么 Facebook,Digg 和 Twitter 很難擴展?
- 全球范圍擴展的 10 個 eBay 秘密
- BuddyPoke 如何使用 Google App Engine 在 Facebook 上擴展
- 《 FarmVille》如何擴展以每月收獲 7500 萬玩家
- Twitter 計劃分析 1000 億條推文
- MySpace 如何與 100 萬個并發用戶一起測試其實時站點
- FarmVille 如何擴展-后續
- Justin.tv 的實時視頻廣播架構
- 策略:緩存 404 在服務器時間上節省了洋蔥 66%
- Poppen.de 建筑
- MocoSpace Architecture-一個月有 30 億個移動頁面瀏覽量
- Sify.com 體系結構-每秒 3900 個請求的門戶
- 每月將 Reddit 打造為 2.7 億頁面瀏覽量時汲取的 7 個教訓
- Playfish 的社交游戲架構-每月有 5000 萬用戶并且不斷增長
- 擴展 BBC iPlayer 的 6 種策略
- Facebook 的新實時消息系統:HBase 每月可存儲 135 億條消息
- Pinboard.in Architecture-付費玩以保持系統小巧
- BankSimple 迷你架構-使用下一代工具鏈
- Riak 的 Bitcask-用于快速鍵/值數據的日志結構哈希表
- Mollom 體系結構-每秒以 100 個請求殺死超過 3.73 億個垃圾郵件
- Wordnik-MongoDB 和 Scala 上每天有 1000 萬個 API 請求
- Node.js 成為堆棧的一部分了嗎? SimpleGeo 說是的。
- 堆棧溢出體系結構更新-現在每月有 9500 萬頁面瀏覽量
- Medialets 體系結構-擊敗艱巨的移動設備數據
- Facebook 的新實時分析系統:HBase 每天處理 200 億個事件
- Microsoft Stack 是否殺死了 MySpace?
- Viddler Architecture-每天嵌入 700 萬個和 1500 Req / Sec 高峰
- Facebook:用于擴展數十億條消息的示例規范架構
- Evernote Architecture-每天有 900 萬用戶和 1.5 億個請求
- TripAdvisor 的短
- TripAdvisor 架構-4,000 萬訪客,200M 動態頁面瀏覽,30TB 數據
- ATMCash 利用虛擬化實現安全性-不變性和還原
- Google+是使用您也可以使用的工具構建的:閉包,Java Servlet,JavaScript,BigTable,Colossus,快速周轉
- 新的文物建筑-每天收集 20 億多個指標
- Peecho Architecture-鞋帶上的可擴展性
- 標記式架構-擴展到 1 億用戶,1000 臺服務器和 50 億個頁面視圖
- 論文:Akamai 網絡-70 個國家/地區的 61,000 臺服務器,1,000 個網絡
- 策略:在 S3 或 GitHub 上運行可擴展,可用且廉價的靜態站點
- Pud 是反堆棧-Windows,CFML,Dropbox,Xeround,JungleDisk,ELB
- 用于擴展 Turntable.fm 和 Labmeeting 的數百萬用戶的 17 種技術
- StackExchange 體系結構更新-平穩運行,Amazon 4x 更昂貴
- DataSift 體系結構:每秒進行 120,000 條推文的實時數據挖掘
- Instagram 架構:1400 萬用戶,1 TB 的照片,數百個實例,數十種技術
- PlentyOfFish 更新-每月 60 億次瀏覽量和 320 億張圖片
- Etsy Saga:從筒倉到開心到一個月的瀏覽量達到數十億
- 數據范圍項目-6PB 存儲,500GBytes / sec 順序 IO,20M IOPS,130TFlops
- 99designs 的設計-數以千萬計的綜合瀏覽量
- Tumblr Architecture-150 億頁面瀏覽量一個月,比 Twitter 更難擴展
- Berkeley DB 體系結構-NoSQL 很酷之前的 NoSQL
- Pixable Architecture-每天對 2000 萬張照片進行爬網,分析和排名
- LinkedIn:使用 Databus 創建低延遲更改數據捕獲系統
- 在 30 分鐘內進行 7 年的 YouTube 可擴展性課程
- YouPorn-每天定位 2 億次觀看
- Instagram 架構更新:Instagram 有何新功能?
- 搜索技術剖析:blekko 的 NoSQL 數據庫
- Pinterest 體系結構更新-1800 萬訪問者,增長 10 倍,擁有 12 名員工,410 TB 數據
- 搜索技術剖析:使用組合器爬行
- iDoneThis-從頭開始擴展基于電子郵件的應用程序
- StubHub 體系結構:全球最大的票務市場背后的驚人復雜性
- FictionPress:在網絡上發布 600 萬本小說
- Cinchcast 體系結構-每天產生 1,500 小時的音頻
- 棱柱架構-使用社交網絡上的機器學習來弄清您應該在網絡上閱讀的內容
- 棱鏡更新:基于文檔和用戶的機器學習
- Zoosk-實時通信背后的工程
- WordPress.com 使用 NGINX 服務 70,000 req / sec 和超過 15 Gbit / sec 的流量
- 史詩般的 TripAdvisor 更新:為什么不在云上運行? 盛大的實驗
- UltraDNS 如何處理數十萬個區域和數千萬條記錄
- 更簡單,更便宜,更快:Playtomic 從.NET 遷移到 Node 和 Heroku
- Spanner-關于程序員使用 NoSQL 規模的 SQL 語義構建應用程序
- BigData 使用 Erlang,C 和 Lisp 對抗移動數據海嘯
- 分析數十億筆信用卡交易并在云中提供低延遲的見解
- MongoDB 和 GridFS 用于內部和內部數據中心數據復制
- 每天處理 1 億個像素-少量競爭會導致大規模問題
- DuckDuckGo 體系結構-每天進行 100 萬次深度搜索并不斷增長
- SongPop 在 GAE 上可擴展至 100 萬活躍用戶,表明 PaaS 未通過
- Iron.io 從 Ruby 遷移到 Go:減少了 28 臺服務器并避免了巨大的 Clusterf ** ks
- 可汗學院支票簿每月在 GAE 上擴展至 600 萬用戶
- 在破壞之前先檢查自己-鱷梨的建筑演進的 5 個早期階段
- 縮放 Pinterest-兩年內每月從 0 到十億的頁面瀏覽量
- Facebook 的網絡秘密
- 神話:埃里克·布魯爾(Eric Brewer)談銀行為什么不是堿-可用性就是收入
- 一千萬個并發連接的秘密-內核是問題,而不是解決方案
- GOV.UK-不是你父親的書庫
- 縮放郵箱-在 6 周內從 0 到 100 萬用戶,每天 1 億條消息
- 在 Yelp 上利用云計算-每月訪問量為 1.02 億,評論量為 3900 萬
- 每臺服務器將 PHP 擴展到 30,000 個并發用戶的 5 條 Rockin'Tips
- Twitter 的架構用于在 5 秒內處理 1.5 億活躍用戶,300K QPS,22 MB / S Firehose 以及發送推文
- Salesforce Architecture-他們每天如何處理 13 億筆交易
- 擴大流量的設計決策
- ESPN 的架構規模-每秒以 100,000 Duh Nuh Nuhs 運行
- 如何制作無限可擴展的關系數據庫管理系統(RDBMS)
- Bazaarvoice 的架構每月發展到 500M 唯一用戶
- HipChat 如何使用 ElasticSearch 和 Redis 存儲和索引數十億條消息
- NYTimes 架構:無頭,無主控,無單點故障
- 接下來的大型聲音如何使用 Hadoop 數據版本控制系統跟蹤萬億首歌曲的播放,喜歡和更多內容
- Google 如何備份 Internet 和數十億字節的其他數據
- 從 HackerEarth 用 Apache 擴展 Python 和 Django 的 13 個簡單技巧
- AOL.com 體系結構如何發展到 99.999%的可用性,每天 800 萬的訪問者和每秒 200,000 個請求
- Facebook 以 190 億美元的價格收購了 WhatsApp 體系結構
- 使用 AWS,Scala,Akka,Play,MongoDB 和 Elasticsearch 構建社交音樂服務
- 大,小,熱還是冷-條帶,Tapad,Etsy 和 Square 的健壯數據管道示例
- WhatsApp 如何每秒吸引近 5 億用戶,11,000 內核和 7,000 萬條消息
- Disqus 如何以每秒 165K 的消息和小于 0.2 秒的延遲進行實時處理
- 關于 Disqus 的更新:它仍然是實時的,但是 Go 摧毀了 Python
- 關于 Wayback 機器如何在銀河系中存儲比明星更多的頁面的簡短說明
- 在 PagerDuty 遷移到 EC2 中的 XtraDB 群集
- 擴展世界杯-Gambify 如何與 2 人組成的團隊一起運行大型移動投注應用程序
- 一點點:建立一個可處理每月 60 億次點擊的分布式系統的經驗教訓
- StackOverflow 更新:一個月有 5.6 億次網頁瀏覽,25 臺服務器,而這一切都與性能有關
- Tumblr:哈希處理每秒 23,000 個博客請求的方式
- 使用 HAProxy,PHP,Redis 和 MySQL 處理 10 億個請求的簡便方法來構建成長型啟動架構
- MixRadio 體系結構-兼顧各種服務
- Twitter 如何使用 Redis 進行擴展-105TB RAM,39MM QPS,10,000 多個實例
- 正確處理事情:通過即時重放查看集中式系統與分散式系統
- Instagram 提高了其應用程序的性能。 這是如何做。
- Clay.io 如何使用 AWS,Docker,HAProxy 和 Lots 建立其 10 倍架構
- 英雄聯盟如何將聊天擴大到 7000 萬玩家-需要很多小兵。
- Wix 的 Nifty Architecture 技巧-大規模構建發布平臺
- Aeron:我們真的需要另一個消息傳遞系統嗎?
- 機器:惠普基于憶阻器的新型數據中心規模計算機-一切仍在變化
- AWS 的驚人規模及其對云的未來意味著什么
- Vinted 體系結構:每天部署數百次,以保持繁忙的門戶穩定
- 將 Kim Kardashian 擴展到 1 億個頁面
- HappyPancake:建立簡單可擴展基金會的回顧
- 阿爾及利亞分布式搜索網絡的體系結構
- AppLovin:通過每天處理 300 億個請求向全球移動消費者進行營銷
- Swiftype 如何以及為何從 EC2 遷移到真實硬件
- 我們如何擴展 VividCortex 的后端系統
- Appknox 架構-從 AWS 切換到 Google Cloud
- 阿爾及利亞通往全球 API 的憤怒之路
- 阿爾及利亞通往全球 API 步驟的憤怒之路第 2 部分
- 為社交產品設計后端
- 阿爾及利亞通往全球 API 第 3 部分的憤怒之路
- Google 如何創造只有他們才能創造的驚人的數據中心網絡
- Autodesk 如何在 Mesos 上實施可擴展事件
- 構建全球分布式,關鍵任務應用程序:Trenches 部分的經驗教訓 1
- 構建全球分布式,關鍵任務應用程序:Trenches 第 2 部分的經驗教訓
- 需要物聯網嗎? 這是美國一家主要公用事業公司從 550 萬米以上收集電力數據的方式
- Uber 如何擴展其實時市場平臺
- 優步變得非常規:使用司機電話作為備份數據中心
- 在不到五分鐘的時間里,Facebook 如何告訴您的朋友您在災難中很安全
- Zappos 的網站與 Amazon 集成后凍結了兩年
- 為在現代時代構建可擴展的有狀態服務提供依據
- 細分:使用 Docker,ECS 和 Terraform 重建基礎架構
- 十年 IT 失敗的五個教訓
- Shopify 如何擴展以處理來自 Kanye West 和 Superbowl 的 Flash 銷售
- 整個 Netflix 堆棧的 360 度視圖
- Wistia 如何每小時處理數百萬個請求并處理豐富的視頻分析
- Google 和 eBay 關于構建微服務生態系統的深刻教訓
- 無服務器啟動-服務器崩潰!
- 在 Amazon AWS 上擴展至 1100 萬以上用戶的入門指南
- 為 David Guetta 建立無限可擴展的在線錄制活動
- Tinder:最大的推薦引擎之一如何決定您接下來會看到誰?
- 如何使用微服務建立財產管理系統集成
- Egnyte 體系結構:構建和擴展多 PB 分布式系統的經驗教訓
- Zapier 如何自動化數十億個工作流自動化任務的旅程
- Jeff Dean 在 Google 進行大規模深度學習
- 如今 Etsy 的架構是什么樣的?
- 我們如何在 Mail.Ru Cloud 中實現視頻播放器
- Twitter 如何每秒處理 3,000 張圖像
- 每天可處理數百萬個請求的圖像優化技術
- Facebook 如何向 80 萬同時觀看者直播
- Google 如何針對行星級基礎設施進行行星級工程設計?
- 為 Mail.Ru Group 的電子郵件服務實施反垃圾郵件的貓捉老鼠的故事,以及 Tarantool 與此相關的內容
- The Dollar Shave Club Architecture Unilever 以 10 億美元的價格被收購
- Uber 如何使用 Mesos 和 Cassandra 跨多個數據中心每秒管理一百萬個寫入
- 從將 Uber 擴展到 2000 名工程師,1000 個服務和 8000 個 Git 存儲庫獲得的經驗教訓
- QuickBooks 平臺
- 美國大選期間城市飛艇如何擴展到 25 億個通知
- Probot 的體系結構-我的 Slack 和 Messenger Bot 用于回答問題
- AdStage 從 Heroku 遷移到 AWS
- 為何將 Morningstar 遷移到云端:降低 97%的成本
- ButterCMS 體系結構:關鍵任務 API 每月可處理數百萬個請求
- Netflix:按下 Play 會發生什么?
- ipdata 如何以每月 150 美元的價格為來自 10 個無限擴展的全球端點的 2500 萬個 API 調用提供服務
- 每天為 1000 億個事件賦予意義-Teads 的 Analytics(分析)管道
- Auth0 體系結構:在多個云提供商和地區中運行
- 從裸機到 Kubernetes
- Egnyte Architecture:構建和擴展多 PB 內容平臺的經驗教訓
- 縮放原理
- TripleLift 如何建立 Adtech 數據管道每天處理數十億個事件
- Tinder:最大的推薦引擎之一如何決定您接下來會看到誰?
- 如何使用微服務建立財產管理系統集成
- Egnyte 體系結構:構建和擴展多 PB 分布式系統的經驗教訓
- Zapier 如何自動化數十億個工作流自動化任務的旅程
- Jeff Dean 在 Google 進行大規模深度學習
- 如今 Etsy 的架構是什么樣的?
- 我們如何在 Mail.Ru Cloud 中實現視頻播放器
- Twitter 如何每秒處理 3,000 張圖像
- 每天可處理數百萬個請求的圖像優化技術
- Facebook 如何向 80 萬同時觀看者直播
- Google 如何針對行星級基礎設施進行行星級工程設計?
- 為 Mail.Ru Group 的電子郵件服務實施反垃圾郵件的貓捉老鼠的故事,以及 Tarantool 與此相關的內容
- The Dollar Shave Club Architecture Unilever 以 10 億美元的價格被收購
- Uber 如何使用 Mesos 和 Cassandra 跨多個數據中心每秒管理一百萬個寫入
- 從將 Uber 擴展到 2000 名工程師,1000 個服務和 8000 個 Git 存儲庫獲得的經驗教訓
- QuickBooks 平臺
- 美國大選期間城市飛艇如何擴展到 25 億條通知
- Probot 的體系結構-我的 Slack 和 Messenger Bot 用于回答問題
- AdStage 從 Heroku 遷移到 AWS
- 為何將 Morningstar 遷移到云端:降低 97%的成本
- ButterCMS 體系結構:關鍵任務 API 每月可處理數百萬個請求
- Netflix:按下 Play 會發生什么?
- ipdata 如何以每月 150 美元的價格為來自 10 個無限擴展的全球端點的 2500 萬個 API 調用提供服務
- 每天為 1000 億個事件賦予意義-Teads 的 Analytics(分析)管道
- Auth0 體系結構:在多個云提供商和地區中運行
- 從裸機到 Kubernetes
- Egnyte Architecture:構建和擴展多 PB 內容平臺的經驗教訓