1. 程式人生 > >Java架構師,微服務架構設計,並發編程,java8新特性,P2P金融項目,高並發,分布式

Java架構師,微服務架構設計,並發編程,java8新特性,P2P金融項目,高並發,分布式

環境 span acc 要掌握 system 精益 app 擴展 ant

微服務架構設計

微服務

軟件架構是一個包含各種組織的系統組織,這些組件包括 Web服務器, 應用服務器, 數據庫,存儲, 通訊層), 它們彼此或和環境存在關系。系統架構的目標是解決利益相關者的關註點。

技術分享圖片

Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizations.

(設計系統的組織,其產生的設計和架構等價於組織間的溝通結構。)

Monolithic架構

技術分享圖片


Monolithic比較適合小項目,優點是:

開發簡單直接,集中式管理, 基本不會重復開發

功能都在本地,沒有分布式的管理開銷和調用開銷。它的缺點也非常明顯,特別對於互聯網公司來說(不一一列舉了):

開發效率低:所有的開發在一個項目改代碼,遞交代碼相互等待,代碼沖突不斷

代碼維護難:代碼功能耦合在一起,新人不知道何從下手

部署不靈活:構建時間長,任何小修改必須重新構建整個項目,這個過程往往很長

穩定性不高:一個微不足道的小問題,可以導致整個應用掛掉

擴展性不夠:無法滿足高並發情況下的業務需求

微服務架構

微服務是指開發一個單個小型的但有業務功能的服務,每個服務都有自己的處理和輕量通訊機制,可以部署在單個或多個服務器上。微服務也指一種種松耦合的、有一定的有界上下文的面向服務架構。也就是說,如果每個服務都要同時修改,那麽它們就不是微服務,因為它們緊耦合在一起;如果你需要掌握一個服務太多的上下文場景使用條件,那麽它就是一個有上下文邊界的服務,這個定義來自DDD領域驅動設計。

相對於單體架構和SOA,它的主要特點是組件化、松耦合、自治、去中心化,體現在以下幾個方面:

  • 一組小的服務
    服務粒度要小,而每個服務是針對一個單一職責的業務能力的封裝,專註做好一件事情。

  • 獨立部署運行和擴展
    每個服務能夠獨立被部署並運行在一個進程內。這種運行和部署方式能夠賦予系統靈活的代碼組織方式和發布節奏,使得快速交付和應對變化成為可能。

  • 獨立開發和演化
    技術選型靈活,不受遺留系統技術約束。合適的業務問題選擇合適的技術可以獨立演化。服務與服務之間采取與語言無關的API進行集成。相對單體架構,微服務架構是更面向業務創新的一種架構模式。

  • 獨立團隊和自治
    團隊對服務的整個生命周期負責,工作在獨立的上下文中,自己決策自己治理,而不需要統一的指揮中心。團隊和團隊之間通過松散的社區部落進行銜接。

我們可以看到整個微服務的思想就如我們現在面對信息爆炸、知識爆炸是一樣的:通過解耦我們所做的事情,分而治之以減少不必要的損耗,使得整個復雜的系統和組織能夠快速的應對變化。

我們為什麽采用微服務呢?

"讓我們的系統盡可能快地響應變化" - Rebecca Parson

讓我們的系統盡可能快地去響應變化。其實幾十年來我們一直在嘗試解決這個問題。如果一定要在前面加個限制的話,那就是低成本的快速響應變化。上世紀90年代Kent Beck提出要擁抱變化,在同期出現了諸多輕量級開發方法(諸如 XP、Scrum);2001年敏捷宣言誕生,之後又出現了精益、看板等新的管理方式。如果說,這些是為了盡快的響應變化,在軟件開發流程和實踐方面提出的解決方案,那麽微服務架構就是在軟件技術和架構層面提出的應對之道。

技術分享圖片

Autonomous
A Microservice is a unit of functionality; it provides an API for a set of capabilities oriented around a business domain or common utility

Isolated
A Microservice is a unit of deployment; it can be modified, tested and deployed as a unit without impacting other areas of a solution

Elastic
A Microservice is stateless; it can be horizontally scaled up and down as needed

Resilient
A Microservice is designed for failure; it is fault tolerant and highly available

Responsive
A Microservice responds to requests in a reasonable amount of time

Intelligent
The intelligence in a system is found in the Microservice endpoints not ‘on the wire’

Message Oriented
Microservices rely on HTTP or a lightweight message bus to establish a boundary between components; this ensures loose coupling, isolation, location transparency, and provides the means to delegate errors as messages

Programmable
Microservices provide API’s for access by developers and administrators

Composable
Applications are composed from multiple Microservices

Automated
The lifecycle of a Microservice is managed through automation that includes development, build, test, staging, production and distribution

服務之間如何通信

Java架構師,微服務架構設計,並發編程,java8新特性,P2P金融項目,高並發,分布式