0%

微服务技术讲解

  • 微服务的产生
  • 微服务原理
  • 微服务的实践
  • 微服务其他

微服务的产生

SOA解决的三个问题:

  • 信息孤岛
  • 互联互通
  • 业务重用

微服务框架

简称:MSA

特征

  • 由一组小的服务组成一个完整的应用(或网站)
  • 每个服务围绕一个相对独立的业务领域(领域模型)构建
  • 服务之间通过轻量级的通信机制相互沟通
  • 完全去中心化
  • 每个服务都可以独立无数
  • 每个服务可以使用不同的编程语言实现

发展历程

  1. 单体程序
  2. Pre-SOA(紧耦合)
  3. Traditional SOA(松耦合)
  4. Microsevices(解耦和)

SOA和微服务的区别:

  • 微服务不再强调传统SOA架构里面比较重的ESB企业服务总线

  • SOA的思想进入到单个业务系统内部实现真正的组件化

SOA和微服务的共同点:

  • 服务化

  • 敏捷快速

架构设计发展

  • MVC(视图、业务逻辑前后端分离)
  • SOA(大型系统分层解耦)
  • Micro services (云计算产物,关注敏捷交付)

最大优点:

  1. 所有功能(服务)可以单独小应用部署,实现真正意义上的“横向扩充”(理论上对服务进行各种方式单独或组合部署),解决“数据
    库瓶颈”、”不同模块(服务)对硬件资源冲突的隔离

  2. 因为独立,所以可以快速迭代,易部署

功能

  1. 服务自动注册:

    (1)告诉API网关有这么一个服务可以对外供调用了

    (2)自动加入复杂均衡副本机制

  2. 服务优雅降级,与”服务自动注册”相反

  3. 负载均衡

  4. 流量管控、访问黑名单机制

  5. 基于容器(如Docker)小应用(AP)部署

  6. 提供一个总服务来对其他服务进行组合调用(对组合中成员实现同步执行、异步执行机制)

  7. 实现分布式事务

微服务的实现

微服务架构工作流程

  • 设计阶段:
    • 将产品功能拆分为若干服务
    • 为每个服务设计API接口
  • 开发阶段:
    • 实现API接口(包括单元测试)
    • 开发UI原型(页面)
  • 测试阶段:
    • 前后端集成
    • 验证产品功能
  • 部署阶段
    • 发布测试环境
    • 发布生产环境

基础知识

  • 领域驱动设计(Domain Driven Design)

DDD是一种以领域为核心的设计和开发理念。DDD通过维护一个深度反映领域概念的模型,以及提供了可行的经过实践检验的大梁模型来硬度领域的复杂性,偏向代码实现的(领域)对象。

  • Restful API 的设计

  • 一种开发框架:

    • Java
    • .NET
    • Node.js
    • Python
    • Ruby

微服务与GRASP

微服务与GRASP基本原则

微服务主要技术

  1. Dubbo(开源分布式服务框架):

阿里公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能

Remoting:网络通信框架,实现了sync-over-async和Logo request-response消息机制

RPC:一个远程过程调用的抽象,支持复杂均衡、容灾和集群功能

Registry:服务目录框架用于服务的注册和服务时间发布和订阅

  1. Spring Cloud:

一系列框架的有序集合:

  • 利用Spring Boot的开发便利性
  • Spring Cloud Eureka(服务治理)
  • Spring Cloud Netflix(服务发现、注册、负载就能、断路器、REST客户端、请求路由)、
  • Spring Cloud Zookeeper (注册中心)
  • Spring Cloud Bus (实现可靠消息)
  • Spring Cloud Config (将配置信息中央化保存)
  • Spring Cloud Security (实现服务安全)
  1. Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可一直的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

应用场景:

  • 使应用的打包与部署自动化
  • 创建轻量、私密的PAAS环境
  • 实现自动化测试和持续的集成/部署
  • 部署与扩展webapp、数据库和后台服务

优势:

  1. jenkins

是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成编程可能。

功能:

  • 持续的软件版本发布/测试项目
  • 监控外部调用执行的工作

微服务应用平台总体架构

微服务应用平台运行架构

微服务应用设计原则

  • AKF扩展拆分

  • 前后端分离

  • 无状态服务

  • Rest通讯风格

服务之间选择轻量级的通信协议

选择编程语言

服务的独立部署

服务的去中心化

解决大量微服务引入的运维成本

微服务扩展知识

微服务带来挑战:

  • 依赖服务接口变更
    • 服务接口如何管理
    • 接口变更跟踪难
    • 依赖服务调试麻烦
  • 部分模块重复构建
    • 安全认证
    • 配置日志
  • 分布式带来的问题
    • 分布式事务问题
    • 依赖服务不稳定’
    • 需要引入异步模式
  • 运维复杂度陡增
    • 部署物数量倍增
    • 监控进程倍增
    • 故障定位难
    • 问题追溯难

关键问题:

  • 服务注册和路由

  • 安全认证

  • 集中配置

  • 分布式事务

  • 同步调用

    用异步模拟来同步