微服务不须要像普通服务那样成为一种独立的功能或者独立的资源。定义中称,微服务是须要与业务能力相匹配,这种说法彻底正确。不幸的是,仍然意味着,若是能力模型粒度的设计是错误的,那么,咱们就必须付出不少代价。若是你阅读了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