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

1、什麼是微服務

說微服務以前須要先講解下以前的MVC架構下的單體應用。php

單體應用:html

image

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

image

後面發現把靜態文件獨立出來,經過CDN等手段進行加速,能夠提高應用的總體相應,單體應用的架構就變成:好比不少開源項目裏面用到的緩存技術、頁面緩存技術,常見的就是html緩存,常見於不少php開發的項目裏面如:織夢網docker

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.有彈性-蝴蝶效應失效,不會有這牽一髮而動全身的場景;

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

2、微服務與雲的關係

爲何說微服務之間和硬件無關,可以作到快速部署應用呢?關鍵是虛擬化技術。

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

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

3、微服務模式

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這兩樣工具,前者能夠做爲構建工具,然後者能夠構建包含微服務的服務器鏡像。

相關文章
相關標籤/搜索