1.常見面試題
1.1 什麼是微服務?
1.2 微服務之間如何通信?
1.3 SpringCloud和Dubbo有哪些差別?
1.4 SpringCloud和SpringBoot,談談你對他們的見解
1.5 什麼是服務熔斷,什麼是服務降級?
1.6 微服務的優缺點是什麼?說說你在項目開發中遇到的坑?
1.7 你所知道的微服務技術棧有哪些?
1.8 eureka和zookeeper都可以提供服務注冊和發現功能,說說兩者差別
1.1 什麼是微服務?
服務的目的是有效的拆分應用,實作靈活開發和部署。它有四個特點:
- 小 服務體積小,比如亞馬遜的"2 pizza 團隊"
- 獨:服務能夠獨立部署和運作
- 輕:服務之間采用輕量級通信機制(Http/RPC)
- 松:服務之間是松耦合的
我們再來了解什麼是微服務架構。
微服務架構是一種架構模式,它提倡将all in one的單一程式劃分為一組小型服務,每個服務運作在單獨的程序内,服務之間互相協調通信,最終為使用者提供完整的服務。服務之間采取輕量級通信機制進行溝通,能夠被獨立部署到生産環境中,并使用一個輕量級的集中式管理來協調這些業務
1.2 微服務的設計原則
- 單一職責
- 服務自治
- 輕量通信
- 跨平台,跨語言
- 接口明确
- 規範服務之間的接口調用
1.2.1 微服務的優缺點
- 優點
- 耦合性低,易于單個子產品開發和維護
- 啟動較快
- 局部易修改(相比重新開機整個項目)
- 服務之間不受限
- 跨技術、跨語言、跨平台
- 按需伸縮
- 每個微服務有自己的存儲能力,可以有自己的資料庫
- 缺點
- 整體維護要求較高
- 分布式架構基于複雜性
- 接口調整成本高
1.4 SpringCloud和SpringBoot的關系
- SpringBoot專注于開發快速友善的單體微服務
- SpringCloud則關注全局的微服務協調治理,來為微服務之間提供:配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分布式會話等等內建服務。
1.7 微服務技術棧
微服務條目 | 落地技術 |
---|---|
服務開發 | Spring,SpringBoot,SpringMVC |
服務配置與管理 | Netflix–Archaius、阿裡的Diamond等 |
服務注冊與發現 | Eureka, Consule, Zookeeper等 |
服務調用 | Rest,RPC,gRPC |
服務熔斷 | Hystrix,Envoy等 |
負載均衡 | Nginx,Ribbon等 |
服務接口調用(用戶端調用服務的工具) | Feign |
消息隊列 | Kafka, RabbitMQ,ActiveMQ,RocketMQ等 |
服務配置中心管理 | SpringCloudConfig,Chef等 |
API網關(服務路由) | Zuul等 |
服務監控 | Zabbix, Nagios, Metrics, Specatator等 |
全鍊路追蹤 | Zipkin,Brave,Kubernetes |
服務部署 | Docker,OpenStack等 |
資料流操作開發包 | SpringCloudStream(封裝與Redis,Kafka等發送接收消息) |
事件消息總線 | SpringCloudBus |
2. SpringCloud入門
2.1 Why SpringCloud
選型依據
- 整體式解決方案,成熟的架構
- 高熱度社群
- 可維護性強
大公司的微服務架構
- 阿裡:dubbo + HFS
- 京東:JSF
- 新浪:Motan
- 當當網:DubboX
- …
架構對比
功能 | Dubbo | SpringCloud+Netflix |
---|---|---|
服務注冊中心 | Zookeeper | Eureka |
服務調用方式 | RPC | Rest API |
服務監控 | Dubbo-monitor | SpringBoot Admin |
斷路器 | 不完善 | Netflix Hystrix |
服務網關 | 無 | Netflix Zuul |
分布式配置 | 無 | SpringCloud Config |
服務跟蹤 | 無 | SpringCloud Sleuth |
消息總線 | 無 | SpringCloud Bus |
資料流 | 無 | SpringCloud Stream |
批量任務 | 無 | SpringClode Task |
2.2 SpringCloud官方
SpringCloud官方
SpringCloud Netflix
SpringCloud中文API文檔
SpringCloud中文社群
SpringCloud技術棧