浅谈Spring cloud(微服务)
现在大家都在谈论和学习spring cloud,也就是微服务,那么微服务究竟是什么?为什么它会这么火?
微服务的由来:对比单体的应用架构(单体所有的逻辑都运行在同一个单独的进程),但在云中部署的时候,单体任何微小的变更都会影响整体构建部署,扩展的时候也需要整体扩展,不能进行部分扩展。微服务就是为了解决这个问题,从独立系统到小型服务,基于http的restful API进行通信,可以很好地解决异构系统(如客户端C++,服务端java编写)之间的交互性。
微服务:微服务将应用程序构建为一套服务,每个服务都可以独立部署和扩展并运行在独立的进程中。服务之间通过RPC(一种远程调用协议,通过网络从远程计算机程序上请求服务,而不需要了解底层的实现技术)进行通信,致力于低耦合和高内聚,采用单独的业务逻辑封装(接受请求、处理业务逻辑、返回响应),而且采用简单的rest风格。
微服务面临的挑战:首先对运维的要求变高,将这些服务有条不紊的编排组织和运行起来并不是一件轻松的事,应该致力于更多的运维自动化。其次是接口的一致性,虽然对服务拆分,但是业务逻辑依赖并没有消除,所以微服务对交互的接口提出了更高的要求。还有就是分布式环境带来的问题,如网络延迟、分布式事务、异步消息。
微服务特性:
服务组件化:在微服务中,把服务进行组件化分解,每一个服务单独开发部署,组件但 独更换和升级。
按业务拆分团队:每一个服务都是全栈宽栈开发。
去中心化治理:微服务架构中的各个组件能够针对不同的业务特点选择不同的技术平台。
不是每一个问题都是钉子,不是每一个解决方案都是锤子。
去中心化管理数据:微服务中每一个服务都有自己的数据库,将原来的数据库拆分到不同的数据库实例中。
基础设施自动化:微服务致力于自动化测试,自动化部署,尽可能地减少人为操作。
容错设计:在单体中,一个故障导致系统全部挂掉。而在微服务中,我们希望一个服务的故障不影响其他服务的正常运行,但是服务之间存在着业务的依赖关系,服务之间会产生故障蔓延。通常,我们都希望在每个服务中实现监控和日志记录组件,如服务状态、断路器状态、吞吐量和网络延迟等关键数据的仪表盘。
总的来说,spring cloud是一个基于spring boot实现的微服务架构的开发工具,为微服务架构中涉及的配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
基于spring不重复造轮子的思想,spring cloud集成了十多套开源框架技术,如spring cloud config(配置管理工具)、spring cloud netflix(对多个Netflix OSS开源框架整合)、spring cloud bus、spring cloud sleuth、spring cloud stream等。