javascript
springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程
網站架構演變過程
傳統架構
傳統的SSH架構,分為三層架構 web控制層、業務邏輯層、數據庫訪問層。
傳統架構也就是單點應用,就是大家在剛開始初學JavaEE技術的時候SSH架構或者SSM架構,業務沒有進行拆分,都寫同一個項目工程里面,一般是適合于個人或者是小團隊開發。
這種架構模式,一旦有一個模塊導致服務不可用,可能會影響整個項目。
分布式架構
分布式架構基于傳統架構演變過來,將傳統的單體項目以項目模塊進行拆分,拆分為會員項目、訂單項目、支付項目、優惠券項目等,從而降低耦合度,這種項目架構模式慢慢開始適合于互聯網公司規模人數開發。
SOA架構
SOA架構代表面向與服務架構,俗稱服務化,通俗的理解為面向與業務邏輯層開發,將共同的業務邏輯抽取出來形成一個服務,提供給其他服務接口進行調用,服務與服務之間調用使用rpc遠程技術。
SOA架構特點:
1.SOA架構中通常使用XML方式實現通訊,在高并發情況下XML比較冗余會帶來極大的影響,所以最后微服務架構中采用JSON替代xml方式
2.SOA架構的底層實現通過WebService和ESB(xml與中間件混合物),Web Service技術是SOA服務化的一種實現方式,WebService底層采用soap協議進行通訊,soap協議就是Http或者是Https通道傳輸XML數據實現的協議。
微服務架構
微服務架構產生的原因
微服務架構基于SOA架構演變過來的
在傳統的WebService架構中有如下問題:
1.依賴中心化服務發現機制
2.使用Soap通訊協議,通常使用XML格式來序列化通訊數據,xml格式非常喜歡重,比較占寬帶傳輸。
3.服務化管理和治理設施不完善
漫談微服務架構
什么是微服務
微服務架是從SOA架構演變過來,比SOA架構粒度會更加精細,讓專業的人去做專業的事情(專注),目的提高效率,每個服務于服務之間互不影響,微服務架構中,每個服務必須獨立部署,互不影響,微服務架構更加體現輕巧、輕量級,是適合于互聯網公司敏捷開發。
微服務架構特征
微服務架構倡導應用程序設計程多個獨立、可配置、可運行和可微服務的子服務。
服務與服務通訊協議采用Http協議,使用restful風格API形式來進行通訊,數據交換格式輕量級json格式通訊,整個傳輸過程中,采用二進制,所以http協議可以跨語言平臺,并且可以和其他不同的語言進行相互的通訊,所以很多開放平臺都采用http協議接口。
微服務架構如何拆分
1.微服務把每一個職責單一功能存放在獨立的服務中
2.每個服務運行在單獨的進程中
3.每個服務有自己獨立數據庫存儲、實際上有自己獨立的緩存、數據庫、消息隊列等資源。
微服務架構與SOA架構區別
1.微服務架構基于 SOA架構 演變過來,繼承 SOA架構的優點,在微服務架構中去除 SOA 架構中的 ESB 消息總線,采用 http+json(restful)進行傳輸。
2.微服務架構比 SOA 架構粒度會更加精細,讓專業的人去做專業的事情(專注),目的提高效率,每個服務于服務之間互不影響,微服務架構中,每個服務必須獨立部署,微服務架構更加輕巧,輕量級。
3.SOA 架構中可能數據庫存儲會發生共享,微服務強調獨每個服務都是單獨數據庫,保證每個服務于服務之間互不影響。
4.項目體現特征微服務架構比 SOA 架構更加適合與互聯網公司敏捷開發、快速迭代版本,因為粒度非常精細。
SpringCloud微服務框架
為什么選擇SpringCloud
因為SpringCloud出現,對微服務技術提供了非常大的幫助,因為SpringCloud 提供了一套完整的微服務解決方案,不像其他框架只是解決了微服務中某個問題。
服務治理: 阿里巴巴開源的Dubbo和當當網在其基礎上擴展的Dubbox、Eureka、Apache 的Consul等
分布式配置中心: 百度的disconf、Netfix的Archaius、360的QConf、SpringCloud、攜程的阿波羅等。
分布式任務:xxl-job、elastic-job、springcloud的task等。
服務跟蹤:京東的hyra、springcloud的sleuth等
SpringCloud簡介
SpringCloud是基于SpringBoot基礎之上開發的微服務框架,SpringCloud是一套目前非常完整的微服務解決方案框架,其內容包含服務治理、注冊中心、配置管理、斷路器、智能路由、微代理、控制總線、全局鎖、分布式會話等。
SpringCloud包含眾多的子項目
SpringCloud config 分布式配置中心
SpringCloud netflix 核心組件
Eureka:服務治理 注冊中心
Hystrix:服務保護框架
Ribbon:客戶端負載均衡器
Feign:基于ribbon和hystrix的聲明式服務調用組件
Zuul: 網關組件,提供智能路由、訪問過濾等功能。
服務治理SpringCloud Eureka
什么是服務治理
在傳統rpc遠程調用中,服務與服務依賴關系,管理比較復雜,所以需要使用服務治理,管理服務與服務之間依賴關系,可以實現服務調用、負載均衡、容錯等,實現服務發現與注冊。
服務注冊與發現
在服務注冊與發現中,有一個注冊中心,當服務器啟動的時候,會把當前自己服務器的信息 比如 服務地址通訊地址等以別名方式注冊到注冊中心上。
另一方(消費者|服務提供者),以該別名的方式去注冊中心上獲取到實際的服務通訊地址,讓后在實現本地rpc調用遠程。
搭建注冊中心
常用注冊中心框架
注冊中心環境搭建
Maven依賴信息
org.springframework.bootspring-boot-starter-parent2.0.1.RELEASEorg.springframework.cloudspring-cloud-dependenciesFinchley.M7pomimportorg.springframework.cloudspring-cloud-starter-netflix-eureka-serverspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalseapplication.yml
###服務端口號server: port: 8100###eureka 基本信息配置eureka: instance: ###注冊到eurekaip地址 hostname: 127.0.0.1 client: serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/###因為自己是為注冊中心,不需要自己注冊自己 register-with-eureka: false###因為自己是為注冊中心,不需要檢索服務 fetch-registry: false啟動Eureka服務
@EnableEurekaServer@SpringBootApplicationpublic class AppEureka {public static void main(String[] args) {SpringApplication.run(AppEureka.class, args);}}@EnableEurekaServer作用:開啟eurekaServer
注冊服務提供者
項目案例:實現會員服務(提供者)springcloud-2.0-member調用訂單服務(消費者)springcloud-2.0-order
Maven依賴信息
org.springframework.bootspring-boot-starter-parent2.0.1.RELEASEorg.springframework.cloudspring-cloud-dependenciesFinchley.M7pomimportorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-clientspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalseapplication.yml
###服務啟動端口號
server:
port: 8000
###服務名稱(服務注冊到eureka名稱)
spring:
application:
name: app-itmayiedu-member
###服務注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
###因為該應用為注冊中心,不會注冊自己
register-with-eureka: true
###是否需要從eureka上獲取注冊信息
fetch-registry: true
@RestController
public class MemberController {
@RequestMapping("/getMember")
public String getMember() {
return "this is getMember";
}
}
啟動會員服務
@SpringBootApplication@EnableEurekaClientpublic class AppMember {public static void main(String[] args) {SpringApplication.run(AppMember.class, args);}}可以看到會員服務成功注冊到eureka服務上
服務消費者
Maven依賴信息
org.springframework.bootspring-boot-starter-parent2.0.1.RELEASEorg.springframework.cloudspring-cloud-dependenciesFinchley.M7pomimportorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-clientspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalseApplication.yml配置
###服務啟動端口號server: port: 8001###服務名稱(服務注冊到eureka名稱) spring: application: name: app-itmayiedu-order###服務注冊到eureka地址eureka: client: service-url: defaultZone: http://localhost:8100/eureka ###因為該應用為注冊中心,不會注冊自己 register-with-eureka: true###是否需要從eureka上獲取注冊信息 fetch-registry: true使用rest方式調用服務
@RestControllerpublic class OrderController {@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/getorder")public String getOrder() {// order 使用rpc 遠程調用技術 調用 會員服務String memberUrl = "http://app-itmayiedu-member/getMember";String result = restTemplate.getForObject(memberUrl, String.class);System.out.println("會員服務調用訂單服務,result:" + result);return result;}}啟動消費者服務
@SpringBootApplication@EnableEurekaClientpublic class AppOrder {public static void main(String[] args) {SpringApplication.run(AppOrder.class, args);}@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}}@LoadBalanced就能讓這個RestTemplate在請求時擁有客戶端負載均衡的能力
高可用注冊中心
在微服務中,注冊中心非常核心,可以實現服務治理,如果一旦注冊出現故障的時候,可能會導致整個微服務無法訪問,在這時候就需要對注冊中心實現高可用集群模式。
Eureka高可用原理
默認情況下Eureka是讓服務注冊中心,不注冊自己
###因為該應用為注冊中心,不會注冊自己 register-with-eureka: true###不需要去注冊中心上檢索服務 fetch-registry: trueEureka高可用實際上將自己作為服務向其他服務注冊中心注冊自己,這樣就可以形成一組相互注冊的服務注冊中心,從而實現服務清單的互相同步,達到高可用效果。
Eureka集群環境搭建
Eureka01配置
###服務端口號server: port: 8100###eureka 基本信息配置spring: application: name: eureka-servereureka: instance: ###注冊到eurekaip地址 hostname: 127.0.0.1 client: serviceUrl: defaultZone: http://127.0.0.1:8200/eureka/###因為自己是為注冊中心,不需要自己注冊自己 register-with-eureka: true###因為自己是為注冊中心,不需要檢索服務 fetch-registry: trueEureka02配置
###服務端口號server: port: 8200###eureka 基本信息配置spring: application: name: eureka-servereureka: instance: ###注冊到eurekaip地址 hostname: 127.0.0.1 client: serviceUrl: defaultZone: http://127.0.0.1:8100/eureka/###因為自己是為注冊中心,不需要自己注冊自己 register-with-eureka: true###因為自己是為注冊中心,不需要檢索服務 fetch-registry: true客戶端集成Eureka集群
server: port: 8000spring: application: name: app-itmayiedu-member#eureka:# client:# service-url:# defaultZone: http://localhost:8100/eureka###集群地址eureka: client: service-url: defaultZone: http://localhost:8100/eureka,http://localhost:8200/eureka register-with-eureka: true fetch-registry: trueMaven配置
org.springframework.bootspring-boot-starter-parent2.0.1.RELEASEorg.springframework.cloudspring-cloud-dependenciesFinchley.M7pomimportorg.springframework.cloudspring-cloud-starter-netflix-eureka-serverspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalse使用Consul來替換Eureka
Consul簡介
Consul 是一套開源的分布式服務發現和配置管理系統,由 HashiCorp 公司用 Go 語言開發。
它具有很多優點。包括: 基于 raft 協議,比較簡潔; 支持健康檢查, 同時支持 HTTP 和 DNS 協議 支持跨數據中心的 WAN 集群 提供圖形界面 跨平臺,支持 Linux、Mac、Windows
Consul 下載地址https://springcloud.cc/spring-cloud-consul.html
Consul環境搭建
官方下載地址下載window版,解壓得到一個可執行文件。
設置環境變量,讓我們直接在cmd里可直接使用consul使命。在path后面添加consul所在目錄例如D:softconsul_1.1.0_windows_amd64
啟動consul命
consul agent -dev -ui -node=cy
-dev開發服務器模式啟動,-node結點名為cy,-ui可以用界面訪問,默認能訪問。
測試訪問地址:http://localhost:8500
Consul客戶端
Maven依賴信息
org.springframework.bootspring-boot-starter-parent2.0.1.RELEASEorg.springframework.cloudspring-cloud-dependenciesFinchley.M7pomimportorg.springframework.bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-consul-discoveryspring-milestonesSpring Milestoneshttps://repo.spring.io/libs-milestonefalse客戶端配置文件
###eureka 服務端口號server: port: 8502spring: application: name: consul-order####consul注冊中心地址 cloud: consul: host: localhost port: 8500 discovery: hostname: 192.168.18.220總結
以上是生活随笔為你收集整理的springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读取ppt并存入数据库_[导入]实时数据
- 下一篇: 凯盛机器人_机器人登场!水泥发运告别人工