一、微服務:
將一個完整的單體應用拆分成不同的服務,每個服務可以單獨的開發、部署、擴展。每個單獨的微服務之間用網絡通信協議進行通信。實現高內聚,低耦合。便於後期的維護。
三、微服務好處:
微服務一般是根據業務劃分的,更加符合單一職責原理,更好的避免了業務邏輯的高耦合,由於每個服務是單獨部署的所以可以很快的發現系統瓶頸,解決性能問題。
四、微服務目前存在的問題:
1,微服務是是相當於傳統單體服務而言的,那麼,如何拆分微服務是我們面臨的一個大問題,如何把控微服務拆分的粒度也是一個很大的難題。
2,在微服務的開發過程中協調溝通增加了難度,在單體應用中所有的代碼都在一個應用中開發人員可以很快的發現已經存在的接口和公共代碼並加以重複使用。但是在微服務中由於每個服務都是單獨部署的,有可能都是不同的人員、團隊開發,有可能重複開發已經存在的接口,重複業務邏輯加大了系統的複雜度。和後期維護難度維護成本。
3、微服務拆分後部署產生了難度。拆分微服務後傳統的人工部署已經不再實用,自動化部署、監控、運維迫在眉睫對運維人員的能力要求大大提高。
4、由於微服務是分佈式部署的所以如何管理微服務、如何減少網絡延遲,提高微服務間的調用效率是不可避免的一個難題。
5、微服務獨立運行,在數據共享、分佈式事務控制、併發協同方面也是非常困難的。
6、單體系統的服務鑑權很容易實現,但是在微服務中系統權限控制鑑別也變的不易了。
7、部署的服務多了自然成本也就上去了,對於一些小型企業也就不太實用了。
五、微服務目前主流的一些框架、技術
微服務條目 落地技術
服務開發 SpringBoot,Spring,SpringMVC
服務配置與管理 Netflix公司的Archaius、阿里的Diamond等
服務註冊與發現 Eureka、Consul、Zookeeper等
服務調用 Rest、RPC、gRPC
服務熔斷器 Hystrix、Envoy等
負載均衡 Ribbon、Nginx等
服務接口調用 Feign等
消息隊列 Kafka、RabbitMQ、ActiveMQ等
服務配置中心管理 SpringCloudConfig、Chef等
服務路由 (API網關 Zuul等
服務監控 Zabbix、Nagios、Metrics、Specatator等
全鏈路追蹤 Zipkin、Brave、Dapper等
服務部署 Docker、OpenStack、Kubernetes等
數據流操作開發包 SpringCloud Stream(封裝與Redis,Rabbit,Kafka等發送接收消息)
事件消息總線 SpringCloud Bus
微服務中SpringCloud與Dubbo的區別
Dubbo Spring
服務註冊中心 Zookeeper Spring Cloud Netfilx Eureka
服務調用方式 RPC REST API
服務監控 Dubbo-monitor Spring Boot Admin
斷路器 不完善 Spring Cloud Netflix Hystrix
服務網關 無 Spring Cloud Netflix Zuul
分佈式配置 無 Spring Cloud Config
服務跟蹤 無 Spring Cloud Sleuth
消息總線 無 Spring Cloud Bus
數據流 無 Spring Cloud Stream
批量任務 無 Spring Cloud Task
六、微服務的技術要點
微服務的構建
微服務的治理
微服務的服務註冊
微服務的服務發現
客戶端負載均衡策略
接口調用
熔斷機制
全局配置
網關控制
微服務的全全局監控
微服務的權限控制鑑權