面向服務
SOA代表面向服務的架構,將應用程式根據不同的職責劃分為不同的模組,不同的模組直接通過特定的協議和介面進行互動。這樣使整個系統切分成很多單個元件服務來完成請求,當流量過大時通過水平擴充套件相應的元件來支撐,所有的元件通過互動來滿足整體的業務需求。
面向服務的設計,往往需要ESB(Enterprise Service Bus,企業服務匯流排)產品來充當基礎設施。ESB採用了“匯流排”這樣一種模式來管理和簡化應用之間的整合拓撲結構,以廣為接受的開放標準為基礎來支援應用之間在訊息、事件和服務的級別上動態的互連互通。 ESB是一種在鬆散耦合的服務和應用之間標準的整合方式。
在其內部設計和實現中,通常會應用到一些經典的架構模式,例如:Broker模式、訊息匯流排模式、釋出訂閱模式等。
微服務
微服務架構風格是一種將一個單一應用程式開發為一組小型服務的方法,每個服務執行在自己的程式中,服務間通訊採用輕量級通訊機制。
-
圍繞業務能力組織 / Organized around Business Capabilities
康威定理:Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations。設計系統組織的設計產出受限於該組織的溝通結構。
-
是產品不是專案 / Products not Projects
-
去中心化 / Decentralized
-
進化式設計 / Evolutionary Design
-
基礎設施自動化 / Infrastructure Automation
springboot
Spring Boot是一個簡化Spring使用的框架,可以使用少量的配置快速建立一個基於Spring的專案。Spring Boot主要有如下核心功能:
-
獨立執行的Spring專案。
-
內嵌Servlet容器。
-
提供starter簡化Maven配置。
-
自動配置Spring
-
提供生產就緒型功能,如指標,健康檢查和外部配置
springCloud
springCloud為什麼被需要
Spring Cloud的開發團隊專注於企業級開源框架的研發,不論是在中國還是在世界上使用都非常廣泛,開發出通用、開源、穩健的開源框架是他們的主業。
Spring Cloud是微服務架構的生態環境,考慮到了微服務的各個方面。
Spring Cloud的社群熱度非常好,問題修復也非常及時,未來會更加完善和穩定。
Spring Cloud也可以較好的相容python、php等其他語言開發的微服務。因為採用RESTful。
Spring Cloud與Docker可以完美組合使用。
springCloud現狀前景
知名網際網路公司都已經使用了Spring Cloud,但都是小規模或者某個團隊在使用。
針對與中小企業,使用springCloud優勢明顯,熟悉spring/springboot能很快上手。
阿里推出了spring cloud alibaba。
springCloud架構
springCloud模組
閘道器:Zuul,提供動態路由,監控,彈性,安全等邊緣服務的框架
負載:Ribbon,有多種負載均衡策略可供選擇
容錯:Hystrix,斷路器
配置:Spring Cloud Config,統一配置管理
匯流排:Spring Cloud Bus,可與Spring Cloud Config聯合實現熱部署
發現:Eureka,微服務的註冊與發現
呼叫:Feign,一種宣告式、模板化的HTTP客戶端
跟蹤:Spring Cloud Sleuth
日誌:日誌收集工具包
Docker:
spring-cloud-alibaba:
基礎概念
service-id or instance-id
- 作為服務提供者唯一標識,消費端呼叫時使用。
@FeignClient(name= "spring-cloud-producer")
public interface HelloRemote {
@RequestMapping(value = "/hello")
public String hello(@RequestParam(value = "name") String name);
}
複製程式碼
- Ribbon負載均衡標識
restTemplate.getForObject("http://spring-cloud-producer/hello", String.class);
複製程式碼
-
zuul路由標識
http://localhost:8888/spring-cloud-producer/hello?name=liangjie 複製程式碼
-
註冊中心標識
Application AMIs Availability Zones Status GATEWAY-SERVICE-ZUUL n/a (1) (1) UP (1) - 10.5.74.13:gateway-service-zuul:8888 SPRING-CLOUD-PRODUCER n/a (1) (1) UP (1) - 10.5.74.13:spring-cloud-producer:9000
actuator
Spring Boot 的 Actuator 提供了很多生產級的特性,比如監控和度量Spring Boot 應用程式。Actuator 的這些特性可以通過眾多 REST 介面、遠端 shell 和 JMX 獲得。
主要rest介面
HTTP 方法 | 路徑 | 描述 |
---|---|---|
GET | /autoconfig | 提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過 |
GET | /configprops | 描述配置屬性(包含預設值)如何注入Bean |
GET | /beans | 描述應用程式上下文裡全部的Bean,以及它們的關係 |
GET | /dump | 獲取執行緒活動的快照 |
GET | /env | 獲取全部環境屬性 |
GET | /env/{name} | 根據名稱獲取特定的環境屬性值 |
GET | /health | 報告應用程式的健康指標,這些值由HealthIndicator的實現類提供 |
GET | /info | 獲取應用程式的定製資訊,這些資訊由info打頭的屬性提供 |
GET | /mappings | 描述全部的URI路徑,以及它們和控制器(包含Actuator端點)的對映關係 |
GET | /metrics | 報告各種應用程式度量資訊,比如記憶體用量和HTTP請求計數 |
GET | /metrics/{name} | 報告指定名稱的應用程式度量值 |
POST | /shutdown | 關閉應用程式,要求endpoints.shutdown.enabled設定為true |
GET | /trace | 提供基本的HTTP請求跟蹤資訊(時間戳、HTTP頭等) |