一、微服务基本概念

    近几年比较火的架构设计大概就是微服务架构了吧,在学习spring cloud之前,首先了解一下什么是微服务架构。简单地说,微服务架构就是系统架构设计的一种风格,他的主旨是将原本独立的系统拆分成多个小型服务,这些小服务都是在各自独立的进程中运行,服务之间通过HTTP或者RESTful API进行通信协作,被拆分的小服务都围绕系统的某一项或者一些耦合度较高的业务进行构建,并且每个服务都有自身的数据存储以及业务开发,自动化测试案例以及独立部署机制。

    微服务与单体系统的区别主要就是在单体系统中,由于项目需求的不断扩充,会导致我们原本的系统原来越臃肿,如果出现一些小问题要不得不对整个系统进行服务更新,并且在修改问题有可能引发其他模块出现问题。这不是我们希望看到的。而微服务架构是将哥哥功能模块分别部署,化整为零,当我们某个模块需要更新只需要更新对应的服务即可,不需要对整个系统进行部署更新,使系统的稳定性大大的提高。将服务进行组件化这是微服务架构最大的优点。

      虽然微服务有很多优点,但相应的要面临原本系统架构中不存在的问题,如

    1、接口一致性:虽然我们拆分了服务,但是逻辑上的依赖并不会删除,只是从单体的代码依赖,变为服务间的通信以来,在各个服务的通信我们应该保持通信协议的一致性,否则当我们对原本接口进行修改,相应的服务调用方也要进行修改。

    2、分布式的复杂性:由于拆分后的服务都是独立部署各自运行的,所以所有分布式的问题都要考虑到,例如网络超时,分布式事物以及消息。

    3、运维的挑战:在微服务中,因为将整个服务拆分成许多个服务单独部署,导致运维工作量会成倍的增加,将这些程序井然有序的进行组织拍编对运维来说新增了很多挑战。

    虽然微服务有这些问题,但实现敏捷开发以及自动化部署等优点依然被广大优秀架构师和开发者们青睐,同事这些问题也是架构师们努力实现的目标。

    在我们实施微服务架构时,都系统让每一个服务来实现管理其自己的数据库,实现数据管理的去中心化。虽然去中心化可以让数据管理更加细致,通过采用合适的技术可让数据存储和性能达到最优。但是,微服务中最大的问题还是数据的一致性。分布式本身实现难度非常大,所以在为服务架构中,我们更强调的是服务之间进行无实物的为调用,对于数据一致性,没我们只要求数据在最后处理的时候的状态是一致的即可,如果处理过程中发现错误,通过补偿机制或者容错线程来处理,即在微服务中我们要保证数据的最终一致性。

  

二、框架选型

        通过上面的一些介绍相信大家对微服务框架有了相应的理解,接下来就对如何构架微服务进行框架选型。在之前,公司一直使用的是spring + netty进行对微服务进行构建,服务之间用过api方式进行调用。保证数据一致性通过容错线程来处理,zk来进行配置管理,整体来说架构还是比较稳定。但是有没有一个成型的微服务框架呢?(毕竟对自己的一套东西,信心还是不足的,哈哈。)然后问了一下度娘

,发现了 spring cloud这个神器(好吧,其实就是把杂七杂八的都砸进去了)。


三、spring cloud简介


spring cloud 是基于spring boot实现的微服务架构开发工具。他集成了微服务架构中所使用的配置管理,服务治理,断路器,只能路由,微代理,控制总线,全局锁,决策竞选,分布式回话和集群状态

管理等操作提供了一种简单的开发方式。


他所集成常用的工具如下


Spring  Cloud Config
配置管理工具
Spring Cloud  NetFlix
核心组件,对开源组件进行的整合

Eureka服务治理组件,服务注册,服务发现等

Hystrix容错管理组件,实现断路器

Ribbon负载均衡

Feign声明式服务调用组件

Zuul网管组件

Archaius外部配置化组件
Spring Cloud  Bus
事件消息总线,用于传播集群中的状态变化,如刷新配置
Spring Cloud  Cluster
选举算法和通用状态模式实现
Spring Cloud  Consul
服务发现与配置管理工具
Spring Cloud  Stream
缓存和mq的消费为服务
Spring Cloud  AWS
简化整合AWS组件
Spring Cloud  Security
安全工具包
Spring Cloud  Zookeeper
zookeeper组件

        

        从此可见,它集成了我们微服务框架中常用的工具,而且使用spring boot可以更快的对微服务进行构建,接下来的时间,将对spring cloud的各个组件进行学习与深究。增强对微服务框架的设计与理解。