1.软件架构

有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。是在软件内容,经过综合各种因素的考量,权衡,选择特定的技术,将系统划分成不同部分,并使用这些部分相互分工,彼此协作,为用户提供需要的价值。

影响因素

业务需求,技术栈,成本,组织架构,可扩展性,可维护性。

单体架构

功能,业务集中在一个发布包里,部署运行在同一个进程中。

  • 优势: 易于开发,易于测试,易于部署,易于水平伸缩
  • 劣势: 代码膨胀,难以维护,构建成本大,持续交付周期长,新人上周周期长,创新困难,可扩展性差

2. 微服务

1. 概念

微服务就是一些可独立运行、可协同工作的小的服务。

使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且他们可以通过自动化方式部署。

2. 微服务特征

单一职责,轻量级通讯,隔离性,业务数据独立,技术多样性。

3. 微服务架构优劣

  • 优势:独立性,敏捷性,技术栈灵活,高效团队。
  • 劣势:额外的工作,数据一致性,沟通成本。

4. 微服务通讯

















一对一 一对多
同步 请求响应模式,最常见 —————
异步 通知/请求异步响应 发布订阅/发布异步响应

5. 通讯协议

  1. REST API
  2. RPC
    IO/线程调用模型,序列化方式,多语言支持,服务治理(dubbo,dubbox,thrift,motan,grpc)
  3. MQ

6. 流行的RPC框架

阿里Dubbo

阿里Dubbo

(实线表示同步,虚线表示异步)

新浪Motan

新浪Motan

Facebook Thrift

Facebook Thrift

google Grpc

google Grpc

四种RPC框架对比

四种RPC框架对比

7. 微服务发现

让客户端/调用者知道服务提供者的IP/端口号。
传统服务发现

传统服务发现

微服务客户端发现

微服务客户端发现

微服务服务端发现

微服务服务端发现

8. 服务编排

服务部署,更新,扩缩容

Mesos, Docker Swarm, Kubernetes

9. SpringBoot/SpringCloud与微服务

  1. SpringBoot
    化繁为简,java开发微服务的润滑剂

    核心功能:
    独立运行 java -jar xxx.jar
    内嵌web服务器
    简化配置

  2. SpringCloud
    一系列框架,简化java的分布式系统,SpringBoot封装

SpringBoot意在简化,是一种开发、配置功能。
SpringCloud意在简化分布式,是功能的集合、风格的统一。

SpringCloud是java的微服务的解决方案,侧重功能,侧重开发。

SpringCloud核心组件:
Netflix Eureka/Ribbon/Hystrix/Zuul, Spring Cloud Config

Netflix Eureka

Netflix Eureka

(客户端发现)

Netflix Ribbon

Netflix Ribbon

Netflix Hystrix

Netflix Hystrix

Netflix Zuul

Netflix Zuul

Spring Cloud Config

Spring Cloud Config