什麼是微服務?-詳細講解微服務模式、技術、架構(一)

一、什麼是微服務

說微服務之前需要先講解下之前的MVC架構下的單體應用。

單體應用:

image

當用戶訪問量變大導致一臺服務器無法支撐時怎麼辦呢?加服務器加負載均衡,架構就變成這樣了:

image

後面發現把靜態文件獨立出來,通過CDN等手段進行加速,可以提升應用的整體相應,單體應用的架構就變成:比如很多開源項目裏面用到的緩存技術、頁面緩存技術,常見的就是html緩存,常見於很多php開發的項目裏面如:織夢網

image

以上就是單體應用的架構圖,下面給出這些架構的缺點:

1. 開發方面-代碼複雜、人員要求技術高、需要從前端到後臺都要有較高的能力、開發協作困難,通過SVN工具管理在開發人員過多的情況下過於複雜、測試周期長、bug修改需要較長時間;

2. 應用使用方面-程序啓動緩慢、數據庫需專人維護、要求硬件設備配置較高;

3.人員建設方面-UI、業務、後臺、數據庫都需要專人維護;

下面給出整體框架圖

image

那到底微服務能夠解決上述框架哪些問題。

名字解釋:微服務是一個小的、鬆耦合的分佈式服務,可以把各個分佈式的服務看做是不同職責的組件,或者上升爲不同的系統來統一管理。相當於把複雜的業務系統分解、分離成不同職責的分佈式系統。

image

特點:

1.明確定義了職責範圍的細粒度組件,這些組件互相協調提供解決方案。

2.每個組件都有一個小的職責領域,並且完全獨立部署。

3.一個微服務應該可以跨多個應用程序複用。

4.採用HTTP和JSON(JavaScript Object Notation)這樣的輕量級通信協議,在服務消費者和服務提供者之間進行數據交換。

5. 明確責任領域的小型開發團隊。

6.依賴注入框架(如Spring),允許用戶通過約定(以及註解)將應用程序對象之間的關係外部化,而不是在對象內部彼此硬編碼實例化代碼

優點:

1.靈活性-更快速的交付,軟件更新速度即時軟件上線速度,中間可以無縫切換;

2.性能更高,分佈式多服務,不搶佔資源;

3.可伸縮性-可以根據業務場景的多少,在不同時間段進行快速橫向擴充服務器,在小業務場景下,收縮服務器供其他使用;

4.有彈性-蝴蝶效應失效,不會有這牽一髮而動全身的場景;

總結=小型的、簡單的和解耦的服務=可伸縮的、有彈性的和靈活的應用程序

二、微服務與雲的關係

爲什麼說微服務之間和硬件無關,能夠做到快速部署應用呢?關鍵是虛擬化技術。

容器技術:將Docker容器(或等效的容器技術)部署

以彈性的概念爲中心-做到快速部署、快速應用的目的;

三、微服務模式

image

1.Spring Boot是微服務實現中使用的核心技術,簡化構建基於REST的微服務的核心任務;

2.Spring Cloud Config集中式服務來處理應用程序配置數據的管理,應用程序配置數據與部署的微服務完全分離;

3.Spring Cloud服務發現,開發人員可以從客戶端消費的服務中抽象出部署服務器的物理位置(IP或服務器名稱);

4.Spring Cloud與Netflix Hystrix和Netflix Ribbon

Netflix Hystrix庫,開發人員可以快速實現服務客戶端彈性模式,如斷路器模式和艙壁模式;

Netflix Ribbon項目簡化了與諸如Eureka這樣的服務發現代理的集成,但它也爲服務消費者提供了客戶端對服務調用的負載均衡;

5.Spring Cloud與Netflix Zuul,Netflix Zuul項目爲微服務應用程序提供服務路由功能。Zuul是代理服務請求的服務網關,確保在調用目標服務之前,對微服務的所有調用都經過一個“前門”。通過集中的服務調用,開發人員可以強制執行標準服務策略,如安全授權驗證、內容過濾和路由規則。

6.Spring Cloud Stream輕量級消息處理集成到微服務中的支持技術,使用異步事件,快速將微服務與消息代理進行整合,如RabbitMQ和Kafka;

7.Spring Cloud Sleuth允許將唯一跟蹤標識符集成到應用程序所使用的HTTP調用和消息通道(RabbitMQ、Apache Kafka)之中。這些跟蹤號碼(有時稱爲關聯ID或跟蹤ID)能夠讓開發人員在事務流經應用程序中的不同服務時跟蹤事務。

與日誌聚合技術工具(如Papertrail)和跟蹤工具(如Zipkin)結合時,能夠展現出真正的威力。Papertail是一個基於雲的日誌記錄平臺,用於將日誌從不同的微服務實時聚合到一個可查詢的數據庫中。Zipkin可以獲取Spring Cloud Sleuth生成的數據,並允許開發人員可視化單個事務涉及的服務調用流程。

8.Spring Cloud Security是一個驗證和授權框架,可以控制哪些人可以訪問服務,以及他們可以用服務做什麼。Spring Cloud Security是基於令牌的,允許服務通過驗證服務器發出的令牌彼此進行通信。接收調用的每個服務可以檢查HTTP調用中提供的令牌,以確認用戶的身份以及用戶對該服務的訪問權限。

Spring Cloud Security支持JSON Web Token。JSON Web Token(JWT)框架標準化了創建OAuth2令牌的格式,併爲創建的令牌進行數字簽名提供了標準。

9.docker代碼供應實現一個“構建和部署”管道,開發人員需要使用Travis CI和Docker這兩樣工具,前者可以作爲構建工具,而後者可以構建包含微服務的服務器鏡像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章