1、微服务架构概念

        简而言之,微服务架构就是将一个完整的应用从数据存储开始水平/垂直拆分成多个不同的服务。每个服务都能独立部署、独立维护、独立扩展,各服务之间通过诸如RESTful API(http)的方式互相调用。即微服务是自理自治的服务单元。

说明:拆分角度有垂直拆分/水平拆分。

      水平拆分:按照业务对系统进行划分。举个例子,原系统包括了运营和支付,现水平拆分为运营系统和支付系统。优点是:不同业务,往往性能要求,以及请求量是不一样的。拆分后保证业务之间的可用性影响最小化。


      垂直拆分:将同样的系统按照应用场景(调用方)进行拆分 。举个例子,原系统的支付场景中包括了用户支付,第三方调用 支付,现垂直拆分为用户支付,商户支付。优点:各个垂直服务调用之间相互不影响,自理自治;通过配置可以进行上游调用降级等。



2、SpringBoot回顾

优势:


    1.为所有Spring开发者更快的入门


    2.开箱即用,提供各种默认配置来简化项目配置


    3.内嵌式容器简化Web项目


    4.没有冗余代码生成和XML配置的要求

3、微服务架构进化

        服务化的核心就是将传统的一站式应用拆分成一个个的应用,而微服务在这个基础上要更彻底地去耦合,并且强调DevOps和快速演化。


        

说明:DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。



3.1、服务化进化之nginx

        nginx通过接受客户端http请求,根据路径配置,转发,跳转相应的服务。


        缺点:


            1.nginx配置中存在服务调用的逻辑


            2.服务消费者不知道,真正服务提供者的实例。


            3.服务提供者不易管理


       也正是以上的缺点,演变出dubbo



3.2、服务化进化之dubbo

        dubbo是阿里开源的一个SOA服务治理解决方案。服务消费者和提供者都可将服务信息注册到Register,形成了服务中心的组件。通过Monitor进行很好的服务管理,消费者可以进行负载均衡,服务降级等。


        缺点:


        1.维护停止(阿里目前又着手维护)


        2.dubbo严重依赖于第三方组件(zookeeper/redis)


        3.由于dubbo的rpc调用,使得服务提供方与消费方有着代码层次的高强度耦合。




3.3、服务化之SpringCloud

        SpringCloud提出是开发面向云端的Application,为微服务提供了全套的组件技术支撑。值得注意的是:SpringCloud抛弃了Dubbo的RPC通信,采用了基于Http的Rest方式通信。




4、Spring Cloud的大家庭

微服务应该如何拆分 微服务水平拆分_微服务应该如何拆分



        服务治理:这是SpringCloud的核心。目前SpringCloud主要通过整合Netflix的相关产品来实现这方面的功能(Spring Cloud Netflix)。包括用于服务注册和发现的Eureka,调用断路器Hystrix,调用端负载均衡Ribbon,Rest客户端Feign,智能服务路由Zuul等。



        分布式链路监控:Spring Cloud Sleuth提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,并发送给Zipkin进行存储、统计和展示。



        消息组件:Spring Cloud Stream对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费、消息分片等功能,实现了微服务之间的异步通信。Spring Cloud Stream也集成了第三方的RabbitMQ和Apache Kafka作为消息队列的实现。而Spring Cloud Bus基于Spring Cloud Stream,主要提供了服务间的事件通信(比如刷新配置)。



        配置中心:基于Spring Cloud Netflix和Spring Cloud Bus,Spring又提供了Spring Cloud Config,实现了配置集中管理、动态刷新的配置中心概念。配置通过Git或者简单文件来存储,支持加解密。



        安全控制:Spring Cloud Security基于OAUTH2这个开放网络的安全标准,提供了微服务环境下的单点登录、资源授权、令牌管理等功能。