微服務不須要像普通服務那樣成爲一種獨立的功能或者獨立的資源。定義中稱,微服務是須要與業務能力相匹配,這種說法徹底正確。不幸的是,仍然意味着,若是能力模型粒度的設計是錯誤的,那麼,咱們就必須付出不少代價。若是你閱讀了Fowler的整篇文章,你會發現,其中的指導建議是很是實用的。在決定將全部組件組合到一塊兒時,開發人員須要很是確信這些組件都會有所改變,而且規模也會發生變化。服務粒度越粗,就越難以符合規定原則。服務粒度越細,就越可以靈活地下降變化和負載所帶來的影響。然而,利弊之間的權衡過程是很是複雜的,咱們要在配置和資金模型的基礎上考慮到基礎設施的成本問題。前端
接下來結合咱們的k8s進行對咱們的微服務項目進行演示
啓動副本自己是無狀態的應用,無需考慮服務是否帶來的影響
擴容根據副本自己的模版再去建立新的副本
replicas是整個副本的數量,而不是在原基礎的副本增長3git
[root@k8s-master k8s]# kubectl scale --replicas=3 deployment stock -n ms deployment.extensions/stock scaled [root@k8s-master k8s]# kubectl get pod -n ms NAME READY STATUS RESTARTS AGE eureka-0 1/1 Running 0 21m eureka-1 1/1 Running 0 19m eureka-2 1/1 Running 0 18m gateway 1/1 Running 0 16m gateway 1/1 Running 0 16m order 1/1 Running 0 11m portal 1/1 Running 0 9m31s product 1/1 Running 0 11m stock 1/1 Running 0 6s stock 1/1 Running 0 11m stock 1/1 Running 0 6s
新功能上線模擬
在product這個模塊下,這裏-dev.yml是本地的一個測試環境,修改某個功能好比,那麼咱們就須要從新構建一下jar包,好比修復bug或者添加代碼,咱們就得從新構建鏡像,可是在k8s中咱們只須要對某個模塊進行構建就能夠了,無需再所有構建,進入分支選擇改動的模塊,k8s用新的鏡像docker
[root@k8s-master simple-microservice-dev3]# vim product-service/product-service-biz/src/main/resources/application-dev.yml
開發把代碼更新完以後,提交到git、gitlab倉庫,咱們就須要git clone 拉取目標項目代碼到本地
而後構建vim
[root@k8s-master simple-microservice-dev3]# cd product-service/ [root@k8s-master product-service]# ls pom.xml product-service-api product-service-biz [root@k8s-master product-service]# mvn clean package -D maven.test.skip=true
爲何能夠在這個目錄下也能夠執行?api
[root@k8s-master product-service]# ls pom.xml product-service-api product-service-biz
由於這裏有這個pom.xml,描述了所需的依賴包,都在這裏面定義的app
而後推送到咱們的k8s中,執行這個腳本,將會替換咱們新的模塊,把新功能推送上去
微服務的新功能發佈也不會影響前端等其餘模塊的使用maven
[root@k8s-master k8s]# ./docker_build.sh product-service [root@k8s-master k8s]# kubectl get pod -n ms NAME READY STATUS RESTARTS AGE eureka-0 1/1 Running 0 70m eureka-1 1/1 Running 3 69m eureka-2 1/1 Running 3 68m gateway 1/1 Running 0 65m gateway 1/1 Running 0 65m order 1/1 Running 0 60m portal 1/1 Running 0 58m product 1/1 Running 0 115s stock 1/1 Running 0 61m