Spring Cloud 从我前面发的文章可以看出, springcloud 就是粘合剂, 整合不同的功能实现, 注册中心, 配置中心,网关之类的功能, 都集成进来, 形成了微服务体系。你能看出Spring Cloud的基础应用还是些springboot 的一些基本用法, 其实我们可以不用springcloud构建, 就用springboot也能构建出一个服务,但是他不是一个微服务, 就一个功能模块, 所呈现出来的是一个单体服务, 以前没有Spring Cloud时, 业内多数是用zk 作为注册中心, 引入dubbo,来通过rpc方式来达到服务之间的通信,dubbo间有服务提供者,服务消费者。来实现服务的高可用,就会搭建些集群。zk的集群部署之类的。业内有了Spring Cloud 之后, 不断的整合不同的功能, 使应用简单化了。功能也变得强大了。
Spring Cloud 更像是一个服务治理的框架, spring提供了具体整合其他第三方应用框架的接口。sprngboot则是在此基础进行一些集成,整合应用的启动。
Spring Cloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。
Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。

不过也不要太迷恋微服务, 微服务带来的弊端也有, 要结合自己公司的实际业务。微服务也是从单体服务演变过来, 很多公司现在都在说什么架构其实, 不就是以前的单体架构不能满足现有的业务需求了, 服务越来越多了,管控不过来, 从而会慢慢的考虑引入微服务。
对比下单体架构和微服务架构的优缺点吧, 给大家一个小小参考。
单体架构的优缺点
优点:
①: 架构简单明了,没有”花里胡哨“的问题需要解决。
②:开发,测试,部署简单(尤其是运维人员 睡着都会笑醒)
缺点:
①:随着业务扩展,代码越来越复杂,代码质量参差不齐(开发人员的水平不一),会让你每次提交代码 ,修改每一个小bug都是心惊胆战的。
②: 部署慢(由于单体架构,功能复杂) 能想像下一个来自200W+代码部署的速度(15分钟)
③: 扩展成本高,根据单体架构图 假设用户模块是一个CPU密集型的模块(涉及到大量的运算),那么我们需要替换更加牛逼的CPU,而我们的订单模块是一个IO密集模块(涉及大量的读写磁盘),那我们需要替换更加牛逼的内存以及高效的磁盘。但是我们的单体架构上 无法针对单个功能模块进行扩展,那么就需要替换更牛逼的CPU,更牛逼的内存,更牛逼的磁盘,价格蹭蹭的往上涨。
④: 阻碍了新技术的发展。。。。。。比如我们的web架构模块 从struts2迁移到springboot,那么就会成为灾难
微服务的优缺点
优点:
①:每个服务足够小,足够内聚,代码更加容易理解,专注一个业务功能点(对比传统应用,可能改几行代码 需要了解整个系统)
②: 开发简单,一个服务只干一个事情。(把你加入到做支付服务模块,你只要了解支付相关代码就可以了)
③: 微服务能够被2-5个人的小团队开发,提高效率
④: 按需伸缩,服务松耦合,每个服务都能够开发部署
⑤: 前后端分离, 作为java开发人员,我们只要关系后端接口的安全性以及性能,不要去关注页面的人机交互(H5工程师)根据前后端接口协议,根据入参,返回json的回参。
⑥:一个服务可用拥有自己的数据库,也可以多个服务连接同一个数据库。
缺点:
①:增加了运维人员的工作量,以前只要部署一个war包,现在可能需要部署成百上千个war包 (k8s+docker+jenkins )
②: 服务之间相互调用,增加通信成本
③:数据一致性问题(分布式事务问题)
④:性能监控等,问题定位..........................
微服务的适用场景
合适
①:大型复杂的项目............(来自单体架构200W行代码的恐惧)
②:快速迭代的项目............(来自一天一版的恐惧)
③:并发高的项目................(考虑弹性伸缩扩容的恐惧)
不合适
①:业务稳定,就是修修bug ,改改数据
②:迭代周期长 发版频率 一二个月一次.




